diff --git a/app/streaming/video/ffmpeg-renderers/d3d11va.cpp b/app/streaming/video/ffmpeg-renderers/d3d11va.cpp index 3d1e9ec1..c21a6817 100644 --- a/app/streaming/video/ffmpeg-renderers/d3d11va.cpp +++ b/app/streaming/video/ffmpeg-renderers/d3d11va.cpp @@ -989,6 +989,10 @@ bool D3D11VARenderer::checkDecoderSupport(IDXGIAdapter* adapter) } break; + case VIDEO_FORMAT_H264_HIGH8_444: + // Unsupported by DXVA + return false; + case VIDEO_FORMAT_H265: if (FAILED(videoDevice->CheckVideoDecoderFormat(&D3D11_DECODER_PROFILE_HEVC_VLD_MAIN, DXGI_FORMAT_NV12, &supported))) { SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, @@ -1015,32 +1019,6 @@ bool D3D11VARenderer::checkDecoderSupport(IDXGIAdapter* adapter) } break; - case VIDEO_FORMAT_AV1_MAIN8: - if (FAILED(videoDevice->CheckVideoDecoderFormat(&D3D11_DECODER_PROFILE_AV1_VLD_PROFILE0, DXGI_FORMAT_NV12, &supported))) { - SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, - "GPU doesn't support AV1 decoding"); - return false; - } - else if (!supported) { - SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, - "GPU doesn't support AV1 decoding to NV12 format"); - return false; - } - break; - - case VIDEO_FORMAT_AV1_MAIN10: - if (FAILED(videoDevice->CheckVideoDecoderFormat(&D3D11_DECODER_PROFILE_AV1_VLD_PROFILE0, DXGI_FORMAT_P010, &supported))) { - SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, - "GPU doesn't support AV1 Main10 decoding"); - return false; - } - else if (!supported) { - SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, - "GPU doesn't support AV1 Main10 decoding to P010 format"); - return false; - } - break; - case VIDEO_FORMAT_H265_REXT8_444: if (adapterDesc.VendorId != 0x8086) { // This custom D3D11VA profile is only supported on Intel GPUs @@ -1075,6 +1053,58 @@ bool D3D11VARenderer::checkDecoderSupport(IDXGIAdapter* adapter) } break; + case VIDEO_FORMAT_AV1_MAIN8: + if (FAILED(videoDevice->CheckVideoDecoderFormat(&D3D11_DECODER_PROFILE_AV1_VLD_PROFILE0, DXGI_FORMAT_NV12, &supported))) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "GPU doesn't support AV1 decoding"); + return false; + } + else if (!supported) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "GPU doesn't support AV1 decoding to NV12 format"); + return false; + } + break; + + case VIDEO_FORMAT_AV1_MAIN10: + if (FAILED(videoDevice->CheckVideoDecoderFormat(&D3D11_DECODER_PROFILE_AV1_VLD_PROFILE0, DXGI_FORMAT_P010, &supported))) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "GPU doesn't support AV1 Main 10-bit decoding"); + return false; + } + else if (!supported) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "GPU doesn't support AV1 Main 10-bit decoding to P010 format"); + return false; + } + break; + + case VIDEO_FORMAT_AV1_HIGH8_444: + if (FAILED(videoDevice->CheckVideoDecoderFormat(&D3D11_DECODER_PROFILE_AV1_VLD_PROFILE1, DXGI_FORMAT_AYUV, &supported))) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "GPU doesn't support AV1 High 444 8-bit decoding"); + return false; + } + else if (!supported) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "GPU doesn't support AV1 High 444 8-bit decoding to AYUV format"); + return false; + } + break; + + case VIDEO_FORMAT_AV1_HIGH10_444: + if (FAILED(videoDevice->CheckVideoDecoderFormat(&D3D11_DECODER_PROFILE_AV1_VLD_PROFILE1, DXGI_FORMAT_Y410, &supported))) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "GPU doesn't support AV1 High 444 10-bit decoding"); + return false; + } + else if (!supported) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "GPU doesn't support AV1 High 444 10-bit decoding to Y410 format"); + return false; + } + break; + default: SDL_assert(false); return false; diff --git a/app/streaming/video/ffmpeg-renderers/dxva2.cpp b/app/streaming/video/ffmpeg-renderers/dxva2.cpp index 27a5200e..0b5ca90a 100644 --- a/app/streaming/video/ffmpeg-renderers/dxva2.cpp +++ b/app/streaming/video/ffmpeg-renderers/dxva2.cpp @@ -20,6 +20,7 @@ DEFINE_GUID(DXVADDI_Intel_ModeH264_E, 0x604F8E68,0x4951,0x4C54,0x88,0xFE,0xAB,0xD2,0x5C,0x15,0xB3,0xD6); DEFINE_GUID(DXVA2_ModeAV1_VLD_Profile0,0xb8be4ccb,0xcf53,0x46ba,0x8d,0x59,0xd6,0xb8,0xa6,0xda,0x5d,0x2a); +DEFINE_GUID(DXVA2_ModeAV1_VLD_Profile1,0x6936ff0f,0x45b1,0x4163,0x9c,0xc1,0x64,0x6e,0xf6,0x94,0x61,0x08); // This was incorrectly removed from public headers in FFmpeg 7.0 #ifndef FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO @@ -203,6 +204,12 @@ bool DXVA2Renderer::initializeDecoder() break; } } + else if (m_VideoFormat == VIDEO_FORMAT_AV1_HIGH8_444 || m_VideoFormat == VIDEO_FORMAT_AV1_HIGH10_444) { + if (IsEqualGUID(guids[i], DXVA2_ModeAV1_VLD_Profile1)) { + chosenDeviceGuid = guids[i]; + break; + } + } } CoTaskMemFree(guids);