Re: [PATCH] media: mediatek: vcodec: Skip SOURCE_CHANGE & EOS events for stateless
From: Nicolas Dufresne
Date: Tue Jun 21 2022 - 10:22:41 EST
Le lundi 20 juin 2022 à 14:33 +0800, Chen-Yu Tsai a écrit :
> The stateless decoder API does not specify the usage of SOURCE_CHANGE
> and EOF events. These events are used by stateful decoders to signal
> changes in the bitstream. They do not make sense for stateless decoders.
>
> Do not handle subscription for these two types of events for stateless
> decoder instances. This fixes the last v4l2-compliance error:
>
> Control ioctls:
> fail: v4l2-test-controls.cpp(946): have_source_change || have_eos
> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: FAIL
>
> Fixes: 8cdc3794b2e3 ("media: mtk-vcodec: vdec: support stateless API")
> Signed-off-by: Chen-Yu Tsai <wenst@xxxxxxxxxxxx>
Reviewed-by: Nicolas Dufresne <nicolas.dufresne@xxxxxxxxxxxxx>
> ---
>
> This should apply cleanly on next-20220617. The other media patches I
> have on my branch:
>
> media: mediatek: vcodec: Initialize decoder parameters after getting dec_capability
> media: mediatek: vcodec: Fix non subdev architecture open power fail
>
> should not interfere, though the second is required for proper operation
> of the decoder on MT8183.
>
> drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec.c b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec.c
> index 62f29b6fa104..a5fbc0a1c6bc 100644
> --- a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec.c
> +++ b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_dec.c
> @@ -234,6 +234,11 @@ static int vidioc_vdec_querycap(struct file *file, void *priv,
> static int vidioc_vdec_subscribe_evt(struct v4l2_fh *fh,
> const struct v4l2_event_subscription *sub)
> {
> + struct mtk_vcodec_ctx *ctx = fh_to_ctx(fh);
> +
> + if (ctx->dev->vdec_pdata->uses_stateless_api)
> + return v4l2_ctrl_subscribe_event(fh, sub);
> +
> switch (sub->type) {
> case V4L2_EVENT_EOS:
> return v4l2_event_subscribe(fh, sub, 2, NULL);