Re: [Regression 5.14] media: dvb userspace api

From: Mauro Carvalho Chehab
Date: Wed Aug 25 2021 - 02:33:19 EST

Em Wed, 25 Aug 2021 08:25:57 +0530
Manu Abraham <abraham.manu@xxxxxxxxx> escreveu:

> On Mon, Aug 23, 2021 at 10:30 PM Linus Torvalds
> <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote:
> >
> > I have reverted the header file move. But I would also heartily
> > recommend that whatever user program includes those headers (VDR -
> > anything else?) should take snapshots of these specific kernel
> > headers.
> >
> > I'm not convinced that it makes sense to move the av7110 driver back
> > from staging - it may continue to work, but it _is_ old and there is
> > no maintenance - and I would certainly suggest that any other
> > out-of-tree driver that uses these old interfaces that nothing else
> > implements shouldn't do so, considering that nothing else implements
> > them.
> Sorry for barging in between your discussion, but it seemed like you really
> missed some perspective and hence.
> My 2 cents worth:
> * Revert the header changes.
> * Let someone else with knowledge of it take over the maintenance
> of the av7110 driver.
> - This would allow other hardware also to be easily accommodated
> in a similar manner.
> * Pull the out of tree drivers and allocate maintenance of those, to
> someone who understands them. Don't you want more hardware to be
> supported out of the box ?
> Should there be no driver for those DVB output hardware, but only for
> V4L2 output devices ?
> There exists other hardware which As a person who worked on another
> av7110 like driver (saa716x based s2 6400), which I can confirm.
> The API is supposed to simplify life, not make it even more complex.
> These devices would need lot of workarounds to work with the API that
> which Mauro advocates, which might even break those drivers given
> their complexity and size.
> It would make life a lot easier for the users, Mauro himself and
> this long never ending discussion can be put to rest.

The "full-featured" API that it is implemented on av7110 always had
troubles. This is not only my view, but also the view of the
original API authors,as can be seen at the DVBv4 WIP documentation:

It clearly says that, on chapter 2.2:

"2.2 Linux DVB API Version 3 problems


The Linux DVB API Version 3 has very limited support for
modern hardware."

The "modern" there refers to hardware back in 2005!

I worked on a project back 8 years ago that tried to use it for TV
sets. It didn't work, because the API assumed a 1:1 mapping between
tuners and A/V codecs, which works for simpler embedded hardware,
but didn't cover smart TV hardware, where the number of frontends,
demods and A/V codecs were different. You may even have multiple
channels being displayed at the same time (Picture in Picture).

On today's embedded hardware, you need something like the media
controller, in order to dynamically re-configure the hardware
pipelines between:

- multiple tuners (DVB-C, DVB-T/T2, DVB-S/S2);
- multiple demods[1];
- multiple A/V decoders;
- display compositor;
- audio I/O;
- CA modules;
- encrypt/decrypt hardware (required on some Countries in order
to allow recording programs on storage);
- storage.

[1] There are even some demods that can dynamically change the
maximum number of PIDs it can filter. Modern hardware can
have, let's say, a max of 4 input MPEG-TS, and a max of
512 filters, which works like 4 independent demods, where
the number of filters per demod is adjusted dynamically.
This is currently problem for DVB subsystem, as it allocates
statically the PID filters for the max number of PIDs, meaning
that a large amount of RAM would be wasted if one would reserve
space for the maximum possible capacity per demod (it would
require space for 4x512 buffers on such hardware, meaning that
3/4 of buffer memory would be wasted).

As I always said, I'm open to discuss an API that would properly
address what's needed, but such API should support modern embedded
hardware, and should be designed to allow it to be extended to
support to future needs. That's not the case of the DVBv3 "full-feat"
API, which was developed to support a hardware component developed
more than 23 years ago[2].

[2] The Rev 3.1 datasheet of av7110 was written in June, 1998:


From driver's perspective, it makes no sense to keep support for av7110,
as TI stopped production of TMS320AV7110 a very long time ago. They
don't even mention this product number anymore on their website.