]> git.itanic.dy.fi Git - linux-stable/commitdiff
Revert "media: mediatek: vcodec: Fix bitstream crop information error"
authorNícolas F. R. A. Prado <nfraprado@collabora.com>
Tue, 18 Apr 2023 21:50:52 +0000 (17:50 -0400)
committerHans Verkuil <hverkuil-cisco@xs4all.nl>
Thu, 25 May 2023 14:21:20 +0000 (16:21 +0200)
This reverts commit cd61f3c6794bea2b717fe6083ca2ad189db75418. That
commit's purpose was to prevent the padding from being decoded when
userspace didn't set a selection, relying on the default one.

However, as described in the Step 6 of the Initialization procedure for
the Memory-to-Memory Stateful Video Encoder Interface [1]:

"Set the visible resolution for the stream metadata via
VIDIOC_S_SELECTION() on the OUTPUT queue if it is desired to be
different than the full OUTPUT resolution."

And from the Note:

"To avoid encoding the padding, the client needs to explicitly configure
this selection target"

Hence the behavior in the original commit doesn't follow the interface
and needs to be reverted.

This fixes the following v4l2-compliance failure observed on
mt8192-asurada-spherion:

fail: v4l2-test-formats.cpp(924): sel.r.width != fmt.g_width()
test VIDIOC_S_FMT: FAIL

[1] https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/dev-encoder.html#initialization

Signed-off-by: Nícolas F. R. A. Prado <nfraprado@collabora.com>
Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
drivers/media/platform/mediatek/vcodec/mtk_vcodec_enc.c

index db65e77bd37339fd37b5b6478f87a4c415418618..9ff439a50f534662876ae2630ad2303450d681b5 100644 (file)
@@ -505,13 +505,13 @@ static int vidioc_venc_s_fmt_out(struct file *file, void *priv,
                f->fmt.pix.pixelformat = fmt->fourcc;
        }
 
-       q_data->visible_width = f->fmt.pix_mp.width;
-       q_data->visible_height = f->fmt.pix_mp.height;
-       q_data->fmt = fmt;
-       ret = vidioc_try_fmt_out(ctx, f, q_data->fmt);
+       ret = vidioc_try_fmt_out(ctx, f, fmt);
        if (ret)
                return ret;
 
+       q_data->fmt = fmt;
+       q_data->visible_width = f->fmt.pix_mp.width;
+       q_data->visible_height = f->fmt.pix_mp.height;
        q_data->coded_width = f->fmt.pix_mp.width;
        q_data->coded_height = f->fmt.pix_mp.height;