[vlc-devel] [PATCH] fps: clone the extra pictures we send

Steve Lhomme robux4 at ycbcr.xyz
Wed Oct 7 09:24:55 CEST 2020


On 2020-10-07 7:41, Steve Lhomme wrote:
> On 2020-10-06 16:40, Rémi Denis-Courmont wrote:
>> Le tiistaina 6. lokakuuta 2020, 15.08.35 EEST Steve Lhomme a écrit :
>>> On 2020-10-06 13:53, Steve Lhomme wrote:
>>>> The same picture is supposed to be filtered or rendered at a different
>>>> date, but the source pixels should be the same. The content is not 
>>>> going
>>>> to be changed in the pictures we output from this filter. Even blenders
>>>> take care of this in their source picture to avoid modifying pictures
>>>> used by the decoder as reference frames.
>>>
>>> It means we can use the fps even for GPU sources.
>>
>> We can already do that. picture_Copy() calls picture_CopyPixels() 
>> which calls
>> the context copy callback. There's effectively no differences between
>> picture_Clone() and picture_Copy() for opaque pictures.
> 
> And this has already been pointed out in the past that this is wrong. A 
> clone and a copy are not the same for CPU pictures. It must not be the 
> same for GPU pictures.
> 
> And doing a copy here is also the wrong thing to do.

BTW, using picture_Copy is almost never a good idea. One of the rare 
case where it makes sense is to blend subpictures into a source picture. 
While it makes sense to do it on a picture coming out of a decoder, 
since the pixels may be used as reference for other pictures, it makes 
less sense for a picture coming from a video filter (but maybe not on 
deinterlacers).

To avoid unnecessary copies we could introduce the concept of 
mutable/immutable pictures. An immutable picture is a picture where 
you're not allowed to touch the pixels. A mutable picture is a picture 
where you can modify the pixels. A decoder would (usually) output 
immutable pictures and a video filter would (usually) output mutable 
pictures.

Getting a mutable picture from another picture would either do a pixel 
copy, if the source is immutable, and just provide a clone of the source 
if is mutable.


More information about the vlc-devel mailing list