|
|
@@ -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); |
|
|
|
|
|
|
|