set_description( N_("Dummy video output function") )
set_section( N_( "Dummy Video output" ), NULL )
set_capability( "vout display", 1 )
- set_callbacks( OpenVideo, NULL )
+ set_callbacks( OpenVideo, CloseVideo )
set_category( CAT_VIDEO )
set_subcategory( SUBCAT_VIDEO_VOUT )
add_category_hint( N_("Video"), NULL, false )
set_description( N_("Stats video output function") )
set_capability( "vout display", 0 )
add_shortcut( "stats" )
- set_callbacks( OpenVideoStat, NULL )
+ set_callbacks( OpenVideoStat, CloseVideo )
add_submodule ()
set_description( N_("Dummy font renderer function") )
set_capability( "text renderer", 1 )
int OpenVideo ( vlc_object_t * );
int OpenVideoStat( vlc_object_t * );
+void CloseVideo ( vlc_object_t * );
int OpenRenderer ( vlc_object_t * );
/*****************************************************************************
* Local prototypes
*****************************************************************************/
-static picture_t *Get(vout_display_t *);
-static void Display(vout_display_t *, picture_t *);
-static void DisplayStat(vout_display_t *, picture_t *);
-static int Control(vout_display_t *, int, va_list);
-static void Manage (vout_display_t *);
+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 int Control(vout_display_t *, int, va_list);
+static void Manage (vout_display_t *);
/*****************************************************************************
* OpenVideo: activates dummy vout display method
static int OpenVideoCommon(vlc_object_t *object, bool display_stat)
{
vout_display_t *vd = (vout_display_t *)object;
+ vout_display_sys_t *sys;
+
+ vd->sys = sys = calloc(1, sizeof(*sys));
+ if (!sys)
+ return VLC_EGENERIC;
+ sys->pool = NULL;
/* p_vd->info is not modified */
}
free(chroma);
}
- vd->get = Get;
+ vd->pool = Pool;
vd->prepare = NULL;
vd->display = display_stat ? DisplayStat : Display;
vd->control = Control;
- vd->manage = Manage;
+ vd->manage = Manage;
return VLC_SUCCESS;
}
return OpenVideoCommon(object, true);
}
-static picture_t *Get(vout_display_t *vd)
+void CloseVideo(vlc_object_t *object)
{
- VLC_UNUSED(vd);
- return picture_NewFromFormat(&vd->fmt);
+ vout_display_t *vd = (vout_display_t *)object;
+ vout_display_sys_t *sys = vd->sys;
+
+ picture_pool_Delete(sys->pool);
+ free(sys);
+}
+
+static picture_pool_t *Pool(vout_display_t *vd, unsigned count)
+{
+ vout_display_sys_t *sys = vd->sys;
+ if (!sys->pool)
+ sys->pool = picture_pool_NewFromFormat(&vd->fmt, count);
+ return sys->pool;
}
static void Display(vout_display_t *vd, picture_t *picture)
/*****************************************************************************
* Local prototypes
*****************************************************************************/
-static picture_t *Get (vout_display_t *);
-static void Prepare(vout_display_t *, picture_t *);
-static void Display(vout_display_t *, picture_t *);
-static int Control(vout_display_t *, int, va_list);
+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 int Control(vout_display_t *, int, va_list);
/* */
static void Manage(vout_display_t *);
vd->fmt = fmt;
vd->info = info;
- vd->get = Get;
+ vd->pool = Pool;
vd->prepare = Prepare;
vd->display = Display;
vd->control = Control;
- vd->manage = Manage;
+ vd->manage = Manage;
/* Inspect initial configuration and send correction events
* FIXME how to handle aspect ratio with aa ? */
}
/**
- * Return a direct buffer
+ * Return a pool of direct buffers
*/
-static picture_t *Get(vout_display_t *vd)
+static picture_pool_t *Pool(vout_display_t *vd, unsigned count)
{
vout_display_sys_t *sys = vd->sys;
+ VLC_UNUSED(count);
if (!sys->pool) {
picture_resource_t rsc;
return NULL;
sys->pool = picture_pool_New(1, &p_picture);
- if (!sys->pool)
- return NULL;
}
-
- return picture_pool_Get(sys->pool);
+ return sys->pool;
}
/**
/*****************************************************************************
* Local prototypes
*****************************************************************************/
-static picture_t *Get (vout_display_t *);
-static void Prepare(vout_display_t *, picture_t *);
-static void Display(vout_display_t *, picture_t *);
-static int Control(vout_display_t *, int, va_list);
+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 int Control(vout_display_t *, int, va_list);
/* */
static void Manage(vout_display_t *);
fmt.i_bmask = 0x000000ff;
}
- /* */
- sys->pool = picture_pool_NewFromFormat(&fmt, 1);
- if (!sys->pool)
- goto error;
-
/* TODO */
vout_display_info_t info = vd->info;
vd->fmt = fmt;
vd->info = info;
- vd->get = Get;
+ vd->pool = Pool;
vd->prepare = Prepare;
vd->display = Display;
vd->control = Control;
- vd->manage = Manage;
+ vd->manage = Manage;
/* Fix initial state */
vout_display_SendEventFullscreen(vd, false);
vout_display_t *vd = (vout_display_t *)object;
vout_display_sys_t *sys = vd->sys;
- picture_pool_Delete(sys->pool);
+ if (sys->pool)
+ picture_pool_Delete(sys->pool);
if (sys->dither)
cucul_free_dither(sys->dither);
caca_free_display(sys->dp);
}
/**
- * Return a direct buffer
+ * Return a pool of direct buffers
*/
-static picture_t *Get(vout_display_t *vd)
+static picture_pool_t *Pool(vout_display_t *vd, unsigned count)
{
vout_display_sys_t *sys = vd->sys;
- return picture_pool_Get(sys->pool);
+ if (!sys->pool)
+ sys->pool = picture_pool_NewFromFormat(&vd->fmt, count);
+ return sys->pool;
}
/**
/*****************************************************************************
* Local prototypes
*****************************************************************************/
-static picture_t *Get (vout_display_t *);
-static void Display(vout_display_t *, picture_t *);
-static int Control(vout_display_t *, int, va_list);
-static void Manage (vout_display_t *);
+static picture_pool_t *Pool (vout_display_t *, unsigned);
+static void Display(vout_display_t *, picture_t *);
+static int Control(vout_display_t *, int, va_list);
+static void Manage (vout_display_t *);
/* */
static int OpenDisplay (vout_display_t *);
/* */
vd->fmt = fmt;
vd->info = info;
- vd->get = Get;
+ vd->pool = Pool;
vd->prepare = NULL;
vd->display = Display;
vd->control = Control;
}
/* */
-static picture_t *Get(vout_display_t *vd)
+static picture_pool_t *Pool(vout_display_t *vd, unsigned count)
{
vout_display_sys_t *sys = vd->sys;
- if (!sys->pool) {
- sys->pool = picture_pool_NewFromFormat(&vd->fmt, 1);
- if (!sys->pool)
- return NULL;
- }
- return picture_pool_Get(sys->pool);
+ if (!sys->pool)
+ sys->pool = picture_pool_NewFromFormat(&vd->fmt, count);
+ return sys->pool;
}
static void Display(vout_display_t *vd, picture_t *picture)
/*****************************************************************************
* Local prototypes
*****************************************************************************/
-static picture_t *Get (vout_display_t *);
-static void Display(vout_display_t *, picture_t *);
-static int Control(vout_display_t *, int, va_list);
-static void Manage (vout_display_t *);
+static picture_pool_t *Pool (vout_display_t *, unsigned);
+static void Display(vout_display_t *, picture_t *);
+static int Control(vout_display_t *, int, va_list);
+static void Manage (vout_display_t *);
/* */
static int OpenDisplay (vout_display_t *, bool force_resolution);
/* */
vd->fmt = fmt;
vd->info = info;
- vd->get = Get;
+ vd->pool = Pool;
vd->prepare = NULL;
vd->display = Display;
vd->control = Control;
}
/* */
-static picture_t *Get(vout_display_t *vd)
+static picture_pool_t *Pool(vout_display_t *vd, unsigned count)
{
vout_display_sys_t *sys = vd->sys;
if (sys->is_hw_accel)
sys->pool = picture_pool_New(1, &sys->picture);
else
- sys->pool = picture_pool_NewFromFormat(&vd->fmt, 1);
- if (!sys->pool)
- return NULL;
+ sys->pool = picture_pool_NewFromFormat(&vd->fmt, count);
}
- return picture_pool_Get(sys->pool);
+ return sys->pool;
}
static void Display(vout_display_t *vd, picture_t *picture)
{
static int Open(vlc_object_t *);
-static picture_t *Get (vout_display_t *);
-static void Prepare(vout_display_t *, picture_t *);
-static void Display(vout_display_t *, picture_t *);
-static int Control(vout_display_t *, int, va_list);
-static void Manage (vout_display_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 int Control(vout_display_t *, int, va_list);
+static void Manage (vout_display_t *);
static int Direct3DCreate (vout_display_t *);
static int Direct3DReset (vout_display_t *);
vd->fmt = fmt;
vd->info = info;
- vd->get = Get;
+ vd->pool = Pool;
vd->prepare = Prepare;
vd->display = Display;
vd->control = Control;
}
/* */
-static picture_t *Get(vout_display_t *vd)
+static picture_pool_t *Pool(vout_display_t *vd, unsigned count)
{
- vout_display_sys_t *sys = vd->sys;
-
- if (!sys->pool)
- return NULL;
- return picture_pool_Get(sys->pool);
+ VLC_UNUSED(count);
+ return vd->sys->pool;
}
static int Direct3DLockSurface(picture_t *);
/*****************************************************************************
* Local prototypes.
*****************************************************************************/
-static picture_t *Get (vout_display_t *);
-static void Prepare(vout_display_t *, picture_t *);
-static void Display(vout_display_t *, picture_t *);
-static int Control(vout_display_t *, int, va_list);
-static void Manage (vout_display_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 int Control(vout_display_t *, int, va_list);
+static void Manage (vout_display_t *);
-static void Swap (vout_opengl_t *);
+static void Swap (vout_opengl_t *);
/**
* It creates an OpenGL vout display.
vd->fmt = fmt;
vd->info = info;
- vd->get = Get;
+ vd->pool = Pool;
vd->prepare = Prepare;
vd->display = Display;
vd->control = Control;
}
/* */
-static picture_t *Get(vout_display_t *vd)
+static picture_pool_t *Pool(vout_display_t *vd, unsigned count)
{
vout_display_sys_t *sys = vd->sys;
+ VLC_UNUSED(count);
- if (!sys->pool) {
+ if (!sys->pool)
sys->pool = vout_display_opengl_GetPool(&sys->vgl);
- if (!sys->pool)
- return NULL;
- }
- return picture_pool_Get(sys->pool);
+ return sys->pool;
}
static void Prepare(vout_display_t *vd, picture_t *picture)
/*****************************************************************************
* Local prototypes
*****************************************************************************/
-static picture_t *Get (vout_display_t *);
-static void Display(vout_display_t *, picture_t *);
-static int Control(vout_display_t *, int, va_list);
-static void Manage(vout_display_t *);
+static picture_pool_t *Pool (vout_display_t *, unsigned);
+static void Display(vout_display_t *, picture_t *);
+static int Control(vout_display_t *, int, va_list);
+static void Manage(vout_display_t *);
/* */
static int ConvertKey(SDLKey);
vd->fmt = fmt;
vd->info = info;
- vd->get = Get;
+ vd->pool = Pool;
vd->prepare = NULL;
vd->display = Display;
vd->control = Control;
}
/**
- * Return a direct buffer
+ * Return a pool of direct buffers
*/
-static picture_t *Get(vout_display_t *vd)
+static picture_pool_t *Pool(vout_display_t *vd, unsigned count)
{
vout_display_sys_t *sys = vd->sys;
+ VLC_UNUSED(count);
if (!sys->pool) {
picture_resource_t rsc;
return NULL;
sys->pool = picture_pool_New(1, &picture);
- if (!sys->pool)
- return NULL;
}
- return picture_pool_Get(sys->pool);
+ return sys->pool;
}
/**
/*****************************************************************************
* Local prototypes
*****************************************************************************/
-static picture_t *Get (vout_display_t *);
-static void Display(vout_display_t *, picture_t *);
-static int Control(vout_display_t *, int, va_list);
-static void Manage (vout_display_t *);
+static picture_pool_t *Pool (vout_display_t *, unsigned);
+static void Display(vout_display_t *, picture_t *);
+static int Control(vout_display_t *, int, va_list);
+static void Manage (vout_display_t *);
typedef struct {
mtime_t date; /* Presentation time */
/* */
vd->fmt = fmt;
vd->info = info;
- vd->get = Get;
+ vd->pool = Pool;
vd->prepare = NULL;
vd->display = Display;
vd->control = Control;
/*****************************************************************************
*
*****************************************************************************/
-static picture_t *Get(vout_display_t *vd)
+static picture_pool_t *Pool(vout_display_t *vd, unsigned count)
{
- return picture_pool_Get(vd->sys->pool);
+ VLC_UNUSED(count);
+ return vd->sys->pool;
}
/* Return the position in ms from the start of the movie */
picture_pool_t *pool;
};
-static picture_t *Get (vout_display_t *);
-static void Display(vout_display_t *, picture_t *);
-static int Control(vout_display_t *, int, va_list);
-static void Manage (vout_display_t *);
+static picture_pool_t *Pool (vout_display_t *, unsigned);
+static void Display(vout_display_t *, picture_t *);
+static int Control(vout_display_t *, int, va_list);
+static void Manage (vout_display_t *);
-static int Lock(picture_t *);
-static void Unlock(picture_t *);
+static int Lock(picture_t *);
+static void Unlock(picture_t *);
/*****************************************************************************
* Open: allocates video thread
/* */
vd->fmt = fmt;
vd->info = info;
- vd->get = Get;
+ vd->pool = Pool;
vd->prepare = NULL;
vd->display = Display;
vd->control = Control;
}
/* */
-static picture_t *Get(vout_display_t *vd)
+static picture_pool_t *Pool(vout_display_t *vd, unsigned count)
{
- return picture_pool_Get(vd->sys->pool);
+ VLC_UNUSED(count);
+ return vd->sys->pool;
}
static void Display(vout_display_t *vd, picture_t *picture)
picture->p_sys = malloc(sizeof(*picture->p_sys));
if (sys->use_dr) {
- picture_t *direct = vout_display_Get(vd);
+ picture_pool_t *pool = vout_display_Pool(vd, picture_max);
+ if (!pool)
+ break;
+ picture_t *direct = picture_pool_Get(pool);
if (!direct)
break;
picture->format = direct->format;
picture_pool_t *pool; /* picture pool */
};
-static picture_t *Get (vout_display_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 int Control (vout_display_t *, int, va_list);
/* Setup vout_display_t once everything is fine */
vd->info = info;
- vd->get = Get;
+ vd->pool = Pool;
vd->prepare = PictureRender;
vd->display = PictureDisplay;
vd->control = Control;
/**
* Return a direct buffer
*/
-static picture_t *Get (vout_display_t *vd)
+static picture_pool_t *Pool (vout_display_t *vd, unsigned requested_count)
{
vout_display_sys_t *sys = vd->sys;
+ (void)requested_count;
if (!sys->pool)
- {
sys->pool = vout_display_opengl_GetPool (&sys->vgl);
- if (!sys->pool)
- return NULL;
- }
- return picture_pool_Get (sys->pool);
+ return sys->pool;
}
static void PictureRender (vout_display_t *vd, picture_t *pic)
picture_resource_t resource[MAX_PICTURES];
};
-static picture_t *Get (vout_display_t *);
+static picture_pool_t *Pool (vout_display_t *, unsigned);
static void Display (vout_display_t *, picture_t *);
static int Control (vout_display_t *, int, va_list);
static void Manage (vout_display_t *);
vd->fmt = fmt_pic;
vd->info = info;
- vd->get = Get;
+ vd->pool = Pool;
vd->prepare = NULL;
vd->display = Display;
vd->control = Control;
/**
* Return a direct buffer
*/
-static picture_t *Get (vout_display_t *vd)
+static picture_pool_t *Pool (vout_display_t *vd, unsigned requested_count)
{
vout_display_sys_t *p_sys = vd->sys;
+ (void)requested_count;
if (!p_sys->pool)
{
return NULL;
p_sys->pool = picture_pool_New (count, pic_array);
- if (!p_sys->pool)
- {
- /* TODO release picture resources */
- return NULL;
- }
- /* FIXME should also do it in case of error ? */
+ /* TODO release picture resources if NULL */
xcb_flush (p_sys->conn);
}
- return picture_pool_Get (p_sys->pool);
+ return p_sys->pool;
}
/**
picture_resource_t resource[MAX_PICTURES];
};
-static picture_t *Get (vout_display_t *);
+static picture_pool_t *Pool (vout_display_t *, unsigned);
static void Display (vout_display_t *, picture_t *);
static int Control (vout_display_t *, int, va_list);
static void Manage (vout_display_t *);
vd->fmt = fmt;
vd->info = info;
- vd->get = Get;
+ vd->pool = Pool;
vd->prepare = NULL;
vd->display = Display;
vd->control = Control;
/**
* Return a direct buffer
*/
-static picture_t *Get (vout_display_t *vd)
+static picture_pool_t *Pool (vout_display_t *vd, unsigned requested_count)
{
vout_display_sys_t *p_sys = vd->sys;
+ (void)requested_count;
if (!p_sys->pool)
{
return NULL;
p_sys->pool = picture_pool_New (count, pic_array);
- if (!p_sys->pool)
- {
- /* TODO release picture resources */
- return NULL;
- }
- /* FIXME should also do it in case of error ? */
+ /* TODO release picture resources if NULL */
xcb_flush (p_sys->conn);
}
- return picture_pool_Get (p_sys->pool);
+ return p_sys->pool;
}
/**
};
/* */
-static picture_t *Get (vout_display_t *);
-static void Display(vout_display_t *, picture_t *);
-static int Control(vout_display_t *, int, va_list);
-static void Manage (vout_display_t *);
+static picture_pool_t *Pool (vout_display_t *, unsigned);
+static void Display(vout_display_t *, picture_t *);
+static int Control(vout_display_t *, int, va_list);
+static void Manage (vout_display_t *);
/*****************************************************************************
* vout_display_sys_t: video output descriptor
FILE *f;
bool is_first;
bool is_yuv4mpeg2;
- bool use_dr;
picture_pool_t *pool;
};
return VLC_EGENERIC;
}
}
- sys->use_dr = chroma == vd->fmt.i_chroma;
msg_Dbg(vd, "Using chroma %4.4s", (char *)&chroma);
/* */
/* */
vd->fmt = fmt;
vd->info = info;
- vd->get = Get;
+ vd->pool = Pool;
vd->prepare = NULL;
vd->display = Display;
vd->control = Control;
/*****************************************************************************
*
*****************************************************************************/
-static picture_t *Get(vout_display_t *vd)
+static picture_pool_t *Pool(vout_display_t *vd, unsigned count)
{
vout_display_sys_t *sys = vd->sys;
- if (!sys->pool) {
- sys->pool = picture_pool_NewFromFormat(&vd->fmt, sys->use_dr ? VOUT_MAX_PICTURES : 1);
- if (!sys->pool)
- return NULL;
- }
- return picture_pool_Get(sys->pool);
+ if (!sys->pool)
+ sys->pool = picture_pool_NewFromFormat(&vd->fmt, count);
+ return sys->pool;
}
static void Display(vout_display_t *vd, picture_t *picture)