mpv-player / mpv

🎥 Command line video player
https://mpv.io
Other
28.56k stars 2.92k forks source link

No video output with d3d11va decoder when requesting d3d11vpp and mpv falls back to software decoding #5173

Open jane1969 opened 6 years ago

jane1969 commented 6 years ago

mpv version and platform

mpv 0.27.0-473-gd7a02bcb3b (C) 2000-2017 mpv/MPlayer/mplayer2 projects built on Sat Dec 2 23:26:19 CET 2017 with media autobuild suite with shaderc and crossc manually installed (this very precious script is a bit outdated)

Reproduction steps

Try to play a video with d3d11va hardware decoding, d3d11ra renderer (thanks for having added support for it) and d3d11vpp deinterlacing: if hardware decoding is not possible, for example if the codec/format is not supported by the GPU, mpv falls back to software decoding, but there is no video, as the insertion of the d3d11vpp filter breaks the chain. Ex: mpv.exe --hwdec=d3d11va --vo=gpu --gpu-context=d3d11 --gpu-api=d3d11 --vf-add=d3d11vpp=deint=yes:interlaced-only=yes "video" where "video" cannot be hardware decoded (for example a VP9 10 bit on a GTX 1080) Without the d3d11vpp parameter in the command line, video works fine (so it has nothing to see with vp9 support and ffmpeg-mpv stuff).

Same behaviour if you try the same options on any video while asking for software decoding. Ex: mpv.exe --hwdec=none --vo=gpu --gpu-context=d3d11 --gpu-api=d3d11 --vf-add=d3d11vpp=deint=yes:interlaced-only=yes "video" whatever "video" is

Expected behavior

mpv should not only falls back to software decoding (or directly use software decoding if asked in options), but also discard the d3d11vpp filter as it needs d3d11va decoding Otherwise, it means you cannot let the d3d11vpp deinterlace filter in you config file permanently, because it breaks the playing of hardware decoding incompatible videos, and you manually have to add it each time you play an interlaced video that can be decoded with your GPU. So, it would be very useful if a test could be made before attempting to apply the d3d11vpp filter, checking if d3d11va decoding is in use or not. Thanks in advance if it can easily me made.

Actual behavior

mpv keeps the d3d11vpp filter in the video chain, cannot initialize it, and uninit video.

Log file (relevant parts)

[vo/gpu/d3d11] Initializing GPU context 'd3d11' [vo/gpu/d3d11] Using Direct3D 11 feature level 12_1 [vo/gpu/d3d11] Device: NVIDIA GeForce GTX 1080 [vo/gpu/d3d11] Initializing SPIR-V compiler 'shaderc' [vo/gpu/d3d11] Using Direct3D 11.1 runtime [vo/gpu/d3d11] Using DXGI 1.2+ [vo/gpu/d3d11] Using flip-model presentation [vd] Codec list: [vd] vp9 - Google VP9 [vd] vp9_cuvid (vp9) - Nvidia CUVID VP9 decoder [vd] Opening video decoder vp9 [vd] Looking at hwdec vp9-d3d11va... [vo/gpu] Loading hwdec driver 'd3d11-egl' [vo/gpu] Loading failed. [vo/gpu] Loading hwdec driver 'd3d11-egl-rgb' [vo/gpu] Loading failed. [vo/gpu] Loading hwdec driver 'dxva2-egl' [vo/gpu] Loading failed. [vo/gpu] Loading hwdec driver 'd3d11va' [vo/gpu] Loading hwdec driver 'dxva2-dxinterop' [vo/gpu] Loading failed. [vo/gpu] Loading hwdec driver 'cuda-nvdec' [vo/gpu] Loading failed. [vd] Trying hardware decoding via vp9-d3d11va. [vd] Selected video codec: vp9 (Google VP9) [vf] Opening video filter: [d3d11vpp deint=yes interlaced-only=yes mode=adaptive] [d3d11vpp] Setting option 'deint' = 'yes' (flags = 0) [d3d11vpp] Setting option 'interlaced-only' = 'yes' (flags = 0) [d3d11vpp] Setting option 'mode' = 'adaptive' (flags = 0) [vd] Requesting pixfmt 'yuv420p10le' from decoder. [vd] Falling back to software decoding. [vd] Requesting 12 threads for decoding. [vd] Using software decoding. [vd] Decoder format: 3840x1620 [0:1] yuv420p10 bt.2020-ncl/auto/auto/limited CL=unknown (auto 0.000000/0.000000/0.000000) [vd] Using container aspect ratio. [vf] Using conversion filter. [vf] Video filter chain: [vf] [in] 3840x1620 yuv420p10 bt.2020-ncl/bt.2020/pq/limited SP=10.000000 CL=mpeg2/4/h264 [vf] [convert] 3840x1620 yuv420p10 bt.2020-ncl/bt.2020/pq/limited SP=10.000000 CL=mpeg2/4/h264 [a] [vf] [d3d11vpp] "d3d11vpp.00" ??? <--- [vf] [out] ??? Cannot initialize video filters. Could not initialize video chain. [vd] Uninit video. [vo/gpu] flushing shader cache [vo/gpu/win32] uninit Video: no video

Dudemanguy commented 1 year ago

Does anyone know if this is still an issue?