On 04/05/18 22:06, Ezequiel Garcia wrote:
> From: Gustavo Padovan <gustavo.pado...@collabora.com>
> 
> Now that we've introduced the V4L2_FMT_FLAG_UNORDERED flag,
> mark the appropriate formats.
> 
> Signed-off-by: Gustavo Padovan <gustavo.pado...@collabora.com>
> ---
>  drivers/media/v4l2-core/v4l2-ioctl.c | 55 
> ++++++++++++++++++++----------------
>  1 file changed, 30 insertions(+), 25 deletions(-)
> 
> diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c 
> b/drivers/media/v4l2-core/v4l2-ioctl.c
> index f48c505550e0..f75ad954a6f2 100644
> --- a/drivers/media/v4l2-core/v4l2-ioctl.c
> +++ b/drivers/media/v4l2-core/v4l2-ioctl.c
> @@ -1260,20 +1260,6 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
>               case V4L2_PIX_FMT_MJPEG:        descr = "Motion-JPEG"; break;
>               case V4L2_PIX_FMT_JPEG:         descr = "JFIF JPEG"; break;
>               case V4L2_PIX_FMT_DV:           descr = "1394"; break;
> -             case V4L2_PIX_FMT_MPEG:         descr = "MPEG-1/2/4"; break;
> -             case V4L2_PIX_FMT_H264:         descr = "H.264"; break;
> -             case V4L2_PIX_FMT_H264_NO_SC:   descr = "H.264 (No Start 
> Codes)"; break;
> -             case V4L2_PIX_FMT_H264_MVC:     descr = "H.264 MVC"; break;
> -             case V4L2_PIX_FMT_H263:         descr = "H.263"; break;
> -             case V4L2_PIX_FMT_MPEG1:        descr = "MPEG-1 ES"; break;
> -             case V4L2_PIX_FMT_MPEG2:        descr = "MPEG-2 ES"; break;
> -             case V4L2_PIX_FMT_MPEG4:        descr = "MPEG-4 part 2 ES"; 
> break;
> -             case V4L2_PIX_FMT_XVID:         descr = "Xvid"; break;
> -             case V4L2_PIX_FMT_VC1_ANNEX_G:  descr = "VC-1 (SMPTE 412M Annex 
> G)"; break;
> -             case V4L2_PIX_FMT_VC1_ANNEX_L:  descr = "VC-1 (SMPTE 412M Annex 
> L)"; break;
> -             case V4L2_PIX_FMT_VP8:          descr = "VP8"; break;
> -             case V4L2_PIX_FMT_VP9:          descr = "VP9"; break;
> -             case V4L2_PIX_FMT_HEVC:         descr = "HEVC"; break; /* aka 
> H.265 */
>               case V4L2_PIX_FMT_CPIA1:        descr = "GSPCA CPiA YUV"; break;
>               case V4L2_PIX_FMT_WNVA:         descr = "WNVA"; break;
>               case V4L2_PIX_FMT_SN9C10X:      descr = "GSPCA SN9C10X"; break;
> @@ -1294,17 +1280,36 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
>               case V4L2_PIX_FMT_S5C_UYVY_JPG: descr = "S5C73MX interleaved 
> UYVY/JPEG"; break;
>               case V4L2_PIX_FMT_MT21C:        descr = "Mediatek Compressed 
> Format"; break;
>               default:
> -                     WARN(1, "Unknown pixelformat 0x%08x\n", 
> fmt->pixelformat);
> -                     if (fmt->description[0])
> -                             return;
> -                     flags = 0;
> -                     snprintf(fmt->description, sz, "%c%c%c%c%s",
> -                                     (char)(fmt->pixelformat & 0x7f),
> -                                     (char)((fmt->pixelformat >> 8) & 0x7f),
> -                                     (char)((fmt->pixelformat >> 16) & 0x7f),
> -                                     (char)((fmt->pixelformat >> 24) & 0x7f),
> -                                     (fmt->pixelformat & (1 << 31)) ? "-BE" 
> : "");
> -                     break;
> +                     /* Unordered formats */
> +                     flags = V4L2_FMT_FLAG_UNORDERED;

I realized that this is a problem since this function is called *after*
the driver. So the driver has no chance to clear this flag if it knows
that the queue is always ordered.

I think this needs to be split: first set the UNORDERED flag for the selected
formats, then call the driver, then fill in the rest.

Note that this function sets fmt->flags, this should become |=. Otherwise
the UNORDERED flag would be overwritten.

It's a bit messy, but I don't see a better approach. Except by setting the
UNORDERED flag in the drivers, but I prefer this more defensive approach
(i.e. presumed unordered, unless stated otherwise).

Regards,

        Hans

> +                     switch (fmt->pixelformat) {
> +                     case V4L2_PIX_FMT_MPEG:         descr = "MPEG-1/2/4"; 
> break;
> +                     case V4L2_PIX_FMT_H264:         descr = "H.264"; break;
> +                     case V4L2_PIX_FMT_H264_NO_SC:   descr = "H.264 (No 
> Start Codes)"; break;
> +                     case V4L2_PIX_FMT_H264_MVC:     descr = "H.264 MVC"; 
> break;
> +                     case V4L2_PIX_FMT_H263:         descr = "H.263"; break;
> +                     case V4L2_PIX_FMT_MPEG1:        descr = "MPEG-1 ES"; 
> break;
> +                     case V4L2_PIX_FMT_MPEG2:        descr = "MPEG-2 ES"; 
> break;
> +                     case V4L2_PIX_FMT_MPEG4:        descr = "MPEG-4 part 2 
> ES"; break;
> +                     case V4L2_PIX_FMT_XVID:         descr = "Xvid"; break;
> +                     case V4L2_PIX_FMT_VC1_ANNEX_G:  descr = "VC-1 (SMPTE 
> 412M Annex G)"; break;
> +                     case V4L2_PIX_FMT_VC1_ANNEX_L:  descr = "VC-1 (SMPTE 
> 412M Annex L)"; break;
> +                     case V4L2_PIX_FMT_VP8:          descr = "VP8"; break;
> +                     case V4L2_PIX_FMT_VP9:          descr = "VP9"; break;
> +                     case V4L2_PIX_FMT_HEVC:         descr = "HEVC"; break; 
> /* aka H.265 */
> +                     default:
> +                             WARN(1, "Unknown pixelformat 0x%08x\n", 
> fmt->pixelformat);
> +                             if (fmt->description[0])
> +                                     return;
> +                             flags = 0;
> +                             snprintf(fmt->description, sz, "%c%c%c%c%s",
> +                                             (char)(fmt->pixelformat & 0x7f),
> +                                             (char)((fmt->pixelformat >> 8) 
> & 0x7f),
> +                                             (char)((fmt->pixelformat >> 16) 
> & 0x7f),
> +                                             (char)((fmt->pixelformat >> 24) 
> & 0x7f),
> +                                             (fmt->pixelformat & (1 << 31)) 
> ? "-BE" : "");
> +                             break;
> +                     }
>               }
>       }
>  
> 

Reply via email to