diff options
author | Ivan Uskov <ivan.uskov@nablet.com> | 2015-07-06 18:04:13 +0300 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2015-07-07 14:03:59 +0200 |
commit | 9c95734e1c0f1a086d1c71b65c29355ef6f7785d (patch) | |
tree | 0d1e8638568cc4230b3803038d1aa47a4c1f9a46 | |
parent | 1d5edad8ccfd1843bc8c60260a20ac37b738cb77 (diff) | |
download | ffmpeg-9c95734e1c0f1a086d1c71b65c29355ef6f7785d.tar.gz |
libavcodec/qsv.c: Linux-only code part has been moved to separate function in order to avoid the "ISO C90 forbids mixed declarations and code" compiler warning.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavcodec/qsv.c | 75 |
1 files changed, 43 insertions, 32 deletions
diff --git a/libavcodec/qsv.c b/libavcodec/qsv.c index 714c7948cb..dab9d1ef59 100644 --- a/libavcodec/qsv.c +++ b/libavcodec/qsv.c @@ -76,41 +76,13 @@ int ff_qsv_error(int mfx_err) return AVERROR_UNKNOWN; } } - -/** - * @brief Initialize a MSDK session - * - * Media SDK is based on sessions, so this is the prerequisite - * initialization for HW acceleration. For Windows the session is - * complete and ready to use, for Linux a display handle is - * required. For releases of Media Server Studio >= 2015 R4 the - * render nodes interface is preferred (/dev/dri/renderD). - * Using Media Server Studio 2015 R4 or newer is recommended - * but the older /dev/dri/card interface is also searched - * for broader compatibility. - * - * @param avctx ffmpeg metadata for this codec context - * @param session the MSDK session used - */ -int ff_qsv_init_internal_session(AVCodecContext *avctx, mfxSession *session) +static int ff_qsv_set_display_handle(AVCodecContext *avctx, mfxSession session) { - mfxIMPL impl = MFX_IMPL_AUTO_ANY; - mfxVersion ver = { { QSV_VERSION_MINOR, QSV_VERSION_MAJOR } }; - - const char *desc; - int ret; - - ret = MFXInit(impl, &ver, session); - if (ret < 0) { - av_log(avctx, AV_LOG_ERROR, "Error initializing an internal MFX session\n"); - return ff_qsv_error(ret); - } - - // this code is only required for Linux. It searches for a valid // display handle. First in /dev/dri/renderD then in /dev/dri/card #ifdef AVCODEC_QSV_LINUX_SESSION_HANDLE // VAAPI display handle + int ret = 0; VADisplay va_dpy = NULL; VAStatus va_res = VA_STATUS_SUCCESS; int major_version = 0, minor_version = 0; @@ -154,12 +126,51 @@ int ff_qsv_init_internal_session(AVCodecContext *avctx, mfxSession *session) } else { av_log(avctx, AV_LOG_VERBOSE, "mfx initialization: %s vaInitialize successful\n",adapterpath); + ret = MFXVideoCORE_SetHandle(session, + (mfxHandleType)MFX_HANDLE_VA_DISPLAY, (mfxHDL)va_dpy); + if (ret < 0) { + av_log(avctx, AV_LOG_ERROR, + "Error %d during set display handle\n", ret); + return ff_qsv_error(ret); + } break; } } - MFXVideoCORE_SetHandle((*session), (mfxHandleType)MFX_HANDLE_VA_DISPLAY, (mfxHDL)va_dpy); - #endif //AVCODEC_QSV_LINUX_SESSION_HANDLE + return 0; +} +/** + * @brief Initialize a MSDK session + * + * Media SDK is based on sessions, so this is the prerequisite + * initialization for HW acceleration. For Windows the session is + * complete and ready to use, for Linux a display handle is + * required. For releases of Media Server Studio >= 2015 R4 the + * render nodes interface is preferred (/dev/dri/renderD). + * Using Media Server Studio 2015 R4 or newer is recommended + * but the older /dev/dri/card interface is also searched + * for broader compatibility. + * + * @param avctx ffmpeg metadata for this codec context + * @param session the MSDK session used + */ +int ff_qsv_init_internal_session(AVCodecContext *avctx, mfxSession *session) +{ + mfxIMPL impl = MFX_IMPL_AUTO_ANY; + mfxVersion ver = { { QSV_VERSION_MINOR, QSV_VERSION_MAJOR } }; + + const char *desc; + int ret; + + ret = MFXInit(impl, &ver, session); + if (ret < 0) { + av_log(avctx, AV_LOG_ERROR, "Error initializing an internal MFX session\n"); + return ff_qsv_error(ret); + } + + ret = ff_qsv_set_display_handle(avctx, *session); + if (ret < 0) + return ret; MFXQueryIMPL(*session, &impl); |