]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
media: imx-jpeg: Drop the first error frames
authorMing Qian <ming.qian@oss.nxp.com>
Mon, 21 Apr 2025 07:06:12 +0000 (15:06 +0800)
committerHans Verkuil <hverkuil@xs4all.nl>
Thu, 24 Apr 2025 13:21:34 +0000 (15:21 +0200)
When an output buffer contains error frame header,
v4l2_jpeg_parse_header() will return error, then driver will mark this
buffer and a capture buffer done with error flag in device_run().

But if the error occurs in the first frames, before setup the capture
queue, there is no chance to schedule device_run(), and there may be no
capture to mark error.

So we need to drop this buffer with error flag, and make the decoding
can continue.

Fixes: 2db16c6ed72c ("media: imx-jpeg: Add V4L2 driver for i.MX8 JPEG Encoder/Decoder")
Cc: stable@vger.kernel.org
Signed-off-by: Ming Qian <ming.qian@oss.nxp.com>
Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Signed-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c

index 1221b309a91639b7baafe79fd27706e65aca7aba..840dd62c25319744dc7f13b0237bd5115d3945cd 100644 (file)
@@ -1918,9 +1918,19 @@ static void mxc_jpeg_buf_queue(struct vb2_buffer *vb)
        jpeg_src_buf = vb2_to_mxc_buf(vb);
        jpeg_src_buf->jpeg_parse_error = false;
        ret = mxc_jpeg_parse(ctx, vb);
-       if (ret)
+       if (ret) {
                jpeg_src_buf->jpeg_parse_error = true;
 
+               /*
+                * if the capture queue is not setup, the device_run() won't be scheduled,
+                * need to drop the error buffer, so that the decoding can continue
+                */
+               if (!vb2_is_streaming(v4l2_m2m_get_dst_vq(ctx->fh.m2m_ctx))) {
+                       v4l2_m2m_buf_done(vbuf, VB2_BUF_STATE_ERROR);
+                       return;
+               }
+       }
+
 end:
        v4l2_m2m_buf_queue(ctx->fh.m2m_ctx, vbuf);
 }