Received: by 2002:a25:e74b:0:0:0:0:0 with SMTP id e72csp722064ybh; Wed, 15 Jul 2020 13:25:45 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx+SOzHoYhVtpDxf6PNhNK5BG4GQelmYQz/m3tZ+2UUXPLYhflt95i7fursrVNrDDvuLK4r X-Received: by 2002:a17:906:fac1:: with SMTP id lu1mr668274ejb.427.1594844745069; Wed, 15 Jul 2020 13:25:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1594844745; cv=none; d=google.com; s=arc-20160816; b=dUlKWny2x/aGiscQNFKkSCJYK5Cx6u6yI0x/VWa92H+nPIF6S+I19mawnCbK8F32nM Z97euBuwhffvxjSRQplTPCbYia17NXhjzv8a9OuiHp31oV33mXeh/rkb1U4Gu+hL5qso CzRfR1/B4Yli/A2fL7tvMaduBXoHJD3fNAQYxwB4k8WuxgxbDjtojpbWNi7JIhXQZmUN ivmfK+ARvLpMkt3eh+vcnlgBiKc0KNvsdjdr061qvj7rRSDa853pXFd0Lp0wxGd5KCc8 P2hnCUaPZC1c9//HZo0GTDRUWCBPnmg1thufkV8wf6x0IXv25tNkqXs3rHCVQ3Cl0aeS 0INA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=4tHv4vFXyTSLQEdSpO9XMr0uBkUHYWsFbSdHfnnOoGA=; b=hEEVyJ4C5lMPeIg8DLESqjKhbqhnrgyfAjaWmVCZHFuJsUIoLrl6VhErkMYdZdP84k 2x5/UjrFwP1suIkslY7v8prD3cT6FAwU/tRmXkHztmNnbn3hra8a46NhazIhxsRagCZV AeGUQkagqb4f4t+88+SQ2CMKyN5WIPUy7CYs5NzK4JHoK7U+O00oqs2wYX8tamfQFr3j CJO5zVoQR/dvvwN6Dwlm7H42fDhsJHYFX4g7J44C+H2OYdsOAliEbSqNXBk0sPGrlZQm pd692cvf8mlaGeCa4PMFViHReiQPsfdhR1bIXYaWRpo5+DzFoWO8K6CJrcmHiLoh+j5+ GovQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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. [23.128.96.18]) by mx.google.com with ESMTP id o9si2125617ejr.243.2020.07.15.13.25.22; Wed, 15 Jul 2020 13:25:45 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 S1727798AbgGOUXA (ORCPT + 99 others); Wed, 15 Jul 2020 16:23:00 -0400 Received: from bhuna.collabora.co.uk ([46.235.227.227]:37100 "EHLO bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726370AbgGOUW7 (ORCPT ); Wed, 15 Jul 2020 16:22:59 -0400 Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: ezequiel) with ESMTPSA id 8B7842A5182 From: Ezequiel Garcia To: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Tomasz Figa , kernel@collabora.com, Jonas Karlman , Hans Verkuil , Alexandre Courbot , Jeffrey Kardatzke , Nicolas Dufresne , Philipp Zabel , Maxime Ripard , Paul Kocialkowski , Jernej Skrabec , Ezequiel Garcia Subject: [PATCH 01/10] media: uapi: h264: Update reference lists Date: Wed, 15 Jul 2020 17:22:24 -0300 Message-Id: <20200715202233.185680-2-ezequiel@collabora.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200715202233.185680-1-ezequiel@collabora.com> References: <20200715202233.185680-1-ezequiel@collabora.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Jernej Skrabec When dealing with with interlaced frames, reference lists must tell if each particular reference is meant for top or bottom field. This info is currently not provided at all in the H264 related controls. Make reference lists hold a structure which will also hold flags along index into DPB array. Flags will tell if reference is meant for top or bottom field. Currently the only user of these lists is Cedrus which is just compile fixed here. Actual usage of newly introduced flags will come in following commit. Signed-off-by: Jernej Skrabec Reviewed-by: Nicolas Dufresne [Ezequiel: Use a macro for the reference picture list length] Signed-off-by: Ezequiel Garcia --- .../media/v4l/ext-ctrls-codec.rst | 40 ++++++++++++++++++- .../staging/media/sunxi/cedrus/cedrus_h264.c | 6 +-- include/media/h264-ctrls.h | 20 +++++++--- 3 files changed, 55 insertions(+), 11 deletions(-) diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst index d0d506a444b1..c2e17c02f77e 100644 --- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst @@ -1843,10 +1843,10 @@ enum v4l2_mpeg_video_h264_hierarchical_coding_type - * - __u32 - ``slice_group_change_cycle`` - - * - __u8 + * - struct :c:type:`v4l2_h264_reference` - ``ref_pic_list0[32]`` - Reference picture list after applying the per-slice modifications - * - __u8 + * - struct :c:type:`v4l2_h264_reference` - ``ref_pic_list1[32]`` - Reference picture list after applying the per-slice modifications * - __u32 @@ -1926,6 +1926,42 @@ enum v4l2_mpeg_video_h264_hierarchical_coding_type - - ``chroma_offset[32][2]`` - +``Picture Reference`` + +.. c:type:: v4l2_h264_reference + +.. cssclass:: longtable + +.. flat-table:: struct v4l2_h264_reference + :header-rows: 0 + :stub-columns: 0 + :widths: 1 1 2 + + * - __u16 + - ``flags`` + - See :ref:`Picture Reference Flags ` + * - __u8 + - ``index`` + - Index into the :c:type:`v4l2_ctrl_h264_decode_params`.dpb array. + +.. _h264_reference_flags: + +``Picture Reference Flags`` + +.. cssclass:: longtable + +.. flat-table:: + :header-rows: 0 + :stub-columns: 0 + :widths: 1 1 2 + + * - ``V4L2_H264_REFERENCE_FLAG_TOP_FIELD`` + - 0x00000001 + - + * - ``V4L2_H264_REFERENCE_FLAG_BOTTOM_FIELD`` + - 0x00000002 + - + ``V4L2_CID_MPEG_VIDEO_H264_DECODE_PARAMS (struct)`` Specifies the decode parameters (as extracted from the bitstream) for the associated H264 slice data. This includes the necessary diff --git a/drivers/staging/media/sunxi/cedrus/cedrus_h264.c b/drivers/staging/media/sunxi/cedrus/cedrus_h264.c index 54ee2aa423e2..cce527bbdf86 100644 --- a/drivers/staging/media/sunxi/cedrus/cedrus_h264.c +++ b/drivers/staging/media/sunxi/cedrus/cedrus_h264.c @@ -166,8 +166,8 @@ static void cedrus_write_frame_list(struct cedrus_ctx *ctx, static void _cedrus_write_ref_list(struct cedrus_ctx *ctx, struct cedrus_run *run, - const u8 *ref_list, u8 num_ref, - enum cedrus_h264_sram_off sram) + const struct v4l2_h264_reference *ref_list, + u8 num_ref, enum cedrus_h264_sram_off sram) { const struct v4l2_ctrl_h264_decode_params *decode = run->h264.decode_params; struct vb2_queue *cap_q; @@ -188,7 +188,7 @@ static void _cedrus_write_ref_list(struct cedrus_ctx *ctx, int buf_idx; u8 dpb_idx; - dpb_idx = ref_list[i]; + dpb_idx = ref_list[i].index; dpb = &decode->dpb[dpb_idx]; if (!(dpb->flags & V4L2_H264_DPB_ENTRY_FLAG_ACTIVE)) diff --git a/include/media/h264-ctrls.h b/include/media/h264-ctrls.h index 080fd1293c42..bca4a9887e7e 100644 --- a/include/media/h264-ctrls.h +++ b/include/media/h264-ctrls.h @@ -19,6 +19,8 @@ */ #define V4L2_H264_NUM_DPB_ENTRIES 16 +#define V4L2_H264_REF_LIST_LEN (2 * V4L2_H264_NUM_DPB_ENTRIES) + /* Our pixel format isn't stable at the moment */ #define V4L2_PIX_FMT_H264_SLICE v4l2_fourcc('S', '2', '6', '4') /* H264 parsed slices */ @@ -140,6 +142,16 @@ struct v4l2_h264_pred_weight_table { #define V4L2_H264_SLICE_FLAG_DIRECT_SPATIAL_MV_PRED 0x04 #define V4L2_H264_SLICE_FLAG_SP_FOR_SWITCH 0x08 +#define V4L2_H264_REFERENCE_FLAG_TOP_FIELD 0x01 +#define V4L2_H264_REFERENCE_FLAG_BOTTOM_FIELD 0x02 + +struct v4l2_h264_reference { + __u8 flags; + + /* Index into v4l2_ctrl_h264_decode_params.dpb[] */ + __u8 index; +}; + struct v4l2_ctrl_h264_slice_params { /* Size in bytes, including header */ __u32 size; @@ -178,12 +190,8 @@ struct v4l2_ctrl_h264_slice_params { __u8 num_ref_idx_l1_active_minus1; __u32 slice_group_change_cycle; - /* - * Entries on each list are indices into - * v4l2_ctrl_h264_decode_params.dpb[]. - */ - __u8 ref_pic_list0[32]; - __u8 ref_pic_list1[32]; + struct v4l2_h264_reference ref_pic_list0[V4L2_H264_REF_LIST_LEN]; + struct v4l2_h264_reference ref_pic_list1[V4L2_H264_REF_LIST_LEN]; __u32 flags; }; -- 2.27.0