[v3,7/7] media: mediatek: vcodec: remove media request checking
Commit Message
If the media request of each source buffer is NULL, need to
set the buffer status to error, then schedule again in case
of access NULL pointer. No need to check again after media
request pointer is non zero.
Signed-off-by: Yunfei Dong <yunfei.dong@mediatek.com>
---
.../vcodec/decoder/mtk_vcodec_dec_stateless.c | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
@@ -359,10 +359,14 @@ static void mtk_vdec_worker(struct work_struct *work)
ctx->id, bs_src->va, &bs_src->dma_addr, bs_src->size, vb2_src);
/* Apply request controls. */
src_buf_req = vb2_src->req_obj.req;
- if (src_buf_req)
+ if (src_buf_req) {
v4l2_ctrl_request_setup(src_buf_req, &ctx->ctrl_hdl);
- else
+ } else {
mtk_v4l2_vdec_err(ctx, "vb2 buffer media request is NULL");
+ v4l2_m2m_buf_done(vb2_v4l2_src, VB2_BUF_STATE_ERROR);
+ v4l2_m2m_job_finish(dev->m2m_dev_dec, ctx->m2m_ctx);
+ return;
+ }
ret = vdec_if_decode(ctx, bs_src, NULL, &res_chg);
if (ret && ret != -EAGAIN) {
@@ -380,8 +384,7 @@ static void mtk_vdec_worker(struct work_struct *work)
state = ret ? VB2_BUF_STATE_ERROR : VB2_BUF_STATE_DONE;
if (!IS_VDEC_LAT_ARCH(dev->vdec_pdata->hw_arch) ||
ctx->current_codec == V4L2_PIX_FMT_VP8_FRAME) {
- if (src_buf_req)
- v4l2_ctrl_request_complete(src_buf_req, &ctx->ctrl_hdl);
+ v4l2_ctrl_request_complete(src_buf_req, &ctx->ctrl_hdl);
vb2_v4l2_dst = v4l2_m2m_dst_buf_remove(ctx->m2m_ctx);
v4l2_m2m_buf_done(vb2_v4l2_dst, state);
v4l2_m2m_buf_done(vb2_v4l2_src, state);
@@ -398,8 +401,7 @@ static void mtk_vdec_worker(struct work_struct *work)
*/
ctx->last_vb2_v4l2_src = (ret != -EAGAIN) ? NULL : vb2_v4l2_src;
if (ret && ret != -EAGAIN) {
- if (src_buf_req)
- v4l2_ctrl_request_complete(src_buf_req, &ctx->ctrl_hdl);
+ v4l2_ctrl_request_complete(src_buf_req, &ctx->ctrl_hdl);
v4l2_m2m_buf_done(vb2_v4l2_src, state);
}