Message ID | 20230515060403.68363-1-haihao.xiang@intel.com |
---|---|
State | Accepted |
Commit | 2b0fe529674e91bd55b52512f9a2bb0658ce0f7c |
Headers | show |
Series | [FFmpeg-devel] lavc/qsv: fallback to the default mfx implementation for internal session on Windows | expand |
Context | Check | Description |
---|---|---|
andriy/make_x86 | success | Make finished |
andriy/make_fate_x86 | success | Make fate finished |
yinshiyou/make_loongarch64 | success | Make finished |
yinshiyou/make_fate_loongarch64 | success | Make fate finished |
On Mon, May 15, 2023 at 8:04 AM Xiang, Haihao <haihao.xiang-at-intel.com@ffmpeg.org> wrote: > > From: Haihao Xiang <haihao.xiang@intel.com> > > 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 > From the issue description, the user is trying to use it a as software library, not a hardware one? I don't think software fallback, especially an automatic one, is really quite appropriate. When someone requests a "qsv" encoder, they expect hardware. - Hendrik
On Ma, 2023-05-15 at 08:33 +0200, Hendrik Leppkes wrote: > On Mon, May 15, 2023 at 8:04 AM Xiang, Haihao > <haihao.xiang-at-intel.com@ffmpeg.org> wrote: > > > > From: Haihao Xiang <haihao.xiang@intel.com> > > > > 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 > > > > From the issue description, the user is trying to use it a as software > library, not a hardware one? Yes, because the user has sw library only. > I don't think software fallback, especially an automatic one, is > really quite appropriate. When someone requests a "qsv" encoder, they > expect hardware. It is not a software fallback. it is a fallback to the default one (which might be hw based or sw based, it is up to user's hw and media stack). Thanks Haihao > > - Hendrik > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
On Ma, 2023-05-15 at 08:47 +0000, Xiang, Haihao wrote: > On Ma, 2023-05-15 at 08:33 +0200, Hendrik Leppkes wrote: > > On Mon, May 15, 2023 at 8:04 AM Xiang, Haihao > > <haihao.xiang-at-intel.com@ffmpeg.org> wrote: > > > > > > From: Haihao Xiang <haihao.xiang@intel.com> > > > > > > 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 > > > > > > > From the issue description, the user is trying to use it a as software > > library, not a hardware one? > > Yes, because the user has sw library only. > > > I don't think software fallback, especially an automatic one, is > > really quite appropriate. When someone requests a "qsv" encoder, they > > expect hardware. > > It is not a software fallback. it is a fallback to the default one (which > might > be hw based or sw based, it is up to user's hw and media stack). I'll push this in a few days if there are no more comments. Thanks Haihao
diff --git a/libavcodec/qsv.c b/libavcodec/qsv.c index 8eabf46b45..7563625627 100644 --- a/libavcodec/qsv.c +++ b/libavcodec/qsv.c @@ -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) - return 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);