[vlc-devel] [PATCH 12/14] filter_chain: add a default implementation for the video_allocator
Steve Lhomme
robux4 at ycbcr.xyz
Tue Jul 30 08:27:01 CEST 2019
On 2019-07-29 19:50, Rémi Denis-Courmont wrote:
> Le perjantaina 26. heinäkuuta 2019, 9.18.37 EEST Steve Lhomme a écrit :
>> On 2019-07-25 19:08, Rémi Denis-Courmont wrote:
>>> Le torstaina 25. heinäkuuta 2019, 13.34.11 EEST Steve Lhomme a écrit :
>>>> At some point NULL should not be allowed there.
>>>
>>> I don't think we should have allocation callbacks in filters at all
>>> anymore. We got rid of them for audio years ago.
>>
>> It cannot work for filters outputting GPU surfaces.
>
> I don't see the causality there?
>
> Such a filter would need to get the video context, if it needs to allocate
> surfaces. In fact, a GPU filter might need the video context anyway to do
> processing, even if it operates "in-place" and does not allocate GPU surfaces.
Yes, this is what I'm working on. The input video context is "pushed" on
each filter like the video format. The first filter using the video
format/context from the decoder. The next filters then get their input
video context from the previous filter output.
That's where it gets tricky because in some cases it cannot pick its own
output video context, it has to use the one it's given (see
b_allow_fmt_out_change in filters) and sometimes it may want to create
its own and "push" it the next filter. In this case we should make sure
to use the "decoder device" (aka decoder hint) to create new video
contexts, especially the GPU ones, at least for the last filter in the
chain. That means we should carry the original decoder device through
all the filter chain.
> Why would the filter need to allocate through the callback? And if so, how will
> it work for filters that do not allocate pictures? (VDPAU already has such
> cases.)
For those not allocating anything, I don't think anything needs to be
changed. If filter_NewPicture() is not used now, it won't in the future.
So allocation changes have no impact here.
> Just because picture_NewFromFormat() does not work does not imply that
> filter_NewPicture() is required, or even that it works, IMU.
I'm all ears for proposals. IMO filter_NewPicture is still the best
candidate to allocate output pictures. We don't need to modify existing
filters much (in fact in many places I handle the "legacy" case so we
don't have to). And it handles the specific constraints that filters
have, specifically being able to get pictures from the display pool
directly so we save a copy when it's time to display the filtered pictures.
More information about the vlc-devel
mailing list