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 >