aboutsummaryrefslogtreecommitdiffstats
path: root/libavdevice
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2014-05-02 18:46:20 +0200
committerMichael Niedermayer <michaelni@gmx.at>2014-05-02 18:46:25 +0200
commitcea9ee5dbd9312076676693be4dfadb0664ea420 (patch)
tree54798510ff5c7fc69501edbb28df4a8127bca668 /libavdevice
parent41a679000f22884017107e90bfbcf2069c69d08c (diff)
parentfa4f7b17bc120effb82874538d895da1c92ba886 (diff)
downloadffmpeg-cea9ee5dbd9312076676693be4dfadb0664ea420.tar.gz
Merge remote-tracking branch 'lukaszmluki/master'
* lukaszmluki/master: lavd/xv: reident after previous commits lavf/mux: pass options to nested structs of priv data lavu/opt: add av_opt_set_dict2() function lavd/opengl_enc: fix window size correction code lavd/opengl_enc: add window size param lavd/opengl_enc: use flag to mark inited context Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavdevice')
-rw-r--r--libavdevice/opengl_enc.c25
-rw-r--r--libavdevice/version.h2
-rw-r--r--libavdevice/xv.c23
3 files changed, 31 insertions, 19 deletions
diff --git a/libavdevice/opengl_enc.c b/libavdevice/opengl_enc.c
index 5f9748dd6f..28a01181a0 100644
--- a/libavdevice/opengl_enc.c
+++ b/libavdevice/opengl_enc.c
@@ -178,6 +178,7 @@ typedef struct OpenGLContext {
#endif
FFOpenGLFunctions glprocs;
+ int inited; ///< Set to 1 when write_header was successfully called.
uint8_t background[4]; ///< Background color
int no_window; ///< 0 for create default window
char *window_title; ///< Title of the window
@@ -309,8 +310,7 @@ static int opengl_resize(AVFormatContext *h, int width, int height)
OpenGLContext *opengl = h->priv_data;
opengl->window_width = width;
opengl->window_height = height;
- /* max_viewport_width == 0 means write_header was not called yet. */
- if (opengl->max_viewport_width) {
+ if (opengl->inited) {
if (opengl->no_window &&
(ret = avdevice_dev_to_app_control_message(h, AV_DEV_TO_APP_PREPARE_WINDOW_BUFFER, NULL , 0)) < 0) {
av_log(opengl, AV_LOG_ERROR, "Application failed to prepare window buffer.\n");
@@ -407,7 +407,8 @@ static int av_cold opengl_sdl_create_window(AVFormatContext *h)
av_log(opengl, AV_LOG_ERROR, "Unable to initialize SDL: %s\n", SDL_GetError());
return AVERROR_EXTERNAL;
}
- if ((ret = opengl_sdl_recreate_window(opengl, opengl->width, opengl->height)) < 0)
+ if ((ret = opengl_sdl_recreate_window(opengl, opengl->window_width,
+ opengl->window_height)) < 0)
return ret;
av_log(opengl, AV_LOG_INFO, "SDL driver: '%s'.\n", SDL_VideoDriverName(buffer, sizeof(buffer)));
message.width = opengl->surface->w;
@@ -871,8 +872,8 @@ static av_cold int opengl_prepare_vertex(AVFormatContext *s)
int tex_w, tex_h;
if (opengl->window_width > opengl->max_viewport_width || opengl->window_height > opengl->max_viewport_height) {
- opengl->window_width = FFMAX(opengl->window_width, opengl->max_viewport_width);
- opengl->window_height = FFMAX(opengl->window_height, opengl->max_viewport_height);
+ opengl->window_width = FFMIN(opengl->window_width, opengl->max_viewport_width);
+ opengl->window_height = FFMIN(opengl->window_height, opengl->max_viewport_height);
av_log(opengl, AV_LOG_WARNING, "Too big viewport requested, limited to %dx%d", opengl->window_width, opengl->window_height);
}
glViewport(0, 0, opengl->window_width, opengl->window_height);
@@ -951,7 +952,12 @@ static int opengl_create_window(AVFormatContext *h)
return AVERROR(ENOSYS);
#endif
} else {
- if ((ret = avdevice_dev_to_app_control_message(h, AV_DEV_TO_APP_CREATE_WINDOW_BUFFER, NULL , 0)) < 0) {
+ AVDeviceRect message;
+ message.x = message.y = 0;
+ message.width = opengl->window_width;
+ message.height = opengl->window_height;
+ if ((ret = avdevice_dev_to_app_control_message(h, AV_DEV_TO_APP_CREATE_WINDOW_BUFFER,
+ &message , sizeof(message))) < 0) {
av_log(opengl, AV_LOG_ERROR, "Application failed to create window buffer.\n");
return ret;
}
@@ -1067,6 +1073,10 @@ static av_cold int opengl_write_header(AVFormatContext *h)
opengl->width = st->codec->width;
opengl->height = st->codec->height;
opengl->pix_fmt = st->codec->pix_fmt;
+ if (!opengl->window_width)
+ opengl->window_width = opengl->width;
+ if (!opengl->window_height)
+ opengl->window_height = opengl->height;
if (!opengl->window_title && !opengl->no_window)
opengl->window_title = av_strdup(h->filename);
@@ -1110,6 +1120,8 @@ static av_cold int opengl_write_header(AVFormatContext *h)
ret = AVERROR_EXTERNAL;
OPENGL_ERROR_CHECK(opengl);
+
+ opengl->inited = 1;
return 0;
fail:
@@ -1266,6 +1278,7 @@ static const AVOption options[] = {
{ "background", "set background color", OFFSET(background), AV_OPT_TYPE_COLOR, {.str = "black"}, CHAR_MIN, CHAR_MAX, ENC },
{ "no_window", "disable default window", OFFSET(no_window), AV_OPT_TYPE_INT, {.i64 = 0}, INT_MIN, INT_MAX, ENC },
{ "window_title", "set window title", OFFSET(window_title), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, ENC },
+ { "window_size", "set window size", OFFSET(window_width), AV_OPT_TYPE_IMAGE_SIZE, {.str = NULL}, 0, 0, ENC },
{ NULL }
};
diff --git a/libavdevice/version.h b/libavdevice/version.h
index 4267872042..163a4c63c2 100644
--- a/libavdevice/version.h
+++ b/libavdevice/version.h
@@ -29,7 +29,7 @@
#define LIBAVDEVICE_VERSION_MAJOR 55
#define LIBAVDEVICE_VERSION_MINOR 13
-#define LIBAVDEVICE_VERSION_MICRO 100
+#define LIBAVDEVICE_VERSION_MICRO 101
#define LIBAVDEVICE_VERSION_INT AV_VERSION_INT(LIBAVDEVICE_VERSION_MAJOR, \
LIBAVDEVICE_VERSION_MINOR, \
diff --git a/libavdevice/xv.c b/libavdevice/xv.c
index 7353310892..d1f8907d99 100644
--- a/libavdevice/xv.c
+++ b/libavdevice/xv.c
@@ -145,19 +145,18 @@ static int xv_write_header(AVFormatContext *s)
}
}
if (!xv->window_id) {
- //TODO: reident
- xv->window = XCreateSimpleWindow(xv->display, DefaultRootWindow(xv->display),
- xv->window_x, xv->window_y,
- xv->window_width, xv->window_height,
- 0, 0, 0);
- if (!xv->window_title) {
- if (!(xv->window_title = av_strdup(s->filename))) {
- ret = AVERROR(ENOMEM);
- goto fail;
+ xv->window = XCreateSimpleWindow(xv->display, DefaultRootWindow(xv->display),
+ xv->window_x, xv->window_y,
+ xv->window_width, xv->window_height,
+ 0, 0, 0);
+ if (!xv->window_title) {
+ if (!(xv->window_title = av_strdup(s->filename))) {
+ ret = AVERROR(ENOMEM);
+ goto fail;
+ }
}
- }
- XStoreName(xv->display, xv->window, xv->window_title);
- XMapWindow(xv->display, xv->window);
+ XStoreName(xv->display, xv->window, xv->window_title);
+ XMapWindow(xv->display, xv->window);
} else
xv->window = xv->window_id;