if (!dst_buf)
                goto getbuf_fail;
 
-       v4l2_m2m_src_buf_remove(ctx->fh.m2m_ctx);
-       v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx);
-
        v4l2_m2m_buf_copy_metadata(src_buf, dst_buf, true);
 
        mtk_jpegenc_set_hw_param(ctx, hw_id, src_buf, dst_buf);
                goto enc_end;
        }
 
+       v4l2_m2m_src_buf_remove(ctx->fh.m2m_ctx);
+       v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx);
+
        schedule_delayed_work(&comp_jpeg[hw_id]->job_timeout_work,
                              msecs_to_jiffies(MTK_JPEG_HW_TIMEOUT_MSEC));
 
        if (!dst_buf)
                goto getbuf_fail;
 
-       v4l2_m2m_src_buf_remove(ctx->fh.m2m_ctx);
-       v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx);
-
        v4l2_m2m_buf_copy_metadata(src_buf, dst_buf, true);
        jpeg_src_buf = mtk_jpeg_vb2_to_srcbuf(&src_buf->vb2_buf);
        jpeg_dst_buf = mtk_jpeg_vb2_to_srcbuf(&dst_buf->vb2_buf);
                                             &jpeg_src_buf->dec_param)) {
                mtk_jpeg_queue_src_chg_event(ctx);
                ctx->state = MTK_JPEG_SOURCE_CHANGE;
-               goto dec_end;
+               goto getbuf_fail;
        }
 
        jpeg_src_buf->curr_ctx = ctx;
                goto clk_end;
        }
 
+       v4l2_m2m_src_buf_remove(ctx->fh.m2m_ctx);
+       v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx);
+
        schedule_delayed_work(&comp_jpeg[hw_id]->job_timeout_work,
                              msecs_to_jiffies(MTK_JPEG_HW_TIMEOUT_MSEC));
 
 
        mtk_jpegenc_put_buf(jpeg);
        pm_runtime_put(ctx->jpeg->dev);
        clk_disable_unprepare(jpeg->venc_clk.clks->clk);
-       if (!list_empty(&ctx->fh.m2m_ctx->out_q_ctx.rdy_queue) ||
-           !list_empty(&ctx->fh.m2m_ctx->cap_q_ctx.rdy_queue)) {
-               queue_work(master_jpeg->workqueue, &ctx->jpeg_work);
-       }
 
        jpeg->hw_state = MTK_JPEG_HW_IDLE;
        wake_up(&master_jpeg->enc_hw_wq);