mpv-player / mpv-player/mpv

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

Open
#5,173 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

hwdec:d3d11va os:win
Dominant language
C
Stars
37k
Forks
3.5k
Avg merge
1d 10h
Merged PRs (30d)
22

Description

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

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at the d3d11vpp filter initialization and the software-decoding fallback shown in the log. Use the supplied command lines to check that software-decoded video no longer attempts to initialize d3d11vpp, while hardware-decoded video retains the filter when appropriate.

Written by the indexing model from the issue text.

Assessment

Tech stack
c
Domain
cli, desktop
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.