diff options
-rw-r--r-- | decoder/LAVVideo/LAVVideo.cpp | 8 | ||||
-rw-r--r-- | decoder/LAVVideo/Media.cpp | 16 |
2 files changed, 18 insertions, 6 deletions
diff --git a/decoder/LAVVideo/LAVVideo.cpp b/decoder/LAVVideo/LAVVideo.cpp index e26c536f..42b4d92a 100644 --- a/decoder/LAVVideo/LAVVideo.cpp +++ b/decoder/LAVVideo/LAVVideo.cpp @@ -1114,11 +1114,13 @@ HRESULT CLAVVideo::ReconnectOutput(int width, int height, AVRational ar, DXVA2_E // Remove custom matrix settings, which are not understood upstream if (dxvaExtFlags.VideoTransferMatrix == 6) { dxvaExtFlags.VideoTransferMatrix = DXVA2_VideoTransferMatrix_BT601; - } else if (dxvaExtFlags.VideoTransferMatrix > 4 && !m_bMadVR) { + } else if (dxvaExtFlags.VideoTransferMatrix > 5 && !m_bMadVR) { dxvaExtFlags.VideoTransferMatrix = DXVA2_VideoTransferMatrix_Unknown; } - if (dxvaExtFlags.VideoTransferFunction > MFVideoTransFunc_Log_316 && !m_bMadVR) { - dxvaExtFlags.VideoTransferFunction = DXVA2_VideoTransFunc_Unknown; + + // madVR uses a different value for SMPTE ST 2084 + if (dxvaExtFlags.VideoTransferFunction == 15 && m_bMadVR) { + dxvaExtFlags.VideoTransferFunction = 16; } if (mt.formattype == FORMAT_VideoInfo) { diff --git a/decoder/LAVVideo/Media.cpp b/decoder/LAVVideo/Media.cpp index 8b16010e..20daae6f 100644 --- a/decoder/LAVVideo/Media.cpp +++ b/decoder/LAVVideo/Media.cpp @@ -701,9 +701,18 @@ void fillDXVAExtFormat(DXVA2_ExtendedFormat &fmt, int range, int primaries, int case AVCOL_PRI_SMPTE240M: fmt.VideoPrimaries = DXVA2_VideoPrimaries_SMPTE240M; break; + // Values from newer Windows SDK (MediaFoundation) case AVCOL_PRI_BT2020: fmt.VideoPrimaries = (DXVA2_VideoPrimaries)9; break; + case AVCOL_PRI_SMPTE428: + // XYZ + fmt.VideoPrimaries = (DXVA2_VideoPrimaries)10; + break; + case AVCOL_PRI_SMPTE431: + // DCI-P3 + fmt.VideoPrimaries = (DXVA2_VideoPrimaries)11; + break; } // Color Space / Transfer Matrix @@ -718,11 +727,12 @@ void fillDXVAExtFormat(DXVA2_ExtendedFormat &fmt, int range, int primaries, int case AVCOL_SPC_SMPTE240M: fmt.VideoTransferMatrix = DXVA2_VideoTransferMatrix_SMPTE240M; break; - // Custom values, not official standard, but understood by madVR + // Values from newer Windows SDK (MediaFoundation) case AVCOL_SPC_BT2020_CL: case AVCOL_SPC_BT2020_NCL: fmt.VideoTransferMatrix = (DXVA2_VideoTransferMatrix)4; break; + // Custom values, not official standard, but understood by madVR case AVCOL_SPC_FCC: fmt.VideoTransferMatrix = (DXVA2_VideoTransferMatrix)6; break; @@ -754,9 +764,9 @@ void fillDXVAExtFormat(DXVA2_ExtendedFormat &fmt, int range, int primaries, int case AVCOL_TRC_LOG_SQRT: fmt.VideoTransferFunction = MFVideoTransFunc_Log_316; break; - // Custom values, not official standard, but understood by madVR + // Values from newer Windows SDK (MediaFoundation) case AVCOL_TRC_SMPTEST2084: - fmt.VideoTransferFunction = 16; + fmt.VideoTransferFunction = 15; break; } |