Re: [PATCHv2] v4l2-compliance: only check function if an MC is present

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Hans,

On Fri, Feb 18, 2022 at 09:09:26AM +0100, Hans Verkuil wrote:
> The codec tests checked if the function of the device as reported
> by the media controller is that of an de/encoder. But that test
> was also done for codecs without a MC, and then it fails.
> 
> So only do this test if an MC was found.
> 
> Also test that stateless codecs always have a MC since it is
> required for such codecs.
> 
> Signed-off-by: Hans Verkuil <hverkuil-cisco@xxxxxxxxx>

Just like v1, this patch fixes the following v4l-compliance fail I was seeing on
the mtk-vcodec-enc driver on mt8173-elm-hana:

	fail: v4l2-test-codecs.cpp(35): node->function != MEDIA_ENT_F_PROC_VIDEO_ENCODER
test VIDIOC_(TRY_)ENCODER_CMD: FAIL

So,

Tested-by: Nícolas F. R. A. Prado <nfraprado@xxxxxxxxxxxxx>

Thanks,
Nícolas

> ---
> Nicolas, Stanimir, can you test? This is an improved version of the
> patch fixing the function test for codecs.
> ---
>  utils/v4l2-compliance/v4l2-compliance.cpp  | 1 +
>  utils/v4l2-compliance/v4l2-compliance.h    | 1 +
>  utils/v4l2-compliance/v4l2-test-codecs.cpp | 6 ++++--
>  3 files changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/utils/v4l2-compliance/v4l2-compliance.cpp b/utils/v4l2-compliance/v4l2-compliance.cpp
> index c53a55ba..8d0e94e9 100644
> --- a/utils/v4l2-compliance/v4l2-compliance.cpp
> +++ b/utils/v4l2-compliance/v4l2-compliance.cpp
> @@ -998,6 +998,7 @@ void testNode(struct node &node, struct node &node_m2m_cap, struct node &expbuf_
>  			if (!node.is_v4l2())
>  				driver = mdinfo.driver;
>  			node.media_bus_info = mdinfo.bus_info;
> +			node.has_media = true;
>  		}
>  	}
> 
> diff --git a/utils/v4l2-compliance/v4l2-compliance.h b/utils/v4l2-compliance/v4l2-compliance.h
> index 7255161f..507187eb 100644
> --- a/utils/v4l2-compliance/v4l2-compliance.h
> +++ b/utils/v4l2-compliance/v4l2-compliance.h
> @@ -120,6 +120,7 @@ struct base_node {
>  	struct node *node2;	/* second open filehandle */
>  	bool has_outputs;
>  	bool has_inputs;
> +	bool has_media;
>  	unsigned tuners;
>  	unsigned modulators;
>  	unsigned inputs;
> diff --git a/utils/v4l2-compliance/v4l2-test-codecs.cpp b/utils/v4l2-compliance/v4l2-test-codecs.cpp
> index 22175eef..1d76a17c 100644
> --- a/utils/v4l2-compliance/v4l2-test-codecs.cpp
> +++ b/utils/v4l2-compliance/v4l2-test-codecs.cpp
> @@ -31,7 +31,8 @@ int testEncoder(struct node *node)
>  	bool is_encoder = node->codec_mask & (STATEFUL_ENCODER | JPEG_ENCODER);
>  	int ret;
> 
> -	if (IS_ENCODER(node))
> +	fail_on_test((node->codec_mask & STATELESS_ENCODER) && !node->has_media);
> +	if (IS_ENCODER(node) && node->has_media)
>  		fail_on_test(node->function != MEDIA_ENT_F_PROC_VIDEO_ENCODER);
>  	memset(&cmd, 0xff, sizeof(cmd));
>  	memset(&cmd.raw, 0, sizeof(cmd.raw));
> @@ -100,7 +101,8 @@ int testDecoder(struct node *node)
>  	bool is_decoder = node->codec_mask & (STATEFUL_DECODER | JPEG_DECODER);
>  	int ret;
> 
> -	if (IS_DECODER(node))
> +	fail_on_test((node->codec_mask & STATELESS_DECODER) && !node->has_media);
> +	if (IS_DECODER(node) && node->has_media)
>  		fail_on_test(node->function != MEDIA_ENT_F_PROC_VIDEO_DECODER);
>  	memset(&cmd, 0xff, sizeof(cmd));
>  	memset(&cmd.raw, 0, sizeof(cmd.raw));
> -- 
> 2.34.1
> 



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux