* 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;
/**
*/
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);
/**
* 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);
}
/**
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 *);
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));
* 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);
/* */
/**
* 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;
#else
VLC_UNUSED(picture);
#endif
+ VLC_UNUSED(subpicture);
aa_fastrender(sys->aa_context, 0, 0,
vd->fmt.i_width, vd->fmt.i_height);
/**
* 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);
}
/**
* 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);
/* */
/**
* 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;
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);
}
/**
* 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 *);
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;
primary->Flip(primary, NULL, 0);
}
picture_Release(picture);
+ VLC_UNUSED(subpicture);
}
static int Control(vout_display_t *vd, int query, va_list args)
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)
* 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 *);
}
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;
picture_Copy(sys->picture, picture);
picture_Release(picture);
+ VLC_UNUSED(subpicture);
}
static int Control(vout_display_t *vd, int query, va_list args)
{
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);
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)
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);
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];
[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)
* 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 *);
/**
* 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;
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;
}
picture_Release(picture);
+ VLC_UNUSED(subpicture);
CommonDisplay(vd);
}
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 *);
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
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;
#if 0
VLC_UNUSED(picture);
+ VLC_UNUSED(subpicture);
#else
/* XXX See Prepare() */
Direct3DLockSurface(picture);
picture_Release(picture);
+ VLC_UNUSED(subpicture);
#endif
CommonDisplay(vd);
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 *);
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;
CommonDisplay(vd);
picture_Release(picture);
+ VLC_UNUSED(subpicture);
}
static int Control(vout_display_t *vd, int query, va_list args)
{
* 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 *);
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);
}
* 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 *);
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;
#endif
/* TODO */
picture_Release(picture);
+ VLC_UNUSED(subpicture);
CommonDisplay(vd);
}
* 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 *);
/**
* 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;
}
picture_Release(p_pic);
+ VLC_UNUSED(p_subpicture);
}
* 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 *);
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;
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 *);
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;
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)
};
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 *);
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)
};
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 *);
/**
* 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;
* vout_display wrapper. */
out:
picture_Release (pic);
+ (void)subpicture;
}
static int Control (vout_display_t *vd, int query, va_list ap)
};
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 *);
/**
* 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;
}
out:
picture_Release (pic);
+ (void)subpicture;
}
static int Control (vout_display_t *vd, int query, va_list ap)
/* */
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 *);
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;
/* */
picture_Release(picture);
+ VLC_UNUSED(subpicture);
}
static int Control(vout_display_t *vd, int query, va_list args)
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;
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++)
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);
}
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
/* 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);
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 *);
/*****************************************************************************
* 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;
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