mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-19 05:49:09 +02:00
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>
This commit is contained in:
parent
1d5edad8cc
commit
9c95734e1c
@ -76,41 +76,13 @@ int ff_qsv_error(int mfx_err)
|
|||||||
return AVERROR_UNKNOWN;
|
return AVERROR_UNKNOWN;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
static int ff_qsv_set_display_handle(AVCodecContext *avctx, mfxSession session)
|
||||||
/**
|
|
||||||
* @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);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// this code is only required for Linux. It searches for a valid
|
// this code is only required for Linux. It searches for a valid
|
||||||
// display handle. First in /dev/dri/renderD then in /dev/dri/card
|
// display handle. First in /dev/dri/renderD then in /dev/dri/card
|
||||||
#ifdef AVCODEC_QSV_LINUX_SESSION_HANDLE
|
#ifdef AVCODEC_QSV_LINUX_SESSION_HANDLE
|
||||||
// VAAPI display handle
|
// VAAPI display handle
|
||||||
|
int ret = 0;
|
||||||
VADisplay va_dpy = NULL;
|
VADisplay va_dpy = NULL;
|
||||||
VAStatus va_res = VA_STATUS_SUCCESS;
|
VAStatus va_res = VA_STATUS_SUCCESS;
|
||||||
int major_version = 0, minor_version = 0;
|
int major_version = 0, minor_version = 0;
|
||||||
@ -154,12 +126,51 @@ int ff_qsv_init_internal_session(AVCodecContext *avctx, mfxSession *session)
|
|||||||
} else {
|
} else {
|
||||||
av_log(avctx, AV_LOG_VERBOSE,
|
av_log(avctx, AV_LOG_VERBOSE,
|
||||||
"mfx initialization: %s vaInitialize successful\n",adapterpath);
|
"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;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
MFXVideoCORE_SetHandle((*session), (mfxHandleType)MFX_HANDLE_VA_DISPLAY, (mfxHDL)va_dpy);
|
|
||||||
|
|
||||||
#endif //AVCODEC_QSV_LINUX_SESSION_HANDLE
|
#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);
|
MFXQueryIMPL(*session, &impl);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user