[Linux-kernel-mentees] On test-media script integration for vidtv
hverkuil at xs4all.nl
Mon Nov 9 14:21:42 UTC 2020
On 09/11/2020 12:54, Daniel W. S. Almeida wrote:
> Hi Hans & Mauro.
> Well I now have some more time to work on vidtv so I'd like to start off
> with the test-media script integration as mentioned by Hans some time ago.
> Let's recap:
>> For regression testing of vidtv during the daily build it would be great if
>> the contrib/test/test-media script can be enhanced to include vidtv.
>> This is run during the daily build with a kernel that has lockdep and many
>> other checks enabled, so it is very helpful to verify that no regressions
>> Note that this script relies on the /dev/mediaX devices to run the tests. I
>> noticed that vidtv doesn't appear to create a /dev/mediaX device, even though
>> CONFIG_MEDIA_CONTROLLER_DVB=y. This is definitely something that would be good
>> to support in vidtv.
> So I have been looking at the documentation for a bit, i.e.
> What I understood from that is that entities and interfaces under
> /dev/media/ are created to model actual hardware, but vidtv is a virtual
> driver. Can this be clarified?
For virtual drivers it models the virtual hardware. Userspace doesn't know
that it is actually all emulated, it just looks like real hardware.
> Is this separate from the files created by the dvb core as part of the
> driver initialization?
> e.g. (for a single adapter):
Yes, it is separate. If CONFIG_MEDIA_CONTROLLER_DVB=y then an additional
device node /dev/media0 is created.
> Btw I noticed some drivers call dvb_create_media_graph() as part of
> their initialization, e.g. au0828-dvb.c, em28xx-dvb.c, cx231xx-dvb.c,
> but some (most) do not, why is this?
I think that's because only a subset of DVB drivers support the media controller.
>> Daniel, if you look at the test-media script, then you'll see that it has
>> separate sections for each virtual driver. It's probably best to look at
>> the vim2m driver tests since that's the easiest.
>> It loads the module, then it starts v4l2-compliance to test the API. This
>> utility basically tries all V4L2 APIs and checks that the driver conforms to
>> the spec.
>> Note that you see options like '-m platform:vim2m' that selects which /dev/media
>> device to use based on the name and v4l2-compliance (or v4l2-ctl with the -z option)
>> then walks the topology of the media device and tests all interfaces it finds.
>> Hence my question about media controller support in vidtv: this should be
>> supported there as well since it allows you to write these test sequences without
>> having to know which /dev/fooX device should be used.
>> After the compliance test is run the script tests unbind/bind (always a nasty test)
>> and checks for memory leaks (if enabled in the kernel).
>> Much of this test sequence can be copied for vidtv, but you need something else for
>> the compliance test. It would for now be enough to have some quick check with the
>> existing dvb utils from v4l-utils to see that the basics work.
>> IMHO I think a dtv-compliance utility along the lines of v4l2-compliance and
>> cec-compliance should be created.
>> I'm actually wondering whether the dtv compliance tests shouldn't be part of
>> v4l2-compliance (which would have to be renamed to media-compliance in that case)
>> since there are hybrid drivers supporting both in the same media topology.
>> This would make compliance tests possible where analog/digital TV mode handling
>> is tested (i.e. if analog TV is in use, then trying to use digital TV would return
>> EBUSY and vice versa).
>> It would require some work in v4l2-compliance.cpp to make this possible, but I
>> can do that myself.
>> Compliance tests have proven to be a great method of testing for regressions and
>> testing drivers in general.
>> Note that it takes a lot of time to create good compliance tests, but you just start
>> with some simple tests and expand it over time.
> Well, I checked the test-media script and it seems to be easy to add
> support for vidtv there, as Hans said most of the sequence there can be
> copied from the other drivers. However..
> >It would for now be enough to have some quick check with the existing
> dvb utils from v4l-utils to see that the basics work.
> Can we discuss this in further depth please? Maybe a few examples?
> What I currently do is:
> 1. zap the stream & open it in dvbinspector, manually check for mistakes
> 2. manually check dmesg for errors
> 3. maybe play the stream using vlc or Kaffeine
I'm not a DVB expert, but I was thinking of testing if it can discover
channels, and perhaps just a test to stream data without checking if it is
actually valid video.
The problem is that I am not all that familiar with the DVB utilities so I
don't know if anything can be automated.
An alternative is to start adding dtv support to v4l2-compliance. That utility
already has media controller support, but it needs a bit of work to comfortably
integrate DTV support as well. I can help with that if you want to go in that
direction. v4l2-compliance would need a bit of refactoring, but it is nice to
have the tests there since that makes it easy to support hybrid devices with a
single compliance utility.
More information about the Linux-kernel-mentees