There is no need to queue an empty buffer for signaling a last frame,
because all frames are separate from each other in JPEG.

Reviewed-by: Tomasz Figa <tf...@chromium.org>
Signed-off-by: Xia Jiang <xia.ji...@mediatek.com>
---
v11: no changes
---
 .../media/platform/mtk-jpeg/mtk_jpeg_core.c   | 46 +------------------
 1 file changed, 2 insertions(+), 44 deletions(-)

diff --git a/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c 
b/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c
index 9baeeacb4452..ffb486e537b6 100644
--- a/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c
+++ b/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c
@@ -55,15 +55,9 @@ static struct mtk_jpeg_fmt mtk_jpeg_formats[] = {
 
 #define MTK_JPEG_NUM_FORMATS ARRAY_SIZE(mtk_jpeg_formats)
 
-enum {
-       MTK_JPEG_BUF_FLAGS_INIT                 = 0,
-       MTK_JPEG_BUF_FLAGS_LAST_FRAME           = 1,
-};
-
 struct mtk_jpeg_src_buf {
        struct vb2_v4l2_buffer b;
        struct list_head list;
-       int flags;
        struct mtk_jpeg_dec_param dec_param;
 };
 
@@ -501,31 +495,6 @@ static int mtk_jpeg_s_selection(struct file *file, void 
*priv,
        return 0;
 }
 
-static int mtk_jpeg_qbuf(struct file *file, void *priv, struct v4l2_buffer 
*buf)
-{
-       struct v4l2_fh *fh = file->private_data;
-       struct mtk_jpeg_ctx *ctx = mtk_jpeg_fh_to_ctx(priv);
-       struct vb2_queue *vq;
-       struct vb2_buffer *vb;
-       struct mtk_jpeg_src_buf *jpeg_src_buf;
-
-       if (buf->type != V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE)
-               goto end;
-
-       vq = v4l2_m2m_get_vq(fh->m2m_ctx, buf->type);
-       if (buf->index >= vq->num_buffers) {
-               dev_err(ctx->jpeg->dev, "buffer index out of range\n");
-               return -EINVAL;
-       }
-
-       vb = vb2_get_buffer(vq, buf->index);
-       jpeg_src_buf = mtk_jpeg_vb2_to_srcbuf(vb);
-       jpeg_src_buf->flags = (buf->m.planes[0].bytesused == 0) ?
-               MTK_JPEG_BUF_FLAGS_LAST_FRAME : MTK_JPEG_BUF_FLAGS_INIT;
-end:
-       return v4l2_m2m_qbuf(file, fh->m2m_ctx, buf);
-}
-
 static const struct v4l2_ioctl_ops mtk_jpeg_ioctl_ops = {
        .vidioc_querycap                = mtk_jpeg_querycap,
        .vidioc_enum_fmt_vid_cap        = mtk_jpeg_enum_fmt_vid_cap,
@@ -536,7 +505,7 @@ static const struct v4l2_ioctl_ops mtk_jpeg_ioctl_ops = {
        .vidioc_g_fmt_vid_out_mplane    = mtk_jpeg_g_fmt_vid_mplane,
        .vidioc_s_fmt_vid_cap_mplane    = mtk_jpeg_s_fmt_vid_cap_mplane,
        .vidioc_s_fmt_vid_out_mplane    = mtk_jpeg_s_fmt_vid_out_mplane,
-       .vidioc_qbuf                    = mtk_jpeg_qbuf,
+       .vidioc_qbuf                    = v4l2_m2m_ioctl_qbuf,
        .vidioc_subscribe_event         = mtk_jpeg_subscribe_event,
        .vidioc_g_selection             = mtk_jpeg_g_selection,
        .vidioc_s_selection             = mtk_jpeg_s_selection,
@@ -676,10 +645,6 @@ static void mtk_jpeg_buf_queue(struct vb2_buffer *vb)
        param = &jpeg_src_buf->dec_param;
        memset(param, 0, sizeof(*param));
 
-       if (jpeg_src_buf->flags & MTK_JPEG_BUF_FLAGS_LAST_FRAME) {
-               v4l2_dbg(1, debug, &jpeg->v4l2_dev, "Got eos\n");
-               goto end;
-       }
        header_valid = mtk_jpeg_parse(param, (u8 *)vb2_plane_vaddr(vb, 0),
                                      vb2_get_plane_payload(vb, 0));
        if (!header_valid) {
@@ -792,19 +757,12 @@ static void mtk_jpeg_device_run(void *priv)
        struct mtk_jpeg_src_buf *jpeg_src_buf;
        struct mtk_jpeg_bs bs;
        struct mtk_jpeg_fb fb;
-       int i, ret;
+       int ret;
 
        src_buf = v4l2_m2m_next_src_buf(ctx->fh.m2m_ctx);
        dst_buf = v4l2_m2m_next_dst_buf(ctx->fh.m2m_ctx);
        jpeg_src_buf = mtk_jpeg_vb2_to_srcbuf(&src_buf->vb2_buf);
 
-       if (jpeg_src_buf->flags & MTK_JPEG_BUF_FLAGS_LAST_FRAME) {
-               for (i = 0; i < dst_buf->vb2_buf.num_planes; i++)
-                       vb2_set_plane_payload(&dst_buf->vb2_buf, i, 0);
-               buf_state = VB2_BUF_STATE_DONE;
-               goto dec_end;
-       }
-
        if (mtk_jpeg_check_resolution_change(ctx, &jpeg_src_buf->dec_param)) {
                mtk_jpeg_queue_src_chg_event(ctx);
                ctx->state = MTK_JPEG_SOURCE_CHANGE;
-- 
2.18.0

Reply via email to