media: verisilicon: vp9: Allow to change resolution while streaming
authorBenjamin Gaignard <benjamin.gaignard@collabora.com>
Thu, 9 Nov 2023 16:35:06 +0000 (17:35 +0100)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Thu, 23 Nov 2023 11:44:33 +0000 (12:44 +0100)
Remove all checks that prohibit to set a new format while streaming.
This allow to change dynamically the resolution if the pixel format
remains the same.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
Reviewed-by: Andrzej Pietrasiewicz <andrzej.p@collabora.com>
CC: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
CC: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
drivers/media/platform/verisilicon/hantro_v4l2.c

index f0d8b165abcd6357202204169fd6018b5c398cdd..27a1e77cca38a8a0f9cb0e14bb3052e01272cef5 100644 (file)
@@ -514,25 +514,14 @@ static int hantro_set_fmt_out(struct hantro_ctx *ctx,
                return ret;
 
        if (!ctx->is_encoder) {
-               struct vb2_queue *peer_vq;
-
                /*
                 * In order to support dynamic resolution change,
                 * the decoder admits a resolution change, as long
-                * as the pixelformat remains. Can't be done if streaming.
-                */
-               if (vb2_is_streaming(vq) || (vb2_is_busy(vq) &&
-                   pix_mp->pixelformat != ctx->src_fmt.pixelformat))
-                       return -EBUSY;
-               /*
-                * Since format change on the OUTPUT queue will reset
-                * the CAPTURE queue, we can't allow doing so
-                * when the CAPTURE queue has buffers allocated.
+                * as the pixelformat remains.
                 */
-               peer_vq = v4l2_m2m_get_vq(ctx->fh.m2m_ctx,
-                                         V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE);
-               if (vb2_is_busy(peer_vq))
+               if (vb2_is_streaming(vq) && pix_mp->pixelformat != ctx->src_fmt.pixelformat) {
                        return -EBUSY;
+               }
        } else {
                /*
                 * The encoder doesn't admit a format change if
@@ -577,15 +566,8 @@ static int hantro_set_fmt_out(struct hantro_ctx *ctx,
 static int hantro_set_fmt_cap(struct hantro_ctx *ctx,
                              struct v4l2_pix_format_mplane *pix_mp)
 {
-       struct vb2_queue *vq;
        int ret;
 
-       /* Change not allowed if queue is busy. */
-       vq = v4l2_m2m_get_vq(ctx->fh.m2m_ctx,
-                            V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE);
-       if (vb2_is_busy(vq))
-               return -EBUSY;
-
        if (ctx->is_encoder) {
                struct vb2_queue *peer_vq;