[vlc-devel] [PATCH 00/17] Restart the display module on format changes
Steve Lhomme
robux4 at ycbcr.xyz
Fri Nov 20 15:44:50 CET 2020
As previously discussed, in push it's possible added filters will change the
output of the filter chain(s). The display may be able to cope with the change
but in case it doesn't we need to restart the display.
This patchset adds support for this (worst case) scenario. If the last filter
chain output is different than the previous one, the display is restarted, no
matter what.
The restart is done transparently for the decoder and the filters. When a
change is detected the pre-renderer code returns with a display_restart flag
set and no wait. The vout thread loop checks that and restarts the display
module. The last decoded picture is still kept for the next display.
There can be some time between the time the old display is removed and the new
one is added and displays the new picture. So there is a display glitch. It's
different than the window glitch the push was supposed to get rid of but still
a glitch.
This patchset and some previously set patches can be found here
https://code.videolan.org/robUx4/vlc/-/tree/hevc_interlace/33
I tested with an HEVC interlaced source where adding the deinterlacing filter
double the height of the picture.
Steve Lhomme (17):
video_output: avoid potential double release of displayed.current
video_output: rework the decision to use the next picture to display
video_output: reindent
video_output: keep the displayed.current in frame by frame if next is
not ready
video_output: remove always NULL displayed.next
video_output: move the first picture reading in frame by frame/regular
code
video_output: remove decoded timestamp variable
video_output: add description of the "source" sub-structure
video_output: set filter.changed when an aspect-ratio/crop change is
detected
video_output: update displayed.current directly in
ThreadDisplayPreparePicture()
video_output: handle the filter change in ThreadDisplayPrerenderNext()
vout_wrapper: constify the input video_format
video_output: group the code to setup and load the display module in a
function
video_output: group the code to release/unload the display module in a
function
video_output: do the VoutFixFormat in vout_ChangeSource()
video_output: initialize the filter chains with their default format
video_output: restart display after filter change
src/video_output/video_output.c | 349 ++++++++++++++++++++------------
src/video_output/vout_private.h | 2 +-
src/video_output/vout_wrapper.c | 2 +-
3 files changed, 224 insertions(+), 129 deletions(-)
--
2.26.2
More information about the vlc-devel
mailing list