summaryrefslogtreecommitdiff
path: root/libavdevice
diff options
context:
space:
mode:
authorLukasz Marek <lukasz.m.luki@gmail.com>2014-02-01 14:39:37 +0100
committerLukasz Marek <lukasz.m.luki@gmail.com>2014-02-02 02:23:25 +0100
commit4afe1c1178556c82ef3b4602dd693cb2ceee6369 (patch)
treec2b84e788d157305639b66c98ef32af3f7ecc2ee /libavdevice
parentc9074b992e31ed7b03e6141829f9aaeb7e5823f4 (diff)
lavd/opengl_enc: factorize create/release window functions
Signed-off-by: Lukasz Marek <lukasz.m.luki@gmail.com>
Diffstat (limited to 'libavdevice')
-rw-r--r--libavdevice/opengl_enc.c70
1 files changed, 45 insertions, 25 deletions
diff --git a/libavdevice/opengl_enc.c b/libavdevice/opengl_enc.c
index f2145852ed..b91b32c9b5 100644
--- a/libavdevice/opengl_enc.c
+++ b/libavdevice/opengl_enc.c
@@ -889,6 +889,49 @@ static int opengl_prepare(OpenGLContext *opengl)
return AVERROR_EXTERNAL;
}
+static int opengl_create_window(AVFormatContext *h)
+{
+ OpenGLContext *opengl = h->priv_data;
+ int ret;
+
+ if (!opengl->no_window) {
+#if HAVE_SDL
+ if ((ret = opengl_sdl_create_window(h)) < 0) {
+ av_log(opengl, AV_LOG_ERROR, "Cannot create default SDL window.\n");
+ return ret;
+ }
+#else
+ av_log(opengl, AV_LOG_ERROR, "FFmpeg is compiled without SDL. Cannot create default window.\n");
+ return AVERROR(ENOSYS);
+#endif
+ } else {
+ if ((ret = avdevice_dev_to_app_control_message(h, AV_DEV_TO_APP_CREATE_WINDOW_BUFFER, NULL , 0)) < 0) {
+ av_log(opengl, AV_LOG_ERROR, "Application failed to create window buffer.\n");
+ return ret;
+ }
+ if ((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");
+ return ret;
+ }
+ }
+ return 0;
+}
+
+static int opengl_release_window(AVFormatContext *h)
+{
+ int ret;
+ OpenGLContext *opengl = h->priv_data;
+ if (!opengl->no_window) {
+#if HAVE_SDL
+ SDL_Quit();
+#endif
+ } else if ((ret = avdevice_dev_to_app_control_message(h, AV_DEV_TO_APP_DESTROY_WINDOW_BUFFER, NULL , 0) < 0)) {
+ av_log(opengl, AV_LOG_ERROR, "Application failed to release window buffer.\n");
+ return ret;
+ }
+ return 0;
+}
+
static av_cold int opengl_write_trailer(AVFormatContext *h)
{
OpenGLContext *opengl = h->priv_data;
@@ -901,13 +944,7 @@ static av_cold int opengl_write_trailer(AVFormatContext *h)
if (opengl && opengl->glprocs.glDeleteBuffers)
opengl->glprocs.glDeleteBuffers(2, &opengl->index_buffer);
-#if HAVE_SDL
- if (!opengl->no_window)
- SDL_Quit();
-#endif
- if (opengl->no_window &&
- avdevice_dev_to_app_control_message(h, AV_DEV_TO_APP_DESTROY_WINDOW_BUFFER, NULL , 0) < 0)
- av_log(opengl, AV_LOG_ERROR, "Application failed to release window buffer.\n");
+ opengl_release_window(h);
return 0;
}
@@ -991,25 +1028,8 @@ static av_cold int opengl_write_header(AVFormatContext *h)
if (!opengl->window_title && !opengl->no_window)
opengl->window_title = av_strdup(h->filename);
- if (!opengl->no_window) {
-#if HAVE_SDL
- if ((ret = opengl_sdl_create_window(h)) < 0)
- goto fail;
-#else
- av_log(opengl, AV_LOG_ERROR, "FFmpeg is compiled without SDL. Cannot create default window.\n");
- ret = AVERROR(ENOSYS);
+ if ((ret = opengl_create_window(h)))
goto fail;
-#endif
- } else {
- if ((ret = avdevice_dev_to_app_control_message(h, AV_DEV_TO_APP_CREATE_WINDOW_BUFFER, NULL , 0)) < 0) {
- av_log(opengl, AV_LOG_ERROR, "Application failed to create window buffer.\n");
- goto fail;
- }
- if ((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");
- goto fail;
- }
- }
if ((ret = opengl_read_limits(opengl)) < 0)
goto fail;