All of lore.kernel.org
 help / color / mirror / Atom feed
From: Philipp Zabel <p.zabel@pengutronix.de>
To: linux-media@vger.kernel.org
Cc: Mauro Carvalho Chehab <m.chehab@samsung.com>,
	Kamil Debski <k.debski@samsung.com>,
	Fabio Estevam <fabio.estevam@freescale.com>,
	kernel@pengutronix.de, Philipp Zabel <p.zabel@pengutronix.de>
Subject: [PATCH 18/30] [media] coda: let userspace force IDR frames by enabling the keyframe flag in the source buffer
Date: Fri, 13 Jun 2014 18:08:44 +0200	[thread overview]
Message-ID: <1402675736-15379-19-git-send-email-p.zabel@pengutronix.de> (raw)
In-Reply-To: <1402675736-15379-1-git-send-email-p.zabel@pengutronix.de>

This disables forcing IDR frames at GOP size intervals on CODA7541 and CODA960,
which is only needed to work around a firmware bug on CodaDx6.
Instead, the V4L2_BUF_FLAG_KEYFRAME v4l2 buffer flag is cleared before marking
the source buffer done for dequeueing. Userspace can set it before queueing a
frame to force an IDR frame, to implement VFU (Video Fast Update).

Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
---
 drivers/media/platform/coda.c | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/drivers/media/platform/coda.c b/drivers/media/platform/coda.c
index 11e059d..cf75112 100644
--- a/drivers/media/platform/coda.c
+++ b/drivers/media/platform/coda.c
@@ -1264,22 +1264,22 @@ static void coda_prepare_encode(struct coda_ctx *ctx)
 	 * frame as IDR. This is a problem for some decoders that can't
 	 * recover when a frame is lost.
 	 */
-	if (src_buf->v4l2_buf.sequence % ctx->params.gop_size) {
-		src_buf->v4l2_buf.flags |= V4L2_BUF_FLAG_PFRAME;
-		src_buf->v4l2_buf.flags &= ~V4L2_BUF_FLAG_KEYFRAME;
-	} else {
+	if ((src_buf->v4l2_buf.sequence % ctx->params.gop_size) == 0)
 		src_buf->v4l2_buf.flags |= V4L2_BUF_FLAG_KEYFRAME;
+	if (src_buf->v4l2_buf.flags & V4L2_BUF_FLAG_KEYFRAME)
 		src_buf->v4l2_buf.flags &= ~V4L2_BUF_FLAG_PFRAME;
-	}
+	else
+		src_buf->v4l2_buf.flags |= V4L2_BUF_FLAG_PFRAME;
 
 	if (dev->devtype->product == CODA_960)
 		coda_set_gdi_regs(ctx);
 
 	/*
-	 * Copy headers at the beginning of the first frame for H.264 only.
-	 * In MPEG4 they are already copied by the coda.
+	 * Copy headers in front of the first frame and forced I frames for
+	 * H.264 only. In MPEG4 they are already copied by the CODA.
 	 */
-	if (src_buf->v4l2_buf.sequence == 0) {
+	if (src_buf->v4l2_buf.sequence == 0 ||
+	    src_buf->v4l2_buf.flags & V4L2_BUF_FLAG_KEYFRAME) {
 		pic_stream_buffer_addr =
 			vb2_dma_contig_plane_dma_addr(dst_buf, 0) +
 			ctx->vpu_header_size[0] +
@@ -3245,6 +3245,8 @@ static void coda_finish_encode(struct coda_ctx *ctx)
 		src_buf->v4l2_buf.flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
 	dst_buf->v4l2_buf.timecode = src_buf->v4l2_buf.timecode;
 
+	/* Clear keyframe flag so userspace can misuse it to force an IDR frame */
+	src_buf->v4l2_buf.flags &= ~V4L2_BUF_FLAG_KEYFRAME;
 	v4l2_m2m_buf_done(src_buf, VB2_BUF_STATE_DONE);
 
 	dst_buf = v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx);
-- 
2.0.0.rc2


  parent reply	other threads:[~2014-06-13 16:09 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-13 16:08 [PATCH 00/30] Initial CODA960 (i.MX6 VPU) support Philipp Zabel
2014-06-13 16:08 ` [PATCH 01/30] [media] coda: fix decoder I/P/B frame detection Philipp Zabel
2014-06-16  7:54   ` Hans Verkuil
2014-06-13 16:08 ` [PATCH 02/30] [media] coda: fix readback of CODA_RET_DEC_SEQ_FRAME_NEED Philipp Zabel
2014-06-13 16:08 ` [PATCH 03/30] [media] coda: fix h.264 quantization parameter range Philipp Zabel
2014-06-13 16:08 ` [PATCH 04/30] [media] coda: fix internal framebuffer allocation size Philipp Zabel
2014-06-13 16:08 ` [PATCH 05/30] [media] coda: simplify IRAM setup Philipp Zabel
2014-06-13 16:08 ` [PATCH 06/30] [media] coda: Add encoder/decoder support for CODA960 Philipp Zabel
2014-06-24 15:53   ` Nicolas Dufresne
2014-07-01 17:52     ` Philipp Zabel
2014-06-13 16:08 ` [PATCH 07/30] [media] coda: add selection API support for h.264 decoder Philipp Zabel
2014-06-16  8:05   ` Hans Verkuil
2014-06-13 16:08 ` [PATCH 08/30] [media] coda: add support for frame size enumeration Philipp Zabel
2014-06-16  8:08   ` Hans Verkuil
2014-06-24 15:13     ` Philipp Zabel
2014-06-13 16:08 ` [PATCH 09/30] [media] coda: add workqueue to serialize hardware commands Philipp Zabel
2014-06-13 16:08 ` [PATCH 10/30] [media] coda: Use mem-to-mem ioctl helpers Philipp Zabel
2014-06-13 16:08 ` [PATCH 11/30] [media] coda: use ctx->fh.m2m_ctx instead of ctx->m2m_ctx Philipp Zabel
2014-06-13 16:08 ` [PATCH 12/30] [media] coda: Add runtime pm support Philipp Zabel
2014-06-13 16:56   ` Sylwester Nawrocki
2014-06-13 21:07     ` Philipp Zabel
2014-06-13 16:08 ` [PATCH 13/30] [media] coda: split firmware version check out of coda_hw_init Philipp Zabel
2014-06-13 16:08 ` [PATCH 14/30] [media] coda: select GENERIC_ALLOCATOR Philipp Zabel
2014-06-13 16:08 ` [PATCH 15/30] [media] coda: add h.264 min/max qp controls Philipp Zabel
2014-06-13 16:08 ` [PATCH 16/30] [media] coda: add h.264 deblocking filter controls Philipp Zabel
2014-06-13 16:08 ` [PATCH 17/30] [media] coda: add cyclic intra refresh control Philipp Zabel
2014-06-13 16:08 ` Philipp Zabel [this message]
2014-06-16  8:24   ` [PATCH 18/30] [media] coda: let userspace force IDR frames by enabling the keyframe flag in the source buffer Hans Verkuil
2014-06-24 15:16     ` Philipp Zabel
2014-06-13 16:08 ` [PATCH 19/30] [media] v4l2-mem2mem: export v4l2_m2m_try_schedule Philipp Zabel
2014-06-13 16:08 ` [PATCH 20/30] [media] coda: try to schedule a decode run after a stop command Philipp Zabel
2014-06-13 16:08 ` [PATCH 21/30] [media] coda: add decoder timestamp queue Philipp Zabel
2014-06-13 16:08 ` [PATCH 22/30] [media] coda: alert userspace about macroblock errors Philipp Zabel
2014-06-13 16:08 ` [PATCH 23/30] [media] coda: add sequence counter offset Philipp Zabel
2014-06-13 16:08 ` [PATCH 24/30] [media] coda: use prescan_failed variable to stop stream after a timeout Philipp Zabel
2014-06-13 16:08 ` [PATCH 25/30] [media] coda: add reset control support Philipp Zabel
2014-06-13 16:08 ` [PATCH 26/30] [media] coda: add bytesperline to queue data Philipp Zabel
2014-06-13 16:08 ` [PATCH 27/30] [media] coda: allow odd width, but still round up bytesperline Philipp Zabel
2014-06-13 16:08 ` [PATCH 28/30] [media] coda: round up internal frames to multiples of macroblock size for h.264 Philipp Zabel
2014-06-13 16:08 ` [PATCH 29/30] [media] coda: increase frame stride to 16 " Philipp Zabel
2014-06-13 16:08 ` [PATCH 30/30] [media] coda: export auxiliary buffers via debugfs Philipp Zabel
2014-06-16  8:35 ` [PATCH 00/30] Initial CODA960 (i.MX6 VPU) support Hans Verkuil
2014-06-24 15:07   ` Philipp Zabel
2014-06-27  9:14     ` Hans Verkuil

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=1402675736-15379-19-git-send-email-p.zabel@pengutronix.de \
    --to=p.zabel@pengutronix.de \
    --cc=fabio.estevam@freescale.com \
    --cc=k.debski@samsung.com \
    --cc=kernel@pengutronix.de \
    --cc=linux-media@vger.kernel.org \
    --cc=m.chehab@samsung.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.