[PATCH v3] media: usb: uvc: Add UVC_GUID_FORMAT_H265

James_Lin posted 1 patch 2 years, 5 months ago
drivers/media/usb/uvc/uvc_driver.c | 5 +++++
drivers/media/usb/uvc/uvcvideo.h   | 3 +++
2 files changed, 8 insertions(+)
[PATCH v3] media: usb: uvc: Add UVC_GUID_FORMAT_H265
Posted by James_Lin 2 years, 5 months ago
This patch aims to add UVC_GUID_FORMAT_H265
High Efficiency Video Coding (HEVC), also known as H.265 and MPEG-H Part 2.
They describe the same video encoding method.
So for handling their behavior is the same.
However, when external camera device describes this encoding method, 
some use hevc, some use h265.
There is no uniform specification to describe this encoding method.
So if an external camera device use h265 to describe this encoding method,
driver will not recognize it.
Therefore, this patch is to enable driver to read HEVC/H265 
and convert it to V4L2_PIX_FMT_HEVC.

Signed-off-by: James_Lin <Ping-lei.Lin@mediatek.com>
---
 drivers/media/usb/uvc/uvc_driver.c | 5 +++++
 drivers/media/usb/uvc/uvcvideo.h   | 3 +++
 2 files changed, 8 insertions(+)

diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
index dda0f0aa78b8..e437e9f95890 100644
--- a/drivers/media/usb/uvc/uvc_driver.c
+++ b/drivers/media/usb/uvc/uvc_driver.c
@@ -154,6 +154,11 @@ static struct uvc_format_desc uvc_fmts[] = {
 		.guid		= UVC_GUID_FORMAT_H264,
 		.fcc		= V4L2_PIX_FMT_H264,
 	},
