mirror of
https://github.com/torvalds/linux
synced 2024-10-17 16:58:15 +00:00
media: mtk-jpeg: Fixes jpeg enc&dec worker sw flow
1. Move removing buffer after sw setting and before hw setting in enc&dec worker to prevents the operation of removing the buffer twice if the sw setting fails. 2. Remove the redundant operation of queue work in the jpegenc irq handler because the jpegenc worker has called v4l2_m2m_job_finish to do it. Fixes:5fb1c2361e
("mtk-jpegenc: add jpeg encode worker interface") Fixes:dedc215003
("media: mtk-jpegdec: add jpeg decode worker interface") Signed-off-by: kyrie wu <kyrie.wu@mediatek.com> Signed-off-by: irui wang <irui.wang@mediatek.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
This commit is contained in:
parent
9ceca28e4f
commit
86379bd9d3
|
@ -1025,9 +1025,6 @@ static void mtk_jpegenc_worker(struct work_struct *work)
|
|||
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);
|
||||
|
@ -1045,6 +1042,9 @@ static void mtk_jpegenc_worker(struct work_struct *work)
|
|||
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));
|
||||
|
||||
|
@ -1220,9 +1220,6 @@ static void mtk_jpegdec_worker(struct work_struct *work)
|
|||
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);
|
||||
|
@ -1231,7 +1228,7 @@ static void mtk_jpegdec_worker(struct work_struct *work)
|
|||
&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;
|
||||
|
@ -1254,6 +1251,9 @@ static void mtk_jpegdec_worker(struct work_struct *work)
|
|||
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));
|
||||
|
||||
|
|
|
@ -286,10 +286,6 @@ static irqreturn_t mtk_jpegenc_hw_irq_handler(int irq, void *priv)
|
|||
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);
|
||||
|
|
Loading…
Reference in a new issue