diff options
author | Lukasz Marek <lukasz.m.luki@gmail.com> | 2014-02-01 17:39:37 +0400 |
---|---|---|
committer | Lukasz Marek <lukasz.m.luki@gmail.com> | 2014-02-02 05:23:25 +0400 |
commit | 4afe1c1178556c82ef3b4602dd693cb2ceee6369 (patch) | |
tree | c2b84e788d157305639b66c98ef32af3f7ecc2ee /libavdevice/opengl_enc.c | |
parent | c9074b992e31ed7b03e6141829f9aaeb7e5823f4 (diff) |
lavd/opengl_enc: factorize create/release window functions
Signed-off-by: Lukasz Marek <lukasz.m.luki@gmail.com>
Diffstat (limited to 'libavdevice/opengl_enc.c')
-rw-r--r-- | libavdevice/opengl_enc.c | 70 |
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; |