mirror of https://git.ffmpeg.org/ffmpeg.git
lavc/qsv: fallback to the default mfx implementation for internal session on Windows
The mfx implementation based on D3D11 is expected for an internal session on Windows, however sometimes this implemntation is not supported [1]. A fallback to the default mfx implementation is added in this patch. [1] https://github.com/intel/cartwheel-ffmpeg/issues/246 Signed-off-by: Haihao Xiang <haihao.xiang@intel.com>
This commit is contained in:
parent
0bce5590c3
commit
2b0fe52967
|
@ -677,18 +677,31 @@ static int qsv_create_mfx_session(AVCodecContext *avctx,
|
|||
int ff_qsv_init_internal_session(AVCodecContext *avctx, QSVSession *qs,
|
||||
const char *load_plugins, int gpu_copy)
|
||||
{
|
||||
mfxIMPL impls[] = {
|
||||
#if CONFIG_D3D11VA
|
||||
mfxIMPL impl = MFX_IMPL_AUTO_ANY | MFX_IMPL_VIA_D3D11;
|
||||
#else
|
||||
mfxIMPL impl = MFX_IMPL_AUTO_ANY;
|
||||
MFX_IMPL_AUTO_ANY | MFX_IMPL_VIA_D3D11,
|
||||
#endif
|
||||
MFX_IMPL_AUTO_ANY
|
||||
};
|
||||
mfxIMPL impl;
|
||||
mfxVersion ver = { { QSV_VERSION_MINOR, QSV_VERSION_MAJOR } };
|
||||
|
||||
const char *desc;
|
||||
int ret = qsv_create_mfx_session(avctx, impl, &ver, gpu_copy, &qs->session,
|
||||
int ret;
|
||||
|
||||
for (int i = 0; i < FF_ARRAY_ELEMS(impls); i++) {
|
||||
ret = qsv_create_mfx_session(avctx, impls[i], &ver, gpu_copy, &qs->session,
|
||||
&qs->loader);
|
||||
if (ret)
|
||||
|
||||
if (ret == 0)
|
||||
break;
|
||||
|
||||
if (i == FF_ARRAY_ELEMS(impls) - 1)
|
||||
return ret;
|
||||
else
|
||||
av_log(avctx, AV_LOG_ERROR, "The current mfx implementation is not "
|
||||
"supported, try next mfx implementation.\n");
|
||||
}
|
||||
|
||||
#ifdef AVCODEC_QSV_LINUX_SESSION_HANDLE
|
||||
ret = ff_qsv_set_display_handle(avctx, qs);
|
||||
|
|
Loading…
Reference in New Issue