linux-media.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] v4l: Add Genicam 12-bit bayer packed formats
@ 2019-06-28  8:37 Edgar Thier
  2019-06-28  8:40 ` [PATCH 2/2] uvc: " Edgar Thier
  2019-06-28 14:02 ` [PATCH 1/2] v4l: " Sakari Ailus
  0 siblings, 2 replies; 3+ messages in thread
From: Edgar Thier @ 2019-06-28  8:37 UTC (permalink / raw)
  To: laurent.pinchart; +Cc: Edgar Thier, Linux Media Mailing List

These formats are compressed 12-bit raw bayer formats with four different
pixel orders. They are similar to 10-bit bayer formats 'IPU3'.
The naming and pixel structure follow
the Genicam Pixel Format Naming Convention (PFNC).

Signed-off-by: Edgar Thier <info@edgarthier.net>
---
 .../media/uapi/v4l/pixfmt-pfnc-bayerrg12p.rst | 61 +++++++++++++++++++
 Documentation/media/uapi/v4l/pixfmt-rgb.rst   |  1 +
 drivers/media/v4l2-core/v4l2-ioctl.c          |  4 ++
 include/uapi/linux/videodev2.h                |  7 +++
 4 files changed, 73 insertions(+)
 create mode 100644 Documentation/media/uapi/v4l/pixfmt-pfnc-bayerrg12p.rst

