Re: [PATCH v6] vivid: Add metadata capture support

2019-09-17 Thread Hans Verkuil
On 9/16/19 4:08 PM, Vandana BN wrote:
> This patch adds meatadata capture support in vivid driver.
> Added new files for metadata capture.
> 
> Signed-off-by: Vandana BN 
> ---
> Changes since v5:
> -Use multiline comment in vivid-core.c.
> -changed vivid_meta_cap_gen() to take proper length.
> ---
>  drivers/media/platform/vivid/Makefile |   2 +-
>  drivers/media/platform/vivid/vivid-core.c |  93 +-
>  drivers/media/platform/vivid/vivid-core.h |  12 ++
>  drivers/media/platform/vivid/vivid-ctrls.c|  14 ++
>  .../media/platform/vivid/vivid-kthread-cap.c  |  48 -
>  drivers/media/platform/vivid/vivid-meta-cap.c | 175 ++
>  drivers/media/platform/vivid/vivid-meta-cap.h |  18 ++
>  drivers/media/platform/vivid/vivid-meta-gen.c |  25 +++
>  drivers/media/platform/vivid/vivid-meta-gen.h |  18 ++
>  9 files changed, 396 insertions(+), 9 deletions(-)
>  create mode 100644 drivers/media/platform/vivid/vivid-meta-cap.c
>  create mode 100644 drivers/media/platform/vivid/vivid-meta-cap.h
>  create mode 100644 drivers/media/platform/vivid/vivid-meta-gen.c
>  create mode 100644 drivers/media/platform/vivid/vivid-meta-gen.h
> 
> diff --git a/drivers/media/platform/vivid/Makefile 
> b/drivers/media/platform/vivid/Makefile
> index 2f5762e3309a..70a9262fafaa 100644
> --- a/drivers/media/platform/vivid/Makefile
> +++ b/drivers/media/platform/vivid/Makefile
> @@ -3,7 +3,7 @@ vivid-objs := vivid-core.o vivid-ctrls.o vivid-vid-common.o 
> vivid-vbi-gen.o \
>   vivid-vid-cap.o vivid-vid-out.o vivid-kthread-cap.o 
> vivid-kthread-out.o \
>   vivid-radio-rx.o vivid-radio-tx.o vivid-radio-common.o \
>   vivid-rds-gen.o vivid-sdr-cap.o vivid-vbi-cap.o vivid-vbi-out.o 
> \
> - vivid-osd.o
> + vivid-osd.o vivid-meta-cap.o vivid-meta-gen.o
>  ifeq ($(CONFIG_VIDEO_VIVID_CEC),y)
>vivid-objs += vivid-cec.o
>  endif
> diff --git a/drivers/media/platform/vivid/vivid-core.c 
> b/drivers/media/platform/vivid/vivid-core.c
> index 53315c8dd2bb..8c9f4651a9c2 100644
> --- a/drivers/media/platform/vivid/vivid-core.c
> +++ b/drivers/media/platform/vivid/vivid-core.c
> @@ -37,6 +37,7 @@
>  #include "vivid-osd.h"
>  #include "vivid-cec.h"
>  #include "vivid-ctrls.h"
> +#include "vivid-meta-cap.h"
>  
>  #define VIVID_MODULE_NAME "vivid"
>  
> @@ -79,6 +80,10 @@ static int radio_tx_nr[VIVID_MAX_DEVS] = { [0 ... 
> (VIVID_MAX_DEVS - 1)] = -1 };
>  module_param_array(radio_tx_nr, int, NULL, 0444);
>  MODULE_PARM_DESC(radio_tx_nr, " radioX start number, -1 is autodetect");
>  
> +static int meta_cap_nr[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = -1 
> };
> +module_param_array(meta_cap_nr, int, NULL, 0444);
> +MODULE_PARM_DESC(meta_cap_nr, " videoX start number, -1 is autodetect");
> +
>  static int ccs_cap_mode[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = 
> -1 };
>  module_param_array(ccs_cap_mode, int, NULL, 0444);
>  MODULE_PARM_DESC(ccs_cap_mode, " capture crop/compose/scale mode:\n"
> @@ -95,8 +100,13 @@ static unsigned multiplanar[VIVID_MAX_DEVS] = { [0 ... 
> (VIVID_MAX_DEVS - 1)] = 1
>  module_param_array(multiplanar, uint, NULL, 0444);
>  MODULE_PARM_DESC(multiplanar, " 1 (default) creates a single planar device, 
> 2 creates a multiplanar device.");
>  
> -/* Default: video + vbi-cap (raw and sliced) + radio rx + radio tx + sdr + 
> vbi-out + vid-out */
> -static unsigned node_types[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] 
> = 0x1d3d };
> +/*
> + * Default: video + vbi-cap (raw and sliced) + radio rx + radio tx + sdr +
> + * vbi-out + vid-out + meta-cap
> + */
> +static unsigned int node_types[VIVID_MAX_DEVS] = {
> + [0 ... (VIVID_MAX_DEVS - 1)] = 0x21d3d
> +};
>  module_param_array(node_types, uint, NULL, 0444);
>  MODULE_PARM_DESC(node_types, " node types, default is 0x1d3d. Bitmask with 
> the following meaning:\n"

The default value in this text needs to be update (0x21d3d).

>"\t\tbit 0: Video Capture node\n"
> @@ -106,7 +116,8 @@ MODULE_PARM_DESC(node_types, " node types, default is 
> 0x1d3d. Bitmask with the f
>"\t\tbit 8: Video Output node\n"
>"\t\tbit 10-11: VBI Output node: 0 = none, 1 = 
> raw vbi, 2 = sliced vbi, 3 = both\n"
>"\t\tbit 12: Radio Transmitter node\n"
> -  "\t\tbit 16: Framebuffer for testing 
> overlays");
> +  "\t\tbit 16: Framebuffer for testing 
> overlays\n"
> +  "\t\tbit 17: Metadata capture node\n");

Nitpick: capture -> Capture  (conforms with e.g. Video Capture)

>  
>  /* Default: 4 inputs */
>  static unsigned num_inputs[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] 
> = 4 };
> @@ -205,7 +216,7 @@ static int vidioc_querycap(struct file *file, void  *priv,
>   cap->capabilities = dev->vid_cap_caps | dev->vid_out_caps |
>   dev->vbi_cap_caps | dev

[PATCH v6] vivid: Add metadata capture support

2019-09-16 Thread Vandana BN
This patch adds meatadata capture support in vivid driver.
Added new files for metadata capture.

Signed-off-by: Vandana BN 
---
Changes since v5:
-Use multiline comment in vivid-core.c.
-changed vivid_meta_cap_gen() to take proper length.
---
 drivers/media/platform/vivid/Makefile |   2 +-
 drivers/media/platform/vivid/vivid-core.c |  93 +-
 drivers/media/platform/vivid/vivid-core.h |  12 ++
 drivers/media/platform/vivid/vivid-ctrls.c|  14 ++
 .../media/platform/vivid/vivid-kthread-cap.c  |  48 -
 drivers/media/platform/vivid/vivid-meta-cap.c | 175 ++
 drivers/media/platform/vivid/vivid-meta-cap.h |  18 ++
 drivers/media/platform/vivid/vivid-meta-gen.c |  25 +++
 drivers/media/platform/vivid/vivid-meta-gen.h |  18 ++
 9 files changed, 396 insertions(+), 9 deletions(-)
 create mode 100644 drivers/media/platform/vivid/vivid-meta-cap.c
 create mode 100644 drivers/media/platform/vivid/vivid-meta-cap.h
 create mode 100644 drivers/media/platform/vivid/vivid-meta-gen.c
 create mode 100644 drivers/media/platform/vivid/vivid-meta-gen.h

diff --git a/drivers/media/platform/vivid/Makefile 
b/drivers/media/platform/vivid/Makefile
index 2f5762e3309a..70a9262fafaa 100644
--- a/drivers/media/platform/vivid/Makefile
+++ b/drivers/media/platform/vivid/Makefile
@@ -3,7 +3,7 @@ vivid-objs := vivid-core.o vivid-ctrls.o vivid-vid-common.o 
vivid-vbi-gen.o \
vivid-vid-cap.o vivid-vid-out.o vivid-kthread-cap.o 
vivid-kthread-out.o \
vivid-radio-rx.o vivid-radio-tx.o vivid-radio-common.o \
vivid-rds-gen.o vivid-sdr-cap.o vivid-vbi-cap.o vivid-vbi-out.o 
\
-   vivid-osd.o
+   vivid-osd.o vivid-meta-cap.o vivid-meta-gen.o
 ifeq ($(CONFIG_VIDEO_VIVID_CEC),y)
   vivid-objs += vivid-cec.o
 endif
diff --git a/drivers/media/platform/vivid/vivid-core.c 
b/drivers/media/platform/vivid/vivid-core.c
index 53315c8dd2bb..8c9f4651a9c2 100644
--- a/drivers/media/platform/vivid/vivid-core.c
+++ b/drivers/media/platform/vivid/vivid-core.c
@@ -37,6 +37,7 @@
 #include "vivid-osd.h"
 #include "vivid-cec.h"
 #include "vivid-ctrls.h"
+#include "vivid-meta-cap.h"
 
 #define VIVID_MODULE_NAME "vivid"
 
@@ -79,6 +80,10 @@ static int radio_tx_nr[VIVID_MAX_DEVS] = { [0 ... 
(VIVID_MAX_DEVS - 1)] = -1 };
 module_param_array(radio_tx_nr, int, NULL, 0444);
 MODULE_PARM_DESC(radio_tx_nr, " radioX start number, -1 is autodetect");
 
+static int meta_cap_nr[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = -1 };
+module_param_array(meta_cap_nr, int, NULL, 0444);
+MODULE_PARM_DESC(meta_cap_nr, " videoX start number, -1 is autodetect");
+
 static int ccs_cap_mode[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = -1 
};
 module_param_array(ccs_cap_mode, int, NULL, 0444);
 MODULE_PARM_DESC(ccs_cap_mode, " capture crop/compose/scale mode:\n"
@@ -95,8 +100,13 @@ static unsigned multiplanar[VIVID_MAX_DEVS] = { [0 ... 
(VIVID_MAX_DEVS - 1)] = 1
 module_param_array(multiplanar, uint, NULL, 0444);
 MODULE_PARM_DESC(multiplanar, " 1 (default) creates a single planar device, 2 
creates a multiplanar device.");
 
-/* Default: video + vbi-cap (raw and sliced) + radio rx + radio tx + sdr + 
vbi-out + vid-out */
-static unsigned node_types[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = 
0x1d3d };
+/*
+ * Default: video + vbi-cap (raw and sliced) + radio rx + radio tx + sdr +
+ * vbi-out + vid-out + meta-cap
+ */
+static unsigned int node_types[VIVID_MAX_DEVS] = {
+   [0 ... (VIVID_MAX_DEVS - 1)] = 0x21d3d
+};
 module_param_array(node_types, uint, NULL, 0444);
 MODULE_PARM_DESC(node_types, " node types, default is 0x1d3d. Bitmask with the 
following meaning:\n"
 "\t\tbit 0: Video Capture node\n"
@@ -106,7 +116,8 @@ MODULE_PARM_DESC(node_types, " node types, default is 
0x1d3d. Bitmask with the f
 "\t\tbit 8: Video Output node\n"
 "\t\tbit 10-11: VBI Output node: 0 = none, 1 = 
raw vbi, 2 = sliced vbi, 3 = both\n"
 "\t\tbit 12: Radio Transmitter node\n"
-"\t\tbit 16: Framebuffer for testing 
overlays");
+"\t\tbit 16: Framebuffer for testing 
overlays\n"
+"\t\tbit 17: Metadata capture node\n");
 
 /* Default: 4 inputs */
 static unsigned num_inputs[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = 
4 };
@@ -205,7 +216,7 @@ static int vidioc_querycap(struct file *file, void  *priv,
cap->capabilities = dev->vid_cap_caps | dev->vid_out_caps |
dev->vbi_cap_caps | dev->vbi_out_caps |
dev->radio_rx_caps | dev->radio_tx_caps |
-   dev->sdr_cap_caps | V4L2_CAP_DEVICE_CAPS;
+   dev->sdr_cap_caps | dev->meta_cap_caps | V4L2_CAP_DEVICE_CAPS;
return 0;
 }
 
@@ -433,7 +444,8 @@ static bool vivid_is_last_user(struct vivid_dev *dev)
vivid_is_in_use(&de