summaryrefslogtreecommitdiffstats
path: root/video
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-01-24 21:22:25 +0100
committerwm4 <wm4@nowhere>2014-01-24 21:22:25 +0100
commit2e66f4b89b525f15a709df95ac86cccbcab6bd49 (patch)
tree8c08885e202b4fa25f4de1652c8813014290617d /video
parent7a6227a18476aee655df5dc76d27c281cc3590c2 (diff)
downloadmpv-2e66f4b89b525f15a709df95ac86cccbcab6bd49.tar.bz2
mpv-2e66f4b89b525f15a709df95ac86cccbcab6bd49.tar.xz
video/out: do remaining config to reconfig replacements
The main difference between the old and new callbacks is that the old callbacks required passing the window size, which is and always was very inconvenient and confusing, since the window size is already in vo->dwidth and vo->dheight.
Diffstat (limited to 'video')
-rw-r--r--video/out/vo.c16
-rw-r--r--video/out/vo.h14
-rw-r--r--video/out/vo_caca.c14
-rw-r--r--video/out/vo_direct3d.c32
-rw-r--r--video/out/vo_lavc.c16
-rw-r--r--video/out/vo_null.c6
-rw-r--r--video/out/vo_opengl_old.c22
-rw-r--r--video/out/vo_sdl.c19
-rw-r--r--video/out/vo_vdpau.c16
-rw-r--r--video/out/vo_xv.c16
10 files changed, 63 insertions, 108 deletions
diff --git a/video/out/vo.c b/video/out/vo.c
index 334cc9958f..66c148135d 100644
--- a/video/out/vo.c
+++ b/video/out/vo.c
@@ -431,21 +431,11 @@ int vo_reconfig(struct vo *vo, struct mp_image_params *params, int flags)
vo->dwidth = d_width;
vo->dheight = d_height;
- struct mp_image_params p2 = *params;
-
talloc_free(vo->params);
- vo->params = talloc_memdup(vo, &p2, sizeof(p2));;
+ vo->params = talloc_memdup(vo, params, sizeof(*params));
- int ret;
- if (vo->driver->reconfig) {
- ret = vo->driver->reconfig(vo, &p2, flags);
- } else {
- // Old config() takes window size, while reconfig() takes aspect (!)
- ret = vo->driver->config(vo, p2.w, p2.h, d_width, d_height, flags,
- p2.imgfmt);
- ret = ret ? -1 : 0;
- }
- vo->config_ok = (ret >= 0);
+ int ret = vo->driver->reconfig(vo, vo->params, flags);
+ vo->config_ok = ret >= 0;
vo->config_count += vo->config_ok;
if (!vo->config_ok) {
talloc_free(vo->params);
diff --git a/video/out/vo.h b/video/out/vo.h
index df5ef5ecd9..47c6a1ed96 100644
--- a/video/out/vo.h
+++ b/video/out/vo.h
@@ -155,20 +155,6 @@ struct vo_driver {
/*
* Initialize or reconfigure the display driver.
- * width,height: image source size
- * d_width,d_height: requested window size, just a hint
- * flags: combination of VOFLAG_ values
- * title: window title, if available
- * format: fourcc of pixel format
- * returns : zero on successful initialization, non-zero on error.
- */
- int (*config)(struct vo *vo, uint32_t width, uint32_t height,
- uint32_t d_width, uint32_t d_height, uint32_t flags,
- uint32_t format);
-
- /*
- * Initialize or reconfigure the display driver. Alternative to config(),
- * and can carry more image parameters.
* params: video parameters, like pixel format and frame size
* flags: combination of VOFLAG_ values
* returns: < 0 on error, >= 0 on success
diff --git a/video/out/vo_caca.c b/video/out/vo_caca.c
index 13885b510e..9cc6835c9a 100644
--- a/video/out/vo_caca.c
+++ b/video/out/vo_caca.c
@@ -83,7 +83,7 @@ static int resize(struct vo *vo)
rmask, gmask, bmask, amask);
if (dither == NULL) {
MP_FATAL(vo, "caca_create_dither failed!\n");
- return ENOSYS;
+ return -1;
}
dither_buffer =
talloc_array(NULL, uint8_t, depth * image_width * image_height);
@@ -97,13 +97,11 @@ static int resize(struct vo *vo)
return 0;
}
-static int config(struct vo *vo, uint32_t width, uint32_t height,
- uint32_t d_width, uint32_t d_height, uint32_t flags,
- uint32_t format)
+static int reconfig(struct vo *vo, struct mp_image_params *params, int flags)
{
- image_height = height;
- image_width = width;
- image_format = format;
+ image_height = params->h;
+ image_width = params->w;
+ image_format = params->imgfmt;
return resize(vo);
}
@@ -290,7 +288,7 @@ const struct vo_driver video_out_caca = {
.description = "libcaca",
.preinit = preinit,
.query_format = query_format,
- .config = config,
+ .reconfig = reconfig,
.control = control,
.draw_image = draw_image,
.flip_page = flip_page,
diff --git a/video/out/vo_direct3d.c b/video/out/vo_direct3d.c
index eae04eecb8..0dde474f62 100644
--- a/video/out/vo_direct3d.c
+++ b/video/out/vo_direct3d.c
@@ -1260,19 +1260,7 @@ static int control(struct vo *vo, uint32_t request, void *data)
return r;
}
-/** @brief libvo Callback: Configre the Direct3D adapter.
- * @param width Movie source width
- * @param height Movie source height
- * @param d_width Screen (destination) width
- * @param d_height Screen (destination) height
- * @param options Options bitmap
- * @param format Movie colorspace format (using MPlayer's
- * defines, e.g. IMGFMT_YUYV)
- * @return 0 on success, VO_ERROR on failure
- */
-static int config(struct vo *vo, uint32_t width, uint32_t height,
- uint32_t d_width, uint32_t d_height, uint32_t options,
- uint32_t format)
+static int reconfig(struct vo *vo, struct mp_image_params *params, int flags)
{
d3d_priv *priv = vo->priv;
@@ -1281,20 +1269,20 @@ static int config(struct vo *vo, uint32_t width, uint32_t height,
/* w32_common framework call. Creates window on the screen with
* the given coordinates.
*/
- if (!vo_w32_config(vo, d_width, d_height, options)) {
+ if (!vo_w32_config(vo, vo->dwidth, vo->dheight, flags)) {
MP_VERBOSE(priv, "Creating window failed.\n");
return VO_ERROR;
}
- if ((priv->image_format != format)
- || (priv->src_width != width)
- || (priv->src_height != height))
+ if ((priv->image_format != params->imgfmt)
+ || (priv->src_width != params->w)
+ || (priv->src_height != params->h))
{
d3d_destroy_video_objects(priv);
- priv->src_width = width;
- priv->src_height = height;
- init_rendering_mode(priv, format, true);
+ priv->src_width = params->w;
+ priv->src_height = params->h;
+ init_rendering_mode(priv, params->imgfmt, true);
}
if (!resize_d3d(priv))
@@ -1737,7 +1725,7 @@ const struct vo_driver video_out_direct3d = {
.name = "direct3d",
.preinit = preinit,
.query_format = query_format,
- .config = config,
+ .reconfig = reconfig,
.control = control,
.draw_image = draw_image,
.draw_osd = draw_osd,
@@ -1753,7 +1741,7 @@ const struct vo_driver video_out_direct3d_shaders = {
.name = "direct3d_shaders",
.preinit = preinit,
.query_format = query_format,
- .config = config,
+ .reconfig = reconfig,
.control = control,
.draw_image = draw_image,
.draw_osd = draw_osd,
diff --git a/video/out/vo_lavc.c b/video/out/vo_lavc.c
index fe5bbcf775..e96556b1e8 100644
--- a/video/out/vo_lavc.c
+++ b/video/out/vo_lavc.c
@@ -89,20 +89,20 @@ static void uninit(struct vo *vo)
vo->priv = NULL;
}
-static int config(struct vo *vo, uint32_t width, uint32_t height,
- uint32_t d_width, uint32_t d_height, uint32_t flags,
- uint32_t format)
+static int reconfig(struct vo *vo, struct mp_image_params *params, int flags)
{
struct priv *vc = vo->priv;
- enum AVPixelFormat pix_fmt = imgfmt2pixfmt(format);
+ enum AVPixelFormat pix_fmt = imgfmt2pixfmt(params->imgfmt);
AVRational display_aspect_ratio, image_aspect_ratio;
AVRational aspect;
+ uint32_t width = params->w;
+ uint32_t height = params->h;
if (!vc)
return -1;
- display_aspect_ratio.num = d_width;
- display_aspect_ratio.den = d_height;
+ display_aspect_ratio.num = params->d_w;
+ display_aspect_ratio.den = params->d_h;
image_aspect_ratio.num = width;
image_aspect_ratio.den = height;
aspect = av_div_q(display_aspect_ratio, image_aspect_ratio);
@@ -137,7 +137,7 @@ static int config(struct vo *vo, uint32_t width, uint32_t height,
if (pix_fmt == AV_PIX_FMT_NONE) {
MP_FATAL(vo, "Format %s not supported by lavc.\n",
- mp_imgfmt_to_name(format));
+ mp_imgfmt_to_name(params->imgfmt));
goto error;
}
@@ -524,7 +524,7 @@ const struct vo_driver video_out_lavc = {
.name = "lavc",
.preinit = preinit,
.query_format = query_format,
- .config = config,
+ .reconfig = reconfig,
.control = control,
.uninit = uninit,
.draw_image = draw_image,
diff --git a/video/out/vo_null.c b/video/out/vo_null.c
index b59eb13e81..8d8d95d065 100644
--- a/video/out/vo_null.c
+++ b/video/out/vo_null.c
@@ -43,9 +43,7 @@ static int query_format(struct vo *vo, uint32_t format)
return VFCAP_CSP_SUPPORTED;
}
-static int config(struct vo *vo, uint32_t width, uint32_t height,
- uint32_t d_width, uint32_t d_height, uint32_t flags,
- uint32_t format)
+static int reconfig(struct vo *vo, struct mp_image_params *params, int flags)
{
return 0;
}
@@ -69,7 +67,7 @@ const struct vo_driver video_out_null = {
.name = "null",
.preinit = preinit,
.query_format = query_format,
- .config = config,
+ .reconfig = reconfig,
.control = control,
.draw_image = draw_image,
.flip_page = flip_page,
diff --git a/video/out/vo_opengl_old.c b/video/out/vo_opengl_old.c
index 0d877c5946..9ebf6c4c0e 100644
--- a/video/out/vo_opengl_old.c
+++ b/video/out/vo_opengl_old.c
@@ -1709,30 +1709,28 @@ static bool config_window(struct vo *vo, uint32_t d_width, uint32_t d_height,
return mpgl_config_window(p->glctx, mpgl_caps, d_width, d_height, flags);
}
-static int config(struct vo *vo, uint32_t width, uint32_t height,
- uint32_t d_width, uint32_t d_height, uint32_t flags,
- uint32_t format)
+static int reconfig(struct vo *vo, struct mp_image_params *params, int flags)
{
struct gl_priv *p = vo->priv;
- struct mp_imgfmt_desc desc = mp_imgfmt_get_desc(format);
+ struct mp_imgfmt_desc desc = mp_imgfmt_get_desc(params->imgfmt);
- p->image_height = height;
- p->image_width = width;
- p->image_format = format;
+ p->image_height = params->h;
+ p->image_width = params->w;
+ p->image_format = params->imgfmt;
p->is_yuv = !!(desc.flags & MP_IMGFLAG_YUV_P);
p->is_yuv |= (desc.chroma_xs << 8) | (desc.chroma_ys << 16);
- if (format == IMGFMT_Y8)
+ if (p->image_format == IMGFMT_Y8)
p->is_yuv = 0;
- glFindFormat(format, p->have_texture_rg, NULL, &p->texfmt, &p->gl_format,
- &p->gl_type);
+ glFindFormat(p->image_format, p->have_texture_rg, NULL, &p->texfmt,
+ &p->gl_format, &p->gl_type);
p->vo_flipped = !!(flags & VOFLAG_FLIPPING);
if (vo->config_count)
uninitGl(vo);
- if (!config_window(vo, d_width, d_height, flags))
+ if (!config_window(vo, vo->dwidth, vo->dheight, flags))
return -1;
initGl(vo, vo->dwidth, vo->dheight);
@@ -2165,7 +2163,7 @@ const struct vo_driver video_out_opengl_old = {
.name = "opengl-old",
.preinit = preinit,
.query_format = query_format,
- .config = config,
+ .reconfig = reconfig,
.control = control,
.draw_image = draw_image,
.draw_osd = draw_osd,
diff --git a/video/out/vo_sdl.c b/video/out/vo_sdl.c
index 3f743a17a4..915909578e 100644
--- a/video/out/vo_sdl.c
+++ b/video/out/vo_sdl.c
@@ -398,11 +398,11 @@ static void set_fullscreen(struct vo *vo)
force_resize(vo);
}
-static int config(struct vo *vo, uint32_t width, uint32_t height,
- uint32_t d_width, uint32_t d_height, uint32_t flags,
- uint32_t format)
+static int reconfig(struct vo *vo, struct mp_image_params *params, int flags)
{
struct priv *vc = vo->priv;
+ int win_w = vo->dwidth;
+ int win_h = vo->dheight;
if (vc->reinit_renderer) {
destroy_renderer(vo);
@@ -410,9 +410,9 @@ static int config(struct vo *vo, uint32_t width, uint32_t height,
}
if (vc->window)
- SDL_SetWindowSize(vc->window, d_width, d_height);
+ SDL_SetWindowSize(vc->window, win_w, win_h);
else {
- if (init_renderer(vo, d_width, d_height) != 0)
+ if (init_renderer(vo, win_w, win_h) != 0)
return -1;
}
@@ -432,14 +432,15 @@ static int config(struct vo *vo, uint32_t width, uint32_t height,
vc->tex_swapped = texfmt == SDL_PIXELFORMAT_YV12;
vc->tex = SDL_CreateTexture(vc->renderer, texfmt,
- SDL_TEXTUREACCESS_STREAMING, width, height);
+ SDL_TEXTUREACCESS_STREAMING,
+ params->w, params->h);
if (!vc->tex) {
MP_ERR(vo, "Could not create a texture\n");
return -1;
}
mp_image_t *texmpi = &vc->texmpi;
- mp_image_set_size(texmpi, width, height);
+ mp_image_set_size(texmpi, params->w, params->h);
mp_image_setfmt(texmpi, format);
switch (texmpi->num_planes) {
case 1:
@@ -452,7 +453,7 @@ static int config(struct vo *vo, uint32_t width, uint32_t height,
return -1;
}
- resize(vo, d_width, d_height);
+ resize(vo, win_w, win_h);
SDL_DisableScreenSaver();
@@ -1011,7 +1012,7 @@ const struct vo_driver video_out_sdl = {
},
.preinit = preinit,
.query_format = query_format,
- .config = config,
+ .reconfig = reconfig,
.control = control,
.draw_image = draw_image,
.uninit = uninit,
diff --git a/video/out/vo_vdpau.c b/video/out/vo_vdpau.c
index 90460a9ff4..0385d0505a 100644
--- a/video/out/vo_vdpau.c
+++ b/video/out/vo_vdpau.c
@@ -781,9 +781,7 @@ static bool status_ok(struct vo *vo)
* connect to X server, create and map window, initialize all
* VDPAU objects, create different surfaces etc.
*/
-static int config(struct vo *vo, uint32_t width, uint32_t height,
- uint32_t d_width, uint32_t d_height, uint32_t flags,
- uint32_t format)
+static int reconfig(struct vo *vo, struct mp_image_params *params, int flags)
{
struct vdpctx *vc = vo->priv;
@@ -791,17 +789,17 @@ static int config(struct vo *vo, uint32_t width, uint32_t height,
return -1;
vc->flip = flags & VOFLAG_FLIPPING;
- vc->image_format = format;
- vc->vid_width = width;
- vc->vid_height = height;
+ vc->image_format = params->imgfmt;
+ vc->vid_width = params->w;
+ vc->vid_height = params->h;
- vc->rgb_mode = get_rgb_format(format) >= 0;
+ vc->rgb_mode = get_rgb_format(params->imgfmt) >= 0;
vc->deint = vc->rgb_mode ? 0 : vc->user_deint;
free_video_specific(vo);
- vo_x11_config_vo_window(vo, NULL, d_width, d_height, flags, "vdpau");
+ vo_x11_config_vo_window(vo, NULL, vo->dwidth, vo->dheight, flags, "vdpau");
if (initialize_vdpau_objects(vo) < 0)
return -1;
@@ -1513,7 +1511,7 @@ const struct vo_driver video_out_vdpau = {
.name = "vdpau",
.preinit = preinit,
.query_format = query_format,
- .config = config,
+ .reconfig = reconfig,
.control = control,
.draw_image = draw_image,
.get_buffered_frame = set_next_frame_info,
diff --git a/video/out/vo_xv.c b/video/out/vo_xv.c
index 9f63c2ba49..d9995ffa96 100644
--- a/video/out/vo_xv.c
+++ b/video/out/vo_xv.c
@@ -417,12 +417,10 @@ static void resize(struct vo *vo)
}
/*
- * connect to server, create and map window,
+ * create and map window,
* allocate colors and (shared) memory
*/
-static int config(struct vo *vo, uint32_t width, uint32_t height,
- uint32_t d_width, uint32_t d_height, uint32_t flags,
- uint32_t format)
+static int reconfig(struct vo *vo, struct mp_image_params *params, int flags)
{
struct vo_x11_state *x11 = vo->x11;
struct xvctx *ctx = vo->priv;
@@ -430,9 +428,9 @@ static int config(struct vo *vo, uint32_t width, uint32_t height,
mp_image_unrefp(&ctx->original_image);
- ctx->image_height = height;
- ctx->image_width = width;
- ctx->image_format = format;
+ ctx->image_height = params->h;
+ ctx->image_width = params->w;
+ ctx->image_format = params->imgfmt;
if ((ctx->max_width != 0 && ctx->max_height != 0)
&& (ctx->image_width > ctx->max_width
@@ -449,7 +447,7 @@ static int config(struct vo *vo, uint32_t width, uint32_t height,
MP_VERBOSE(vo, "Xvideo image format: 0x%x (%4.4s) %s\n",
ctx->fo[i].id, (char *) &ctx->fo[i].id,
(ctx->fo[i].format == XvPacked) ? "packed" : "planar");
- if (ctx->fo[i].id == find_xv_format(format))
+ if (ctx->fo[i].id == find_xv_format(ctx->image_format))
ctx->xv_format = ctx->fo[i].id;
}
if (!ctx->xv_format)
@@ -889,7 +887,7 @@ const struct vo_driver video_out_xv = {
.name = "xv",
.preinit = preinit,
.query_format = query_format,
- .config = config,
+ .reconfig = reconfig,
.control = control,
.draw_image = draw_image,
.draw_osd = draw_osd,