diff --git a/src/gallium/frontends/mediafoundation/codecapi.cpp b/src/gallium/frontends/mediafoundation/codecapi.cpp index 5c3fdcec989..ae572e551af 100644 --- a/src/gallium/frontends/mediafoundation/codecapi.cpp +++ b/src/gallium/frontends/mediafoundation/codecapi.cpp @@ -274,6 +274,10 @@ StringFromCodecAPI( const GUID *Api ) { return "CODECAPI_AVEncVideoRateControlFramePreAnalysisExternalReconDownscale"; } + else if (*Api == CODECAPI_AVEncSliceGenerationMode) + { + return "CODECAPI_AVEncSliceGenerationMode"; + } else if( *Api == CODECAPI_AVEncVideoInputDeltaQPBlockSettings ) { return "CODECAPI_AVEncVideoInputDeltaQPBlockSettings"; @@ -344,7 +348,7 @@ CDX12EncHMFT::IsSupported( const GUID *Api ) *Api == CODECAPI_AVEncVideoMaxNumRefFrame || *Api == CODECAPI_AVEncVideoMeanAbsoluteDifference || *Api == CODECAPI_AVEncVideoMaxQP || *Api == CODECAPI_AVScenarioInfo || *Api == CODECAPI_AVEncVideoROIEnabled || *Api == CODECAPI_AVEncVideoLTRBufferControl || *Api == CODECAPI_AVEncVideoMarkLTRFrame || - *Api == CODECAPI_AVEncVideoUseLTRFrame ) + *Api == CODECAPI_AVEncVideoUseLTRFrame || *Api == CODECAPI_AVEncSliceGenerationMode) { hr = S_OK; return hr; @@ -939,6 +943,11 @@ CDX12EncHMFT::GetValue( const GUID *Api, VARIANT *Value ) Value->vt = VT_BOOL; Value->boolVal = m_bRateControlFramePreAnalysisExternalReconDownscale ? VARIANT_TRUE : VARIANT_FALSE; } + else if (*Api == CODECAPI_AVEncSliceGenerationMode) + { + Value->vt = VT_UI4; + Value->ulVal = m_uiSliceGenerationMode; + } else if( *Api == CODECAPI_AVEncWorkGlobalPriority ) { Value->vt = VT_UI4; @@ -1809,6 +1818,16 @@ CDX12EncHMFT::SetValue( const GUID *Api, VARIANT *Value ) } m_bRateControlFramePreAnalysisExternalReconDownscale = Value->boolVal == VARIANT_TRUE ? TRUE : FALSE; } + else if (*Api == CODECAPI_AVEncSliceGenerationMode) + { + if (Value->vt != VT_UI4) + { + CHECKHR_GOTO(E_INVALIDARG, done); + } + debug_printf("[dx12 hmft 0x%p] SET CODECAPI_AVEncSliceGenerationMode - %u\n", this, Value->ulVal); + m_uiSliceGenerationMode = Value->ulVal; + m_bSliceGenerationModeSet = TRUE; + } else { CHECKHR_GOTO( E_NOTIMPL, done ); diff --git a/src/gallium/frontends/mediafoundation/hmft_entrypoints.h b/src/gallium/frontends/mediafoundation/hmft_entrypoints.h index c24da050112..7886f2d24ce 100644 --- a/src/gallium/frontends/mediafoundation/hmft_entrypoints.h +++ b/src/gallium/frontends/mediafoundation/hmft_entrypoints.h @@ -757,6 +757,9 @@ class __declspec( uuid( HMFT_GUID ) ) CDX12EncHMFT : CMFD3DManager, UINT32 m_uiVideoOutputBitsUsedMapBlockSize = 0; UINT32 m_uiVideoSatdMapBlockSize = 0; + UINT32 m_uiSliceGenerationMode = 0; + BOOL m_bSliceGenerationModeSet = FALSE; + BOOL m_bRateControlFramePreAnalysis = FALSE; BOOL m_bRateControlFramePreAnalysisExternalReconDownscale = FALSE;