+	{
+		.name		= "H.265",
+		.guid		= UVC_GUID_FORMAT_H265,
+		.fcc		= V4L2_PIX_FMT_HEVC,
+	},
 	{
 		.name		= "Greyscale 8 L/R (Y8I)",
 		.guid		= UVC_GUID_FORMAT_Y8I,
diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h
index 143230b3275b..41f4d8c33f2a 100644
--- a/drivers/media/usb/uvc/uvcvideo.h
+++ b/drivers/media/usb/uvc/uvcvideo.h
@@ -139,6 +139,9 @@
 #define UVC_GUID_FORMAT_H264 \
 	{ 'H',  '2',  '6',  '4', 0x00, 0x00, 0x10, 0x00, \
 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
+#define UVC_GUID_FORMAT_H265 \
+	{ 'H',  '2',  '6',  '5', 0x00, 0x00, 0x10, 0x00, \
+	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 #define UVC_GUID_FORMAT_Y8I \
 	{ 'Y',  '8',  'I',  ' ', 0x00, 0x00, 0x10, 0x00, \
 	 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
-- 
2.18.0
Re: [PATCH v3] media: usb: uvc: Add UVC_GUID_FORMAT_H265
Posted by Ricardo Ribalda 2 years, 5 months ago
Hi James

Thanks for your patch

On Mon, 18 Apr 2022 at 11:07, James_Lin <Ping-lei.Lin@mediatek.com> wrote:
>
> This patch aims to add UVC_GUID_FORMAT_H265
> High Efficiency Video Coding (HEVC), also known as H.265 and MPEG-H Part 2.
> They describe the same video encoding method.
> So for handling their behavior is the same.
> However, when external camera device describes this encoding method,
> some use hevc, some use h265.
> There is no uniform specification to describe this encoding method.
> So if an external camera device use h265 to describe this encoding method,
> driver will not recognize it.
> Therefore, this patch is to enable driver to read HEVC/H265
> and convert it to V4L2_PIX_FMT_HEVC.
>
> Signed-off-by: James_Lin <Ping-lei.Lin@mediatek.com>

Reviewed-by: Ricardo Ribalda <ribalda@chromium.org>

> ---
>  drivers/media/usb/uvc/uvc_driver.c | 5 +++++
>  drivers/media/usb/uvc/uvcvideo.h   | 3 +++
>  2 files changed, 8 insertions(+)
>
> diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
> index dda0f0aa78b8..e437e9f95890 100644
> --- a/drivers/media/usb/uvc/uvc_driver.c
> +++ b/drivers/media/usb/uvc/uvc_driver.c
> @@ -154,6 +154,11 @@ static struct uvc_format_desc uvc_fmts[] = {
>                 .guid           = UVC_GUID_FORMAT_H264,
>                 .fcc            = V4L2_PIX_FMT_H264,
>         },

Maybe I would add a comment here saying that some cameras represent
hevc as h265.

> +       {
> +               .name           = "H.265",
> +               .guid           = UVC_GUID_FORMAT_H265,
> +               .fcc            = V4L2_PIX_FMT_HEVC,
> +       },
>         {
>                 .name           = "Greyscale 8 L/R (Y8I)",
>                 .guid           = UVC_GUID_FORMAT_Y8I,
> diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h
> index 143230b3275b..41f4d8c33f2a 100644
> --- a/drivers/media/usb/uvc/uvcvideo.h
> +++ b/drivers/media/usb/uvc/uvcvideo.h
> @@ -139,6 +139,9 @@
>  #define UVC_GUID_FORMAT_H264 \
>         { 'H',  '2',  '6',  '4', 0x00, 0x00, 0x10, 0x00, \
>          0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
> +#define UVC_GUID_FORMAT_H265 \
> +       { 'H',  '2',  '6',  '5', 0x00, 0x00, 0x10, 0x00, \
> +        0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
>  #define UVC_GUID_FORMAT_Y8I \
>         { 'Y',  '8',  'I',  ' ', 0x00, 0x00, 0x10, 0x00, \
>          0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
> --
> 2.18.0
>


-- 
Ricardo Ribalda
Re: [PATCH v3] media: usb: uvc: Add UVC_GUID_FORMAT_H265
Posted by Laurent Pinchart 2 years, 5 months ago
Hello,

On Tue, Apr 19, 2022 at 01:46:15PM +0200, Ricardo Ribalda wrote:
> On Mon, 18 Apr 2022 at 11:07, James_Lin <Ping-lei.Lin@mediatek.com> wrote:
> >
> > This patch aims to add UVC_GUID_FORMAT_H265
> > High Efficiency Video Coding (HEVC), also known as H.265 and MPEG-H Part 2.
> > They describe the same video encoding method.
> > So for handling their behavior is the same.
> > However, when external camera device describes this encoding method,
> > some use hevc, some use h265.
> > There is no uniform specification to describe this encoding method.
> > So if an external camera device use h265 to describe this encoding method,
> > driver will not recognize it.
> > Therefore, this patch is to enable driver to read HEVC/H265
> > and convert it to V4L2_PIX_FMT_HEVC.
> >
> > Signed-off-by: James_Lin <Ping-lei.Lin@mediatek.com>
> 
> Reviewed-by: Ricardo Ribalda <ribalda@chromium.org>
> > ---
> >  drivers/media/usb/uvc/uvc_driver.c | 5 +++++
> >  drivers/media/usb/uvc/uvcvideo.h   | 3 +++
> >  2 files changed, 8 insertions(+)
> >
> > diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
> > index dda0f0aa78b8..e437e9f95890 100644
> > --- a/drivers/media/usb/uvc/uvc_driver.c
> > +++ b/drivers/media/usb/uvc/uvc_driver.c
> > @@ -154,6 +154,11 @@ static struct uvc_format_desc uvc_fmts[] = {
> >                 .guid           = UVC_GUID_FORMAT_H264,
> >                 .fcc            = V4L2_PIX_FMT_H264,
> >         },
> 
> Maybe I would add a comment here saying that some cameras represent
> hevc as h265.

I wish there would be a 4CC and GUID standard with a centralized
registry...

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> > +       {
> > +               .name           = "H.265",
> > +               .guid           = UVC_GUID_FORMAT_H265,
> > +               .fcc            = V4L2_PIX_FMT_HEVC,
> > +       },
> >         {
> >                 .name           = "Greyscale 8 L/R (Y8I)",
> >                 .guid           = UVC_GUID_FORMAT_Y8I,
> > diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h
> > index 143230b3275b..41f4d8c33f2a 100644
> > --- a/drivers/media/usb/uvc/uvcvideo.h
> > +++ b/drivers/media/usb/uvc/uvcvideo.h
> > @@ -139,6 +139,9 @@
> >  #define UVC_GUID_FORMAT_H264 \
> >         { 'H',  '2',  '6',  '4', 0x00, 0x00, 0x10, 0x00, \
> >          0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
> > +#define UVC_GUID_FORMAT_H265 \
> > +       { 'H',  '2',  '6',  '5', 0x00, 0x00, 0x10, 0x00, \
> > +        0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
> >  #define UVC_GUID_FORMAT_Y8I \
> >         { 'Y',  '8',  'I',  ' ', 0x00, 0x00, 0x10, 0x00, \
> >          0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}

-- 
Regards,

Laurent Pinchart
Re: [PATCH v3] media: usb: uvc: Add UVC_GUID_FORMAT_H265
Posted by Ricardo Ribalda 2 years, 5 months ago
On Tue, 19 Apr 2022 at 14:17, Laurent Pinchart
<laurent.pinchart@ideasonboard.com> wrote:
>
> Hello,
>
> On Tue, Apr 19, 2022 at 01:46:15PM +0200, Ricardo Ribalda wrote:
> > On Mon, 18 Apr 2022 at 11:07, James_Lin <Ping-lei.Lin@mediatek.com> wrote:
> > >
> > > This patch aims to add UVC_GUID_FORMAT_H265
> > > High Efficiency Video Coding (HEVC), also known as H.265 and MPEG-H Part 2.
> > > They describe the same video encoding method.
> > > So for handling their behavior is the same.
> > > However, when external camera device describes this encoding method,
> > > some use hevc, some use h265.
> > > There is no uniform specification to describe this encoding method.
> > > So if an external camera device use h265 to describe this encoding method,
> > > driver will not recognize it.
> > > Therefore, this patch is to enable driver to read HEVC/H265
> > > and convert it to V4L2_PIX_FMT_HEVC.
> > >
> > > Signed-off-by: James_Lin <Ping-lei.Lin@mediatek.com>
> >
> > Reviewed-by: Ricardo Ribalda <ribalda@chromium.org>
> > > ---
> > >  drivers/media/usb/uvc/uvc_driver.c | 5 +++++
> > >  drivers/media/usb/uvc/uvcvideo.h   | 3 +++
> > >  2 files changed, 8 insertions(+)
> > >
> > > diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
> > > index dda0f0aa78b8..e437e9f95890 100644
> > > --- a/drivers/media/usb/uvc/uvc_driver.c
> > > +++ b/drivers/media/usb/uvc/uvc_driver.c
> > > @@ -154,6 +154,11 @@ static struct uvc_format_desc uvc_fmts[] = {
> > >                 .guid           = UVC_GUID_FORMAT_H264,
> > >                 .fcc            = V4L2_PIX_FMT_H264,
> > >         },
> >
> > Maybe I would add a comment here saying that some cameras represent
> > hevc as h265.
>
> I wish there would be a 4CC and GUID standard with a centralized
> registry...

Thought that was the kernel codebase :)

>
> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
>
> > > +       {
> > > +               .name           = "H.265",
> > > +               .guid           = UVC_GUID_FORMAT_H265,
> > > +               .fcc            = V4L2_PIX_FMT_HEVC,
> > > +       },
> > >         {
> > >                 .name           = "Greyscale 8 L/R (Y8I)",
> > >                 .guid           = UVC_GUID_FORMAT_Y8I,
> > > diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h
> > > index 143230b3275b..41f4d8c33f2a 100644
> > > --- a/drivers/media/usb/uvc/uvcvideo.h
> > > +++ b/drivers/media/usb/uvc/uvcvideo.h
> > > @@ -139,6 +139,9 @@
> > >  #define UVC_GUID_FORMAT_H264 \
> > >         { 'H',  '2',  '6',  '4', 0x00, 0x00, 0x10, 0x00, \
> > >          0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
> > > +#define UVC_GUID_FORMAT_H265 \
> > > +       { 'H',  '2',  '6',  '5', 0x00, 0x00, 0x10, 0x00, \
> > > +        0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
> > >  #define UVC_GUID_FORMAT_Y8I \
> > >         { 'Y',  '8',  'I',  ' ', 0x00, 0x00, 0x10, 0x00, \
> > >          0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
>
> --
> Regards,
>
> Laurent Pinchart



-- 
Ricardo Ribalda
Re: [PATCH v3] media: usb: uvc: Add UVC_GUID_FORMAT_H265
Posted by Nicolas Dufresne 2 years, 5 months ago
Le mardi 19 avril 2022 à 14:18 +0200, Ricardo Ribalda a écrit :
> On Tue, 19 Apr 2022 at 14:17, Laurent Pinchart
> <laurent.pinchart@ideasonboard.com> wrote:
> > 
> > Hello,
> > 
> > On Tue, Apr 19, 2022 at 01:46:15PM +0200, Ricardo Ribalda wrote:
> > > On Mon, 18 Apr 2022 at 11:07, James_Lin <Ping-lei.Lin@mediatek.com> wrote:
> > > > 
> > > > This patch aims to add UVC_GUID_FORMAT_H265
> > > > High Efficiency Video Coding (HEVC), also known as H.265 and MPEG-H Part 2.
> > > > They describe the same video encoding method.
> > > > So for handling their behavior is the same.
> > > > However, when external camera device describes this encoding method,
> > > > some use hevc, some use h265.
> > > > There is no uniform specification to describe this encoding method.
> > > > So if an external camera device use h265 to describe this encoding method,
> > > > driver will not recognize it.
> > > > Therefore, this patch is to enable driver to read HEVC/H265
> > > > and convert it to V4L2_PIX_FMT_HEVC.
> > > > 
> > > > Signed-off-by: James_Lin <Ping-lei.Lin@mediatek.com>
> > > 
> > > Reviewed-by: Ricardo Ribalda <ribalda@chromium.org>
> > > > ---
> > > >  drivers/media/usb/uvc/uvc_driver.c | 5 +++++
> > > >  drivers/media/usb/uvc/uvcvideo.h   | 3 +++
> > > >  2 files changed, 8 insertions(+)
> > > > 
> > > > diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
> > > > index dda0f0aa78b8..e437e9f95890 100644
> > > > --- a/drivers/media/usb/uvc/uvc_driver.c
> > > > +++ b/drivers/media/usb/uvc/uvc_driver.c
> > > > @@ -154,6 +154,11 @@ static struct uvc_format_desc uvc_fmts[] = {
> > > >                 .guid           = UVC_GUID_FORMAT_H264,
> > > >                 .fcc            = V4L2_PIX_FMT_H264,
> > > >         },
> > > 
> > > Maybe I would add a comment here saying that some cameras represent
> > > hevc as h265.
> > 
> > I wish there would be a 4CC and GUID standard with a centralized
> > registry...
> 
> Thought that was the kernel codebase :)

You'll find multiple fourcc for the same thing in the linux kernel ;-P

> 
> > 
> > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> > 
> > > > +       {
> > > > +               .name           = "H.265",
> > > > +               .guid           = UVC_GUID_FORMAT_H265,
> > > > +               .fcc            = V4L2_PIX_FMT_HEVC,
> > > > +       },
> > > >         {
> > > >                 .name           = "Greyscale 8 L/R (Y8I)",
> > > >                 .guid           = UVC_GUID_FORMAT_Y8I,
> > > > diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h
> > > > index 143230b3275b..41f4d8c33f2a 100644
> > > > --- a/drivers/media/usb/uvc/uvcvideo.h
> > > > +++ b/drivers/media/usb/uvc/uvcvideo.h
> > > > @@ -139,6 +139,9 @@
> > > >  #define UVC_GUID_FORMAT_H264 \
> > > >         { 'H',  '2',  '6',  '4', 0x00, 0x00, 0x10, 0x00, \
> > > >          0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
> > > > +#define UVC_GUID_FORMAT_H265 \
> > > > +       { 'H',  '2',  '6',  '5', 0x00, 0x00, 0x10, 0x00, \
> > > > +        0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
> > > >  #define UVC_GUID_FORMAT_Y8I \
> > > >         { 'Y',  '8',  'I',  ' ', 0x00, 0x00, 0x10, 0x00, \
> > > >          0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
> > 
> > --
> > Regards,
> > 
> > Laurent Pinchart
> 
> 
>