diff --git a/Documentation/media/uapi/v4l/pixfmt-pfnc-bayerrg12p.rst b/Documentation/media/uapi/v4l/pixfmt-pfnc-bayerrg12p.rst
new file mode 100644
index 000000000000..6d294cf89353
--- /dev/null
+++ b/Documentation/media/uapi/v4l/pixfmt-pfnc-bayerrg12p.rst
@@ -0,0 +1,61 @@
+.. -*- coding: utf-8; mode: rst -*-
+
+.. _v4l2-pix-fmt-pfnc-bayergr12p:
+.. _v4l2-pix-fmt-pfnc-bayerrg12p:
+.. _v4l2-pix-fmt-pfnc-bayerbg12p:
+.. _v4l2-pix-fmt-pfnc-bayergb12p:
+
+**********************************************************************************************************************************************************
+V4L2_PIX_FMT_PFNC_BAYERBG12P ('BGCp'), V4L2_PIX_FMT_PFNC_BAYERGB12P ('GBCp'), V4L2_PIX_FMT_PFNC_BAYERGR12P ('GRCp'), V4L2_PIX_FMT_PFNC_BAYERRG12P ('RGCp')
+**********************************************************************************************************************************************************
+
+12-bit Bayer formats
+
+Description
+===========
+
+These four pixel formats are used by industrial cameras, often in conjunction
+with UsbVision (see https://www.visiononline.org/userAssets/aiaUploads/file/USB3_Vision_Specification_v1-0-1.pdf).
+
+The naming is in accordance to the Genicam Pixel Format Naming Convention
+(see https://www.emva.org/wp-content/uploads/GenICam_PFNC_2_3.pdf).
+
+They are raw sRGB / Bayer formats with 12 bits
+per sample with 3 bytes for every 2 pixels.
+
+The format is little endian.
+
+In other respects this format is similar to :ref:`v4l2-pix-fmt-ipu3-sbggr10`.
+Below is an example of a small image in V4L2_PIX_FMT_PFNC_BAYERBG12P format.
+
+**Byte Order.**
+Each cell is one byte.
+
+.. tabularcolumns:: |p{0.8cm}|p{4.0cm}|p{4.0cm}|p{4.0cm}|p{4.0cm}|
+
+.. flat-table::
+
+    * - start + 0:
+      - B\ :sub:`00low`
+      - G\ :sub:`01low`\ (bits 7--4)
+        B\ :sub:`00high`\ (bits 0--3)
+      - G\ :sub:`01high`\
+
+    * - start + 6:
+      - G\ :sub:`02low`
+      - R\ :sub:`03low`\ (bits 7--4)
+        G\ :sub:`02high`\ (bits 0--3)
+      - R\ :sub:`03high`
+
+    * - start + 12:
+      - B\ :sub:`04low`
+      - G\ :sub:`05low`\ (bits 7--4)
+        B\ :sub:`04high`\ (bits 0--3)
+      - G\ :sub:`05high`
+
+    * - start + 24:
+      - G\ :sub:`06low`
+      - R\ :sub:`07low`\ (bits 7--4)
+        G\ :sub:`06high`\ (bits 0--3)
+      - R\ :sub:`07high`
+
diff --git a/Documentation/media/uapi/v4l/pixfmt-rgb.rst b/Documentation/media/uapi/v4l/pixfmt-rgb.rst
index 48ab80024835..157a6a3a1e49 100644
--- a/Documentation/media/uapi/v4l/pixfmt-rgb.rst
+++ b/Documentation/media/uapi/v4l/pixfmt-rgb.rst
@@ -26,5 +26,6 @@ RGB Formats
     pixfmt-srggb10-ipu3
     pixfmt-srggb12
     pixfmt-srggb12p
+    pixfmt-pfnc-bayerrg12p
     pixfmt-srggb14p
     pixfmt-srggb16
diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
index ac87c3e37280..8fab2f3fcbe5 100644
--- a/drivers/media/v4l2-core/v4l2-ioctl.c
+++ b/drivers/media/v4l2-core/v4l2-ioctl.c
@@ -1275,6 +1275,10 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
 	case V4L2_PIX_FMT_SGBRG12:	descr = "12-bit Bayer GBGB/RGRG"; break;
 	case V4L2_PIX_FMT_SGRBG12:	descr = "12-bit Bayer GRGR/BGBG"; break;
 	case V4L2_PIX_FMT_SRGGB12:	descr = "12-bit Bayer RGRG/GBGB"; break;
+	case V4L2_PIX_FMT_PFNC_BAYERBG12P: descr = "12-bit Bayer BGBG/GRGR PFNC Packed"; break;
+	case V4L2_PIX_FMT_PFNC_BAYERGB12P: descr = "12-bit Bayer GBGB/RGRG PFNC Packed"; break;
+	case V4L2_PIX_FMT_PFNC_BAYERGR12P: descr = "12-bit Bayer GRGR/BGBG PFNC Packed"; break;
+	case V4L2_PIX_FMT_PFNC_BAYERRG12P: descr = "12-bit Bayer RGRG/GBGB PFNC Packed"; break;
 	case V4L2_PIX_FMT_SBGGR12P:	descr = "12-bit Bayer BGBG/GRGR Packed"; break;
 	case V4L2_PIX_FMT_SGBRG12P:	descr = "12-bit Bayer GBGB/RGRG Packed"; break;
 	case V4L2_PIX_FMT_SGRBG12P:	descr = "12-bit Bayer GRGR/BGBG Packed"; break;
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index 1050a75fb7ef..2f0b7e821cc8 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -646,6 +646,13 @@ struct v4l2_pix_format {
 #define V4L2_PIX_FMT_SGBRG12 v4l2_fourcc('G', 'B', '1', '2') /* 12  GBGB.. RGRG.. */
 #define V4L2_PIX_FMT_SGRBG12 v4l2_fourcc('B', 'A', '1', '2') /* 12  GRGR.. BGBG.. */
 #define V4L2_PIX_FMT_SRGGB12 v4l2_fourcc('R', 'G', '1', '2') /* 12  RGRG.. GBGB.. */
+
+	/* 12bit raw bayer simple packed, 6 bytes for every 4 pixels */
+#define V4L2_PIX_FMT_PFNC_BAYERBG12P v4l2_fourcc('B', 'G', 'C', 'p')
+#define V4L2_PIX_FMT_PFNC_BAYERGB12P v4l2_fourcc('G', 'B', 'C', 'p')
+#define V4L2_PIX_FMT_PFNC_BAYERGR12P v4l2_fourcc('G', 'R', 'C', 'p')
+#define V4L2_PIX_FMT_PFNC_BAYERRG12P v4l2_fourcc('R', 'G', 'C', 'p')
+
 	/* 12bit raw bayer packed, 6 bytes for every 4 pixels */
 #define V4L2_PIX_FMT_SBGGR12P v4l2_fourcc('p', 'B', 'C', 'C')
 #define V4L2_PIX_FMT_SGBRG12P v4l2_fourcc('p', 'G', 'C', 'C')
--
2.20.1

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH 2/2] uvc: Add Genicam 12-bit bayer packed formats
  2019-06-28  8:37 [PATCH 1/2] v4l: Add Genicam 12-bit bayer packed formats Edgar Thier
@ 2019-06-28  8:40 ` Edgar Thier
  2019-06-28 14:02 ` [PATCH 1/2] v4l: " Sakari Ailus
  1 sibling, 0 replies; 3+ messages in thread
From: Edgar Thier @ 2019-06-28  8:40 UTC (permalink / raw)
  To: laurent.pinchart; +Cc: Edgar Thier, Linux Media Mailing List

These formats are compressed 12-bit raw bayer formats with four different
pixel orders. They are similar to 10-bit bayer formats 'IPU3'.
The naming and pixel structure follow
the Genicam Pixel Format Naming Convention (PFNC).

The added GUIDs are used by USB-3.0 cameras produced by `The Imaging Source`.

Signed-off-by: Edgar Thier <info@edgarthier.net>
---
 drivers/media/usb/uvc/uvc_driver.c | 20 ++++++++++++++++++++
 drivers/media/usb/uvc/uvcvideo.h   | 12 ++++++++++++
 2 files changed, 32 insertions(+)

diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
index 10cfe8e51626..e7959fd8946a 100644
--- a/drivers/media/usb/uvc/uvc_driver.c
+++ b/drivers/media/usb/uvc/uvc_driver.c
@@ -179,6 +179,26 @@ static struct uvc_format_desc uvc_fmts[] = {
 		.guid		= UVC_GUID_FORMAT_RW10,
 		.fcc		= V4L2_PIX_FMT_SRGGB10P,
 	},
+	{
+		.name		= "Bayer 12-bit PFNC packed (BayerBG12P)",
+		.guid		= UVC_GUID_FORMAT_TIS_BAYERBG12P,
+		.fcc		= V4L2_PIX_FMT_PFNC_BAYERBG12P,
+	},
+	{
+		.name		= "Bayer 12-bit PFNC packed (BayerGB12P)",
+		.guid		= UVC_GUID_FORMAT_TIS_BAYERGB12P,
+		.fcc		= V4L2_PIX_FMT_PFNC_BAYERGB12P,
+	},
+	{
+		.name		= "Bayer 12-bit PFNC packed (BayerRG12P)",
+		.guid		= UVC_GUID_FORMAT_TIS_BAYERRG12P,
+		.fcc		= V4L2_PIX_FMT_PFNC_BAYERRG12P,
+	},
+	{
+		.name		= "Bayer 12-bit PFNC packed (BayerGR12P)",
+		.guid		= UVC_GUID_FORMAT_TIS_BAYERGR12P,
+		.fcc		= V4L2_PIX_FMT_PFNC_BAYERGR12P,
+	},
 	{
 		.name		= "Bayer 16-bit (SBGGR16)",
 		.guid		= UVC_GUID_FORMAT_BG16,
diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h
index c7c1baa90dea..67115c375f8b 100644
--- a/drivers/media/usb/uvc/uvcvideo.h
+++ b/drivers/media/usb/uvc/uvcvideo.h
@@ -108,6 +108,18 @@
 #define UVC_GUID_FORMAT_RGGB \
 	{ 'R',  'G',  'G',  'B', 0x00, 0x00, 0x10, 0x00, \
 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
+#define UVC_GUID_FORMAT_TIS_BAYERBG12P \
+	{ 'B',  'G',  'C',  'p', 0x00, 0x00, 0x10, 0x00, \
+	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
+#define UVC_GUID_FORMAT_TIS_BAYERGB12P \
+	{ 'G',  'B',  'C',  'p', 0x00, 0x00, 0x10, 0x00, \
+	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
+#define UVC_GUID_FORMAT_TIS_BAYERRG12P \
+	{ 'R',  'G',  'C',  'p', 0x00, 0x00, 0x10, 0x00, \
+	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
+#define UVC_GUID_FORMAT_TIS_BAYERGR12P \
+	{ 'G',  'R',  'C',  'p', 0x00, 0x00, 0x10, 0x00, \
+	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 #define UVC_GUID_FORMAT_BG16 \
 	{ 'B',  'G',  '1',  '6', 0x00, 0x00, 0x10, 0x00, \
 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH 1/2] v4l: Add Genicam 12-bit bayer packed formats
  2019-06-28  8:37 [PATCH 1/2] v4l: Add Genicam 12-bit bayer packed formats Edgar Thier
  2019-06-28  8:40 ` [PATCH 2/2] uvc: " Edgar Thier
@ 2019-06-28 14:02 ` Sakari Ailus
  1 sibling, 0 replies; 3+ messages in thread
From: Sakari Ailus @ 2019-06-28 14:02 UTC (permalink / raw)
  To: Edgar Thier; +Cc: laurent.pinchart, Linux Media Mailing List

Hi Edgar,

On Fri, Jun 28, 2019 at 10:37:40AM +0200, Edgar Thier wrote:
> These formats are compressed 12-bit raw bayer formats with four different
> pixel orders. They are similar to 10-bit bayer formats 'IPU3'.
> The naming and pixel structure follow
> the Genicam Pixel Format Naming Convention (PFNC).

Genicam appears to define a naming scheme for most formats V4L2 already
supports. I'm not very eager to embark toward that route without evaluating
other possibilities. The fact is that the V4L2 naming of Bayer formats is
somewhat odd, but I don't think adopting Genicam PFNC as such is the
obvious solution. I'd also expect the new naming convention to be used on
existing formats, too, but that conversion should be done at the same time
than adopting that convention for new formats.

How about calling it "Linear Packed" as was suggested on #v4l?

> 
> Signed-off-by: Edgar Thier <info@edgarthier.net>
> ---
>  .../media/uapi/v4l/pixfmt-pfnc-bayerrg12p.rst | 61 +++++++++++++++++++
>  Documentation/media/uapi/v4l/pixfmt-rgb.rst   |  1 +
>  drivers/media/v4l2-core/v4l2-ioctl.c          |  4 ++
>  include/uapi/linux/videodev2.h                |  7 +++
>  4 files changed, 73 insertions(+)
>  create mode 100644 Documentation/media/uapi/v4l/pixfmt-pfnc-bayerrg12p.rst
> 
> diff --git a/Documentation/media/uapi/v4l/pixfmt-pfnc-bayerrg12p.rst b/Documentation/media/uapi/v4l/pixfmt-pfnc-bayerrg12p.rst
> new file mode 100644
> index 000000000000..6d294cf89353
> --- /dev/null
> +++ b/Documentation/media/uapi/v4l/pixfmt-pfnc-bayerrg12p.rst
> @@ -0,0 +1,61 @@
> +.. -*- coding: utf-8; mode: rst -*-
> +
> +.. _v4l2-pix-fmt-pfnc-bayergr12p:
> +.. _v4l2-pix-fmt-pfnc-bayerrg12p:
> +.. _v4l2-pix-fmt-pfnc-bayerbg12p:
> +.. _v4l2-pix-fmt-pfnc-bayergb12p:
> +
> +**********************************************************************************************************************************************************
> +V4L2_PIX_FMT_PFNC_BAYERBG12P ('BGCp'), V4L2_PIX_FMT_PFNC_BAYERGB12P ('GBCp'), V4L2_PIX_FMT_PFNC_BAYERGR12P ('GRCp'), V4L2_PIX_FMT_PFNC_BAYERRG12P ('RGCp')
> +**********************************************************************************************************************************************************
> +
> +12-bit Bayer formats
> +
> +Description
> +===========
> +
> +These four pixel formats are used by industrial cameras, often in conjunction
> +with UsbVision (see https://www.visiononline.org/userAssets/aiaUploads/file/USB3_Vision_Specification_v1-0-1.pdf).
> +
> +The naming is in accordance to the Genicam Pixel Format Naming Convention
> +(see https://www.emva.org/wp-content/uploads/GenICam_PFNC_2_3.pdf).
> +
> +They are raw sRGB / Bayer formats with 12 bits
> +per sample with 3 bytes for every 2 pixels.
> +
> +The format is little endian.
> +
> +In other respects this format is similar to :ref:`v4l2-pix-fmt-ipu3-sbggr10`.
> +Below is an example of a small image in V4L2_PIX_FMT_PFNC_BAYERBG12P format.
> +
> +**Byte Order.**
> +Each cell is one byte.
> +
> +.. tabularcolumns:: |p{0.8cm}|p{4.0cm}|p{4.0cm}|p{4.0cm}|p{4.0cm}|
> +
> +.. flat-table::
> +
> +    * - start + 0:
> +      - B\ :sub:`00low`
> +      - G\ :sub:`01low`\ (bits 7--4)
> +        B\ :sub:`00high`\ (bits 0--3)
> +      - G\ :sub:`01high`\
> +
> +    * - start + 6:
> +      - G\ :sub:`02low`
> +      - R\ :sub:`03low`\ (bits 7--4)
> +        G\ :sub:`02high`\ (bits 0--3)
> +      - R\ :sub:`03high`
> +
> +    * - start + 12:
> +      - B\ :sub:`04low`
> +      - G\ :sub:`05low`\ (bits 7--4)
> +        B\ :sub:`04high`\ (bits 0--3)
> +      - G\ :sub:`05high`
> +
> +    * - start + 24:
> +      - G\ :sub:`06low`
> +      - R\ :sub:`07low`\ (bits 7--4)
> +        G\ :sub:`06high`\ (bits 0--3)
> +      - R\ :sub:`07high`
> +
> diff --git a/Documentation/media/uapi/v4l/pixfmt-rgb.rst b/Documentation/media/uapi/v4l/pixfmt-rgb.rst
> index 48ab80024835..157a6a3a1e49 100644
> --- a/Documentation/media/uapi/v4l/pixfmt-rgb.rst
> +++ b/Documentation/media/uapi/v4l/pixfmt-rgb.rst
> @@ -26,5 +26,6 @@ RGB Formats
>      pixfmt-srggb10-ipu3
>      pixfmt-srggb12
>      pixfmt-srggb12p
> +    pixfmt-pfnc-bayerrg12p
>      pixfmt-srggb14p
>      pixfmt-srggb16
> diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
> index ac87c3e37280..8fab2f3fcbe5 100644
> --- a/drivers/media/v4l2-core/v4l2-ioctl.c
> +++ b/drivers/media/v4l2-core/v4l2-ioctl.c
> @@ -1275,6 +1275,10 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
>  	case V4L2_PIX_FMT_SGBRG12:	descr = "12-bit Bayer GBGB/RGRG"; break;
>  	case V4L2_PIX_FMT_SGRBG12:	descr = "12-bit Bayer GRGR/BGBG"; break;
>  	case V4L2_PIX_FMT_SRGGB12:	descr = "12-bit Bayer RGRG/GBGB"; break;
> +	case V4L2_PIX_FMT_PFNC_BAYERBG12P: descr = "12-bit Bayer BGBG/GRGR PFNC Packed"; break;
> +	case V4L2_PIX_FMT_PFNC_BAYERGB12P: descr = "12-bit Bayer GBGB/RGRG PFNC Packed"; break;
> +	case V4L2_PIX_FMT_PFNC_BAYERGR12P: descr = "12-bit Bayer GRGR/BGBG PFNC Packed"; break;
> +	case V4L2_PIX_FMT_PFNC_BAYERRG12P: descr = "12-bit Bayer RGRG/GBGB PFNC Packed"; break;
>  	case V4L2_PIX_FMT_SBGGR12P:	descr = "12-bit Bayer BGBG/GRGR Packed"; break;
>  	case V4L2_PIX_FMT_SGBRG12P:	descr = "12-bit Bayer GBGB/RGRG Packed"; break;
>  	case V4L2_PIX_FMT_SGRBG12P:	descr = "12-bit Bayer GRGR/BGBG Packed"; break;
> diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
> index 1050a75fb7ef..2f0b7e821cc8 100644
> --- a/include/uapi/linux/videodev2.h
> +++ b/include/uapi/linux/videodev2.h
> @@ -646,6 +646,13 @@ struct v4l2_pix_format {
>  #define V4L2_PIX_FMT_SGBRG12 v4l2_fourcc('G', 'B', '1', '2') /* 12  GBGB.. RGRG.. */
>  #define V4L2_PIX_FMT_SGRBG12 v4l2_fourcc('B', 'A', '1', '2') /* 12  GRGR.. BGBG.. */
>  #define V4L2_PIX_FMT_SRGGB12 v4l2_fourcc('R', 'G', '1', '2') /* 12  RGRG.. GBGB.. */
> +
> +	/* 12bit raw bayer simple packed, 6 bytes for every 4 pixels */
> +#define V4L2_PIX_FMT_PFNC_BAYERBG12P v4l2_fourcc('B', 'G', 'C', 'p')
> +#define V4L2_PIX_FMT_PFNC_BAYERGB12P v4l2_fourcc('G', 'B', 'C', 'p')
> +#define V4L2_PIX_FMT_PFNC_BAYERGR12P v4l2_fourcc('G', 'R', 'C', 'p')
> +#define V4L2_PIX_FMT_PFNC_BAYERRG12P v4l2_fourcc('R', 'G', 'C', 'p')
> +
>  	/* 12bit raw bayer packed, 6 bytes for every 4 pixels */
>  #define V4L2_PIX_FMT_SBGGR12P v4l2_fourcc('p', 'B', 'C', 'C')
>  #define V4L2_PIX_FMT_SGBRG12P v4l2_fourcc('p', 'G', 'C', 'C')

-- 
Kind regards,

Sakari Ailus

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2019-06-28 14:02 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-06-28  8:37 [PATCH 1/2] v4l: Add Genicam 12-bit bayer packed formats Edgar Thier
2019-06-28  8:40 ` [PATCH 2/2] uvc: " Edgar Thier
2019-06-28 14:02 ` [PATCH 1/2] v4l: " Sakari Ailus

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).