Message ID | 20220629195624.45745-2-ezequiel@vanguardiasur.com.ar (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | hantro: Remove incorrect HEVC SPS validation | expand |
Hey Ezequiel, On 29.06.2022 16:56, Ezequiel Garcia wrote: >Currently, the driver tries to validat the HEVC SPS s/validat/validate/ >against the CAPTURE queue format (i.e. the decoded format). >This is not correct, because typically the SPS control is set >before the CAPTURE queue is negotiated. > >In addition to this, a format validation in hantro_hevc_dec_prepare_run() >is also suboptimal, because hantro_hevc_dec_prepare_run() runs in the context >of v4l2_m2m_ops.device_run, as part of a decoding job. > >Format and control validations should happen before decoding starts, >in the context of ioctls such as S_CTRL, S_FMT, or STREAMON. > >Remove the validation for now. Couldn't we add a small wrapper around STREAMON to perform that validation? I feel like "remove the validation for now", seems like a vague statement. Greetings, Sebastian > >Fixes: 135ad96cb4d6b ("media: hantro: Be more accurate on pixel formats step_width constraints") >Signed-off-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar> >--- > drivers/staging/media/hantro/hantro_drv.c | 12 ++++----- > drivers/staging/media/hantro/hantro_hevc.c | 30 ---------------------- > drivers/staging/media/hantro/hantro_hw.h | 1 - > 3 files changed, 6 insertions(+), 37 deletions(-) > >diff --git a/drivers/staging/media/hantro/hantro_drv.c b/drivers/staging/media/hantro/hantro_drv.c >index afddf7ac0731..2387ca85ab54 100644 >--- a/drivers/staging/media/hantro/hantro_drv.c >+++ b/drivers/staging/media/hantro/hantro_drv.c >@@ -253,11 +253,6 @@ queue_init(void *priv, struct vb2_queue *src_vq, struct vb2_queue *dst_vq) > > static int hantro_try_ctrl(struct v4l2_ctrl *ctrl) > { >- struct hantro_ctx *ctx; >- >- ctx = container_of(ctrl->handler, >- struct hantro_ctx, ctrl_handler); >- > if (ctrl->id == V4L2_CID_STATELESS_H264_SPS) { > const struct v4l2_ctrl_h264_sps *sps = ctrl->p_new.p_h264_sps; > >@@ -273,7 +268,12 @@ static int hantro_try_ctrl(struct v4l2_ctrl *ctrl) > } else if (ctrl->id == V4L2_CID_MPEG_VIDEO_HEVC_SPS) { > const struct v4l2_ctrl_hevc_sps *sps = ctrl->p_new.p_hevc_sps; > >- return hantro_hevc_validate_sps(ctx, sps); >+ if (sps->bit_depth_luma_minus8 != sps->bit_depth_chroma_minus8) >+ /* Luma and chroma bit depth mismatch */ >+ return -EINVAL; >+ if (sps->bit_depth_luma_minus8 != 0) >+ /* Only 8-bit is supported */ >+ return -EINVAL; > } else if (ctrl->id == V4L2_CID_STATELESS_VP9_FRAME) { > const struct v4l2_ctrl_vp9_frame *dec_params = ctrl->p_new.p_vp9_frame; > >diff --git a/drivers/staging/media/hantro/hantro_hevc.c b/drivers/staging/media/hantro/hantro_hevc.c >index bd924896e409..f86c98e19177 100644 >--- a/drivers/staging/media/hantro/hantro_hevc.c >+++ b/drivers/staging/media/hantro/hantro_hevc.c >@@ -154,32 +154,6 @@ static int tile_buffer_reallocate(struct hantro_ctx *ctx) > return -ENOMEM; > } > >-int hantro_hevc_validate_sps(struct hantro_ctx *ctx, const struct v4l2_ctrl_hevc_sps *sps) >-{ >- if (sps->bit_depth_luma_minus8 != sps->bit_depth_chroma_minus8) >- /* Luma and chroma bit depth mismatch */ >- return -EINVAL; >- if (sps->bit_depth_luma_minus8 != 0) >- /* Only 8-bit is supported */ >- return -EINVAL; >- >- /* >- * for tile pixel format check if the width and height match >- * hardware constraints >- */ >- if (ctx->vpu_dst_fmt->fourcc == V4L2_PIX_FMT_NV12_4L4) { >- if (ctx->dst_fmt.width != >- ALIGN(sps->pic_width_in_luma_samples, ctx->vpu_dst_fmt->frmsize.step_width)) >- return -EINVAL; >- >- if (ctx->dst_fmt.height != >- ALIGN(sps->pic_height_in_luma_samples, ctx->vpu_dst_fmt->frmsize.step_height)) >- return -EINVAL; >- } >- >- return 0; >-} >- > int hantro_hevc_dec_prepare_run(struct hantro_ctx *ctx) > { > struct hantro_hevc_dec_hw_ctx *hevc_ctx = &ctx->hevc_dec; >@@ -203,10 +177,6 @@ int hantro_hevc_dec_prepare_run(struct hantro_ctx *ctx) > if (WARN_ON(!ctrls->sps)) > return -EINVAL; > >- ret = hantro_hevc_validate_sps(ctx, ctrls->sps); >- if (ret) >- return ret; >- > ctrls->pps = > hantro_get_ctrl(ctx, V4L2_CID_MPEG_VIDEO_HEVC_PPS); > if (WARN_ON(!ctrls->pps)) >diff --git a/drivers/staging/media/hantro/hantro_hw.h b/drivers/staging/media/hantro/hantro_hw.h >index a2e0f0836281..5edff0f0be20 100644 >--- a/drivers/staging/media/hantro/hantro_hw.h >+++ b/drivers/staging/media/hantro/hantro_hw.h >@@ -359,7 +359,6 @@ int hantro_hevc_dec_prepare_run(struct hantro_ctx *ctx); > void hantro_hevc_ref_init(struct hantro_ctx *ctx); > dma_addr_t hantro_hevc_get_ref_buf(struct hantro_ctx *ctx, int poc); > int hantro_hevc_add_ref_buf(struct hantro_ctx *ctx, int poc, dma_addr_t addr); >-int hantro_hevc_validate_sps(struct hantro_ctx *ctx, const struct v4l2_ctrl_hevc_sps *sps); > > > static inline unsigned short hantro_vp9_num_sbs(unsigned short dimension) >-- >2.31.1 >
On 6/30/22 07:02, Sebastian Fricke wrote: > Hey Ezequiel, > > On 29.06.2022 16:56, Ezequiel Garcia wrote: >> Currently, the driver tries to validat the HEVC SPS > > s/validat/validate/ > >> against the CAPTURE queue format (i.e. the decoded format). >> This is not correct, because typically the SPS control is set >> before the CAPTURE queue is negotiated. >> >> In addition to this, a format validation in hantro_hevc_dec_prepare_run() >> is also suboptimal, because hantro_hevc_dec_prepare_run() runs in the context >> of v4l2_m2m_ops.device_run, as part of a decoding job. >> >> Format and control validations should happen before decoding starts, >> in the context of ioctls such as S_CTRL, S_FMT, or STREAMON. >> >> Remove the validation for now. > > Couldn't we add a small wrapper around STREAMON to perform that > validation? I feel like "remove the validation for now", seems like a > vague statement. I agree. Basically two things happen in this patch: two sanity checks for the SPS control are moved to try_ctrl, and that part looks good. So that can be a separate patch. The second part is the removal of the format+control validation, but it is not clear why removing it altogether is wrong. Shouldn't it still be done somewhere? And if not, why not? Regards, Hans > > Greetings, > Sebastian > >> >> Fixes: 135ad96cb4d6b ("media: hantro: Be more accurate on pixel formats step_width constraints") >> Signed-off-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar> >> --- >> drivers/staging/media/hantro/hantro_drv.c | 12 ++++----- >> drivers/staging/media/hantro/hantro_hevc.c | 30 ---------------------- >> drivers/staging/media/hantro/hantro_hw.h | 1 - >> 3 files changed, 6 insertions(+), 37 deletions(-) >> >> diff --git a/drivers/staging/media/hantro/hantro_drv.c b/drivers/staging/media/hantro/hantro_drv.c >> index afddf7ac0731..2387ca85ab54 100644 >> --- a/drivers/staging/media/hantro/hantro_drv.c >> +++ b/drivers/staging/media/hantro/hantro_drv.c >> @@ -253,11 +253,6 @@ queue_init(void *priv, struct vb2_queue *src_vq, struct vb2_queue *dst_vq) >> >> static int hantro_try_ctrl(struct v4l2_ctrl *ctrl) >> { >> - struct hantro_ctx *ctx; >> - >> - ctx = container_of(ctrl->handler, >> - struct hantro_ctx, ctrl_handler); >> - >> if (ctrl->id == V4L2_CID_STATELESS_H264_SPS) { >> const struct v4l2_ctrl_h264_sps *sps = ctrl->p_new.p_h264_sps; >> >> @@ -273,7 +268,12 @@ static int hantro_try_ctrl(struct v4l2_ctrl *ctrl) >> } else if (ctrl->id == V4L2_CID_MPEG_VIDEO_HEVC_SPS) { >> const struct v4l2_ctrl_hevc_sps *sps = ctrl->p_new.p_hevc_sps; >> >> - return hantro_hevc_validate_sps(ctx, sps); >> + if (sps->bit_depth_luma_minus8 != sps->bit_depth_chroma_minus8) >> + /* Luma and chroma bit depth mismatch */ >> + return -EINVAL; >> + if (sps->bit_depth_luma_minus8 != 0) >> + /* Only 8-bit is supported */ >> + return -EINVAL; >> } else if (ctrl->id == V4L2_CID_STATELESS_VP9_FRAME) { >> const struct v4l2_ctrl_vp9_frame *dec_params = ctrl->p_new.p_vp9_frame; >> >> diff --git a/drivers/staging/media/hantro/hantro_hevc.c b/drivers/staging/media/hantro/hantro_hevc.c >> index bd924896e409..f86c98e19177 100644 >> --- a/drivers/staging/media/hantro/hantro_hevc.c >> +++ b/drivers/staging/media/hantro/hantro_hevc.c >> @@ -154,32 +154,6 @@ static int tile_buffer_reallocate(struct hantro_ctx *ctx) >> return -ENOMEM; >> } >> >> -int hantro_hevc_validate_sps(struct hantro_ctx *ctx, const struct v4l2_ctrl_hevc_sps *sps) >> -{ >> - if (sps->bit_depth_luma_minus8 != sps->bit_depth_chroma_minus8) >> - /* Luma and chroma bit depth mismatch */ >> - return -EINVAL; >> - if (sps->bit_depth_luma_minus8 != 0) >> - /* Only 8-bit is supported */ >> - return -EINVAL; >> - >> - /* >> - * for tile pixel format check if the width and height match >> - * hardware constraints >> - */ >> - if (ctx->vpu_dst_fmt->fourcc == V4L2_PIX_FMT_NV12_4L4) { >> - if (ctx->dst_fmt.width != >> - ALIGN(sps->pic_width_in_luma_samples, ctx->vpu_dst_fmt->frmsize.step_width)) >> - return -EINVAL; >> - >> - if (ctx->dst_fmt.height != >> - ALIGN(sps->pic_height_in_luma_samples, ctx->vpu_dst_fmt->frmsize.step_height)) >> - return -EINVAL; >> - } >> - >> - return 0; >> -} >> - >> int hantro_hevc_dec_prepare_run(struct hantro_ctx *ctx) >> { >> struct hantro_hevc_dec_hw_ctx *hevc_ctx = &ctx->hevc_dec; >> @@ -203,10 +177,6 @@ int hantro_hevc_dec_prepare_run(struct hantro_ctx *ctx) >> if (WARN_ON(!ctrls->sps)) >> return -EINVAL; >> >> - ret = hantro_hevc_validate_sps(ctx, ctrls->sps); >> - if (ret) >> - return ret; >> - >> ctrls->pps = >> hantro_get_ctrl(ctx, V4L2_CID_MPEG_VIDEO_HEVC_PPS); >> if (WARN_ON(!ctrls->pps)) >> diff --git a/drivers/staging/media/hantro/hantro_hw.h b/drivers/staging/media/hantro/hantro_hw.h >> index a2e0f0836281..5edff0f0be20 100644 >> --- a/drivers/staging/media/hantro/hantro_hw.h >> +++ b/drivers/staging/media/hantro/hantro_hw.h >> @@ -359,7 +359,6 @@ int hantro_hevc_dec_prepare_run(struct hantro_ctx *ctx); >> void hantro_hevc_ref_init(struct hantro_ctx *ctx); >> dma_addr_t hantro_hevc_get_ref_buf(struct hantro_ctx *ctx, int poc); >> int hantro_hevc_add_ref_buf(struct hantro_ctx *ctx, int poc, dma_addr_t addr); >> -int hantro_hevc_validate_sps(struct hantro_ctx *ctx, const struct v4l2_ctrl_hevc_sps *sps); >> >> >> static inline unsigned short hantro_vp9_num_sbs(unsigned short dimension) >> -- >> 2.31.1 >>
Hi Hans, On Fri, Jul 08, 2022 at 10:42:43AM +0200, Hans Verkuil wrote: > > > On 6/30/22 07:02, Sebastian Fricke wrote: > > Hey Ezequiel, > > > > On 29.06.2022 16:56, Ezequiel Garcia wrote: > >> Currently, the driver tries to validat the HEVC SPS > > > > s/validat/validate/ > > > >> against the CAPTURE queue format (i.e. the decoded format). > >> This is not correct, because typically the SPS control is set > >> before the CAPTURE queue is negotiated. > >> > >> In addition to this, a format validation in hantro_hevc_dec_prepare_run() > >> is also suboptimal, because hantro_hevc_dec_prepare_run() runs in the context > >> of v4l2_m2m_ops.device_run, as part of a decoding job. > >> > >> Format and control validations should happen before decoding starts, > >> in the context of ioctls such as S_CTRL, S_FMT, or STREAMON. > >> > >> Remove the validation for now. > > > > Couldn't we add a small wrapper around STREAMON to perform that > > validation? I feel like "remove the validation for now", seems like a > > vague statement. > > I agree. Basically two things happen in this patch: two sanity checks > for the SPS control are moved to try_ctrl, and that part looks good. > > So that can be a separate patch. > > The second part is the removal of the format+control validation, but it > is not clear why removing it altogether is wrong. Shouldn't it still be > done somewhere? And if not, why not? > Sorry for the delayed reply. After giving this format+control validation more thought, I believe the V4L2 API provides a natural way of handling. When the format is negotiated in TRY_FMT, the control needs to be used to offer a valid resolution. The driver is capable of negotiating the resolution of the stream using the control information, instead of failing. I'll send a v2 with a new proposal. Thanks, Ezequiel > Regards, > > Hans > > > > > Greetings, > > Sebastian > > > >> > >> Fixes: 135ad96cb4d6b ("media: hantro: Be more accurate on pixel formats step_width constraints") > >> Signed-off-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar> > >> --- > >> drivers/staging/media/hantro/hantro_drv.c | 12 ++++----- > >> drivers/staging/media/hantro/hantro_hevc.c | 30 ---------------------- > >> drivers/staging/media/hantro/hantro_hw.h | 1 - > >> 3 files changed, 6 insertions(+), 37 deletions(-) > >> > >> diff --git a/drivers/staging/media/hantro/hantro_drv.c b/drivers/staging/media/hantro/hantro_drv.c > >> index afddf7ac0731..2387ca85ab54 100644 > >> --- a/drivers/staging/media/hantro/hantro_drv.c > >> +++ b/drivers/staging/media/hantro/hantro_drv.c > >> @@ -253,11 +253,6 @@ queue_init(void *priv, struct vb2_queue *src_vq, struct vb2_queue *dst_vq) > >> > >> static int hantro_try_ctrl(struct v4l2_ctrl *ctrl) > >> { > >> - struct hantro_ctx *ctx; > >> - > >> - ctx = container_of(ctrl->handler, > >> - struct hantro_ctx, ctrl_handler); > >> - > >> if (ctrl->id == V4L2_CID_STATELESS_H264_SPS) { > >> const struct v4l2_ctrl_h264_sps *sps = ctrl->p_new.p_h264_sps; > >> > >> @@ -273,7 +268,12 @@ static int hantro_try_ctrl(struct v4l2_ctrl *ctrl) > >> } else if (ctrl->id == V4L2_CID_MPEG_VIDEO_HEVC_SPS) { > >> const struct v4l2_ctrl_hevc_sps *sps = ctrl->p_new.p_hevc_sps; > >> > >> - return hantro_hevc_validate_sps(ctx, sps); > >> + if (sps->bit_depth_luma_minus8 != sps->bit_depth_chroma_minus8) > >> + /* Luma and chroma bit depth mismatch */ > >> + return -EINVAL; > >> + if (sps->bit_depth_luma_minus8 != 0) > >> + /* Only 8-bit is supported */ > >> + return -EINVAL; > >> } else if (ctrl->id == V4L2_CID_STATELESS_VP9_FRAME) { > >> const struct v4l2_ctrl_vp9_frame *dec_params = ctrl->p_new.p_vp9_frame; > >> > >> diff --git a/drivers/staging/media/hantro/hantro_hevc.c b/drivers/staging/media/hantro/hantro_hevc.c > >> index bd924896e409..f86c98e19177 100644 > >> --- a/drivers/staging/media/hantro/hantro_hevc.c > >> +++ b/drivers/staging/media/hantro/hantro_hevc.c > >> @@ -154,32 +154,6 @@ static int tile_buffer_reallocate(struct hantro_ctx *ctx) > >> return -ENOMEM; > >> } > >> > >> -int hantro_hevc_validate_sps(struct hantro_ctx *ctx, const struct v4l2_ctrl_hevc_sps *sps) > >> -{ > >> - if (sps->bit_depth_luma_minus8 != sps->bit_depth_chroma_minus8) > >> - /* Luma and chroma bit depth mismatch */ > >> - return -EINVAL; > >> - if (sps->bit_depth_luma_minus8 != 0) > >> - /* Only 8-bit is supported */ > >> - return -EINVAL; > >> - > >> - /* > >> - * for tile pixel format check if the width and height match > >> - * hardware constraints > >> - */ > >> - if (ctx->vpu_dst_fmt->fourcc == V4L2_PIX_FMT_NV12_4L4) { > >> - if (ctx->dst_fmt.width != > >> - ALIGN(sps->pic_width_in_luma_samples, ctx->vpu_dst_fmt->frmsize.step_width)) > >> - return -EINVAL; > >> - > >> - if (ctx->dst_fmt.height != > >> - ALIGN(sps->pic_height_in_luma_samples, ctx->vpu_dst_fmt->frmsize.step_height)) > >> - return -EINVAL; > >> - } > >> - > >> - return 0; > >> -} > >> - > >> int hantro_hevc_dec_prepare_run(struct hantro_ctx *ctx) > >> { > >> struct hantro_hevc_dec_hw_ctx *hevc_ctx = &ctx->hevc_dec; > >> @@ -203,10 +177,6 @@ int hantro_hevc_dec_prepare_run(struct hantro_ctx *ctx) > >> if (WARN_ON(!ctrls->sps)) > >> return -EINVAL; > >> > >> - ret = hantro_hevc_validate_sps(ctx, ctrls->sps); > >> - if (ret) > >> - return ret; > >> - > >> ctrls->pps = > >> hantro_get_ctrl(ctx, V4L2_CID_MPEG_VIDEO_HEVC_PPS); > >> if (WARN_ON(!ctrls->pps)) > >> diff --git a/drivers/staging/media/hantro/hantro_hw.h b/drivers/staging/media/hantro/hantro_hw.h > >> index a2e0f0836281..5edff0f0be20 100644 > >> --- a/drivers/staging/media/hantro/hantro_hw.h > >> +++ b/drivers/staging/media/hantro/hantro_hw.h > >> @@ -359,7 +359,6 @@ int hantro_hevc_dec_prepare_run(struct hantro_ctx *ctx); > >> void hantro_hevc_ref_init(struct hantro_ctx *ctx); > >> dma_addr_t hantro_hevc_get_ref_buf(struct hantro_ctx *ctx, int poc); > >> int hantro_hevc_add_ref_buf(struct hantro_ctx *ctx, int poc, dma_addr_t addr); > >> -int hantro_hevc_validate_sps(struct hantro_ctx *ctx, const struct v4l2_ctrl_hevc_sps *sps); > >> > >> > >> static inline unsigned short hantro_vp9_num_sbs(unsigned short dimension) > >> -- > >> 2.31.1 > >>
diff --git a/drivers/staging/media/hantro/hantro_drv.c b/drivers/staging/media/hantro/hantro_drv.c index afddf7ac0731..2387ca85ab54 100644 --- a/drivers/staging/media/hantro/hantro_drv.c +++ b/drivers/staging/media/hantro/hantro_drv.c @@ -253,11 +253,6 @@ queue_init(void *priv, struct vb2_queue *src_vq, struct vb2_queue *dst_vq) static int hantro_try_ctrl(struct v4l2_ctrl *ctrl) { - struct hantro_ctx *ctx; - - ctx = container_of(ctrl->handler, - struct hantro_ctx, ctrl_handler); - if (ctrl->id == V4L2_CID_STATELESS_H264_SPS) { const struct v4l2_ctrl_h264_sps *sps = ctrl->p_new.p_h264_sps; @@ -273,7 +268,12 @@ static int hantro_try_ctrl(struct v4l2_ctrl *ctrl) } else if (ctrl->id == V4L2_CID_MPEG_VIDEO_HEVC_SPS) { const struct v4l2_ctrl_hevc_sps *sps = ctrl->p_new.p_hevc_sps; - return hantro_hevc_validate_sps(ctx, sps); + if (sps->bit_depth_luma_minus8 != sps->bit_depth_chroma_minus8) + /* Luma and chroma bit depth mismatch */ + return -EINVAL; + if (sps->bit_depth_luma_minus8 != 0) + /* Only 8-bit is supported */ + return -EINVAL; } else if (ctrl->id == V4L2_CID_STATELESS_VP9_FRAME) { const struct v4l2_ctrl_vp9_frame *dec_params = ctrl->p_new.p_vp9_frame; diff --git a/drivers/staging/media/hantro/hantro_hevc.c b/drivers/staging/media/hantro/hantro_hevc.c index bd924896e409..f86c98e19177 100644 --- a/drivers/staging/media/hantro/hantro_hevc.c +++ b/drivers/staging/media/hantro/hantro_hevc.c @@ -154,32 +154,6 @@ static int tile_buffer_reallocate(struct hantro_ctx *ctx) return -ENOMEM; } -int hantro_hevc_validate_sps(struct hantro_ctx *ctx, const struct v4l2_ctrl_hevc_sps *sps) -{ - if (sps->bit_depth_luma_minus8 != sps->bit_depth_chroma_minus8) - /* Luma and chroma bit depth mismatch */ - return -EINVAL; - if (sps->bit_depth_luma_minus8 != 0) - /* Only 8-bit is supported */ - return -EINVAL; - - /* - * for tile pixel format check if the width and height match - * hardware constraints - */ - if (ctx->vpu_dst_fmt->fourcc == V4L2_PIX_FMT_NV12_4L4) { - if (ctx->dst_fmt.width != - ALIGN(sps->pic_width_in_luma_samples, ctx->vpu_dst_fmt->frmsize.step_width)) - return -EINVAL; - - if (ctx->dst_fmt.height != - ALIGN(sps->pic_height_in_luma_samples, ctx->vpu_dst_fmt->frmsize.step_height)) - return -EINVAL; - } - - return 0; -} - int hantro_hevc_dec_prepare_run(struct hantro_ctx *ctx) { struct hantro_hevc_dec_hw_ctx *hevc_ctx = &ctx->hevc_dec; @@ -203,10 +177,6 @@ int hantro_hevc_dec_prepare_run(struct hantro_ctx *ctx) if (WARN_ON(!ctrls->sps)) return -EINVAL; - ret = hantro_hevc_validate_sps(ctx, ctrls->sps); - if (ret) - return ret; - ctrls->pps = hantro_get_ctrl(ctx, V4L2_CID_MPEG_VIDEO_HEVC_PPS); if (WARN_ON(!ctrls->pps)) diff --git a/drivers/staging/media/hantro/hantro_hw.h b/drivers/staging/media/hantro/hantro_hw.h index a2e0f0836281..5edff0f0be20 100644 --- a/drivers/staging/media/hantro/hantro_hw.h +++ b/drivers/staging/media/hantro/hantro_hw.h @@ -359,7 +359,6 @@ int hantro_hevc_dec_prepare_run(struct hantro_ctx *ctx); void hantro_hevc_ref_init(struct hantro_ctx *ctx); dma_addr_t hantro_hevc_get_ref_buf(struct hantro_ctx *ctx, int poc); int hantro_hevc_add_ref_buf(struct hantro_ctx *ctx, int poc, dma_addr_t addr); -int hantro_hevc_validate_sps(struct hantro_ctx *ctx, const struct v4l2_ctrl_hevc_sps *sps); static inline unsigned short hantro_vp9_num_sbs(unsigned short dimension)
Currently, the driver tries to validat the HEVC SPS against the CAPTURE queue format (i.e. the decoded format). This is not correct, because typically the SPS control is set before the CAPTURE queue is negotiated. In addition to this, a format validation in hantro_hevc_dec_prepare_run() is also suboptimal, because hantro_hevc_dec_prepare_run() runs in the context of v4l2_m2m_ops.device_run, as part of a decoding job. Format and control validations should happen before decoding starts, in the context of ioctls such as S_CTRL, S_FMT, or STREAMON. Remove the validation for now. Fixes: 135ad96cb4d6b ("media: hantro: Be more accurate on pixel formats step_width constraints") Signed-off-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar> --- drivers/staging/media/hantro/hantro_drv.c | 12 ++++----- drivers/staging/media/hantro/hantro_hevc.c | 30 ---------------------- drivers/staging/media/hantro/hantro_hw.h | 1 - 3 files changed, 6 insertions(+), 37 deletions(-)