[vlc-devel] [PATCH 2/3] video_output: create pictures with the display format with interactive filters
Steve Lhomme
robux4 at ycbcr.xyz
Fri Aug 14 07:39:19 CEST 2020
On 2020-08-13 16:47, Rémi Denis-Courmont wrote:
> Le torstaina 13. elokuuta 2020, 15.13.06 EEST Steve Lhomme a écrit :
>> Also used for whatever the last filter of the filter chains is.
>> ---
>> src/video_output/video_output.c | 12 +++++++-----
>> 1 file changed, 7 insertions(+), 5 deletions(-)
>>
>> diff --git a/src/video_output/video_output.c
>> b/src/video_output/video_output.c index 6097b9df7f9..dc636d72928 100644
>> --- a/src/video_output/video_output.c
>> +++ b/src/video_output/video_output.c
>> @@ -859,12 +859,14 @@ static void
>> ThreadDelAllFilterCallbacks(vout_thread_sys_t *vout) static picture_t
>> *VoutVideoFilterInteractiveNewPicture(filter_t *filter) {
>> vout_thread_sys_t *sys = filter->owner.sys;
>> + picture_t *picture;
>>
>> - picture_t *picture = picture_pool_Get(sys->private.private_pool);
>> - if (picture) {
>> - picture_Reset(picture);
>> - video_format_CopyCropAr(&picture->format, &filter->fmt_out.video);
>> - }
>> + vlc_mutex_lock(&sys->display_lock);
>> + if (sys->display)
>> + picture = picture_NewFromFormat(&sys->display->fmt);
>> + else
>> + picture = NULL;
>> + vlc_mutex_unlock(&sys->display_lock);
>> return picture;
>> }
>
> Are you sure that we can safely lock the display from that callback?
The filter chain(s) is only allocating pictures when calling
filter_chain_VideoFilter(). This happens in
ThreadDisplayPreparePicture() in the vout thread.
ThreadDisplayRenderPicture() called right after also holds the same lock
for most of its duration. With a notable difference, the filters.lock is
not held in this case. ThreadProcessMouseState() also holds them separately.
It doesn't seem that the code can mix them together as of now. But it
may not be clean to allow this. It's probably cleaner to use
filter_chain_GetFmtOut() instead to the get the proper video_format_t to
use.
More information about the vlc-devel
mailing list