Re: [PATCH 2/2] media: camss: Make use of V4L2_CAP_IO_MC

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hey Andrey,

I've suggested a small change, with that feel free to add my r-b.

Reviewed-by: Robert Foss <robert.foss@xxxxxxxxxx>

On Wed, 25 Nov 2020 at 13:37, Andrey Konovalov
<andrey.konovalov@xxxxxxxxxx> wrote:
>
> Implement mbus_code filtering for format enumeration.
>
> Without this patch libcamera errors out with:
> "ERROR V4L2 v4l2_videodevice.cpp:982 /dev/video0[cap]: Media bus code
> filtering not supported by the device"
>
> This is the second version of this change which handles the case of
> several pixel formats corresponding to one media bus format correctly.
>
> Signed-off-by: Andrey Konovalov <andrey.konovalov@xxxxxxxxxx>
> ---
>  drivers/media/platform/qcom/camss/camss-video.c | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/media/platform/qcom/camss/camss-video.c b/drivers/media/platform/qcom/camss/camss-video.c
> index 20673de9020e..60737b771d52 100644
> --- a/drivers/media/platform/qcom/camss/camss-video.c
> +++ b/drivers/media/platform/qcom/camss/camss-video.c
> @@ -539,6 +539,7 @@ static int video_enum_fmt(struct file *file, void *fh, struct v4l2_fmtdesc *f)
>  {
>         struct camss_video *video = video_drvdata(file);
>         int i, j, k;
> +       u32 mcode = f->mbus_code;
>
>         if (f->type != video->type)
>                 return -EINVAL;
> @@ -549,7 +550,12 @@ static int video_enum_fmt(struct file *file, void *fh, struct v4l2_fmtdesc *f)
>         /* find index "i" of "k"th unique pixelformat in formats array */

Maybe this is a good place to explain how mcode is used, and for which
extension it is required.

>         k = -1;
>         for (i = 0; i < video->nformats; i++) {
> +               if (mcode != 0 && video->formats[i].code != mcode)
> +                       continue;
> +
>                 for (j = 0; j < i; j++) {
> +                       if (mcode != 0 && video->formats[j].code != mcode)
> +                               continue;
>                         if (video->formats[i].pixelformat ==
>                                         video->formats[j].pixelformat)
>                                 break;
> @@ -948,8 +954,8 @@ int msm_video_register(struct camss_video *video, struct v4l2_device *v4l2_dev,
>         }
>
>         vdev->fops = &msm_vid_fops;
> -       vdev->device_caps = V4L2_CAP_VIDEO_CAPTURE_MPLANE | V4L2_CAP_STREAMING |
> -                                                       V4L2_CAP_READWRITE;
> +       vdev->device_caps = V4L2_CAP_VIDEO_CAPTURE_MPLANE | V4L2_CAP_STREAMING
> +                         | V4L2_CAP_READWRITE | V4L2_CAP_IO_MC;
>         vdev->ioctl_ops = &msm_vid_ioctl_ops;
>         vdev->release = msm_video_release;
>         vdev->v4l2_dev = v4l2_dev;
> --
> 2.17.1
>



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux