Skip to content

Commit

Permalink
[media] coda: copy headers in front of every I-frame
Browse files Browse the repository at this point in the history
That way we don't have to rely on userspace to inject the headers on IDR
requests, and there is always enough information to start decoding at an
I-frame.

Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
  • Loading branch information
Philipp Zabel authored and Mauro Carvalho Chehab committed Jun 7, 2017
1 parent 7e68c53 commit f903ebf
Showing 1 changed file with 5 additions and 4 deletions.
9 changes: 5 additions & 4 deletions drivers/media/platform/coda/coda-bit.c
Original file line number Diff line number Diff line change
Expand Up @@ -1270,10 +1270,10 @@ static int coda_prepare_encode(struct coda_ctx *ctx)
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->sequence == 0) {
if (src_buf->sequence == 0 || force_ipicture) {
pic_stream_buffer_addr =
vb2_dma_contig_plane_dma_addr(&dst_buf->vb2_buf, 0) +
ctx->vpu_header_size[0] +
Expand Down Expand Up @@ -1386,7 +1386,8 @@ static void coda_finish_encode(struct coda_ctx *ctx)
wr_ptr = coda_read(dev, CODA_REG_BIT_WR_PTR(ctx->reg_idx));

/* Calculate bytesused field */
if (dst_buf->sequence == 0) {
if (dst_buf->sequence == 0 ||
src_buf->flags & V4L2_BUF_FLAG_KEYFRAME) {
vb2_set_plane_payload(&dst_buf->vb2_buf, 0, wr_ptr - start_ptr +
ctx->vpu_header_size[0] +
ctx->vpu_header_size[1] +
Expand Down

0 comments on commit f903ebf

Please sign in to comment.