[vlc-commits] vout: pass system render time to prepare callback
Thomas Guillem
git at videolan.org
Sat May 5 11:12:45 CEST 2018
vlc | branch: master | Thomas Guillem <thomas at gllm.fr> | Sat May 5 11:11:00 2018 +0200| [8d8c5b6bcb35b959e2b91b8bf53bca0ff84b0846] | committer: Thomas Guillem
vout: pass system render time to prepare callback
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=8d8c5b6bcb35b959e2b91b8bf53bca0ff84b0846
---
include/vlc_vout_display.h | 3 ++-
include/vlc_vout_wrapper.h | 7 ++++---
modules/hw/mmal/vout.c | 3 ++-
modules/hw/vdpau/display.c | 5 +++--
modules/video_output/android/display.c | 10 +++++-----
modules/video_output/caca.c | 4 +++-
modules/video_output/caopengllayer.m | 7 +++++--
modules/video_output/decklink.cpp | 14 +++++++-------
modules/video_output/ios.m | 6 ++++--
modules/video_output/macosx.m | 8 +++++---
modules/video_output/opengl/display.c | 6 ++++--
modules/video_output/vmem.c | 6 ++++--
modules/video_output/wayland/shm.c | 4 +++-
modules/video_output/win32/direct3d11.c | 6 ++++--
modules/video_output/win32/direct3d9.c | 6 ++++--
modules/video_output/win32/glwin32.c | 6 ++++--
src/video_output/display.c | 4 ++--
src/video_output/video_output.c | 5 +++--
18 files changed, 68 insertions(+), 42 deletions(-)
diff --git a/include/vlc_vout_display.h b/include/vlc_vout_display.h
index 6c25f392fb..58fb1dca4f 100644
--- a/include/vlc_vout_display.h
+++ b/include/vlc_vout_display.h
@@ -307,7 +307,8 @@ struct vout_display_t {
* You cannot change the pixel content of the picture_t or of the
* subpicture_t.
*/
- void (*prepare)(vout_display_t *, picture_t *, subpicture_t *);
+ void (*prepare)(vout_display_t *, picture_t *, subpicture_t *,
+ mtime_t date);
/* Display a picture and an optional subpicture (mandatory).
*
diff --git a/include/vlc_vout_wrapper.h b/include/vlc_vout_wrapper.h
index 7c115473f8..98f9ddcfa9 100644
--- a/include/vlc_vout_wrapper.h
+++ b/include/vlc_vout_wrapper.h
@@ -41,10 +41,11 @@ static inline picture_pool_t *vout_display_Pool(vout_display_t *vd, unsigned cou
*/
static inline void vout_display_Prepare(vout_display_t *vd,
picture_t *picture,
- subpicture_t *subpicture)
+ subpicture_t *subpicture,
+ mtime_t date)
{
- if (vd->prepare )
- vd->prepare(vd, picture, subpicture);
+ if (vd->prepare)
+ vd->prepare(vd, picture, subpicture, date);
}
/**
diff --git a/modules/hw/mmal/vout.c b/modules/hw/mmal/vout.c
index aaa8fac5cc..ac69489b87 100644
--- a/modules/hw/mmal/vout.c
+++ b/modules/hw/mmal/vout.c
@@ -545,8 +545,9 @@ out:
}
static void vd_prepare(vout_display_t *vd, picture_t *picture,
- subpicture_t *subpicture)
+ subpicture_t *subpicture, mtime_t date)
{
+ VLC_UNUSED(date);
vout_display_sys_t *sys = vd->sys;
picture_sys_t *pic_sys = picture->p_sys;
diff --git a/modules/hw/vdpau/display.c b/modules/hw/vdpau/display.c
index 87b1378c6e..7a463a1a9e 100644
--- a/modules/hw/vdpau/display.c
+++ b/modules/hw/vdpau/display.c
@@ -240,7 +240,8 @@ out:/* Destroy GPU surface */
vdp_bitmap_surface_destroy(sys->vdp, surface);
}
-static void Queue(vout_display_t *vd, picture_t *pic, subpicture_t *subpic)
+static void Queue(vout_display_t *vd, picture_t *pic, subpicture_t *subpic,
+ mtime_t date)
{
vout_display_sys_t *sys = vd->sys;
picture_sys_t *p_sys = pic->p_sys;
@@ -273,7 +274,7 @@ static void Queue(vout_display_t *vd, picture_t *pic, subpicture_t *subpic)
return;
}
- mtime_t delay = pic->date - now;
+ mtime_t delay = date - now;
if (delay < 0)
delay = 0; /* core bug: date is not updated during pause */
if (unlikely(delay > CLOCK_FREQ))
diff --git a/modules/video_output/android/display.c b/modules/video_output/android/display.c
index e1c969f3a1..e779f9e939 100644
--- a/modules/video_output/android/display.c
+++ b/modules/video_output/android/display.c
@@ -82,7 +82,7 @@ static const vlc_fourcc_t subpicture_chromas[] =
};
static picture_pool_t *Pool (vout_display_t *, unsigned);
-static void Prepare(vout_display_t *, picture_t *, subpicture_t *);
+static void Prepare(vout_display_t *, picture_t *, subpicture_t *, mtime_t);
static void Display(vout_display_t *, picture_t *, subpicture_t *);
static int Control(vout_display_t *, int, va_list);
@@ -944,7 +944,7 @@ static picture_pool_t *Pool(vout_display_t *vd, unsigned requested_count)
}
static void Prepare(vout_display_t *vd, picture_t *picture,
- subpicture_t *subpicture)
+ subpicture_t *subpicture, mtime_t date)
{
vout_display_sys_t *sys = vd->sys;
VLC_UNUSED(picture);
@@ -992,10 +992,10 @@ static void Prepare(vout_display_t *vd, picture_t *picture,
&& AndroidOpaquePicture_CanReleaseAtTime(picture->p_sys))
{
mtime_t now = mdate();
- if (picture->date > now)
+ if (date > now)
{
- if (picture->date - now <= 1*CLOCK_FREQ)
- AndroidOpaquePicture_ReleaseAtTime(picture->p_sys, picture->date);
+ if (date - now <= 1*CLOCK_FREQ)
+ AndroidOpaquePicture_ReleaseAtTime(picture->p_sys, date);
else /* The picture will be displayed from the Display callback */
msg_Warn(vd, "picture way too early to release at time");
}
diff --git a/modules/video_output/caca.c b/modules/video_output/caca.c
index ffea9625cc..1e10e3560b 100644
--- a/modules/video_output/caca.c
+++ b/modules/video_output/caca.c
@@ -146,8 +146,10 @@ static void Refresh(vout_display_t *vd)
/**
* Prepare a picture for display */
-static void Prepare(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture)
+static void Prepare(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture,
+ mtime_t date)
{
+ VLC_UNUSED(date);
vout_display_sys_t *sys = vd->sys;
if (!sys->dither) {
diff --git a/modules/video_output/caopengllayer.m b/modules/video_output/caopengllayer.m
index a8cffadb61..003fd99348 100644
--- a/modules/video_output/caopengllayer.m
+++ b/modules/video_output/caopengllayer.m
@@ -60,7 +60,8 @@ vlc_module_begin()
vlc_module_end()
static picture_pool_t *Pool (vout_display_t *vd, unsigned requested_count);
-static void PictureRender (vout_display_t *vd, picture_t *pic, subpicture_t *subpicture);
+static void PictureRender (vout_display_t *vd, picture_t *pic, subpicture_t *subpicture,
+ mtime_t date);
static void PictureDisplay (vout_display_t *vd, picture_t *pic, subpicture_t *subpicture);
static int Control (vout_display_t *vd, int query, va_list ap);
@@ -281,8 +282,10 @@ static picture_pool_t *Pool (vout_display_t *vd, unsigned count)
return sys->pool;
}
-static void PictureRender (vout_display_t *vd, picture_t *pic, subpicture_t *subpicture)
+static void PictureRender (vout_display_t *vd, picture_t *pic, subpicture_t *subpicture,
+ mtime_t date)
{
+ VLC_UNUSED(date);
vout_display_sys_t *sys = vd->sys;
if (pic == NULL) {
diff --git a/modules/video_output/decklink.cpp b/modules/video_output/decklink.cpp
index 5f52446347..4c27d9e275 100644
--- a/modules/video_output/decklink.cpp
+++ b/modules/video_output/decklink.cpp
@@ -891,7 +891,8 @@ static void send_AFD(uint8_t afdcode, uint8_t ar, uint8_t *buf)
}
}
-static void PrepareVideo(vout_display_t *vd, picture_t *picture, subpicture_t *)
+static void PrepareVideo(vout_display_t *vd, picture_t *picture, subpicture_t *,
+ mtime_t date)
{
decklink_sys_t *sys = (decklink_sys_t *) vd->sys;
mtime_t now = mdate();
@@ -899,7 +900,7 @@ static void PrepareVideo(vout_display_t *vd, picture_t *picture, subpicture_t *)
if (!picture)
return;
- if (now - picture->date > sys->video.nosignal_delay * CLOCK_FREQ) {
+ if (now - date > sys->video.nosignal_delay * CLOCK_FREQ) {
msg_Dbg(vd, "no signal");
if (sys->video.pic_nosignal) {
picture = sys->video.pic_nosignal;
@@ -922,7 +923,7 @@ static void PrepareVideo(vout_display_t *vd, picture_t *picture, subpicture_t *)
}
}
}
- picture->date = now;
+ date = now;
}
HRESULT result;
@@ -985,13 +986,12 @@ static void PrepareVideo(vout_display_t *vd, picture_t *picture, subpicture_t *)
// compute frame duration in CLOCK_FREQ units
length = (sys->frameduration * CLOCK_FREQ) / sys->timescale;
- picture->date -= sys->offset;
+ date -= sys->offset;
result = sys->p_output->ScheduleVideoFrame(pDLVideoFrame,
- picture->date, length, CLOCK_FREQ);
+ date, length, CLOCK_FREQ);
if (result != S_OK) {
- msg_Err(vd, "Dropped Video frame %" PRId64 ": 0x%x",
- picture->date, result);
+ msg_Err(vd, "Dropped Video frame %" PRId64 ": 0x%x", date, result);
goto end;
}
diff --git a/modules/video_output/ios.m b/modules/video_output/ios.m
index 31fd367bfe..36075488b7 100644
--- a/modules/video_output/ios.m
+++ b/modules/video_output/ios.m
@@ -55,7 +55,7 @@ static int Open(vlc_object_t *);
static void Close(vlc_object_t *);
static picture_pool_t* PicturePool(vout_display_t *, unsigned);
-static void PictureRender(vout_display_t *, picture_t *, subpicture_t *);
+static void PictureRender(vout_display_t *, picture_t *, subpicture_t *, mtime_t);
static void PictureDisplay(vout_display_t *, picture_t *, subpicture_t *);
static int Control(vout_display_t*, int, va_list);
@@ -314,8 +314,10 @@ static void PictureDisplay(vout_display_t *vd, picture_t *pic, subpicture_t *sub
subpicture_Delete(subpicture);
}
-static void PictureRender(vout_display_t *vd, picture_t *pic, subpicture_t *subpicture)
+static void PictureRender(vout_display_t *vd, picture_t *pic, subpicture_t *subpicture,
+ mtime_t date)
{
+ VLC_UNUSED(date);
vout_display_sys_t *sys = vd->sys;
struct gl_sys *glsys = sys->gl->sys;
diff --git a/modules/video_output/macosx.m b/modules/video_output/macosx.m
index 290d2fd462..cfeeed97c4 100644
--- a/modules/video_output/macosx.m
+++ b/modules/video_output/macosx.m
@@ -56,7 +56,8 @@ static int Open (vlc_object_t *);
static void Close (vlc_object_t *);
static picture_pool_t *Pool (vout_display_t *vd, unsigned requested_count);
-static void PictureRender (vout_display_t *vd, picture_t *pic, subpicture_t *subpicture);
+static void PictureRender (vout_display_t *vd, picture_t *pic, subpicture_t *subpicture,
+ mtime_t date)
static void PictureDisplay (vout_display_t *vd, picture_t *pic, subpicture_t *subpicture);
static int Control (vout_display_t *vd, int query, va_list ap);
@@ -321,9 +322,10 @@ static picture_pool_t *Pool (vout_display_t *vd, unsigned requested_count)
return sys->pool;
}
-static void PictureRender (vout_display_t *vd, picture_t *pic, subpicture_t *subpicture)
+static void PictureRender (vout_display_t *vd, picture_t *pic, subpicture_t *subpicture,
+ mtime_t date)
{
-
+ VLC_UNUSED(date);
vout_display_sys_t *sys = vd->sys;
if (vlc_gl_MakeCurrent(sys->gl) == VLC_SUCCESS)
diff --git a/modules/video_output/opengl/display.c b/modules/video_output/opengl/display.c
index e87311f33c..328d096d2d 100644
--- a/modules/video_output/opengl/display.c
+++ b/modules/video_output/opengl/display.c
@@ -78,7 +78,7 @@ struct vout_display_sys_t
/* Display callbacks */
static picture_pool_t *Pool (vout_display_t *, unsigned);
-static void PictureRender (vout_display_t *, picture_t *, subpicture_t *);
+static void PictureRender (vout_display_t *, picture_t *, subpicture_t *, mtime_t);
static void PictureDisplay (vout_display_t *, picture_t *, subpicture_t *);
static int Control (vout_display_t *, int, va_list);
@@ -202,8 +202,10 @@ static picture_pool_t *Pool (vout_display_t *vd, unsigned count)
return sys->pool;
}
-static void PictureRender (vout_display_t *vd, picture_t *pic, subpicture_t *subpicture)
+static void PictureRender (vout_display_t *vd, picture_t *pic, subpicture_t *subpicture,
+ mtime_t date)
{
+ VLC_UNUSED(date);
vout_display_sys_t *sys = vd->sys;
if (vlc_gl_MakeCurrent (sys->gl) == VLC_SUCCESS)
diff --git a/modules/video_output/vmem.c b/modules/video_output/vmem.c
index a5e6fe130d..0b0db79dd1 100644
--- a/modules/video_output/vmem.c
+++ b/modules/video_output/vmem.c
@@ -105,7 +105,7 @@ typedef unsigned (*vlc_format_cb)(void **, char *, unsigned *, unsigned *,
unsigned *, unsigned *);
static picture_pool_t *Pool (vout_display_t *, unsigned);
-static void Prepare(vout_display_t *, picture_t *, subpicture_t *);
+static void Prepare(vout_display_t *, picture_t *, subpicture_t *, mtime_t);
static void Display(vout_display_t *, picture_t *, subpicture_t *);
static int Control(vout_display_t *, int, va_list);
@@ -243,8 +243,10 @@ static picture_pool_t *Pool(vout_display_t *vd, unsigned count)
return sys->pool;
}
-static void Prepare(vout_display_t *vd, picture_t *pic, subpicture_t *subpic)
+static void Prepare(vout_display_t *vd, picture_t *pic, subpicture_t *subpic,
+ mtime_t date)
{
+ VLC_UNUSED(date);
vout_display_sys_t *sys = vd->sys;
picture_resource_t rsc = { .p_sys = NULL };
void *planes[PICTURE_PLANE_MAX];
diff --git a/modules/video_output/wayland/shm.c b/modules/video_output/wayland/shm.c
index 78dad4b7ef..7ae202bfe1 100644
--- a/modules/video_output/wayland/shm.c
+++ b/modules/video_output/wayland/shm.c
@@ -212,8 +212,10 @@ static picture_pool_t *Pool(vout_display_t *vd, unsigned req)
return sys->pool;
}
-static void Prepare(vout_display_t *vd, picture_t *pic, subpicture_t *subpic)
+static void Prepare(vout_display_t *vd, picture_t *pic, subpicture_t *subpic,
+ mtime_t date)
{
+ VLC_UNUSED(date);
vout_display_sys_t *sys = vd->sys;
struct wl_display *display = sys->embed->display.wl;
struct wl_surface *surface = sys->embed->handle.wl;
diff --git a/modules/video_output/win32/direct3d11.c b/modules/video_output/win32/direct3d11.c
index 90cfa918b9..1cb2c2b614 100644
--- a/modules/video_output/win32/direct3d11.c
+++ b/modules/video_output/win32/direct3d11.c
@@ -215,7 +215,7 @@ typedef struct {
static picture_pool_t *Pool(vout_display_t *vd, unsigned count);
-static void Prepare(vout_display_t *, picture_t *, subpicture_t *subpicture);
+static void Prepare(vout_display_t *, picture_t *, subpicture_t *subpicture, mtime_t);
static void Display(vout_display_t *, picture_t *, subpicture_t *subpicture);
static HINSTANCE Direct3D11LoadShaderLibrary(void);
@@ -1149,8 +1149,10 @@ static float GetFormatLuminance(vlc_object_t *o, const video_format_t *fmt)
}
}
-static void Prepare(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture)
+static void Prepare(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture,
+ mtime_t date)
{
+ VLC_UNUSED(date);
vout_display_sys_t *sys = vd->sys;
if (sys->picQuadConfig->formatTexture == DXGI_FORMAT_UNKNOWN)
diff --git a/modules/video_output/win32/direct3d9.c b/modules/video_output/win32/direct3d9.c
index 18406428af..3d12e454f5 100644
--- a/modules/video_output/win32/direct3d9.c
+++ b/modules/video_output/win32/direct3d9.c
@@ -174,7 +174,7 @@ static int Open(vlc_object_t *);
static picture_pool_t *Direct3D9CreatePicturePool (vlc_object_t *, d3d9_device_t *,
const d3d9_format_t *, const video_format_t *, unsigned);
-static void Prepare(vout_display_t *, picture_t *, subpicture_t *subpicture);
+static void Prepare(vout_display_t *, picture_t *, subpicture_t *subpicture, mtime_t);
static void Display(vout_display_t *, picture_t *, subpicture_t *subpicture);
static picture_pool_t*DisplayPool(vout_display_t *, unsigned);
static int Control(vout_display_t *, int, va_list);
@@ -495,8 +495,10 @@ static picture_pool_t *DisplayPool(vout_display_t *vd, unsigned count)
return vd->sys->sys.pool;
}
-static void Prepare(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture)
+static void Prepare(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture,
+ mtime_t date)
{
+ VLC_UNUSED(date);
vout_display_sys_t *sys = vd->sys;
picture_sys_t *p_sys = picture->p_sys;
LPDIRECT3DSURFACE9 surface = p_sys->surface;
diff --git a/modules/video_output/win32/glwin32.c b/modules/video_output/win32/glwin32.c
index 2d3debff6b..ec45764586 100644
--- a/modules/video_output/win32/glwin32.c
+++ b/modules/video_output/win32/glwin32.c
@@ -67,7 +67,7 @@ struct vout_display_sys_t
};
static picture_pool_t *Pool (vout_display_t *, unsigned);
-static void Prepare(vout_display_t *, picture_t *, subpicture_t *);
+static void Prepare(vout_display_t *, picture_t *, subpicture_t *, mtime_t);
static void Display(vout_display_t *, picture_t *, subpicture_t *);
static void Manage (vout_display_t *);
@@ -210,8 +210,10 @@ static picture_pool_t *Pool(vout_display_t *vd, unsigned count)
return sys->sys.pool;
}
-static void Prepare(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture)
+static void Prepare(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture,
+ mtime_t date)
{
+ VLC_UNUSED(date);
vout_display_sys_t *sys = vd->sys;
if (vlc_gl_MakeCurrent (sys->gl) == VLC_SUCCESS)
diff --git a/src/video_output/display.c b/src/video_output/display.c
index 909cb67001..a27d721de8 100644
--- a/src/video_output/display.c
+++ b/src/video_output/display.c
@@ -1334,7 +1334,7 @@ static picture_pool_t *SplitterPool(vout_display_t *vd, unsigned count)
}
static void SplitterPrepare(vout_display_t *vd,
picture_t *picture,
- subpicture_t *subpicture)
+ subpicture_t *subpicture, mtime_t date)
{
vout_display_sys_t *sys = vd->sys;
@@ -1350,7 +1350,7 @@ static void SplitterPrepare(vout_display_t *vd,
for (int i = 0; i < sys->count; i++) {
sys->picture[i] = vout_FilterDisplay(sys->display[i], sys->picture[i]);
if (sys->picture[i])
- vout_display_Prepare(sys->display[i], sys->picture[i], NULL);
+ vout_display_Prepare(sys->display[i], sys->picture[i], NULL, date);
}
}
static void SplitterDisplay(vout_display_t *vd,
diff --git a/src/video_output/video_output.c b/src/video_output/video_output.c
index f032269160..760a868c68 100644
--- a/src/video_output/video_output.c
+++ b/src/video_output/video_output.c
@@ -1141,11 +1141,12 @@ static int ThreadDisplayRenderPicture(vout_thread_t *vout, bool is_forced)
}
if (sys->display.use_dr) {
- vout_display_Prepare(vd, todisplay, subpic);
+ vout_display_Prepare(vd, todisplay, subpic, todisplay->date);
} else {
if (!do_dr_spu && !do_early_spu && vout->p->spu_blend && subpic)
picture_BlendSubpicture(todisplay, vout->p->spu_blend, subpic);
- vout_display_Prepare(vd, todisplay, do_dr_spu ? subpic : NULL);
+ vout_display_Prepare(vd, todisplay, do_dr_spu ? subpic : NULL,
+ todisplay->date);
if (!do_dr_spu && subpic)
{
More information about the vlc-commits
mailing list