mirror of https://github.com/mpv-player/mpv
video/out: replace VOCTRL_QUERY_FORMAT with vo_driver.query_format
This commit is contained in:
parent
191bcbd1f2
commit
58d3469fd6
|
@ -113,7 +113,7 @@ static int control(struct vf_instance *vf, int request, void *data)
|
||||||
|
|
||||||
static int query_format(struct vf_instance *vf, unsigned int fmt)
|
static int query_format(struct vf_instance *vf, unsigned int fmt)
|
||||||
{
|
{
|
||||||
int flags = vo_control(video_out, VOCTRL_QUERY_FORMAT, &fmt);
|
int flags = video_out->driver->query_format(video_out, fmt);
|
||||||
// draw_slice() accepts stride, draw_frame() doesn't:
|
// draw_slice() accepts stride, draw_frame() doesn't:
|
||||||
if (flags)
|
if (flags)
|
||||||
if (fmt == IMGFMT_YV12 || fmt == IMGFMT_I420 || fmt == IMGFMT_IYUV)
|
if (fmt == IMGFMT_YV12 || fmt == IMGFMT_I420 || fmt == IMGFMT_IYUV)
|
||||||
|
|
|
@ -390,7 +390,7 @@ int vo_config(struct vo *vo, uint32_t width, uint32_t height,
|
||||||
vo->dheight = d_height;
|
vo->dheight = d_height;
|
||||||
}
|
}
|
||||||
|
|
||||||
vo->default_caps = vo_control(vo, VOCTRL_QUERY_FORMAT, &format);
|
vo->default_caps = vo->driver->query_format(vo, format);
|
||||||
|
|
||||||
int ret = vo->driver->config(vo, width, height, d_width, d_height, flags,
|
int ret = vo->driver->config(vo, width, height, d_width, d_height, flags,
|
||||||
format);
|
format);
|
||||||
|
|
|
@ -36,10 +36,8 @@
|
||||||
#define VO_EVENT_MOVE 16
|
#define VO_EVENT_MOVE 16
|
||||||
|
|
||||||
enum mp_voctrl {
|
enum mp_voctrl {
|
||||||
/* does the device support the required format */
|
|
||||||
VOCTRL_QUERY_FORMAT = 1,
|
|
||||||
/* signal a device reset seek */
|
/* signal a device reset seek */
|
||||||
VOCTRL_RESET,
|
VOCTRL_RESET = 1,
|
||||||
/* used to switch to fullscreen */
|
/* used to switch to fullscreen */
|
||||||
VOCTRL_FULLSCREEN,
|
VOCTRL_FULLSCREEN,
|
||||||
/* signal a device pause */
|
/* signal a device pause */
|
||||||
|
@ -154,6 +152,14 @@ struct vo_driver {
|
||||||
* returns: zero on successful initialization, non-zero on error.
|
* returns: zero on successful initialization, non-zero on error.
|
||||||
*/
|
*/
|
||||||
int (*preinit)(struct vo *vo, const char *arg);
|
int (*preinit)(struct vo *vo, const char *arg);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Whether the given image format is supported and config() will succeed.
|
||||||
|
* format: fourcc of pixel format
|
||||||
|
* returns: 0 on not supported, otherwise a bitmask of VFCAP_* values
|
||||||
|
*/
|
||||||
|
int (*query_format)(struct vo *vo, uint32_t format);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize (means CONFIGURE) the display driver.
|
* Initialize (means CONFIGURE) the display driver.
|
||||||
* params:
|
* params:
|
||||||
|
|
|
@ -355,7 +355,7 @@ static int preinit(struct vo *vo, const char *arg)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int query_format(uint32_t format)
|
static int query_format(struct vo *vo, uint32_t format)
|
||||||
{
|
{
|
||||||
if (format == IMGFMT_BGR24)
|
if (format == IMGFMT_BGR24)
|
||||||
return VFCAP_OSD | VFCAP_CSP_SUPPORTED;
|
return VFCAP_OSD | VFCAP_CSP_SUPPORTED;
|
||||||
|
@ -365,12 +365,7 @@ static int query_format(uint32_t format)
|
||||||
|
|
||||||
static int control(struct vo *vo, uint32_t request, void *data)
|
static int control(struct vo *vo, uint32_t request, void *data)
|
||||||
{
|
{
|
||||||
switch (request) {
|
return VO_NOTIMPL;
|
||||||
case VOCTRL_QUERY_FORMAT:
|
|
||||||
return query_format(*((uint32_t *)data));
|
|
||||||
default:
|
|
||||||
return VO_NOTIMPL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const struct vo_driver video_out_caca = {
|
const struct vo_driver video_out_caca = {
|
||||||
|
@ -381,6 +376,7 @@ const struct vo_driver video_out_caca = {
|
||||||
""
|
""
|
||||||
},
|
},
|
||||||
.preinit = preinit,
|
.preinit = preinit,
|
||||||
|
.query_format = query_format,
|
||||||
.config = config,
|
.config = config,
|
||||||
.control = control,
|
.control = control,
|
||||||
.draw_image = draw_image,
|
.draw_image = draw_image,
|
||||||
|
|
|
@ -385,8 +385,6 @@ static int control(struct vo *vo, uint32_t request, void *data)
|
||||||
{
|
{
|
||||||
struct priv *p = vo->priv;
|
struct priv *p = vo->priv;
|
||||||
switch (request) {
|
switch (request) {
|
||||||
case VOCTRL_QUERY_FORMAT:
|
|
||||||
return query_format(vo, *(uint32_t*)data);
|
|
||||||
case VOCTRL_ONTOP:
|
case VOCTRL_ONTOP:
|
||||||
p->mpglctx->ontop(vo);
|
p->mpglctx->ontop(vo);
|
||||||
return VO_TRUE;
|
return VO_TRUE;
|
||||||
|
@ -442,6 +440,7 @@ const struct vo_driver video_out_corevideo = {
|
||||||
""
|
""
|
||||||
},
|
},
|
||||||
.preinit = preinit,
|
.preinit = preinit,
|
||||||
|
.query_format = query_format,
|
||||||
.config = config,
|
.config = config,
|
||||||
.control = control,
|
.control = control,
|
||||||
.draw_image = draw_image,
|
.draw_image = draw_image,
|
||||||
|
|
|
@ -1212,8 +1212,9 @@ static bool init_rendering_mode(d3d_priv *priv, uint32_t fmt, bool initialize)
|
||||||
* @return 0 on failure, device capabilities (not probed
|
* @return 0 on failure, device capabilities (not probed
|
||||||
* currently) on success.
|
* currently) on success.
|
||||||
*/
|
*/
|
||||||
static int query_format(d3d_priv *priv, uint32_t movie_fmt)
|
static int query_format(struct vo *vo, uint32_t movie_fmt)
|
||||||
{
|
{
|
||||||
|
d3d_priv *priv = vo->priv;
|
||||||
if (!init_rendering_mode(priv, movie_fmt, false))
|
if (!init_rendering_mode(priv, movie_fmt, false))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -1444,8 +1445,6 @@ static int control(struct vo *vo, uint32_t request, void *data)
|
||||||
d3d_priv *priv = vo->priv;
|
d3d_priv *priv = vo->priv;
|
||||||
|
|
||||||
switch (request) {
|
switch (request) {
|
||||||
case VOCTRL_QUERY_FORMAT:
|
|
||||||
return query_format(priv, *(uint32_t*) data);
|
|
||||||
case VOCTRL_FULLSCREEN:
|
case VOCTRL_FULLSCREEN:
|
||||||
vo_w32_fullscreen(vo);
|
vo_w32_fullscreen(vo);
|
||||||
resize_d3d(priv);
|
resize_d3d(priv);
|
||||||
|
@ -2066,6 +2065,7 @@ const struct vo_driver video_out_direct3d = {
|
||||||
""
|
""
|
||||||
},
|
},
|
||||||
.preinit = preinit_standard,
|
.preinit = preinit_standard,
|
||||||
|
.query_format = query_format,
|
||||||
.config = config,
|
.config = config,
|
||||||
.control = control,
|
.control = control,
|
||||||
.draw_image = draw_image,
|
.draw_image = draw_image,
|
||||||
|
@ -2084,6 +2084,7 @@ const struct vo_driver video_out_direct3d_shaders = {
|
||||||
""
|
""
|
||||||
},
|
},
|
||||||
.preinit = preinit_shaders,
|
.preinit = preinit_shaders,
|
||||||
|
.query_format = query_format,
|
||||||
.config = config,
|
.config = config,
|
||||||
.control = control,
|
.control = control,
|
||||||
.draw_image = draw_image,
|
.draw_image = draw_image,
|
||||||
|
|
|
@ -146,8 +146,6 @@ static int control(struct vo *vo, uint32_t request, void *data)
|
||||||
struct priv *p = vo->priv;
|
struct priv *p = vo->priv;
|
||||||
|
|
||||||
switch (request) {
|
switch (request) {
|
||||||
case VOCTRL_QUERY_FORMAT:
|
|
||||||
return query_format(vo, *(uint32_t *)data);
|
|
||||||
case VOCTRL_SET_YUV_COLORSPACE:
|
case VOCTRL_SET_YUV_COLORSPACE:
|
||||||
p->colorspace = *(struct mp_csp_details *)data;
|
p->colorspace = *(struct mp_csp_details *)data;
|
||||||
return true;
|
return true;
|
||||||
|
@ -182,6 +180,7 @@ const struct vo_driver video_out_image =
|
||||||
{0},
|
{0},
|
||||||
},
|
},
|
||||||
.preinit = preinit,
|
.preinit = preinit,
|
||||||
|
.query_format = query_format,
|
||||||
.config = config,
|
.config = config,
|
||||||
.control = control,
|
.control = control,
|
||||||
.draw_image = draw_image,
|
.draw_image = draw_image,
|
||||||
|
|
|
@ -512,8 +512,6 @@ static int control(struct vo *vo, uint32_t request, void *data)
|
||||||
{
|
{
|
||||||
struct priv *vc = vo->priv;
|
struct priv *vc = vo->priv;
|
||||||
switch (request) {
|
switch (request) {
|
||||||
case VOCTRL_QUERY_FORMAT:
|
|
||||||
return query_format(vo, *((uint32_t *)data));
|
|
||||||
case VOCTRL_SET_YUV_COLORSPACE:
|
case VOCTRL_SET_YUV_COLORSPACE:
|
||||||
vc->colorspace = *(struct mp_csp_details *)data;
|
vc->colorspace = *(struct mp_csp_details *)data;
|
||||||
if (vc->stream) {
|
if (vc->stream) {
|
||||||
|
@ -539,6 +537,7 @@ const struct vo_driver video_out_lavc = {
|
||||||
""
|
""
|
||||||
},
|
},
|
||||||
.preinit = preinit,
|
.preinit = preinit,
|
||||||
|
.query_format = query_format,
|
||||||
.config = config,
|
.config = config,
|
||||||
.control = control,
|
.control = control,
|
||||||
.uninit = uninit,
|
.uninit = uninit,
|
||||||
|
|
|
@ -81,10 +81,6 @@ static int preinit(struct vo *vo, const char *arg)
|
||||||
|
|
||||||
static int control(struct vo *vo, uint32_t request, void *data)
|
static int control(struct vo *vo, uint32_t request, void *data)
|
||||||
{
|
{
|
||||||
switch (request) {
|
|
||||||
case VOCTRL_QUERY_FORMAT:
|
|
||||||
return query_format(vo, *((uint32_t *)data));
|
|
||||||
}
|
|
||||||
return VO_NOTIMPL;
|
return VO_NOTIMPL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -96,6 +92,7 @@ const struct vo_driver video_out_null = {
|
||||||
""
|
""
|
||||||
},
|
},
|
||||||
.preinit = preinit,
|
.preinit = preinit,
|
||||||
|
.query_format = query_format,
|
||||||
.config = config,
|
.config = config,
|
||||||
.control = control,
|
.control = control,
|
||||||
.draw_image = draw_image,
|
.draw_image = draw_image,
|
||||||
|
|
|
@ -1660,7 +1660,7 @@ static bool init_format(int fmt, struct gl_priv *init)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int query_format(uint32_t format)
|
static int query_format(struct vo *vo, uint32_t format)
|
||||||
{
|
{
|
||||||
int caps = VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_FLIP |
|
int caps = VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_FLIP |
|
||||||
VFCAP_ACCEPT_STRIDE | VFCAP_OSD;
|
VFCAP_ACCEPT_STRIDE | VFCAP_OSD;
|
||||||
|
@ -1735,8 +1735,6 @@ static int control(struct vo *vo, uint32_t request, void *data)
|
||||||
struct gl_priv *p = vo->priv;
|
struct gl_priv *p = vo->priv;
|
||||||
|
|
||||||
switch (request) {
|
switch (request) {
|
||||||
case VOCTRL_QUERY_FORMAT:
|
|
||||||
return query_format(*(uint32_t *)data);
|
|
||||||
case VOCTRL_ONTOP:
|
case VOCTRL_ONTOP:
|
||||||
if (!p->glctx->ontop)
|
if (!p->glctx->ontop)
|
||||||
break;
|
break;
|
||||||
|
@ -2257,6 +2255,7 @@ const struct vo_driver video_out_opengl = {
|
||||||
""
|
""
|
||||||
},
|
},
|
||||||
.preinit = preinit,
|
.preinit = preinit,
|
||||||
|
.query_format = query_format,
|
||||||
.config = config,
|
.config = config,
|
||||||
.control = control,
|
.control = control,
|
||||||
.draw_image = draw_image,
|
.draw_image = draw_image,
|
||||||
|
@ -2275,6 +2274,7 @@ const struct vo_driver video_out_opengl_hq = {
|
||||||
""
|
""
|
||||||
},
|
},
|
||||||
.preinit = preinit,
|
.preinit = preinit,
|
||||||
|
.query_format = query_format,
|
||||||
.config = config,
|
.config = config,
|
||||||
.control = control,
|
.control = control,
|
||||||
.draw_image = draw_image,
|
.draw_image = draw_image,
|
||||||
|
|
|
@ -1081,8 +1081,6 @@ static int control(struct vo *vo, uint32_t request, void *data)
|
||||||
struct gl_priv *p = vo->priv;
|
struct gl_priv *p = vo->priv;
|
||||||
|
|
||||||
switch (request) {
|
switch (request) {
|
||||||
case VOCTRL_QUERY_FORMAT:
|
|
||||||
return query_format(vo, *(uint32_t *)data);
|
|
||||||
case VOCTRL_ONTOP:
|
case VOCTRL_ONTOP:
|
||||||
if (!p->glctx->ontop)
|
if (!p->glctx->ontop)
|
||||||
break;
|
break;
|
||||||
|
@ -1170,6 +1168,7 @@ const struct vo_driver video_out_opengl_old = {
|
||||||
""
|
""
|
||||||
},
|
},
|
||||||
.preinit = preinit,
|
.preinit = preinit,
|
||||||
|
.query_format = query_format,
|
||||||
.config = config,
|
.config = config,
|
||||||
.control = control,
|
.control = control,
|
||||||
.draw_image = draw_image,
|
.draw_image = draw_image,
|
||||||
|
|
|
@ -995,9 +995,6 @@ static int control(struct vo *vo, uint32_t request, void *data)
|
||||||
{
|
{
|
||||||
struct priv *vc = vo->priv;
|
struct priv *vc = vo->priv;
|
||||||
switch (request) {
|
switch (request) {
|
||||||
case VOCTRL_QUERY_FORMAT:
|
|
||||||
return query_format(vo, *((uint32_t *)data));
|
|
||||||
return 0;
|
|
||||||
case VOCTRL_FULLSCREEN:
|
case VOCTRL_FULLSCREEN:
|
||||||
set_fullscreen(vo, !vo_fs);
|
set_fullscreen(vo, !vo_fs);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -1055,6 +1052,7 @@ const struct vo_driver video_out_sdl = {
|
||||||
{NULL}
|
{NULL}
|
||||||
},
|
},
|
||||||
.preinit = preinit,
|
.preinit = preinit,
|
||||||
|
.query_format = query_format,
|
||||||
.config = config,
|
.config = config,
|
||||||
.control = control,
|
.control = control,
|
||||||
.draw_image = draw_image,
|
.draw_image = draw_image,
|
||||||
|
|
|
@ -1427,7 +1427,7 @@ static uint32_t get_image(struct vo *vo, mp_image_t *mpi)
|
||||||
return VO_TRUE;
|
return VO_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int query_format(uint32_t format)
|
static int query_format(struct vo *vo, uint32_t format)
|
||||||
{
|
{
|
||||||
int default_flags = VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW
|
int default_flags = VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW
|
||||||
| VFCAP_OSD | VFCAP_FLIP;
|
| VFCAP_OSD | VFCAP_FLIP;
|
||||||
|
@ -1604,8 +1604,6 @@ static int control(struct vo *vo, uint32_t request, void *data)
|
||||||
if (vc->dropped_frame)
|
if (vc->dropped_frame)
|
||||||
vo->want_redraw = true;
|
vo->want_redraw = true;
|
||||||
return true;
|
return true;
|
||||||
case VOCTRL_QUERY_FORMAT:
|
|
||||||
return query_format(*(uint32_t *)data);
|
|
||||||
case VOCTRL_GET_IMAGE:
|
case VOCTRL_GET_IMAGE:
|
||||||
return get_image(vo, data);
|
return get_image(vo, data);
|
||||||
case VOCTRL_BORDER:
|
case VOCTRL_BORDER:
|
||||||
|
@ -1686,6 +1684,7 @@ const struct vo_driver video_out_vdpau = {
|
||||||
""
|
""
|
||||||
},
|
},
|
||||||
.preinit = preinit,
|
.preinit = preinit,
|
||||||
|
.query_format = query_format,
|
||||||
.config = config,
|
.config = config,
|
||||||
.control = control,
|
.control = control,
|
||||||
.draw_image_pts = draw_image,
|
.draw_image_pts = draw_image,
|
||||||
|
|
|
@ -598,8 +598,6 @@ static int control(struct vo *vo, uint32_t request, void *data)
|
||||||
return p->int_pause = 1;
|
return p->int_pause = 1;
|
||||||
case VOCTRL_RESUME:
|
case VOCTRL_RESUME:
|
||||||
return p->int_pause = 0;
|
return p->int_pause = 0;
|
||||||
case VOCTRL_QUERY_FORMAT:
|
|
||||||
return query_format(vo, *((uint32_t *) data));
|
|
||||||
case VOCTRL_FULLSCREEN:
|
case VOCTRL_FULLSCREEN:
|
||||||
vo_x11_fullscreen(vo);
|
vo_x11_fullscreen(vo);
|
||||||
vo_x11_clearwindow(vo, vo->x11->window);
|
vo_x11_clearwindow(vo, vo->x11->window);
|
||||||
|
@ -649,6 +647,7 @@ const struct vo_driver video_out_x11 = {
|
||||||
#endif
|
#endif
|
||||||
},
|
},
|
||||||
.preinit = preinit,
|
.preinit = preinit,
|
||||||
|
.query_format = query_format,
|
||||||
.config = config,
|
.config = config,
|
||||||
.control = control,
|
.control = control,
|
||||||
.draw_image = draw_image,
|
.draw_image = draw_image,
|
||||||
|
|
|
@ -463,8 +463,9 @@ static void draw_image(struct vo *vo, mp_image_t *mpi)
|
||||||
mp_draw_sub_backup_reset(ctx->osd_backup);
|
mp_draw_sub_backup_reset(ctx->osd_backup);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int query_format(struct xvctx *ctx, uint32_t format)
|
static int query_format(struct vo *vo, uint32_t format)
|
||||||
{
|
{
|
||||||
|
struct xvctx *ctx = vo->priv;
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
int flag = VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_OSD | VFCAP_ACCEPT_STRIDE; // FIXME! check for DOWN
|
int flag = VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_OSD | VFCAP_ACCEPT_STRIDE; // FIXME! check for DOWN
|
||||||
|
|
||||||
|
@ -640,8 +641,6 @@ static int control(struct vo *vo, uint32_t request, void *data)
|
||||||
return (ctx->is_paused = 1);
|
return (ctx->is_paused = 1);
|
||||||
case VOCTRL_RESUME:
|
case VOCTRL_RESUME:
|
||||||
return (ctx->is_paused = 0);
|
return (ctx->is_paused = 0);
|
||||||
case VOCTRL_QUERY_FORMAT:
|
|
||||||
return query_format(ctx, *((uint32_t *) data));
|
|
||||||
case VOCTRL_GET_PANSCAN:
|
case VOCTRL_GET_PANSCAN:
|
||||||
return VO_TRUE;
|
return VO_TRUE;
|
||||||
case VOCTRL_FULLSCREEN:
|
case VOCTRL_FULLSCREEN:
|
||||||
|
@ -691,6 +690,7 @@ static int control(struct vo *vo, uint32_t request, void *data)
|
||||||
const struct vo_driver video_out_xv = {
|
const struct vo_driver video_out_xv = {
|
||||||
.info = &info,
|
.info = &info,
|
||||||
.preinit = preinit,
|
.preinit = preinit,
|
||||||
|
.query_format = query_format,
|
||||||
.config = config,
|
.config = config,
|
||||||
.control = control,
|
.control = control,
|
||||||
.draw_image = draw_image,
|
.draw_image = draw_image,
|
||||||
|
|
Loading…
Reference in New Issue