提交 960badda 编写于 作者: Y Yunfei Dong 提交者: Mauro Carvalho Chehab

media: mediatek: vcodec: change lat thread decode error condition

If lat thread can't get lat buffer, it should be that current instance
don't be schedulded, the driver can't free the src buffer directly.

Fixes: 7b182b8d ("media: mediatek: vcodec: Refactor get and put capture buffer flow")
Signed-off-by: NYunfei Dong <yunfei.dong@mediatek.com>
Reviewed-by: NAngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: NHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: NMauro Carvalho Chehab <mchehab@kernel.org>
上级 2e0ef56d
...@@ -258,8 +258,10 @@ static void mtk_vdec_worker(struct work_struct *work) ...@@ -258,8 +258,10 @@ static void mtk_vdec_worker(struct work_struct *work)
if (src_buf_req) if (src_buf_req)
v4l2_ctrl_request_complete(src_buf_req, &ctx->ctrl_hdl); v4l2_ctrl_request_complete(src_buf_req, &ctx->ctrl_hdl);
} else { } else {
if (ret != -EAGAIN) {
v4l2_m2m_src_buf_remove(ctx->m2m_ctx); v4l2_m2m_src_buf_remove(ctx->m2m_ctx);
v4l2_m2m_buf_done(vb2_v4l2_src, state); v4l2_m2m_buf_done(vb2_v4l2_src, state);
}
v4l2_m2m_job_finish(dev->m2m_dev_dec, ctx->m2m_ctx); v4l2_m2m_job_finish(dev->m2m_dev_dec, ctx->m2m_ctx);
} }
} }
......
...@@ -597,7 +597,7 @@ static int vdec_h264_slice_lat_decode(void *h_vdec, struct mtk_vcodec_mem *bs, ...@@ -597,7 +597,7 @@ static int vdec_h264_slice_lat_decode(void *h_vdec, struct mtk_vcodec_mem *bs,
lat_buf = vdec_msg_queue_dqbuf(&inst->ctx->msg_queue.lat_ctx); lat_buf = vdec_msg_queue_dqbuf(&inst->ctx->msg_queue.lat_ctx);
if (!lat_buf) { if (!lat_buf) {
mtk_vcodec_err(inst, "failed to get lat buffer"); mtk_vcodec_err(inst, "failed to get lat buffer");
return -EINVAL; return -EAGAIN;
} }
share_info = lat_buf->private_data; share_info = lat_buf->private_data;
src_buf_info = container_of(bs, struct mtk_video_dec_buf, bs_buffer); src_buf_info = container_of(bs, struct mtk_video_dec_buf, bs_buffer);
......
...@@ -2070,7 +2070,7 @@ static int vdec_vp9_slice_lat_decode(void *h_vdec, struct mtk_vcodec_mem *bs, ...@@ -2070,7 +2070,7 @@ static int vdec_vp9_slice_lat_decode(void *h_vdec, struct mtk_vcodec_mem *bs,
lat_buf = vdec_msg_queue_dqbuf(&instance->ctx->msg_queue.lat_ctx); lat_buf = vdec_msg_queue_dqbuf(&instance->ctx->msg_queue.lat_ctx);
if (!lat_buf) { if (!lat_buf) {
mtk_vcodec_err(instance, "Failed to get VP9 lat buf\n"); mtk_vcodec_err(instance, "Failed to get VP9 lat buf\n");
return -EBUSY; return -EAGAIN;
} }
pfc = (struct vdec_vp9_slice_pfc *)lat_buf->private_data; pfc = (struct vdec_vp9_slice_pfc *)lat_buf->private_data;
if (!pfc) { if (!pfc) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册