Nevcairiel / LAVFilters

LAV Filters - Open-Source DirectShow Media Splitter and Decoders
GNU General Public License v2.0
7.47k stars 787 forks source link

Artifacts when HEVC DXVA #56

Closed v0lt closed 8 years ago

v0lt commented 8 years ago

http://www.mediafire.com/watch/9c7uq38m9b9ixzj/sample_HEVC_1080p_20sec.mkv This sample has artifacts when HEVC DXVA. The problem occurs on Nvidia and Intel.

LAV Video Decoder 0.67.0.30-git.

Nevcairiel commented 8 years ago

The Microsoft DXVA decoder also artifacts in a similar manner, not sure if the file is damaged or whats up. Will check more.

v0lt commented 8 years ago

It may be incorrect HEVC header after the old decoder?

x265 [info]: HEVC encoder version 0.6+343-eb3713ab0641 x265 [info]: build info [Windows][GCC 4.8.2][64 bit] 8bpp x265 [info]: Main profile, Level-4 (Main tier) x265 [info]: WPP streams / pool / frames : 13 / 8 / 4 x265 [info]: CU size : 64 x265 [info]: Max RQT depth inter / intra : 2 / 2 x265 [info]: ME / range / subpel / merge : umh / 38 / 5 / 3 x265 [info]: Keyframe min / max : 23 / 23 x265 [info]: Rate Control / AQ-Strength / CUTree : CRF-19.0 / 0.8 / 1 x265 [info]: RDpenalty : 1 x265 [info]: Lookahead / bframes / badapt : 40 / 9 / 2 x265 [info]: b-pyramid / weightp / refs : 1 / 1 / 16 x265 [info]: tools: rect amp esd rd=4 lft sao-lcu sign-hide

Nevcairiel commented 8 years ago

I found the reason - this video uses too many reference frames. While HEVC allows using up to 16 reference frames, every individual frame is only allowed to use 8. This file violates that constraint, and the DXVA decoder strictly enforces this (it simply doesn't have room for more than 8 in its structure)

v0lt commented 8 years ago

@ Nevcairiel How do you define it?

Nevcairiel commented 8 years ago

I'm not sure I understand the question.

v0lt commented 8 years ago

Ok. I'll ask for another. How to determine the number of reference frames from HEVCContext?

Nevcairiel commented 8 years ago

I don't think there is a clear way to detect such problems beforehand. As I mentioned above, streams are allowed to have 16 reference frames, HOWEVER, every frame is only allowed to use up to 8 as references. This makes 100% detection hard.