media: coda: increment sequence offset for the last returned frame
authorPhilipp Zabel <p.zabel@pengutronix.de>
Tue, 18 Jun 2019 16:45:22 +0000 (12:45 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 31 Jul 2019 05:28:28 +0000 (07:28 +0200)
[ Upstream commit b3b7d96817cdb8b6fc353867705275dce8f41ccc ]

If no more frames are decoded in bitstream end mode, and a previously
decoded frame has been returned, the firmware still increments the frame
number. To avoid a sequence number mismatch after decoder restart,
increment the sequence_offset correction parameter.

Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/media/platform/coda/coda-bit.c

index 43eb5d51cf23baf981c7806df4adf1d11c62565e..f0f2175265a91d3c010753dfa5ba856b7ec57e9e 100644 (file)
@@ -2091,6 +2091,9 @@ static void coda_finish_decode(struct coda_ctx *ctx)
                else if (ctx->display_idx < 0)
                        ctx->hold = true;
        } else if (decoded_idx == -2) {
+               if (ctx->display_idx >= 0 &&
+                   ctx->display_idx < ctx->num_internal_frames)
+                       ctx->sequence_offset++;
                /* no frame was decoded, we still return remaining buffers */
        } else if (decoded_idx < 0 || decoded_idx >= ctx->num_internal_frames) {
                v4l2_err(&dev->v4l2_dev,