linux-media.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ezequiel Garcia <ezequiel@collabora.com>
To: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org
Cc: Tomasz Figa <tfiga@chromium.org>,
	kernel@collabora.com, Jonas Karlman <jonas@kwiboo.se>,
	Hans Verkuil <hverkuil@xs4all.nl>,
	Alexandre Courbot <acourbot@chromium.org>,
	Jeffrey Kardatzke <jkardatzke@chromium.org>,
	Nicolas Dufresne <nicolas.dufresne@collabora.com>,
	Philipp Zabel <p.zabel@pengutronix.de>,
	Maxime Ripard <mripard@kernel.org>,
	Paul Kocialkowski <paul.kocialkowski@bootlin.com>,
	Jernej Skrabec <jernej.skrabec@siol.net>
Subject: [PATCH v3 15/19] media: cedrus: h264: Fix frame list construction
Date: Fri, 14 Aug 2020 10:36:30 -0300	[thread overview]
Message-ID: <20200814133634.95665-16-ezequiel@collabora.com> (raw)
In-Reply-To: <20200814133634.95665-1-ezequiel@collabora.com>

From: Jernej Skrabec <jernej.skrabec@siol.net>

Current frame list construction algorithm assumes that decoded image
will be output into its own buffer. That is true for progressive content
but not for interlaced where each field is decoded separately into same
buffer.

Fix that by checking if capture buffer is listed in DPB. If it is, reuse
it.

Signed-off-by: Jernej Skrabec <jernej.skrabec@siol.net>
---
 drivers/staging/media/sunxi/cedrus/cedrus_h264.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/drivers/staging/media/sunxi/cedrus/cedrus_h264.c b/drivers/staging/media/sunxi/cedrus/cedrus_h264.c
index 1e89a8438f36..fe041b444385 100644
--- a/drivers/staging/media/sunxi/cedrus/cedrus_h264.c
+++ b/drivers/staging/media/sunxi/cedrus/cedrus_h264.c
@@ -101,7 +101,7 @@ static void cedrus_write_frame_list(struct cedrus_ctx *ctx,
 	struct cedrus_dev *dev = ctx->dev;
 	unsigned long used_dpbs = 0;
 	unsigned int position;
-	unsigned int output = 0;
+	int output = -1;
 	unsigned int i;
 
 	cap_q = v4l2_m2m_get_vq(ctx->fh.m2m_ctx, V4L2_BUF_TYPE_VIDEO_CAPTURE);
@@ -124,6 +124,11 @@ static void cedrus_write_frame_list(struct cedrus_ctx *ctx,
 		position = cedrus_buf->codec.h264.position;
 		used_dpbs |= BIT(position);
 
+		if (run->dst->vb2_buf.timestamp == dpb->reference_ts) {
+			output = position;
+			continue;
+		}
+
 		if (!(dpb->flags & V4L2_H264_DPB_ENTRY_FLAG_ACTIVE))
 			continue;
 
@@ -131,13 +136,11 @@ static void cedrus_write_frame_list(struct cedrus_ctx *ctx,
 				    dpb->top_field_order_cnt,
 				    dpb->bottom_field_order_cnt,
 				    &pic_list[position]);
-
-		output = max(position, output);
 	}
 
-	position = find_next_zero_bit(&used_dpbs, CEDRUS_H264_FRAME_NUM,
-				      output);
-	if (position >= CEDRUS_H264_FRAME_NUM)
+	if (output >= 0)
+		position = output;
+	else
 		position = find_first_zero_bit(&used_dpbs, CEDRUS_H264_FRAME_NUM);
 
 	output_buf = vb2_to_cedrus_buffer(&run->dst->vb2_buf);
-- 
2.27.0


  parent reply	other threads:[~2020-08-14 13:38 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-14 13:36 [PATCH v3 00/19] Clean H264 stateless uAPI Ezequiel Garcia
2020-08-14 13:36 ` [PATCH v3 01/19] media: uapi: h264: Update reference lists Ezequiel Garcia
2020-08-20  9:11   ` Hans Verkuil
2020-08-14 13:36 ` [PATCH v3 02/19] media: uapi: h264: Further clarify scaling lists order Ezequiel Garcia
2020-08-14 13:36 ` [PATCH v3 03/19] media: uapi: h264: Split prediction weight parameters Ezequiel Garcia
2020-08-14 13:36 ` [PATCH v3 04/19] media: uapi: h264: Clarify pic_order_cnt_bit_size field Ezequiel Garcia
2020-08-14 13:36 ` [PATCH v3 05/19] media: uapi: h264: Increase size of 'first_mb_in_slice' field Ezequiel Garcia
2020-08-14 13:36 ` [PATCH v3 06/19] media: uapi: h264: Clean DPB entry interface Ezequiel Garcia
2020-08-20  9:12   ` Hans Verkuil
2020-08-14 13:36 ` [PATCH v3 07/19] media: uapi: h264: Increase size of DPB entry pic_num Ezequiel Garcia
2020-08-14 13:36 ` [PATCH v3 08/19] media: uapi: h264: Drop SLICE_PARAMS 'size' field Ezequiel Garcia
2020-08-14 13:36 ` [PATCH v3 09/19] media: uapi: h264: Clarify SLICE_BASED mode Ezequiel Garcia
2020-08-14 13:36 ` [PATCH v3 10/19] media: uapi: h264: Clean slice invariants syntax elements Ezequiel Garcia
2020-08-14 13:36 ` [PATCH v3 11/19] media: uapi: h264: Rename and clarify PPS_FLAG_SCALING_MATRIX_PRESENT Ezequiel Garcia
2020-08-14 13:36 ` [PATCH v3 12/19] media: hantro: Don't require unneeded H264_SLICE_PARAMS Ezequiel Garcia
2020-08-14 13:36 ` [PATCH v3 13/19] media: rkvdec: " Ezequiel Garcia
2020-08-14 13:36 ` [PATCH v3 14/19] media: cedrus: h264: Properly configure reference field Ezequiel Garcia
2020-08-14 13:36 ` Ezequiel Garcia [this message]
2020-08-14 13:36 ` [PATCH v3 16/19] media: rkvdec: Drop unneeded per_request driver-specific control flag Ezequiel Garcia
2020-08-18 20:17   ` Jonas Karlman
2020-08-18 21:38     ` Ezequiel Garcia
2020-08-18 22:25       ` Jonas Karlman
2020-08-19 14:37   ` [PATCH v4] " Ezequiel Garcia
2020-08-14 13:36 ` [PATCH v3 17/19] media: rkvdec: Use H264_SCALING_MATRIX only when required Ezequiel Garcia
2020-08-14 13:36 ` [PATCH v3 18/19] media: hantro: " Ezequiel Garcia
2020-08-14 13:36 ` [PATCH v3 19/19] media: cedrus: " Ezequiel Garcia

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200814133634.95665-16-ezequiel@collabora.com \
    --to=ezequiel@collabora.com \
    --cc=acourbot@chromium.org \
    --cc=hverkuil@xs4all.nl \
    --cc=jernej.skrabec@siol.net \
    --cc=jkardatzke@chromium.org \
    --cc=jonas@kwiboo.se \
    --cc=kernel@collabora.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=mripard@kernel.org \
    --cc=nicolas.dufresne@collabora.com \
    --cc=p.zabel@pengutronix.de \
    --cc=paul.kocialkowski@bootlin.com \
    --cc=tfiga@chromium.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).