About Social Code
aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPohsiang (John) Hsu <pohhsu@microsoft.com>2025-05-27 08:38:02 -0400
committerMarge Bot <marge-bot@fdo.invalid>2025-06-05 22:02:01 +0000
commit4df695421954d4ab6a8d8af325976d50da8bbe41 (patch)
treeb9a9dc92a69edbf5f8ffa3d6d5f6f45700c01a8f
parentd9f0ddf336d07de08212135bfd7668864acdb92d (diff)
mediafoundation: Allow to build multiple codec MFT DLLs in one build pass
Reviewed-by: Sil Vilerino <sivileri@microsoft.com> Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/13235 Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/35264>
-rw-r--r--meson.options19
-rw-r--r--src/gallium/frontends/mediafoundation/codecapi.cpp2
-rw-r--r--src/gallium/frontends/mediafoundation/docs/readme.md20
-rw-r--r--src/gallium/frontends/mediafoundation/encode.cpp6
-rw-r--r--src/gallium/frontends/mediafoundation/encode_av1.cpp4
-rw-r--r--src/gallium/frontends/mediafoundation/encode_h264.cpp2
-rw-r--r--src/gallium/frontends/mediafoundation/encode_hevc.cpp2
-rw-r--r--src/gallium/frontends/mediafoundation/hmft_entrypoints.cpp10
-rw-r--r--src/gallium/frontends/mediafoundation/hmft_entrypoints.h24
-rw-r--r--src/gallium/frontends/mediafoundation/meson.build47
-rw-r--r--src/gallium/frontends/mediafoundation/mftransform.cpp8
-rw-r--r--src/gallium/frontends/mediafoundation/reference_frames_tracker_av1.cpp2
-rw-r--r--src/gallium/frontends/mediafoundation/reference_frames_tracker_av1.h2
-rw-r--r--src/gallium/frontends/mediafoundation/reference_frames_tracker_h264.cpp2
-rw-r--r--src/gallium/frontends/mediafoundation/reference_frames_tracker_h264.h2
-rw-r--r--src/gallium/frontends/mediafoundation/reference_frames_tracker_hevc.cpp2
-rw-r--r--src/gallium/frontends/mediafoundation/reference_frames_tracker_hevc.h2
-rw-r--r--src/gallium/frontends/mediafoundation/test/hmft_simple_encode_test.cpp14
-rw-r--r--src/gallium/frontends/mediafoundation/test/meson.build31
-rw-r--r--src/gallium/frontends/mediafoundation/test/stub.cpp8
-rw-r--r--src/gallium/frontends/mediafoundation/wpptrace.cpp8
-rw-r--r--src/gallium/frontends/mediafoundation/wpptrace.h16
-rw-r--r--src/gallium/targets/mediafoundation/dllmain.cpp8
-rw-r--r--src/gallium/targets/mediafoundation/meson.build146
24 files changed, 205 insertions, 182 deletions
diff --git a/meson.options b/meson.options
index 2e61c4c544d..40fe433435a 100644
--- a/meson.options
+++ b/meson.options
@@ -177,13 +177,6 @@ option(
)
option(
- 'mediafoundation-windows-dll-name',
- type : 'string',
- value : 'mediafoundation_hmft',
- description : 'name of gallium mediafoundation DLL built for Windows. ',
-)
-
-option(
'mediafoundation-store-dll',
type : 'boolean',
value : 'false',
@@ -191,6 +184,18 @@ option(
)
option(
+ 'mediafoundation-codecs',
+ type : 'array',
+ value : ['all'],
+ choices: [
+ 'all', 'h264enc', 'h265enc', 'av1enc'
+ ],
+ description : 'List of codecs to build mediafoundation frontend DLLs for. ' +
+ 'These will generate different MFT DLLs per codec and link' +
+ 'against the gallium drivers which uses the video-codecs option'
+)
+
+option(
'static-libclc',
type : 'array',
value : [],
diff --git a/src/gallium/frontends/mediafoundation/codecapi.cpp b/src/gallium/frontends/mediafoundation/codecapi.cpp
index 1ead55a9709..ec170a012fc 100644
--- a/src/gallium/frontends/mediafoundation/codecapi.cpp
+++ b/src/gallium/frontends/mediafoundation/codecapi.cpp
@@ -446,7 +446,7 @@ CDX12EncHMFT::GetParameterRange( const GUID *Api, VARIANT *ValueMin, VARIANT *Va
ValueMin->ulVal = HMFT_MIN_BITS_PER_SLICE;
ValueMax->ulVal = 0xffffffff;
break;
-#if VIDEO_CODEC_H264ENC
+#if MFT_CODEC_H264ENC
case SLICE_CONTROL_MODE_MB_ROW:
if( m_spOutputType )
{
diff --git a/src/gallium/frontends/mediafoundation/docs/readme.md b/src/gallium/frontends/mediafoundation/docs/readme.md
index 986cad20202..3871e997e4a 100644
--- a/src/gallium/frontends/mediafoundation/docs/readme.md
+++ b/src/gallium/frontends/mediafoundation/docs/readme.md
@@ -37,12 +37,26 @@ Other files related to the MFT:
| src/gallium/targets/mediafoundation | dllmain and resourc files for MFT, builds the dll |
## Build
-Current implementation is designed to build three differt codec (AV1, H264, HEVC) with the same code (note AV1 is stub right now). To build each codec, we run setup with different codec name.
+Current implementation is designed to build three differt codec (AV1, H264, HEVC) with the same code (note AV1 is stub right now).
+You can set up the build to build a single codec without comingling of other codec's code or you can build several (include all) codecs together that has comingle code.
+The comingle code currently comes from .\gallium\drivers\d3d12 folder.
-To build the COM based H264 codec, you can use the following command to setup the build (please run the setup under the mesa folder, and by default the output will go to c:\bin)
+To select one codec, you can do:
```
-meson setup build/ --pkg-config-path="C:\lib\pkgconfig" -Dgallium-d3d12-graphics=disabled -Dintel-elk=false -Dmicrosoft-clc=disabled -Dllvm=disabled -Dvalgrind=disabled -Dlmsensors=disabled -Dzlib=disabled -Dzstd=disabled -Dxmlconfig=disabled -Dgles1=disabled -Dgles2=disabled -Degl=disabled -Dgbm=disabled -Dglx-direct=false -Denable-glcpp-tests=false -Dopengl=false -Dgallium-drivers=d3d12 -Dgallium-vdpau=disabled -Dgallium-va=disabled -Dgallium-mediafoundation=enabled -Dc_args="/guard:cf /we4146 /we4308 /we4509 /we4510 /we4532 /we4533 /we4610 /we4700 /we4789 /wd4703" -Dc_link_args="/guard:cf /profile /DYNAMICBASE" -Dcpp_args="/guard:cf /we4146 /we4308 /we4509 /we4510 /we4532 /we4533 /we4610 /we4700 /we4789 /wd4703" -Dcpp_link_args="/guard:cf /profile /DYNAMICBASE" --default-library=static -Db_vscrt=mt -Dc_std=c17 -Dcpp_std=c++17 -Dmicrosoft-clc=disabled -Ddebug=false --buildtype=release -Dwarning_level=2 -Dvideo-codecs=h264enc -Dmediafoundation-windows-dll-name="msh264enchmft" -Dmediafoundation-store-dll=false -Dgallium-mediafoundation-test=true
+-Dvideo-codecs=h264enc -Dmediafoundation-codecs=h264enc
+```
+
+To select all codecs, you can do
+
+```
+-Dvideo-codecs=all -Dmediafoundation-codecs=all
+```
+
+Below is an example setup command that builds one codec
+
+```
+meson setup build/ --pkg-config-path="C:\lib\pkgconfig" -Dgallium-d3d12-graphics=disabled -Dintel-elk=false -Dmicrosoft-clc=disabled -Dllvm=disabled -Dvalgrind=disabled -Dlmsensors=disabled -Dzlib=disabled -Dzstd=disabled -Dxmlconfig=disabled -Dgles1=disabled -Dgles2=disabled -Degl=disabled -Dgbm=disabled -Dglx-direct=false -Denable-glcpp-tests=false -Dopengl=false -Dgallium-drivers=d3d12 -Dgallium-vdpau=disabled -Dgallium-va=disabled -Dgallium-mediafoundation=enabled -Dc_args="/guard:cf /we4146 /we4308 /we4509 /we4510 /we4532 /we4533 /we4610 /we4700 /we4789 /wd4703" -Dc_link_args="/guard:cf /profile /DYNAMICBASE" -Dcpp_args="/guard:cf /we4146 /we4308 /we4509 /we4510 /we4532 /we4533 /we4610 /we4700 /we4789 /wd4703" -Dcpp_link_args="/guard:cf /profile /DYNAMICBASE" --default-library=static -Db_vscrt=mt -Dc_std=c17 -Dcpp_std=c++17 -Dmicrosoft-clc=disabled -Ddebug=false --buildtype=release -Dwarning_level=2 -Dvideo-codecs=h264enc -Dmediafoundation-codecs=h264enc -Dmediafoundation-store-dll=false -Dgallium-mediafoundation-test=true
```
To build the COM based HEVC codec, use the above command but replace all instances of h264enc with h265enc to setup the build. Similarly for the pending AV1 codec, replace h264enc with av1enc.
diff --git a/src/gallium/frontends/mediafoundation/encode.cpp b/src/gallium/frontends/mediafoundation/encode.cpp
index 48cc8ecaf0c..b54b0a3bd02 100644
--- a/src/gallium/frontends/mediafoundation/encode.cpp
+++ b/src/gallium/frontends/mediafoundation/encode.cpp
@@ -434,11 +434,11 @@ CDX12EncHMFT::PrepareForEncode( IMFSample *pSample, LPDX12EncodeContext *ppDX12E
// Otherwise fallback to full frame encoding fence notification using a single output buffer
uint32_t num_output_buffers = 1u;
-#if VIDEO_CODEC_H264ENC
+#if MFT_CODEC_H264ENC
num_output_buffers = std::max( 1u, pDX12EncodeContext->encoderPicInfo.h264enc.num_slice_descriptors );
-#elif VIDEO_CODEC_H265ENC
+#elif MFT_CODEC_H265ENC
num_output_buffers = std::max( 1u, pDX12EncodeContext->encoderPicInfo.h265enc.num_slice_descriptors );
-#elif VIDEO_CODEC_AV1ENC
+#elif MFT_CODEC_AV1ENC
num_output_buffers =
std::max( 1u, pDX12EncodeContext->encoderPicInfo.av1enc.tile_rows * pDX12EncodeContext->encoderPicInfo.av1enc.tile_cols );
#endif
diff --git a/src/gallium/frontends/mediafoundation/encode_av1.cpp b/src/gallium/frontends/mediafoundation/encode_av1.cpp
index 37acf1bc93b..e49c6eaadca 100644
--- a/src/gallium/frontends/mediafoundation/encode_av1.cpp
+++ b/src/gallium/frontends/mediafoundation/encode_av1.cpp
@@ -20,7 +20,7 @@
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
-#if VIDEO_CODEC_AV1ENC
+#if MFT_CODEC_AV1ENC
#include "hmft_entrypoints.h"
#include "mfbufferhelp.h"
#include "mfpipeinterop.h"
@@ -40,7 +40,7 @@ HRESULT
CDX12EncHMFT::GetCodecPrivateData( LPBYTE pSPSPPSData, DWORD dwSPSPPSDataLen, LPDWORD lpdwSPSPPSDataLen )
{
HRESULT hr = S_OK;
-done:
+// done:
return hr;
}
diff --git a/src/gallium/frontends/mediafoundation/encode_h264.cpp b/src/gallium/frontends/mediafoundation/encode_h264.cpp
index 7635fea84b9..8ca484a11cc 100644
--- a/src/gallium/frontends/mediafoundation/encode_h264.cpp
+++ b/src/gallium/frontends/mediafoundation/encode_h264.cpp
@@ -20,7 +20,7 @@
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
-#if VIDEO_CODEC_H264ENC
+#if MFT_CODEC_H264ENC
#include "hmft_entrypoints.h"
#include "mfbufferhelp.h"
#include "mfpipeinterop.h"
diff --git a/src/gallium/frontends/mediafoundation/encode_hevc.cpp b/src/gallium/frontends/mediafoundation/encode_hevc.cpp
index c90f4d60afc..58eb76e9b19 100644
--- a/src/gallium/frontends/mediafoundation/encode_hevc.cpp
+++ b/src/gallium/frontends/mediafoundation/encode_hevc.cpp
@@ -20,7 +20,7 @@
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
-#if VIDEO_CODEC_H265ENC
+#if MFT_CODEC_H265ENC
#include "hmft_entrypoints.h"
#include "mfbufferhelp.h"
#include "mfpipeinterop.h"
diff --git a/src/gallium/frontends/mediafoundation/hmft_entrypoints.cpp b/src/gallium/frontends/mediafoundation/hmft_entrypoints.cpp
index 2d93f987d12..9fa16a08b97 100644
--- a/src/gallium/frontends/mediafoundation/hmft_entrypoints.cpp
+++ b/src/gallium/frontends/mediafoundation/hmft_entrypoints.cpp
@@ -54,11 +54,11 @@ done:
return hr;
}
-#if VIDEO_CODEC_H264ENC
+#if MFT_CODEC_H264ENC
MFT_REGISTER_TYPE_INFO rgOutputInfo = { MFMediaType_Video, MFVideoFormat_H264 };
-#elif VIDEO_CODEC_H265ENC
+#elif MFT_CODEC_H265ENC
MFT_REGISTER_TYPE_INFO rgOutputInfo = { MFMediaType_Video, MFVideoFormat_HEVC };
-#elif VIDEO_CODEC_AV1ENC
+#elif MFT_CODEC_AV1ENC
MFT_REGISTER_TYPE_INFO rgOutputInfo = { MFMediaType_Video, MFVideoFormat_AV1 };
#endif
MFT_REGISTER_TYPE_INFO rgInputInfo[NUM_INPUT_TYPES] = { { MFMediaType_Video, MFVideoFormat_NV12 },
@@ -72,8 +72,8 @@ CDX12EncHMFT::RuntimeClassInitialize()
HRESULT hr = S_OK;
ComPtr<IMFMediaType> spVideoType = NULL;
- static_assert( VIDEO_CODEC_H264ENC ^ VIDEO_CODEC_H265ENC ^ VIDEO_CODEC_AV1ENC,
- "VIDEO_CODEC_H264ENC or VIDEO_CODEC_H265ENC or VIDEO_CODEC_AV1ENC must be defined but only one at a time" );
+ static_assert( MFT_CODEC_H264ENC ^ MFT_CODEC_H265ENC ^ MFT_CODEC_AV1ENC,
+ "MFT_CODEC_H264ENC or MFT_CODEC_H265ENC or MFT_CODEC_AV1ENC must be defined but only one at a time" );
// Start by configuring for 4:2:0 NV12 as the only possible input type.
// Once the SetOutputType() happens with a profile, we'll reconfigure the available input type
diff --git a/src/gallium/frontends/mediafoundation/hmft_entrypoints.h b/src/gallium/frontends/mediafoundation/hmft_entrypoints.h
index 4b8acf033a6..c360765998f 100644
--- a/src/gallium/frontends/mediafoundation/hmft_entrypoints.h
+++ b/src/gallium/frontends/mediafoundation/hmft_entrypoints.h
@@ -293,11 +293,11 @@ DEFINE_CODECAPI_GUID( AVEncVideoOutputBitsUsedMapBlockSize,"6C2CD11A-CA3B-44BD-9
#define CODECAPI_AVEncVideoOutputBitsUsedMapBlockSize DEFINE_CODECAPI_GUIDNAMED( AVEncVideoOutputBitsUsedMapBlockSize )
#endif
-#if VIDEO_CODEC_H264ENC
+#if MFT_CODEC_H264ENC
#define HMFT_GUID "8994db7c-288a-4c62-a136-a3c3c2a208a8"
-#elif VIDEO_CODEC_H265ENC
+#elif MFT_CODEC_H265ENC
#define HMFT_GUID "e7ffb8eb-fa0b-4fb0-acdf-1202f663cde5"
-#elif VIDEO_CODEC_AV1ENC
+#elif MFT_CODEC_AV1ENC
#define HMFT_GUID "1a6f3150-b121-4ce9-9497-50fedb3dcb70"
#endif
@@ -348,13 +348,13 @@ class __declspec( uuid( HMFT_GUID ) ) CDX12EncHMFT : CMFD3DManager,
HRESULT InternalCheckOutputType( IMFMediaType *pType );
HRESULT CheckMediaType( IMFMediaType *pmt, bool bInputType );
-#if VIDEO_CODEC_H264ENC
+#if MFT_CODEC_H264ENC
HRESULT CheckMediaTypeLevel(
IMFMediaType *pmt, int width, int height, const encoder_capabilities &encoderCapabilities, eAVEncH264VLevel *pLevel ) const;
-#elif VIDEO_CODEC_H265ENC
+#elif MFT_CODEC_H265ENC
HRESULT CheckMediaTypeLevel(
IMFMediaType *pmt, int width, int height, const encoder_capabilities &encoderCapabilities, eAVEncH265VLevel *pLevel ) const;
-#elif VIDEO_CODEC_AV1ENC
+#elif MFT_CODEC_AV1ENC
HRESULT CheckMediaTypeLevel(
IMFMediaType *pmt, int width, int height, const encoder_capabilities &encoderCapabilities, eAVEncAV1VLevel *pLevel ) const;
#endif
@@ -431,25 +431,25 @@ class __declspec( uuid( HMFT_GUID ) ) CDX12EncHMFT : CMFD3DManager,
UINT32 m_uiSliceControlSize = 0;
BOOL m_bSliceControlSizeSet = FALSE;
BOOL m_bMaxNumRefFrameSet = FALSE;
-#if VIDEO_CODEC_H264ENC
+#if MFT_CODEC_H264ENC
UINT32 m_uiMaxNumRefFrame = PIPE_H264_MAX_REFERENCES;
-#elif VIDEO_CODEC_H265ENC
+#elif MFT_CODEC_H265ENC
UINT32 m_uiMaxNumRefFrame = PIPE_H265_MAX_REFERENCES;
-#elif VIDEO_CODEC_AV1ENC
+#elif MFT_CODEC_AV1ENC
UINT32 m_uiMaxNumRefFrame = PIPE_AV1_MAX_REFERENCES;
#endif
-#if VIDEO_CODEC_H264ENC
+#if MFT_CODEC_H264ENC
eAVEncH264VProfile m_uiProfile = eAVEncH264VProfile_Main;
eAVEncH264VLevel m_uiLevel = eAVEncH264VLevel5;
const D3D12_VIDEO_ENCODER_CODEC m_Codec = D3D12_VIDEO_ENCODER_CODEC_H264;
enum pipe_video_profile m_outputPipeProfile = PIPE_VIDEO_PROFILE_MPEG4_AVC_MAIN;
-#elif VIDEO_CODEC_H265ENC
+#elif MFT_CODEC_H265ENC
eAVEncH265VProfile m_uiProfile = eAVEncH265VProfile_Main_420_8;
eAVEncH265VLevel m_uiLevel = eAVEncH265VLevel5;
const D3D12_VIDEO_ENCODER_CODEC m_Codec = D3D12_VIDEO_ENCODER_CODEC_HEVC;
enum pipe_video_profile m_outputPipeProfile = PIPE_VIDEO_PROFILE_HEVC_MAIN;
-#elif VIDEO_CODEC_AV1ENC
+#elif MFT_CODEC_AV1ENC
eAVEncAV1VProfile m_uiProfile = eAVEncAV1VProfile_Main_420_8;
eAVEncAV1VLevel m_uiLevel = eAVEncAV1VLevel5;
const D3D12_VIDEO_ENCODER_CODEC m_Codec = D3D12_VIDEO_ENCODER_CODEC_AV1;
diff --git a/src/gallium/frontends/mediafoundation/meson.build b/src/gallium/frontends/mediafoundation/meson.build
index 5f4a496f726..5e45a3e97fa 100644
--- a/src/gallium/frontends/mediafoundation/meson.build
+++ b/src/gallium/frontends/mediafoundation/meson.build
@@ -81,6 +81,27 @@ mediafoundation_wpp_rsp = configure_file(
configuration : {'WPP_ARGS' : mediafoundation_wpp_args}
)
+mft_codecs = get_option('mediafoundation-codecs')
+all_mft_codecs = ['h264enc', 'h265enc', 'av1enc']
+if mft_codecs.contains('all')
+ mft_codecs = all_mft_codecs
+endif
+
+foreach c : mft_codecs
+ if not _codecs.contains(c)
+ error('@0@ present in mediafoundation-codecs must also be present in video-codecs.'.format(c))
+ endif
+endforeach
+
+mf_codecs_cpp_args = {}
+foreach mf_codec_target : all_mft_codecs
+ cpp_args = mf_cpp_args
+ foreach c : all_mft_codecs
+ cpp_args += '-DMFT_CODEC_@0@=@1@'.format(c.to_upper(), (c == mf_codec_target).to_int())
+ endforeach
+ mf_codecs_cpp_args += {mf_codec_target : cpp_args}
+endforeach
+
mediafoundation_wpp_preprocess = custom_target(
'mediafoundation_wpp_preprocess',
capture : true,
@@ -90,18 +111,20 @@ mediafoundation_wpp_preprocess = custom_target(
command : ['tracewpp', '-cfgdir:@CURRENT_SOURCE_DIR@/wppconfig/rev1', '-scan:@CURRENT_SOURCE_DIR@/wpptrace.h', '-odir:@OUTDIR@', '@' + fs.relative_to(mediafoundation_wpp_rsp, 'a:\\')]
)
-gallium_mf_name = get_option('mediafoundation-windows-dll-name')
-
-mediafoundation_st = static_library(
- 'mediafoundation_st',
- mediafoundation_files,
- mediafoundation_wpp_preprocess,
- gnu_symbol_visibility : 'hidden',
- cpp_args : mf_cpp_args,
- override_options: ['cpp_std=c++20'],
- include_directories : [inc_include, inc_src, inc_mesa, inc_gallium, inc_gallium_aux],
- dependencies : [idep_mesautil, dep_dxheaders],
-)
+mediafoundation_st = {}
+foreach codec : mft_codecs
+ lib = static_library(
+ 'mediafoundation_st_' + codec,
+ mediafoundation_files,
+ mediafoundation_wpp_preprocess,
+ gnu_symbol_visibility : 'hidden',
+ cpp_args : mf_codecs_cpp_args[codec],
+ override_options: ['cpp_std=c++20'],
+ include_directories : [inc_include, inc_src, inc_mesa, inc_gallium, inc_gallium_aux],
+ dependencies : [idep_mesautil, dep_dxheaders],
+ )
+ mediafoundation_st += {codec : lib}
+endforeach
if with_gallium_mediafoundation_test
subdir('test')
diff --git a/src/gallium/frontends/mediafoundation/mftransform.cpp b/src/gallium/frontends/mediafoundation/mftransform.cpp
index 358c094a88a..067eef3cd16 100644
--- a/src/gallium/frontends/mediafoundation/mftransform.cpp
+++ b/src/gallium/frontends/mediafoundation/mftransform.cpp
@@ -1165,7 +1165,7 @@ CDX12EncHMFT::xThreadProc( void *pCtx )
&encoded_bitstream_bytes,
&metadata );
-#if (VIDEO_CODEC_H264ENC || VIDEO_CODEC_H265ENC)
+#if (MFT_CODEC_H264ENC || MFT_CODEC_H265ENC)
if (pThis->m_pPipeVideoCodec->two_pass.enable &&
(pThis->m_pPipeVideoCodec->two_pass.pow2_downscale_factor > 0) &&
(pThis->m_pPipeVideoCodec->two_pass.skip_1st_dpb_texture))
@@ -1183,9 +1183,9 @@ CDX12EncHMFT::xThreadProc( void *pCtx )
vpblit_params.src_surface_fence = NULL; // No need, we _just_ waited for completion above before get_feedback
vpblit_params.base.fence = &dst_surface_fence; // Output surface fence (driver output)
-#if VIDEO_CODEC_H264ENC
+#if MFT_CODEC_H264ENC
auto &cur_pic_dpb_entry = pDX12EncodeContext->encoderPicInfo.h264enc.dpb[pDX12EncodeContext->encoderPicInfo.h265enc.dpb_curr_pic];
-#elif VIDEO_CODEC_H265ENC
+#elif MFT_CODEC_H265ENC
auto &cur_pic_dpb_entry = pDX12EncodeContext->encoderPicInfo.h265enc.dpb[pDX12EncodeContext->encoderPicInfo.h265enc.dpb_curr_pic];
#endif
@@ -1239,7 +1239,7 @@ CDX12EncHMFT::xThreadProc( void *pCtx )
OS_TIMEOUT_INFINITE );
assert(finished);
}
-#endif // (VIDEO_CODEC_H264ENC || VIDEO_CODEC_H265ENC)
+#endif // (MFT_CODEC_H264ENC || MFT_CODEC_H265ENC)
// Only release the reconpic AFTER working on it for two pass if needed
pThis->m_pGOPTracker->release_reconpic( pDX12EncodeContext->pAsyncDPBToken );
diff --git a/src/gallium/frontends/mediafoundation/reference_frames_tracker_av1.cpp b/src/gallium/frontends/mediafoundation/reference_frames_tracker_av1.cpp
index 46ea31facab..a7d8a32fa4f 100644
--- a/src/gallium/frontends/mediafoundation/reference_frames_tracker_av1.cpp
+++ b/src/gallium/frontends/mediafoundation/reference_frames_tracker_av1.cpp
@@ -21,6 +21,6 @@
* IN THE SOFTWARE.
*/
-#if VIDEO_CODEC_AV1ENC
+#if MFT_CODEC_AV1ENC
#endif
diff --git a/src/gallium/frontends/mediafoundation/reference_frames_tracker_av1.h b/src/gallium/frontends/mediafoundation/reference_frames_tracker_av1.h
index 4b00fa0f092..aa2917c82c3 100644
--- a/src/gallium/frontends/mediafoundation/reference_frames_tracker_av1.h
+++ b/src/gallium/frontends/mediafoundation/reference_frames_tracker_av1.h
@@ -23,6 +23,6 @@
#pragma once
-#if VIDEO_CODEC_AV1ENC
+#if MFT_CODEC_AV1ENC
#endif
diff --git a/src/gallium/frontends/mediafoundation/reference_frames_tracker_h264.cpp b/src/gallium/frontends/mediafoundation/reference_frames_tracker_h264.cpp
index ca63b6a0db6..3e4c603cd3c 100644
--- a/src/gallium/frontends/mediafoundation/reference_frames_tracker_h264.cpp
+++ b/src/gallium/frontends/mediafoundation/reference_frames_tracker_h264.cpp
@@ -21,7 +21,7 @@
* IN THE SOFTWARE.
*/
-#if VIDEO_CODEC_H264ENC
+#if MFT_CODEC_H264ENC
#include "reference_frames_tracker_h264.h"
#include <algorithm>
diff --git a/src/gallium/frontends/mediafoundation/reference_frames_tracker_h264.h b/src/gallium/frontends/mediafoundation/reference_frames_tracker_h264.h
index c0eafc3686a..717b5f0afa4 100644
--- a/src/gallium/frontends/mediafoundation/reference_frames_tracker_h264.h
+++ b/src/gallium/frontends/mediafoundation/reference_frames_tracker_h264.h
@@ -23,7 +23,7 @@
#pragma once
-#if VIDEO_CODEC_H264ENC
+#if MFT_CODEC_H264ENC
#include <deque>
#include <queue>
diff --git a/src/gallium/frontends/mediafoundation/reference_frames_tracker_hevc.cpp b/src/gallium/frontends/mediafoundation/reference_frames_tracker_hevc.cpp
index c4910c1a8ec..402b0fbb9ce 100644
--- a/src/gallium/frontends/mediafoundation/reference_frames_tracker_hevc.cpp
+++ b/src/gallium/frontends/mediafoundation/reference_frames_tracker_hevc.cpp
@@ -20,7 +20,7 @@
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
-#if VIDEO_CODEC_H265ENC
+#if MFT_CODEC_H265ENC
#include "reference_frames_tracker_hevc.h"
#include <algorithm>
#include <cmath>
diff --git a/src/gallium/frontends/mediafoundation/reference_frames_tracker_hevc.h b/src/gallium/frontends/mediafoundation/reference_frames_tracker_hevc.h
index 9a0e6cf262d..9934adc21f2 100644
--- a/src/gallium/frontends/mediafoundation/reference_frames_tracker_hevc.h
+++ b/src/gallium/frontends/mediafoundation/reference_frames_tracker_hevc.h
@@ -23,7 +23,7 @@
#pragma once
-#if VIDEO_CODEC_H265ENC
+#if MFT_CODEC_H265ENC
#include <deque>
#include <queue>
diff --git a/src/gallium/frontends/mediafoundation/test/hmft_simple_encode_test.cpp b/src/gallium/frontends/mediafoundation/test/hmft_simple_encode_test.cpp
index 8cf9f26b84e..312c3811e45 100644
--- a/src/gallium/frontends/mediafoundation/test/hmft_simple_encode_test.cpp
+++ b/src/gallium/frontends/mediafoundation/test/hmft_simple_encode_test.cpp
@@ -58,16 +58,16 @@ TEST( MediaFoundationEntrypoint, VerifySimpleEncodeSoftwareSample )
ComPtr<IMFMediaBuffer> spOutBuffer;
ComPtr<IMFMediaType> spInType = CreateVideoMT( width, height, FOURCC_NV12, FALSE, frameRateNum, frameRateDiv );
-#if VIDEO_CODEC_H264ENC
+#if MFT_CODEC_H264ENC
ComPtr<IMFMediaType> spOutType = CreateVideoMT( width, height, FOURCC_H264, FALSE, frameRateNum, frameRateDiv, bitRate * 1024 );
-#elif VIDEO_CODEC_H265ENC
+#elif MFT_CODEC_H265ENC
ComPtr<IMFMediaType> spOutType = CreateVideoMT( width, height, FOURCC_HEVC, FALSE, frameRateNum, frameRateDiv, bitRate * 1024 );
-#elif VIDEO_CODEC_AV1ENC
+#elif MFT_CODEC_AV1ENC
// NO AV1 doesn't work yet...
assert( false );
ComPtr<IMFMediaType> spOutType = CreateVideoMT( width, height, FOURCC_AV01, FALSE, frameRateNum, frameRateDiv, bitRate * 1024 );
#else
-#error VIDEO_CODEC_xxx must be defined
+#error MFT_CODEC_xxx must be defined
#endif
GUID m_guidOutputVideoSubtype( MFVideoFormat_IYUV );
@@ -176,11 +176,11 @@ TEST( MediaFoundationEntrypoint, VerifySimpleEncodeSoftwareSample )
// #define DUMP
#if defined( DUMP )
{
-#if VIDEO_CODEC_H264ENC
+#if MFT_CODEC_H264ENC
FILE *fp = fopen( "d:\\test\\output.h264", "ab" );
-#elif VIDEO_CODEC_H265ENC
+#elif MFT_CODEC_H265ENC
FILE *fp = fopen( "d:\\test\\output.h265", "ab" );
-#elif VIDEO_CODEC_AV1ENC
+#elif MFT_CODEC_AV1ENC
FILE *fp = fopen( "d:\\test\\output.av1", "ab" );
#endif
fwrite( pBuf, 1, dwLen, fp );
diff --git a/src/gallium/frontends/mediafoundation/test/meson.build b/src/gallium/frontends/mediafoundation/test/meson.build
index b68a9fd4d48..ef6e8cbab54 100644
--- a/src/gallium/frontends/mediafoundation/test/meson.build
+++ b/src/gallium/frontends/mediafoundation/test/meson.build
@@ -1,13 +1,18 @@
-mediafoundation_test_st = static_library(
- 'mediafoundation_test_st',
- files(
- 'hmft_test_helpers.cpp',
- 'hmft_codecapi_test.cpp',
- 'hmft_simple_encode_test.cpp',
- 'stub.cpp',
- ),
- cpp_args : mf_cpp_args,
- override_options: ['cpp_std=c++20'],
- include_directories: [inc_include, inc_src, inc_gallium, inc_gallium_aux],
- dependencies: [idep_gtest, dep_dxheaders],
-) \ No newline at end of file
+mediafoundation_test_st = {}
+
+foreach codec : mft_codecs
+ test_lib = static_library(
+ 'mediafoundation_test_st_' + codec,
+ files(
+ 'hmft_test_helpers.cpp',
+ 'hmft_codecapi_test.cpp',
+ 'hmft_simple_encode_test.cpp',
+ 'stub.cpp',
+ ),
+ cpp_args : mf_codecs_cpp_args[codec],
+ override_options: ['cpp_std=c++20'],
+ include_directories: [inc_include, inc_src, inc_gallium, inc_gallium_aux],
+ dependencies: [idep_gtest, dep_dxheaders],
+ )
+ mediafoundation_test_st += {codec : test_lib}
+endforeach \ No newline at end of file
diff --git a/src/gallium/frontends/mediafoundation/test/stub.cpp b/src/gallium/frontends/mediafoundation/test/stub.cpp
index f2b5b564f54..dc0ac3c82e7 100644
--- a/src/gallium/frontends/mediafoundation/test/stub.cpp
+++ b/src/gallium/frontends/mediafoundation/test/stub.cpp
@@ -23,17 +23,17 @@
#include <guiddef.h>
-#if VIDEO_CODEC_H264ENC
+#if MFT_CODEC_H264ENC
const wchar_t *g_pMFTFriendlyName = L"Microsoft AVC DX12 Encoder HMFT";
DEFINE_GUID( CLSID_CDX12EncoderHMFT, 0x8994db7c, 0x288a, 0x4c62, 0xa1, 0x36, 0xa3, 0xc3, 0xc2, 0xa2, 0x08, 0xa8 );
-#elif VIDEO_CODEC_H265ENC
+#elif MFT_CODEC_H265ENC
const wchar_t *g_pMFTFriendlyName = L"Microsoft HEVC DX12 Encoder HMFT";
DEFINE_GUID( CLSID_CDX12EncoderHMFT, 0xe7ffb8eb, 0xfa0b, 0x4fb0, 0xac, 0xdf, 0x12, 0x2, 0xf6, 0x63, 0xcd, 0xe5 );
-#elif VIDEO_CODEC_AV1ENC
+#elif MFT_CODEC_AV1ENC
const wchar_t *g_pMFTFriendlyName = L"Microsoft AV1 DX12 Encoder HMFT";
DEFINE_GUID( CLSID_CDX12EncoderHMFT, 0x1a6f3150, 0xb121, 0x4ce9, 0x94, 0x97, 0x50, 0xfe, 0xdb, 0x3d, 0xcb, 0x70 );
#else
-#error VIDEO_CODEC_xxx must be defined
+#error MFT_CODEC_xxx must be defined
#endif
extern "C" struct pipe_screen *
diff --git a/src/gallium/frontends/mediafoundation/wpptrace.cpp b/src/gallium/frontends/mediafoundation/wpptrace.cpp
index 31692bb2317..fcd71b8c8a9 100644
--- a/src/gallium/frontends/mediafoundation/wpptrace.cpp
+++ b/src/gallium/frontends/mediafoundation/wpptrace.cpp
@@ -25,7 +25,7 @@
#include "wpptrace.tmh"
-#if VIDEO_CODEC_H264ENC
+#if MFT_CODEC_H264ENC
TRACELOGGING_DEFINE_PROVIDER( // defines g_hProvider
g_hEtwProvider, // Name of the provider handle
@@ -33,7 +33,7 @@ TRACELOGGING_DEFINE_PROVIDER( // defines g_hProvider
// 0000e264-0dc9-401d-b9b8-05e4eca4977e
( 0x0000e264, 0x0dc9, 0x401d, 0xb9, 0xb8, 0x05, 0xe4, 0xec, 0xa4, 0x97, 0x7e ) );
-#elif VIDEO_CODEC_H265ENC
+#elif MFT_CODEC_H265ENC
TRACELOGGING_DEFINE_PROVIDER( // defines g_hProvider
g_hEtwProvider, // Name of the provider handle
@@ -41,7 +41,7 @@ TRACELOGGING_DEFINE_PROVIDER( // defines g_hProvider
// 0000e265-0dc9-401d-b9b8-05e4eca4977e
( 0x0000e265, 0x0dc9, 0x401d, 0xb9, 0xb8, 0x05, 0xe4, 0xec, 0xa4, 0x97, 0x7e ) );
-#elif VIDEO_CODEC_AV1ENC
+#elif MFT_CODEC_AV1ENC
TRACELOGGING_DEFINE_PROVIDER( // defines g_hProvider
g_hEtwProvider, // Name of the provider handle
@@ -50,7 +50,7 @@ TRACELOGGING_DEFINE_PROVIDER( // defines g_hProvider
( 0x0000eaa1, 0x0dc9, 0x401d, 0xb9, 0xb8, 0x05, 0xe4, 0xec, 0xa4, 0x97, 0x7e ) );
#else
-#error VIDEO_CODEC_xxx must be defined
+#error MFT_CODEC_xxx must be defined
#endif
void
diff --git a/src/gallium/frontends/mediafoundation/wpptrace.h b/src/gallium/frontends/mediafoundation/wpptrace.h
index ea7538c1a7f..7bde45a5f89 100644
--- a/src/gallium/frontends/mediafoundation/wpptrace.h
+++ b/src/gallium/frontends/mediafoundation/wpptrace.h
@@ -27,14 +27,14 @@
#include <TraceLoggingProvider.h>
-#if VIDEO_CODEC_H264ENC
+#if MFT_CODEC_H264ENC
#define DEFINE_MFE_WPP_GUID ( 264, 0dc9, 401d, b9b8, 05e4eca4977e )
-#elif VIDEO_CODEC_H265ENC
+#elif MFT_CODEC_H265ENC
#define DEFINE_MFE_WPP_GUID ( 265, 0dc9, 401d, b9b8, 05e4eca4977e )
-#elif VIDEO_CODEC_AV1ENC
+#elif MFT_CODEC_AV1ENC
#define DEFINE_MFE_WPP_GUID ( aa1, 0dc9, 401d, b9b8, 05e4eca4977e )
#else
-#error VIDEO_CODEC_xxx must be defined
+#error MFT_CODEC_xxx must be defined
#endif
#define WPP_CONTROL_GUIDS WPP_DEFINE_CONTROL_GUID( CTRLGUID_MFE, DEFINE_MFE_WPP_GUID, WPP_DEFINE_BIT( MFE_ALL ) )
@@ -64,20 +64,20 @@
TRACELOGGING_DECLARE_PROVIDER( g_hEtwProvider );
-#if VIDEO_CODEC_H264ENC
+#if MFT_CODEC_H264ENC
#define ETW_MODULE_STR "H264Enc"
-#elif VIDEO_CODEC_H265ENC
+#elif MFT_CODEC_H265ENC
#define ETW_MODULE_STR "H265Enc"
-#elif VIDEO_CODEC_AV1ENC
+#elif MFT_CODEC_AV1ENC
#define ETW_MODULE_STR "AV1Enc"
#else
-#error VIDEO_CODEC_xxx must be defined
+#error MFT_CODEC_xxx must be defined
#endif
#define HMFT_ETW_EVENT_START( EventId, this ) \
diff --git a/src/gallium/targets/mediafoundation/dllmain.cpp b/src/gallium/targets/mediafoundation/dllmain.cpp
index 8b9c6242cab..4ce96cfa65f 100644
--- a/src/gallium/targets/mediafoundation/dllmain.cpp
+++ b/src/gallium/targets/mediafoundation/dllmain.cpp
@@ -31,20 +31,20 @@ using namespace Microsoft::WRL;
extern "C" BOOL WINAPI
DllEntryPoint(HINSTANCE, ULONG, __inout_opt LPVOID);
-#if VIDEO_CODEC_H264ENC
+#if MFT_CODEC_H264ENC
const wchar_t *g_pMFTFriendlyName =
L"Microsoft AVC DX12 Encoder HMFT";
DEFINE_GUID(CLSID_CDX12EncoderHMFT, 0x8994db7c, 0x288a, 0x4c62, 0xa1, 0x36, 0xa3, 0xc3, 0xc2, 0xa2, 0x08, 0xa8);
-#elif VIDEO_CODEC_H265ENC
+#elif MFT_CODEC_H265ENC
const wchar_t *g_pMFTFriendlyName =
L"Microsoft HEVC DX12 Encoder HMFT";
DEFINE_GUID(CLSID_CDX12EncoderHMFT, 0xe7ffb8eb, 0xfa0b, 0x4fb0, 0xac, 0xdf, 0x12, 0x2, 0xf6, 0x63, 0xcd, 0xe5);
-#elif VIDEO_CODEC_AV1ENC
+#elif MFT_CODEC_AV1ENC
const wchar_t *g_pMFTFriendlyName =
L"Microsoft AV1 DX12 Encoder HMFT";
DEFINE_GUID(CLSID_CDX12EncoderHMFT, 0x1a6f3150, 0xb121, 0x4ce9, 0x94, 0x97, 0x50, 0xfe, 0xdb, 0x3d, 0xcb, 0x70);
#else
-#error VIDEO_CODEC_xxx must be defined
+#error MFT_CODEC_xxx must be defined
#endif
HINSTANCE g_hModule = nullptr;
diff --git a/src/gallium/targets/mediafoundation/meson.build b/src/gallium/targets/mediafoundation/meson.build
index 406e3d2b559..85d749b3f6a 100644
--- a/src/gallium/targets/mediafoundation/meson.build
+++ b/src/gallium/targets/mediafoundation/meson.build
@@ -19,31 +19,8 @@
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
# IN THE SOFTWARE.
-mf_cpp_args = cc.get_supported_arguments([
- '/we4267',
- '/we4996',
- '/we4146',
- '/we4244',
- '/we4389',
- '/we4838',
- '/we4302',
- '/we4018',
- '/we4056',
- '/we4305',
- '/we4351',
- '/we4756',
- '/we4800',
- '/we4291',
- '/we4624',
- '/we4309',
- '/we5105',
- '/we4020',
- '/we4024',
- '/we4189',
-])
-if get_option('mediafoundation-store-dll')
- mf_cpp_args += '-DBUILD_FOR_MSDK' # Can use #if BUILD_FOR_MSDK in .cpp code
-endif
+dxcore_lib = cpp.find_library('dxcore')
+rc_compiler = find_program('rc')
mediafoundation_link_args = ['runtimeobject.lib','mfplat.lib','mfuuid.lib','d3d12.lib','dxgi.lib']
mediafoundation_link_depends = []
@@ -74,67 +51,66 @@ mediafoundation_def = custom_target(
command : gen_vs_module_defs_normal_command,
)
-gallium_mf_name = get_option('mediafoundation-windows-dll-name')
-
-mft_dll_version = '1.0.5'
+winmod = import('windows')
+dll_version = '1.0.5'
+foreach codec : mft_codecs
+ gallium_mf_name = 'ms' + codec + 'hmft'
+ if get_option('mediafoundation-store-dll')
+ gallium_mf_name += '_store'
+ endif
+ mft_dll_version = dll_version
-mediafoundation_rc_conf_data = configuration_data()
-mediafoundation_rc_conf_data.set('CompanyName', '"Microsoft Corporation"')
-mediafoundation_rc_conf_data.set('FileDescription', '"Media Foundation DX12 Encoder MFT"')
-mediafoundation_rc_conf_data.set('FileVersion', '@0@.0'.format(mft_dll_version))
-mediafoundation_rc_conf_data.set('InternalName', '"@0@"'.format(gallium_mf_name))
-mediafoundation_rc_conf_data.set('OriginalFilename', '"@0@"'.format(gallium_mf_name))
-mediafoundation_rc_conf_data.set('ProductName', '"Media Foundation Encoder MFT"')
-mediafoundation_rc_conf_data.set('ProductVersion', '@0@.0'.format(mft_dll_version))
+ mediafoundation_rc_conf_data = configuration_data()
+ mediafoundation_rc_conf_data.set('CompanyName', '"Microsoft Corporation"')
+ mediafoundation_rc_conf_data.set('FileDescription', '"Media Foundation DX12 Encoder MFT"')
+ mediafoundation_rc_conf_data.set('FileVersion', '@0@.0'.format(mft_dll_version))
+ mediafoundation_rc_conf_data.set('InternalName', '"@0@"'.format(gallium_mf_name))
+ mediafoundation_rc_conf_data.set('OriginalFilename', '"@0@"'.format(gallium_mf_name))
+ mediafoundation_rc_conf_data.set('ProductName', '"Media Foundation Encoder MFT"')
+ mediafoundation_rc_conf_data.set('ProductVersion', '@0@.0'.format(mft_dll_version))
-mediafoundation_rc = configure_file(
- configuration: mediafoundation_rc_conf_data,
- input: 'mediafoundation.rc.in',
- output: 'mediafoundation.rc',
-)
-
-rc_compiler = find_program('rc')
-rc_target = custom_target('resource',
- input : mediafoundation_rc,
- output : 'mediafoundation.res',
- command : [rc_compiler, join_paths(meson.current_build_dir(), 'mediafoundation.rc')]
-)
-
-dxcore_lib = cpp.find_library('dxcore')
-libmediafoundation_gallium = shared_library(
- gallium_mf_name,
- 'target.c',
- 'dllmain.cpp',
- link_args : [mediafoundation_link_args, ld_args_gc_sections, ld_args_build_id],
- vs_module_defs : 'dx12enchmft.def', #mediafoundation_def,
- cpp_args : mf_cpp_args,
- override_options: ['cpp_std=c++20'],
- include_directories : [
- inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux, inc_util, inc_gallium_winsys, inc_gallium_drivers, inc_gallium_winsys_sw
- ],
- link_whole : [mediafoundation_st],
- link_with : link_with_libmediafoundation_gallium,
- dependencies : [driver_d3d12, idep_mesautil, dxcore_lib, dep_dxheaders],
- soversion : host_machine.system() == 'windows' ? '' : mft_dll_version,
- version : mft_dll_version,
- link_depends : mediafoundation_link_depends,
- install : true,
- name_suffix : 'dll',
- name_prefix : '', # otherwise mingw will create libXXX.dll
- objects: [rc_target]
-)
+ rc_file = configure_file(
+ configuration: mediafoundation_rc_conf_data,
+ input: 'mediafoundation.rc.in',
+ output: 'mediafoundation_@0@.rc'.format(codec),
+ )
+ rc_target = winmod.compile_resources(rc_file)
+
+ libmediafoundation_gallium = shared_library(
+ gallium_mf_name,
+ 'target.c',
+ 'dllmain.cpp',
+ link_args : [mediafoundation_link_args, ld_args_gc_sections, ld_args_build_id],
+ vs_module_defs : 'dx12enchmft.def', #mediafoundation_def,
+ cpp_args : mf_codecs_cpp_args[codec],
+ override_options: ['cpp_std=c++20'],
+ include_directories : [
+ inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux, inc_util, inc_gallium_winsys, inc_gallium_drivers, inc_gallium_winsys_sw
+ ],
+ link_whole : [mediafoundation_st[codec]],
+ link_with : link_with_libmediafoundation_gallium,
+ dependencies : [driver_d3d12, idep_mesautil, dxcore_lib, dep_dxheaders],
+ soversion : host_machine.system() == 'windows' ? '' : mft_dll_version,
+ version : mft_dll_version,
+ link_depends : mediafoundation_link_depends,
+ install : true,
+ name_suffix : 'dll',
+ name_prefix : '', # otherwise mingw will create libXXX.dll
+ objects: [rc_target]
+ )
-gallium_mf_test_name = gallium_mf_name + '_test'
-if with_gallium_mediafoundation_test
- test(
- gallium_mf_test_name,
- executable(
+ if with_gallium_mediafoundation_test
+ gallium_mf_test_name = gallium_mf_name + '_test'
+ test(
gallium_mf_test_name,
- link_args : [mediafoundation_link_args, ld_args_gc_sections, ld_args_build_id, 'strmiids.lib'],
- link_whole: [mediafoundation_st, mediafoundation_test_st],
- link_with : link_with_libmediafoundation_gallium,
- dependencies : [idep_gtest, driver_d3d12, idep_mesautil, dxcore_lib, dep_dxheaders],
- ),
- protocol: 'gtest'
- )
-endif
+ executable(
+ gallium_mf_test_name,
+ link_args : [mediafoundation_link_args, ld_args_gc_sections, ld_args_build_id, 'strmiids.lib'],
+ link_whole: [mediafoundation_st[codec], mediafoundation_test_st[codec]],
+ link_with : link_with_libmediafoundation_gallium,
+ dependencies : [idep_gtest, driver_d3d12, idep_mesautil, dxcore_lib, dep_dxheaders],
+ ),
+ protocol: 'gtest'
+ )
+ endif
+endforeach \ No newline at end of file