[vlc-commits] video_output: update displayed.current directly in ThreadDisplayPreparePicture()
Steve Lhomme
git at videolan.org
Tue Jan 19 12:29:55 UTC 2021
vlc | branch: master | Steve Lhomme <robux4 at ycbcr.xyz> | Thu Nov 19 08:43:54 2020 +0100| [580b14dbbf193af9c6a7db6795af615e4a9c9535] | committer: Steve Lhomme
video_output: update displayed.current directly in ThreadDisplayPreparePicture()
Now that there is no mix up possible with displayed.next we can centralize the
setting of this value.
Rename ThreadDisplayPreparePicture() to ThreadDisplayPrerenderNext().
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=580b14dbbf193af9c6a7db6795af615e4a9c9535
---
src/video_output/video_output.c | 31 +++++++++++--------------------
1 file changed, 11 insertions(+), 20 deletions(-)
diff --git a/src/video_output/video_output.c b/src/video_output/video_output.c
index 276ceb4f41..6d6e4af71d 100644
--- a/src/video_output/video_output.c
+++ b/src/video_output/video_output.c
@@ -1052,8 +1052,7 @@ static void ThreadChangeFilters(vout_thread_sys_t *vout)
/* */
-VLC_USED
-static picture_t *ThreadDisplayPreparePicture(vout_thread_sys_t *vout, bool reuse_decoded,
+static bool ThreadDisplayPrerenderNext(vout_thread_sys_t *vout, bool reuse_decoded,
bool frame_by_frame, bool *paused)
{
vout_thread_sys_t *sys = vout;
@@ -1141,7 +1140,13 @@ static picture_t *ThreadDisplayPreparePicture(vout_thread_sys_t *vout, bool reus
vlc_mutex_unlock(&sys->filter.lock);
- return picture;
+ if (picture == NULL)
+ return false;
+
+ if (sys->displayed.current != NULL)
+ picture_Release(sys->displayed.current);
+ sys->displayed.current = picture;
+ return true;
}
static vlc_decoder_device * VoutHoldDecoderDevice(vlc_object_t *o, void *opaque)
@@ -1474,24 +1479,16 @@ static int ThreadDisplayPicture(vout_thread_sys_t *vout, vlc_tick_t *deadline)
bool render_now;
if (frame_by_frame)
{
- picture_t *next;
- next = ThreadDisplayPreparePicture(vout, first, true, &paused);
- if (next == NULL)
+ if (!ThreadDisplayPrerenderNext(vout, first, true, &paused))
return VLC_EGENERIC;
- if (likely(sys->displayed.current != NULL))
- picture_Release(sys->displayed.current);
- sys->displayed.current = next;
-
render_now = true;
}
else
{
if (first)
{
- sys->displayed.current =
- ThreadDisplayPreparePicture(vout, first, false, &paused);
- if (!sys->displayed.current)
+ if (!ThreadDisplayPrerenderNext(vout, first, false, &paused))
return VLC_EGENERIC; // wait with no known deadline
}
@@ -1528,9 +1525,7 @@ static int ThreadDisplayPicture(vout_thread_sys_t *vout, vlc_tick_t *deadline)
while (pic_render_deadline <= system_now)
{
// not enough (predicted) time to render current, get non-late pic
- picture_t *next;
- next = ThreadDisplayPreparePicture(vout, false, false, &paused);
- if (unlikely(next == NULL))
+ if (!ThreadDisplayPrerenderNext(vout, false, false, &paused))
break;
else
{
@@ -1538,10 +1533,6 @@ static int ThreadDisplayPicture(vout_thread_sys_t *vout, vlc_tick_t *deadline)
dropped_current_frame = true;
render_now = false;
- if (likely(sys->displayed.current != NULL))
- picture_Release(sys->displayed.current);
- sys->displayed.current = next;
-
pic_system_pts =
vlc_clock_ConvertToSystem(sys->clock, vlc_tick_now(),
sys->displayed.current->date, sys->rate);
More information about the vlc-commits
mailing list