diff --git a/include/vlc_vout_display.h b/include/vlc_vout_display.h index 503f92db13b46b212b32b24095ff674fa76200fa..5cf2136ad043ce631c554e37ffada90bdb662a0b 100644 --- a/include/vlc_vout_display.h +++ b/include/vlc_vout_display.h @@ -116,15 +116,16 @@ typedef struct { * Information from a vout_display_t to configure * the core behaviour. * - * By default they are all false. + * By default they are all false or NULL. * */ typedef struct { - bool is_slow; /* The picture memory has slow read/write */ - bool has_double_click; /* Is double-click generated */ - bool has_hide_mouse; /* Is mouse automatically hidden */ - bool has_pictures_invalid;/* Will VOUT_DISPLAY_EVENT_PICTURES_INVALID be used */ - bool has_event_thread; /* Will events (key at least) be emitted using an independent thread */ + bool is_slow; /* The picture memory has slow read/write */ + bool has_double_click; /* Is double-click generated */ + bool has_hide_mouse; /* Is mouse automatically hidden */ + bool has_pictures_invalid; /* Will VOUT_DISPLAY_EVENT_PICTURES_INVALID be used */ + bool has_event_thread; /* Will events (key at least) be emitted using an independent thread */ + const vlc_fourcc_t *subpicture_chromas; /* List of supported chromas for subpicture rendering. */ } vout_display_info_t; /** @@ -288,25 +289,29 @@ struct vout_display_t { */ picture_pool_t *(*pool)(vout_display_t *, unsigned count); - /* Prepare a picture for display (optional). + /* Prepare a picture and an optional subpicture for display (optional). * * It is called before the next pf_display call to provide as much - * time as possible to prepare the given picture for display. + * time as possible to prepare the given picture and the subpicture + * for display. * You are guaranted that pf_display will always be called and using - * the exact same picture_t. - * You cannot change the pixel content of the picture_t. + * the exact same picture_t and subpicture_t. + * You cannot change the pixel content of the picture_t or of the + * subpicture_t. */ - void (*prepare)(vout_display_t *, picture_t *); + void (*prepare)(vout_display_t *, picture_t *, subpicture_t *); - /* Display a picture (mandatory). + /* Display a picture and an optional subpicture (mandatory). * - * The picture must be displayed as soon as possible. - * You cannot change the pixel content of the picture_t. + * The picture and the optional subpicture must be displayed as soon as + * possible. + * You cannot change the pixel content of the picture_t or of the + * subpicture_t. * - * This function gives away the ownership of the picture, so you must - * release it as soon as possible. + * This function gives away the ownership of the picture and of the + * subpicture, so you must release them as soon as possible. */ - void (*display)(vout_display_t *, picture_t *); + void (*display)(vout_display_t *, picture_t *, subpicture_t *); /* Control on the module (mandatory) */ int (*control)(vout_display_t *, int, va_list); diff --git a/include/vlc_vout_wrapper.h b/include/vlc_vout_wrapper.h index b960e5c13eb62c41277a19bbb1c95b88f4173997..5f28f98e88527a3ed003f1e3407475b3270082e6 100644 --- a/include/vlc_vout_wrapper.h +++ b/include/vlc_vout_wrapper.h @@ -40,18 +40,22 @@ static inline picture_pool_t *vout_display_Pool(vout_display_t *vd, unsigned cou /** * It preparse a picture for display. */ -static inline void vout_display_Prepare(vout_display_t *vd, picture_t *picture) +static inline void vout_display_Prepare(vout_display_t *vd, + picture_t *picture, + subpicture_t *subpicture) { if (vd->prepare ) - vd->prepare(vd, picture); + vd->prepare(vd, picture, subpicture); } /** * It display a picture. */ -static inline void vout_display_Display(vout_display_t *vd, picture_t *picture) +static inline void vout_display_Display(vout_display_t *vd, + picture_t *picture, + subpicture_t *subpicture) { - vd->display(vd, picture); + vd->display(vd, picture, subpicture); } /** diff --git a/modules/misc/dummy/vout.c b/modules/misc/dummy/vout.c index ae71e23ad74d6ace7e4435983204d3efb703a1f8..045bab655b93d8bf96873fc82e74949471bd8ed7 100644 --- a/modules/misc/dummy/vout.c +++ b/modules/misc/dummy/vout.c @@ -40,8 +40,8 @@ struct vout_display_sys_t { picture_pool_t *pool; }; static picture_pool_t *Pool(vout_display_t *, unsigned count); -static void Display(vout_display_t *, picture_t *); -static void DisplayStat(vout_display_t *, picture_t *); +static void Display(vout_display_t *, picture_t *, subpicture_t *); +static void DisplayStat(vout_display_t *, picture_t *, subpicture_t *); static int Control(vout_display_t *, int, va_list); static void Manage (vout_display_t *); @@ -104,15 +104,17 @@ static picture_pool_t *Pool(vout_display_t *vd, unsigned count) return sys->pool; } -static void Display(vout_display_t *vd, picture_t *picture) +static void Display(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture) { VLC_UNUSED(vd); + VLC_UNUSED(subpicture); picture_Release(picture); } -static void DisplayStat(vout_display_t *vd, picture_t *picture) +static void DisplayStat(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture) { VLC_UNUSED(vd); + VLC_UNUSED(subpicture); if (vd->fmt.i_width*vd->fmt.i_height >= sizeof(mtime_t)) { mtime_t date; memcpy(&date, picture->p->p_pixels, sizeof(date)); diff --git a/modules/video_output/aa.c b/modules/video_output/aa.c index 420767b587ead5383276bd47a4d67cb171294f02..007cb56c94495ca2cc3cae82b63d07b70bf3a3ae 100644 --- a/modules/video_output/aa.c +++ b/modules/video_output/aa.c @@ -66,8 +66,8 @@ vlc_module_end() * Local prototypes *****************************************************************************/ static picture_pool_t *Pool (vout_display_t *, unsigned); -static void Prepare(vout_display_t *, picture_t *); -static void PictureDisplay(vout_display_t *, picture_t *); +static void Prepare(vout_display_t *, picture_t *, subpicture_t *); +static void PictureDisplay(vout_display_t *, picture_t *, subpicture_t *); static int Control(vout_display_t *, int, va_list); /* */ @@ -191,7 +191,7 @@ static picture_pool_t *Pool(vout_display_t *vd, unsigned count) /** * Prepare a picture for display */ -static void Prepare(vout_display_t *vd, picture_t *picture) +static void Prepare(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture) { vout_display_sys_t *sys = vd->sys; @@ -208,6 +208,7 @@ static void Prepare(vout_display_t *vd, picture_t *picture) #else VLC_UNUSED(picture); #endif + VLC_UNUSED(subpicture); aa_fastrender(sys->aa_context, 0, 0, vd->fmt.i_width, vd->fmt.i_height); @@ -216,12 +217,13 @@ static void Prepare(vout_display_t *vd, picture_t *picture) /** * Display a picture */ -static void PictureDisplay(vout_display_t *vd, picture_t *picture) +static void PictureDisplay(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture) { vout_display_sys_t *sys = vd->sys; aa_flush(sys->aa_context); picture_Release(picture); + VLC_UNUSED(subpicture); } /** diff --git a/modules/video_output/caca.c b/modules/video_output/caca.c index 6de1ca19a27898fd10f6947bd3a7eecb2d6bb392..55372eb31cc884fe6d2d51e7bc9c82ee93e22b74 100644 --- a/modules/video_output/caca.c +++ b/modules/video_output/caca.c @@ -56,8 +56,8 @@ vlc_module_end() * Local prototypes *****************************************************************************/ static picture_pool_t *Pool (vout_display_t *, unsigned); -static void Prepare(vout_display_t *, picture_t *); -static void Display(vout_display_t *, picture_t *); +static void Prepare(vout_display_t *, picture_t *, subpicture_t *); +static void Display(vout_display_t *, picture_t *, subpicture_t *); static int Control(vout_display_t *, int, va_list); /* */ @@ -245,7 +245,7 @@ static picture_pool_t *Pool(vout_display_t *vd, unsigned count) /** * Prepare a picture for display */ -static void Prepare(vout_display_t *vd, picture_t *picture) +static void Prepare(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture) { vout_display_sys_t *sys = vd->sys; @@ -278,15 +278,17 @@ static void Prepare(vout_display_t *vd, picture_t *picture) place.width, place.height, sys->dither, &picture->p->p_pixels[crop_offset]); + VLC_UNUSED(subpicture); } /** * Display a picture */ -static void Display(vout_display_t *vd, picture_t *picture) +static void Display(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture) { Refresh(vd); picture_Release(picture); + VLC_UNUSED(subpicture); } /** diff --git a/modules/video_output/directfb.c b/modules/video_output/directfb.c index fd18cbbe905f1378d8b8187f4f88579eced8b12f..29af5caead584da4b07a60664bed33153ac9b4f6 100644 --- a/modules/video_output/directfb.c +++ b/modules/video_output/directfb.c @@ -56,7 +56,7 @@ vlc_module_end() * Local prototypes *****************************************************************************/ static picture_pool_t *Pool (vout_display_t *, unsigned); -static void Display(vout_display_t *, picture_t *); +static void Display(vout_display_t *, picture_t *, subpicture_t *); static int Control(vout_display_t *, int, va_list); static void Manage (vout_display_t *); @@ -192,7 +192,7 @@ static picture_pool_t *Pool(vout_display_t *vd, unsigned count) return sys->pool; } -static void Display(vout_display_t *vd, picture_t *picture) +static void Display(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture) { vout_display_sys_t *sys = vd->sys; @@ -218,6 +218,7 @@ static void Display(vout_display_t *vd, picture_t *picture) primary->Flip(primary, NULL, 0); } picture_Release(picture); + VLC_UNUSED(subpicture); } static int Control(vout_display_t *vd, int query, va_list args) diff --git a/modules/video_output/egl.c b/modules/video_output/egl.c index 5353051fa10beaf1ddf8b79e6048eaca49d87528..0fa293ae669e0a24308a6a8494ff05808eac2b54 100644 --- a/modules/video_output/egl.c +++ b/modules/video_output/egl.c @@ -318,19 +318,21 @@ static picture_pool_t *Pool (vout_display_t *vd, unsigned count) return sys->pool; } -static void PictureRender (vout_display_t *vd, picture_t *pic) +static void PictureRender (vout_display_t *vd, picture_t *pic, subpicture_t *subpicture) { vout_display_sys_t *sys = vd->sys; vout_display_opengl_Prepare (&sys->vgl, pic); + (void)subpicture; } -static void PictureDisplay (vout_display_t *vd, picture_t *pic) +static void PictureDisplay (vout_display_t *vd, picture_t *pic, subpicture_t *subpicture) { vout_display_sys_t *sys = vd->sys; vout_display_opengl_Display (&sys->vgl, &vd->source); picture_Release (pic); + (void)subpicture; } static int Control (vout_display_t *vd, int query, va_list ap) diff --git a/modules/video_output/fb.c b/modules/video_output/fb.c index 2d54669c34d8f906ede21d51172d48b5db357164..66ac404645a96688b001975235332adde95a919b 100644 --- a/modules/video_output/fb.c +++ b/modules/video_output/fb.c @@ -101,7 +101,7 @@ vlc_module_end () * Local prototypes *****************************************************************************/ static picture_pool_t *Pool (vout_display_t *, unsigned); -static void Display(vout_display_t *, picture_t *); +static void Display(vout_display_t *, picture_t *, subpicture_t *); static int Control(vout_display_t *, int, va_list); static void Manage (vout_display_t *); @@ -366,7 +366,7 @@ static picture_pool_t *Pool(vout_display_t *vd, unsigned count) } return sys->pool; } -static void Display(vout_display_t *vd, picture_t *picture) +static void Display(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture) { vout_display_sys_t *sys = vd->sys; @@ -391,6 +391,7 @@ static void Display(vout_display_t *vd, picture_t *picture) picture_Copy(sys->picture, picture); picture_Release(picture); + VLC_UNUSED(subpicture); } static int Control(vout_display_t *vd, int query, va_list args) { diff --git a/modules/video_output/ios.m b/modules/video_output/ios.m index 1a02a3d2cf527f72dc0e46697b1248a813c632d7..a651def9891fb652040f4db6147a26f05ca82624 100644 --- a/modules/video_output/ios.m +++ b/modules/video_output/ios.m @@ -50,8 +50,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); -static void PictureDisplay(vout_display_t *vd, picture_t *pic); +static void PictureRender(vout_display_t *vd, picture_t *pic, subpicture_t *subpicture); +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); static int OpenglClean(vout_opengl_t *gl); @@ -216,19 +216,21 @@ 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) +static void PictureRender(vout_display_t *vd, picture_t *pic, subpicture_t *subpicture) { vout_display_sys_t *sys = vd->sys; vout_display_opengl_Prepare( &sys->vgl, pic ); + (void)subpicture; } -static void PictureDisplay(vout_display_t *vd, picture_t *pic) +static void PictureDisplay(vout_display_t *vd, picture_t *pic, subpicture_t *subpicture) { vout_display_sys_t *sys = vd->sys; vout_display_opengl_Display(&sys->vgl, &vd->fmt ); picture_Release (pic); sys->has_first_frame = true; + (void)subpicture; } static int Control (vout_display_t *vd, int query, va_list ap) diff --git a/modules/video_output/macosx.m b/modules/video_output/macosx.m index 6d6feadd072f98599630a18459a24a83d1609bf5..46d09840c16a91994b78c8fd4814291f89ce15a6 100644 --- a/modules/video_output/macosx.m +++ b/modules/video_output/macosx.m @@ -52,8 +52,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); -static void PictureDisplay(vout_display_t *vd, picture_t *pic); +static void PictureRender(vout_display_t *vd, picture_t *pic, subpicture_t *subpicture); +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); static int OpenglLock(vout_opengl_t *gl); @@ -261,15 +261,16 @@ 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) +static void PictureRender(vout_display_t *vd, picture_t *pic, subpicture_t *subpicture) { vout_display_sys_t *sys = vd->sys; vout_display_opengl_Prepare( &sys->vgl, pic ); + (void)subpicture; } -static void PictureDisplay(vout_display_t *vd, picture_t *pic) +static void PictureDisplay(vout_display_t *vd, picture_t *pic, subpicture_t *subpicture) { vout_display_sys_t *sys = vd->sys; [sys->glView setVoutFlushing:YES]; @@ -277,6 +278,7 @@ static void PictureDisplay(vout_display_t *vd, picture_t *pic) [sys->glView setVoutFlushing:NO]; picture_Release (pic); sys->has_first_frame = true; + (void)subpicture; } static int Control (vout_display_t *vd, int query, va_list ap) diff --git a/modules/video_output/msw/direct2d.c b/modules/video_output/msw/direct2d.c index 11757bd03fb8dc70e80cf010231c97b0c0d3f40f..0eff02d90b10d93e9056b5abb8df688825cc3dee 100644 --- a/modules/video_output/msw/direct2d.c +++ b/modules/video_output/msw/direct2d.c @@ -71,8 +71,8 @@ vlc_module_end () * Local prototypes *****************************************************************************/ static picture_pool_t *Pool (vout_display_t *, unsigned); -static void Prepare(vout_display_t *, picture_t *); -static void Display(vout_display_t *, picture_t *); +static void Prepare(vout_display_t *, picture_t *, subpicture_t *); +static void Display(vout_display_t *, picture_t *, subpicture_t *); static int Control(vout_display_t *, int, va_list); static void Manage (vout_display_t *); @@ -205,7 +205,7 @@ static picture_pool_t *Pool(vout_display_t *vd, unsigned count) /** * Performs set up of ID2D1Bitmap memory ready for blitting */ -static void Prepare(vout_display_t *vd, picture_t *picture) +static void Prepare(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture) { vout_display_sys_t *sys = vd->sys; @@ -224,12 +224,13 @@ static void Prepare(vout_display_t *vd, picture_t *picture) sys->d2_render_target, pitch, sys->d2_bitmap);*/ #endif } + VLC_UNUSED(subpicture); } /** * Blits a scaled picture_t to the render target */ -static void Display(vout_display_t *vd, picture_t *picture) +static void Display(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture) { vout_display_sys_t *sys = vd->sys; @@ -260,6 +261,7 @@ static void Display(vout_display_t *vd, picture_t *picture) } picture_Release(picture); + VLC_UNUSED(subpicture); CommonDisplay(vd); } diff --git a/modules/video_output/msw/direct3d.c b/modules/video_output/msw/direct3d.c index 4163208faf0efaf69480939801ff12f1d79cc6e8..1592885277ba0a7aa6390436af6be3987a3cfe20 100644 --- a/modules/video_output/msw/direct3d.c +++ b/modules/video_output/msw/direct3d.c @@ -93,8 +93,8 @@ struct picture_sys_t static int Open(vlc_object_t *); static picture_pool_t *Pool (vout_display_t *, unsigned); -static void Prepare(vout_display_t *, picture_t *); -static void Display(vout_display_t *, picture_t *); +static void Prepare(vout_display_t *, picture_t *, subpicture_t *subpicture); +static void Display(vout_display_t *, picture_t *, subpicture_t *subpicture); static int Control(vout_display_t *, int, va_list); static void Manage (vout_display_t *); @@ -240,11 +240,12 @@ static picture_pool_t *Pool(vout_display_t *vd, unsigned count) static int Direct3DLockSurface(picture_t *); static void Direct3DUnlockSurface(picture_t *); -static void Prepare(vout_display_t *vd, picture_t *picture) +static void Prepare(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture) { LPDIRECT3DSURFACE9 surface = picture->p_sys->surface; #if 0 picture_Release(picture); + VLC_UNUSED(subpicture); Direct3DRenderScene(vd, surface); #else /* FIXME it is a bit ugly, we need the surface to be unlocked for @@ -256,10 +257,11 @@ static void Prepare(vout_display_t *vd, picture_t *picture) Direct3DUnlockSurface(picture); Direct3DRenderScene(vd, surface); + VLC_UNUSED(subpicture); #endif } -static void Display(vout_display_t *vd, picture_t *picture) +static void Display(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture) { vout_display_sys_t *sys = vd->sys; LPDIRECT3DDEVICE9 d3ddev = sys->d3ddev; @@ -275,10 +277,12 @@ static void Display(vout_display_t *vd, picture_t *picture) #if 0 VLC_UNUSED(picture); + VLC_UNUSED(subpicture); #else /* XXX See Prepare() */ Direct3DLockSurface(picture); picture_Release(picture); + VLC_UNUSED(subpicture); #endif CommonDisplay(vd); diff --git a/modules/video_output/msw/directx.c b/modules/video_output/msw/directx.c index 330352c1bf6819076a52f2b3277f291822e1b2ef..903135dbef6ddaf9cd52902479b9062e85b9eb1d 100644 --- a/modules/video_output/msw/directx.c +++ b/modules/video_output/msw/directx.c @@ -135,7 +135,7 @@ DEFINE_GUID(IID_IDirectDraw2, 0xB3A6F3E0,0x2B43,0x11CF,0xA2,0xDE,0x00,0xAA,0x00, DEFINE_GUID(IID_IDirectDrawSurface2, 0x57805885,0x6eec,0x11cf,0x94,0x41,0xa8,0x23,0x03,0xc1,0x0e,0x27); static picture_pool_t *Pool (vout_display_t *, unsigned); -static void Display(vout_display_t *, picture_t *); +static void Display(vout_display_t *, picture_t *, subpicture_t *); static int Control(vout_display_t *, int, va_list); static void Manage (vout_display_t *); @@ -256,7 +256,7 @@ static picture_pool_t *Pool(vout_display_t *vd, unsigned count) VLC_UNUSED(count); return vd->sys->pool; } -static void Display(vout_display_t *vd, picture_t *picture) +static void Display(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture) { vout_display_sys_t *sys = vd->sys; @@ -313,6 +313,7 @@ static void Display(vout_display_t *vd, picture_t *picture) CommonDisplay(vd); picture_Release(picture); + VLC_UNUSED(subpicture); } static int Control(vout_display_t *vd, int query, va_list args) { diff --git a/modules/video_output/msw/glwin32.c b/modules/video_output/msw/glwin32.c index f807bfeb0a4844e6b3501894d1de82c6a910c488..68c80a58a26dbc21572379c92b16f241be654160 100644 --- a/modules/video_output/msw/glwin32.c +++ b/modules/video_output/msw/glwin32.c @@ -62,8 +62,8 @@ vlc_module_end() * Local prototypes. *****************************************************************************/ static picture_pool_t *Pool (vout_display_t *, unsigned); -static void Prepare(vout_display_t *, picture_t *); -static void Display(vout_display_t *, picture_t *); +static void Prepare(vout_display_t *, picture_t *, subpicture_t *); +static void Display(vout_display_t *, picture_t *, subpicture_t *); static int Control(vout_display_t *, int, va_list); static void Manage (vout_display_t *); @@ -175,20 +175,22 @@ static picture_pool_t *Pool(vout_display_t *vd, unsigned count) return sys->pool; } -static void Prepare(vout_display_t *vd, picture_t *picture) +static void Prepare(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture) { vout_display_sys_t *sys = vd->sys; vout_display_opengl_Prepare(&sys->vgl, picture); + VLC_UNUSED(subpicture); } -static void Display(vout_display_t *vd, picture_t *picture) +static void Display(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture) { vout_display_sys_t *sys = vd->sys; vout_display_opengl_Display(&sys->vgl, &vd->source); picture_Release(picture); + VLC_UNUSED(subpicture); CommonDisplay(vd); } diff --git a/modules/video_output/msw/wingdi.c b/modules/video_output/msw/wingdi.c index eeb6ca89bbdcfd002b79bed0952ea6ad4b0779d5..e3e82a790253b82df9f3496da2e261dfbbecbc13 100644 --- a/modules/video_output/msw/wingdi.c +++ b/modules/video_output/msw/wingdi.c @@ -70,7 +70,7 @@ vlc_module_end () * Local prototypes *****************************************************************************/ static picture_pool_t *Pool (vout_display_t *, unsigned); -static void Display(vout_display_t *, picture_t *); +static void Display(vout_display_t *, picture_t *, subpicture_t *subpicture); static int Control(vout_display_t *, int, va_list); static void Manage (vout_display_t *); @@ -174,7 +174,7 @@ static picture_pool_t *Pool(vout_display_t *vd, unsigned count) VLC_UNUSED(count); return vd->sys->pool; } -static void Display(vout_display_t *vd, picture_t *picture) +static void Display(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture) { vout_display_sys_t *sys = vd->sys; @@ -217,6 +217,7 @@ static void Display(vout_display_t *vd, picture_t *picture) #endif /* TODO */ picture_Release(picture); + VLC_UNUSED(subpicture); CommonDisplay(vd); } diff --git a/modules/video_output/sdl.c b/modules/video_output/sdl.c index ddd13c125335ca5b99d05be5c61aa485efb8e9a6..67d82d031494369f12ab675b9f42dbb410dd66fd 100644 --- a/modules/video_output/sdl.c +++ b/modules/video_output/sdl.c @@ -79,7 +79,7 @@ vlc_module_end() * Local prototypes *****************************************************************************/ static picture_pool_t *Pool (vout_display_t *, unsigned); -static void PictureDisplay(vout_display_t *, picture_t *); +static void PictureDisplay(vout_display_t *, picture_t *, subpicture_t *); static int Control(vout_display_t *, int, va_list); static void Manage(vout_display_t *); @@ -438,7 +438,7 @@ static picture_pool_t *Pool(vout_display_t *vd, unsigned count) /** * Display a picture */ -static void PictureDisplay(vout_display_t *vd, picture_t *p_pic) +static void PictureDisplay(vout_display_t *vd, picture_t *p_pic, subpicture_t *p_subpicture) { vout_display_sys_t *sys = vd->sys; @@ -457,6 +457,7 @@ static void PictureDisplay(vout_display_t *vd, picture_t *p_pic) } picture_Release(p_pic); + VLC_UNUSED(p_subpicture); } diff --git a/modules/video_output/snapshot.c b/modules/video_output/snapshot.c index 2827a45807c17534ac848ed903f12cfb92d10162..c9283aad05959fa1b2850f43346d48b126b7fb48 100644 --- a/modules/video_output/snapshot.c +++ b/modules/video_output/snapshot.c @@ -91,7 +91,7 @@ vlc_module_end () * Local prototypes *****************************************************************************/ static picture_pool_t *Pool (vout_display_t *, unsigned); -static void Display(vout_display_t *, picture_t *); +static void Display(vout_display_t *, picture_t *, subpicture_t *); static int Control(vout_display_t *, int, va_list); static void Manage (vout_display_t *); @@ -297,7 +297,7 @@ static mtime_t snapshot_GetMovietime(vout_display_t *vd) return var_GetTime(sys->input, "time") / 1000; } -static void Display(vout_display_t *vd, picture_t *picture) +static void Display(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture) { vout_display_sys_t *sys = vd->sys; diff --git a/modules/video_output/vmem.c b/modules/video_output/vmem.c index 06ed1821354db3b6330891f1efec472a7e497bc5..340c55d3dcd817c89744b590d9a8e92e6fd8baa9 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 Display(vout_display_t *, picture_t *); +static void Display(vout_display_t *, picture_t *, subpicture_t *); static int Control(vout_display_t *, int, va_list); static void Manage (vout_display_t *); @@ -296,7 +296,7 @@ static picture_pool_t *Pool(vout_display_t *vd, unsigned count) return sys->pool; } -static void Display(vout_display_t *vd, picture_t *picture) +static void Display(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture) { vout_display_sys_t *sys = vd->sys; @@ -304,6 +304,7 @@ static void Display(vout_display_t *vd, picture_t *picture) if (sys->display != NULL) sys->display(sys->opaque, picture->p_sys->id); picture_Release(picture); + VLC_UNUSED(subpicture); } static int Control(vout_display_t *vd, int query, va_list args) diff --git a/modules/video_output/xcb/glx.c b/modules/video_output/xcb/glx.c index 6aa89765b05b95a30f9b3c981d9557fc0cdf6ceb..9a4413ef9f475e8e6863bc2a360a7cd1d8fa7787 100644 --- a/modules/video_output/xcb/glx.c +++ b/modules/video_output/xcb/glx.c @@ -76,8 +76,8 @@ struct vout_display_sys_t }; static picture_pool_t *Pool (vout_display_t *, unsigned); -static void PictureRender (vout_display_t *, picture_t *); -static void PictureDisplay (vout_display_t *, picture_t *); +static void PictureRender (vout_display_t *, picture_t *, subpicture_t *); +static void PictureDisplay (vout_display_t *, picture_t *, subpicture_t *); static int Control (vout_display_t *, int, va_list); static void Manage (vout_display_t *); @@ -456,19 +456,21 @@ 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) +static void PictureRender (vout_display_t *vd, picture_t *pic, subpicture_t *subpicture) { vout_display_sys_t *sys = vd->sys; vout_display_opengl_Prepare (&sys->vgl, pic); + (void)subpicture; } -static void PictureDisplay (vout_display_t *vd, picture_t *pic) +static void PictureDisplay (vout_display_t *vd, picture_t *pic, subpicture_t *subpicture) { vout_display_sys_t *sys = vd->sys; vout_display_opengl_Display (&sys->vgl, &vd->source); picture_Release (pic); + (void)subpicture; } static int Control (vout_display_t *vd, int query, va_list ap) diff --git a/modules/video_output/xcb/x11.c b/modules/video_output/xcb/x11.c index d9d8629079dd83dd75975b043bef5779e810f4b1..f674fcdd53775a70d995164f4b55ce7317346f47 100644 --- a/modules/video_output/xcb/x11.c +++ b/modules/video_output/xcb/x11.c @@ -81,7 +81,7 @@ struct vout_display_sys_t }; static picture_pool_t *Pool (vout_display_t *, unsigned); -static void Display (vout_display_t *, picture_t *); +static void Display (vout_display_t *, picture_t *, subpicture_t *subpicture); static int Control (vout_display_t *, int, va_list); static void Manage (vout_display_t *); @@ -421,7 +421,7 @@ static picture_pool_t *Pool (vout_display_t *vd, unsigned requested_count) /** * Sends an image to the X server. */ -static void Display (vout_display_t *vd, picture_t *pic) +static void Display (vout_display_t *vd, picture_t *pic, subpicture_t *subpicture) { vout_display_sys_t *p_sys = vd->sys; xcb_shm_seg_t segment = pic->p_sys->segment; @@ -467,6 +467,7 @@ static void Display (vout_display_t *vd, picture_t *pic) * vout_display wrapper. */ out: picture_Release (pic); + (void)subpicture; } static int Control (vout_display_t *vd, int query, va_list ap) diff --git a/modules/video_output/xcb/xvideo.c b/modules/video_output/xcb/xvideo.c index d812f36977b41efeba6085f4e1165f3dc884ccee..91bc0eb62e7e767e84355e4d52da0a881a9d0fa1 100644 --- a/modules/video_output/xcb/xvideo.c +++ b/modules/video_output/xcb/xvideo.c @@ -96,7 +96,7 @@ struct vout_display_sys_t }; static picture_pool_t *Pool (vout_display_t *, unsigned); -static void Display (vout_display_t *, picture_t *); +static void Display (vout_display_t *, picture_t *, subpicture_t *subpicture); static int Control (vout_display_t *, int, va_list); static void Manage (vout_display_t *); @@ -680,7 +680,7 @@ static picture_pool_t *Pool (vout_display_t *vd, unsigned requested_count) /** * Sends an image to the X server. */ -static void Display (vout_display_t *vd, picture_t *pic) +static void Display (vout_display_t *vd, picture_t *pic, subpicture_t *subpicture) { vout_display_sys_t *p_sys = vd->sys; xcb_shm_seg_t segment = pic->p_sys->segment; @@ -719,6 +719,7 @@ static void Display (vout_display_t *vd, picture_t *pic) } out: picture_Release (pic); + (void)subpicture; } static int Control (vout_display_t *vd, int query, va_list ap) diff --git a/modules/video_output/yuv.c b/modules/video_output/yuv.c index cb2781a2814357e46d2b9888bc622e11b444f909..7868ded3658cadfffe62dee1712c048fdccb7f5d 100644 --- a/modules/video_output/yuv.c +++ b/modules/video_output/yuv.c @@ -81,7 +81,7 @@ static const char *const ppsz_vout_options[] = { /* */ static picture_pool_t *Pool (vout_display_t *, unsigned); -static void Display(vout_display_t *, picture_t *); +static void Display(vout_display_t *, picture_t *, subpicture_t *subpicture); static int Control(vout_display_t *, int, va_list); static void Manage (vout_display_t *); @@ -197,7 +197,7 @@ static picture_pool_t *Pool(vout_display_t *vd, unsigned count) return sys->pool; } -static void Display(vout_display_t *vd, picture_t *picture) +static void Display(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture) { vout_display_sys_t *sys = vd->sys; @@ -260,6 +260,7 @@ static void Display(vout_display_t *vd, picture_t *picture) /* */ picture_Release(picture); + VLC_UNUSED(subpicture); } static int Control(vout_display_t *vd, int query, va_list args) diff --git a/src/video_output/display.c b/src/video_output/display.c index 434ffbff62f85da995647c06f32a883c00ab257d..94da01b804ee4c5d9fdf5880748e02b7e25cf497 100644 --- a/src/video_output/display.c +++ b/src/video_output/display.c @@ -115,6 +115,7 @@ static vout_display_t *vout_display_New(vlc_object_t *obj, vd->info.has_hide_mouse = false; vd->info.has_pictures_invalid = false; vd->info.has_event_thread = false; + vd->info.subpicture_chromas = NULL; vd->cfg = cfg; vd->pool = NULL; @@ -1431,11 +1432,14 @@ static picture_pool_t *SplitterPool(vout_display_t *vd, unsigned count) sys->pool = picture_pool_NewFromFormat(&vd->fmt, count); return sys->pool; } -static void SplitterPrepare(vout_display_t *vd, picture_t *picture) +static void SplitterPrepare(vout_display_t *vd, + picture_t *picture, + subpicture_t *subpicture) { vout_display_sys_t *sys = vd->sys; picture_Hold(picture); + assert(!subpicture); if (video_splitter_Filter(sys->splitter, sys->picture, picture)) { for (int i = 0; i < sys->count; i++) @@ -1448,16 +1452,19 @@ static void SplitterPrepare(vout_display_t *vd, picture_t *picture) if (vout_IsDisplayFiltered(sys->display[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]); + vout_display_Prepare(sys->display[i], sys->picture[i], NULL); } } -static void SplitterDisplay(vout_display_t *vd, picture_t *picture) +static void SplitterDisplay(vout_display_t *vd, + picture_t *picture, + subpicture_t *subpicture) { vout_display_sys_t *sys = vd->sys; + assert(!subpicture); for (int i = 0; i < sys->count; i++) { if (sys->picture[i]) - vout_display_Display(sys->display[i], sys->picture[i]); + vout_display_Display(sys->display[i], sys->picture[i], NULL); } picture_Release(picture); } diff --git a/src/video_output/video_output.c b/src/video_output/video_output.c index fe4d95681cad47441449f6c4e037ba3281c717ba..0c72b2d353722877aced1211f322f621e40c43ac 100644 --- a/src/video_output/video_output.c +++ b/src/video_output/video_output.c @@ -956,7 +956,7 @@ static int ThreadDisplayRenderPicture(vout_thread_t *vout, bool is_forced) vout_snapshot_Set(&vout->p->snapshot, &vd->source, direct); /* Render the direct buffer returned by vout_RenderPicture */ - vout_RenderWrapper(vout, direct); + vout_RenderWrapper(vout, direct, NULL); vout_chrono_Stop(&vout->p->render); #if 0 @@ -980,7 +980,7 @@ static int ThreadDisplayRenderPicture(vout_thread_t *vout, bool is_forced) /* Display the direct buffer returned by vout_RenderPicture */ vout->p->displayed.date = mdate(); - vout_DisplayWrapper(vout, direct); + vout_DisplayWrapper(vout, direct, NULL); vout_statistic_Update(&vout->p->statistic, 1, 0); diff --git a/src/video_output/vout_internal.h b/src/video_output/vout_internal.h index 5b2d3011df4b7e730014bd5eeba604f96a6635b4..0dcd6f886cda79bc2995270420caa373e3732549 100644 --- a/src/video_output/vout_internal.h +++ b/src/video_output/vout_internal.h @@ -161,8 +161,8 @@ void vout_CloseWrapper(vout_thread_t *, vout_display_state_t *); int vout_InitWrapper(vout_thread_t *); void vout_EndWrapper(vout_thread_t *); void vout_ManageWrapper(vout_thread_t *); -void vout_RenderWrapper(vout_thread_t *, picture_t *); -void vout_DisplayWrapper(vout_thread_t *, picture_t *); +void vout_RenderWrapper(vout_thread_t *, picture_t *, subpicture_t *); +void vout_DisplayWrapper(vout_thread_t *, picture_t *, subpicture_t *); /* */ int spu_ProcessMouse(spu_t *, const vlc_mouse_t *, const video_format_t *); diff --git a/src/video_output/vout_wrapper.c b/src/video_output/vout_wrapper.c index 8ff36b8e80e2a44f82e877ce0a450aaff453b7f5..4ed32559c6030252a64cae33fcecfea564e5c747 100644 --- a/src/video_output/vout_wrapper.c +++ b/src/video_output/vout_wrapper.c @@ -207,7 +207,8 @@ void vout_ManageWrapper(vout_thread_t *vout) /***************************************************************************** * Render *****************************************************************************/ -void vout_RenderWrapper(vout_thread_t *vout, picture_t *picture) +void vout_RenderWrapper(vout_thread_t *vout, + picture_t *picture, subpicture_t *subpicture) { vout_thread_sys_t *sys = vout->p; vout_display_t *vd = sys->display.vd; @@ -216,24 +217,28 @@ void vout_RenderWrapper(vout_thread_t *vout, picture_t *picture) vout_UpdateDisplaySourceProperties(vd, &picture->format); if (sys->display.use_dr) { - vout_display_Prepare(vd, picture); + vout_display_Prepare(vd, picture, subpicture); } else { sys->display.filtered = vout_FilterDisplay(vd, picture); if (sys->display.filtered) - vout_display_Prepare(vd, sys->display.filtered); + vout_display_Prepare(vd, sys->display.filtered, subpicture); } } /***************************************************************************** * *****************************************************************************/ -void vout_DisplayWrapper(vout_thread_t *vout, picture_t *picture) +void vout_DisplayWrapper(vout_thread_t *vout, + picture_t *picture, subpicture_t *subpicture) { vout_thread_sys_t *sys = vout->p; vout_display_t *vd = sys->display.vd; - vout_display_Display(vd, sys->display.filtered ? sys->display.filtered : picture); - sys->display.filtered = NULL; + vout_display_Display(vd, + sys->display.filtered ? sys->display.filtered + : picture, + subpicture); + sys->display.filtered = NULL; } #ifdef WIN32