[vlc-devel] [PATCH 12/14] filter_chain: add a default implementation for the video_allocator

Steve Lhomme robux4 at ycbcr.xyz
Tue Jul 30 09:14:17 CEST 2019

On 2019-07-29 21:18, Rémi Denis-Courmont wrote:
> Le maanantaina 29. heinäkuuta 2019, 22.08.58 EEST Alexandre Janniaux a écrit :
>> While I agree that we probably don't need flow control and that image number
>> is probably dominated, the starvation issue seems a real issue to tackle.
>> What are the solution against starvation on Windows ? Should we just fail
>> if we got starved ?
> In general, it is the halting problemm which is to say that the general case
> cannot be solved and assumptions have to be made.
> If we need to make assumptions, we might just as well assume that filters are
> well-behaved, as indeed they have so far been. Ideally, a filter that needs to
> allocate surfaces (rather than modify input surface in-place) should allocate
> a suitably large pool for itself. And that turns out incompatible with
> filter_NewPicture().

I don't see how. This particular patch adds the possibility for filters 
to provide their own (output) allocator. A filter could very well create 
a pool and have its allocator pick pictures in that pool. That still 
goes through filter_NewPicture, because the filter doesn't know if it 
has to use pictures from the outside or it can use its own.

> Since the filter chain is (partially) dynamic, we cannot even rely on filters
> telling how many "extra" surfaces they need - the total value could change in
> the middle of the stream. Instead, the filter ought to allocate its surfaces
> during initialization, and potentially refuse to start if it cannot succeed -
> but not break the whole pipeline.

I'm not sure we can estimate this amount easily. For example what would 
be the amount an adjust filter has to allocate ? 1 picture means the 
filter will be blocked until the filtered picture is finished 
displaying. We cannot prepare the next picture in the meantime. That's 
if the output of ajdust goes to the display, so the last filter. In that 
case it should not allocate pictures. If it's not the last filter and it 
only allocates 1 output. If the next filter in the chain needs 2 
pictures to work we have a deadlock. It will never get 2 pictures from 
the adjust filter.

More information about the vlc-devel mailing list