Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp543479imm; Mon, 21 May 2018 10:05:05 -0700 (PDT) X-Google-Smtp-Source: AB8JxZrjlefJFEiNPyxj5Az6C1N6AevGNOykdUddocWiIrb8SHdHJgzOOy3mi1cwhgrxErEwSnWg X-Received: by 2002:a63:18a:: with SMTP id 132-v6mr16647952pgb.344.1526922305078; Mon, 21 May 2018 10:05:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1526922305; cv=none; d=google.com; s=arc-20160816; b=Ado49Xg2Q0i2A74a12umUqoReCCf8J91p+9E3BpSvv/6ZxBtbtGKmyWwoxnserq6/7 sfUZgqZoZ4zrBufyyg8mnjZtHIf9PKdl4IngEopEJl41iLvHBnFVoG20AYb3zyVWJAbU 978pLyjQ9OIlPT/bnB07PUVGUhSGGqGC+U6tIU+3dyrBax/AM9Je1yO448sRMlobO0Td 23F0TRZHu+0/uZIDIiyV2MD/xes/WrNjN9oBAvXhaYQtu4HoDHUfBO5h0IK581ynZ1Jr 2bG3Hwzs6YfpmRClloZnI3456v6JUVt4/byPQXNPKWOiVJbpU1YSr+efxP1HdzdofhXj lZ7A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:arc-authentication-results; bh=mwMl1C9gqyvCTocH6eI2pKvzpi7DgCycWbAXki+TPNc=; b=P+g5M29NGL6fpL9f8U5M8/u9SpZlAgP1SY7mA02Gxgq7FZRWBLZ+Mgs0Yk6qTlZQkB JwEXO2EhlwetrKtmbAVzSVUfuS1iZ3E6GjQoxkTHHe7vODVg1UAxWyys7np6g7Nr188u kIcUTrLzLlFAVk46BKE8gZgkrzDqp/Sz8WIz88sA6uDH7M2oJRWb4zB28URXHiXgHfwz 6+OOrz/FtUztgusmVOrKtC5kiXuIpyTNIHVRGMPqUIpx2rAwmlFUqmD9O8ONUwnQ5oKY FLbf4cvwfWG6YReecoHVDlJ5rdkgEjXoSbw6UBQyUcHnEC36mQr4CP8vw2VeihVXID0y CRSQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h22-v6si4706818pgn.19.2018.05.21.10.04.50; Mon, 21 May 2018 10:05:05 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753377AbeEURCE (ORCPT + 99 others); Mon, 21 May 2018 13:02:04 -0400 Received: from bhuna.collabora.co.uk ([46.235.227.227]:44384 "EHLO bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753355AbeEURCB (ORCPT ); Mon, 21 May 2018 13:02:01 -0400 Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: ezequiel) with ESMTPSA id 06B8A286521 From: Ezequiel Garcia To: linux-media@vger.kernel.org Cc: kernel@collabora.com, Hans Verkuil , Mauro Carvalho Chehab , Shuah Khan , Pawel Osciak , Alexandre Courbot , Sakari Ailus , Brian Starkey , linux-kernel@vger.kernel.org, Gustavo Padovan , Ezequiel Garcia Subject: [PATCH v10 08/16] v4l: mark unordered formats Date: Mon, 21 May 2018 13:59:38 -0300 Message-Id: <20180521165946.11778-9-ezequiel@collabora.com> X-Mailer: git-send-email 2.16.3 In-Reply-To: <20180521165946.11778-1-ezequiel@collabora.com> References: <20180521165946.11778-1-ezequiel@collabora.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Gustavo Padovan Now that we've introduced the V4L2_FMT_FLAG_UNORDERED flag, mark the appropriate formats. v2: Set unordered flag before calling the driver callback. Signed-off-by: Gustavo Padovan Signed-off-by: Ezequiel Garcia --- drivers/media/v4l2-core/v4l2-ioctl.c | 74 +++++++++++++++++++++++++++--------- 1 file changed, 57 insertions(+), 17 deletions(-) diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c index f48c505550e0..2135ac235a96 100644 --- a/drivers/media/v4l2-core/v4l2-ioctl.c +++ b/drivers/media/v4l2-core/v4l2-ioctl.c @@ -1102,6 +1102,27 @@ static int v4l_enumoutput(const struct v4l2_ioctl_ops *ops, return ops->vidioc_enum_output(file, fh, p); } +static void v4l_fill_unordered_fmtdesc(struct v4l2_fmtdesc *fmt) +{ + switch (fmt->pixelformat) { + case V4L2_PIX_FMT_MPEG: + case V4L2_PIX_FMT_H264: + case V4L2_PIX_FMT_H264_NO_SC: + case V4L2_PIX_FMT_H264_MVC: + case V4L2_PIX_FMT_H263: + case V4L2_PIX_FMT_MPEG1: + case V4L2_PIX_FMT_MPEG2: + case V4L2_PIX_FMT_MPEG4: + case V4L2_PIX_FMT_XVID: + case V4L2_PIX_FMT_VC1_ANNEX_G: + case V4L2_PIX_FMT_VC1_ANNEX_L: + case V4L2_PIX_FMT_VP8: + case V4L2_PIX_FMT_VP9: + case V4L2_PIX_FMT_HEVC: + fmt->flags |= V4L2_FMT_FLAG_UNORDERED; + } +} + static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt) { const unsigned sz = sizeof(fmt->description); @@ -1310,61 +1331,80 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt) if (descr) WARN_ON(strlcpy(fmt->description, descr, sz) >= sz); - fmt->flags = flags; + fmt->flags |= flags; } -static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops, - struct file *file, void *fh, void *arg) -{ - struct v4l2_fmtdesc *p = arg; - int ret = check_fmt(file, p->type); - if (ret) - return ret; - ret = -EINVAL; +static int __vidioc_enum_fmt(const struct v4l2_ioctl_ops *ops, + struct v4l2_fmtdesc *p, + struct file *file, void *fh) +{ + int ret = 0; switch (p->type) { case V4L2_BUF_TYPE_VIDEO_CAPTURE: if (unlikely(!ops->vidioc_enum_fmt_vid_cap)) break; - ret = ops->vidioc_enum_fmt_vid_cap(file, fh, arg); + ret = ops->vidioc_enum_fmt_vid_cap(file, fh, p); break; case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE: if (unlikely(!ops->vidioc_enum_fmt_vid_cap_mplane)) break; - ret = ops->vidioc_enum_fmt_vid_cap_mplane(file, fh, arg); + ret = ops->vidioc_enum_fmt_vid_cap_mplane(file, fh, p); break; case V4L2_BUF_TYPE_VIDEO_OVERLAY: if (unlikely(!ops->vidioc_enum_fmt_vid_overlay)) break; - ret = ops->vidioc_enum_fmt_vid_overlay(file, fh, arg); + ret = ops->vidioc_enum_fmt_vid_overlay(file, fh, p); break; case V4L2_BUF_TYPE_VIDEO_OUTPUT: if (unlikely(!ops->vidioc_enum_fmt_vid_out)) break; - ret = ops->vidioc_enum_fmt_vid_out(file, fh, arg); + ret = ops->vidioc_enum_fmt_vid_out(file, fh, p); break; case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE: if (unlikely(!ops->vidioc_enum_fmt_vid_out_mplane)) break; - ret = ops->vidioc_enum_fmt_vid_out_mplane(file, fh, arg); + ret = ops->vidioc_enum_fmt_vid_out_mplane(file, fh, p); break; case V4L2_BUF_TYPE_SDR_CAPTURE: if (unlikely(!ops->vidioc_enum_fmt_sdr_cap)) break; - ret = ops->vidioc_enum_fmt_sdr_cap(file, fh, arg); + ret = ops->vidioc_enum_fmt_sdr_cap(file, fh, p); break; case V4L2_BUF_TYPE_SDR_OUTPUT: if (unlikely(!ops->vidioc_enum_fmt_sdr_out)) break; - ret = ops->vidioc_enum_fmt_sdr_out(file, fh, arg); + ret = ops->vidioc_enum_fmt_sdr_out(file, fh, p); break; case V4L2_BUF_TYPE_META_CAPTURE: if (unlikely(!ops->vidioc_enum_fmt_meta_cap)) break; - ret = ops->vidioc_enum_fmt_meta_cap(file, fh, arg); + ret = ops->vidioc_enum_fmt_meta_cap(file, fh, p); break; } + return ret; +} + +static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops, + struct file *file, void *fh, void *arg) +{ + struct v4l2_fmtdesc *p = arg; + int ret = check_fmt(file, p->type); + + if (ret) + return ret; + ret = -EINVAL; + + ret = __vidioc_enum_fmt(ops, p, file, fh); + if (ret) + return ret; + /* + * Set the unordered flag and call the driver + * again so it has the chance to clear the flag. + */ + v4l_fill_unordered_fmtdesc(p); + ret = __vidioc_enum_fmt(ops, p, file, fh); if (ret == 0) v4l_fill_fmtdesc(p); return ret; -- 2.16.3