-- v2: winegstreamer/video_encoder: Initially implement ProcessOutput. winegstreamer/video_encoder: Add ICodecAPI stubs. mf/tests: Test codecapi for h264 encoder. mf/tests: Test h264 encoder sample processing.
From: Ziqing Hui zhui@codeweavers.com
--- dlls/mf/tests/h264encdata.bin | Bin 0 -> 755 bytes dlls/mf/tests/resource.rc | 4 ++ dlls/mf/tests/transform.c | 78 ++++++++++++++++++++++++++++++++++ 3 files changed, 82 insertions(+) create mode 100644 dlls/mf/tests/h264encdata.bin
diff --git a/dlls/mf/tests/h264encdata.bin b/dlls/mf/tests/h264encdata.bin new file mode 100644 index 0000000000000000000000000000000000000000..d7ae3ef2ff5cecdb53441bafacdca818ab0352a5 GIT binary patch literal 755 zcmXYtZAepL6vxl*uDZDxH-<<#@iENMWNmkDb2rVaX7-`=Mww*f?%veg%k^&4UNEn3 zVA2OO5I;op#SDWCQA4mYtP~U%L|^PfD@1|<%P2;Px94W(fpZSe`JdnOoU=}VYzj3c z`+5hf8LT!<Ab>Umna30pJ5?icp<%gLlw)$z0V2Vj+~muIC-l)DBl#tTjz+f-3Wt0V zbksmw3sGgz9rAbuRBbX?3}*P>wzfE~8yE^#tUS0sUp{2<{|pOm#*7*myA`#{&c}xt z+HSDhjEMI!HXHJ{_!%0x7!z_e^H^FR;u*UUHF^X&g#B(@aR+$Dh%m{7u!goGfs1$< zlih47#27EvgsZNo5A$dXMhadZM&g$n7&DEye~Af&qb?o;curuf$c&E=^x!@>=i=Nr z`Y{-}Bf$vHxu^##{hXY)3Qbtw5^a=kt_au{7jIAN?G;&#w0S+F4+t`=53~qW0B6v^ zi&-|ipQlvyRPJH*;MCOAv#hz#w&b2Sb#Hq>sR#Y89YB(ZKVGs#L>8*F9R<H<YN%9? zRy{x6(X9R06uVt2C35;8X_E!&ASehDqtgMz(I#w@hxk89k2T@omo17AD3p_TZ8lC) zXJf-1v(zbDskE8)omIR91%MK${pBjPQWPst98od(LwDbuUs;i)uW8?$`CX~vD|X+B zbiveiaRaKXYnNWX&z7XQW)_}*61N9ZLgzTeLWRkR2@6Fk(%h@tLoU|V*49Z|86ENE zu7vSOml6opShjmi)Q#M@aI^i~Ox|?ohq84^B5z?<FAynCKx{XjB@UF%Q5gsX+NEC_ z=VkM~1gl<hiv7b0J)q7<JYPiU9kC55K8E+Isu9@;f(%e7y0zV&OjRs}NTIc)wtlij h-mBysB@6a;m!*!Ctmd{F)l6Z<>8npy71YB!e*wri_uv2k
literal 0 HcmV?d00001
diff --git a/dlls/mf/tests/resource.rc b/dlls/mf/tests/resource.rc index 949977ab8b2..873d373e079 100644 --- a/dlls/mf/tests/resource.rc +++ b/dlls/mf/tests/resource.rc @@ -63,6 +63,10 @@ mp3decdata.bin RCDATA mp3decdata.bin /* @makedep: h264data.bin */ h264data.bin RCDATA h264data.bin
+/* Generated from running the tests on Windows */ +/* @makedep: h264encdata.bin */ +h264encdata.bin RCDATA h264encdata.bin + /* Generated with: gst-launch-1.0 videotestsrc num-buffers=30 pattern=smpte100 ! \ video/x-raw,format=I420,width=84,height=82,framerate=30000/1001 ! \ diff --git a/dlls/mf/tests/transform.c b/dlls/mf/tests/transform.c index 49e5fbdd497..41cc36b6884 100644 --- a/dlls/mf/tests/transform.c +++ b/dlls/mf/tests/transform.c @@ -4054,11 +4054,28 @@ static void test_h264_encoder(void) ATTR_UINT32(test_attr_guid, 0), {0}, }; + const struct attribute_desc output_sample_attributes_key[] = + { + ATTR_UINT32(MFSampleExtension_CleanPoint, 1), + {0}, + }; + const struct buffer_desc output_buffer_desc = {.length = -1 /* Variable. */}; + const struct sample_desc output_sample_desc = + { + .attributes = output_sample_attributes_key, + .sample_time = 333333, .sample_duration = 333333, + .buffer_count = 1, .buffers = &output_buffer_desc, + }; MFT_OUTPUT_STREAM_INFO output_info, expect_output_info[] = {{.cbSize = 0x8000}, {.cbSize = 0x3bc400}}; MFT_REGISTER_TYPE_INFO output_type = {MFMediaType_Video, MFVideoFormat_H264}; MFT_REGISTER_TYPE_INFO input_type = {MFMediaType_Video, MFVideoFormat_NV12}; + IMFSample *input_sample, *output_sample; + IMFCollection *output_sample_collection; + ULONG nv12frame_data_size, size; + const BYTE *nv12frame_data; IMFMediaType *media_type; IMFTransform *transform; + DWORD output_status; HRESULT hr; ULONG ret; DWORD i; @@ -4185,6 +4202,67 @@ static void test_h264_encoder(void) winetest_pop_context(); }
+ check_mft_set_output_type(transform, output_type_desc, S_OK); + check_mft_set_input_type(transform, input_type_desc, S_OK); + + /* Load input frame. */ + load_resource(L"nv12frame.bmp", &nv12frame_data, &nv12frame_data_size); + /* Skip BMP header and RGB data from the dump. */ + size = *(DWORD *)(nv12frame_data + 2); + nv12frame_data_size -= size; + nv12frame_data += size; + ok(nv12frame_data_size == 13824, "Got NV12 frame size %lu.\n", nv12frame_data_size); + + /* Process input samples. */ + for (i = 0; i < 8; ++i) + { + input_sample = create_sample(nv12frame_data, nv12frame_data_size); + hr = IMFSample_SetSampleTime(input_sample, i * 333333); + ok(hr == S_OK, "SetSampleTime returned %#lx.\n", hr); + hr = IMFSample_SetSampleDuration(input_sample, 333333); + ok(hr == S_OK, "SetSampleDuration returned %#lx.\n", hr); + hr = IMFTransform_ProcessInput(transform, 0, input_sample, 0); + ok(hr == S_OK, "ProcessInput returned %#lx.\n", hr); + ret = IMFSample_Release(input_sample); + todo_wine + ok(ret == 0, "Release returned %ld.\n", ret); + } + input_sample = create_sample(nv12frame_data, nv12frame_data_size); + hr = IMFTransform_ProcessInput(transform, 0, input_sample, 0); + todo_wine + ok(hr == MF_E_NOTACCEPTING, "ProcessInput returned %#lx.\n", hr); + ret = IMFSample_Release(input_sample); + todo_wine + ok(ret == 0, "Release returned %ld.\n", ret); + + /* Check output sample. */ + hr = MFCreateCollection(&output_sample_collection); + ok(hr == S_OK, "MFCreateCollection returned %#lx\n", hr); + + output_sample = create_sample(NULL, expect_output_info[0].cbSize); + hr = check_mft_process_output(transform, output_sample, &output_status); + todo_wine + ok(hr == S_OK, "ProcessOutput returned %#lx.\n", hr); + if (hr != S_OK) + { + IMFSample_Release(output_sample); + goto failed; + } + hr = IMFCollection_AddElement(output_sample_collection, (IUnknown *)output_sample); + ok(hr == S_OK, "AddElement returned %#lx.\n", hr); + ret = IMFSample_Release(output_sample); + ok(ret == 1, "Release returned %ld\n", ret); + + output_sample = create_sample(NULL, expect_output_info[0].cbSize); + hr = check_mft_process_output(transform, output_sample, &output_status); + ok(hr == MF_E_TRANSFORM_NEED_MORE_INPUT, "ProcessOutput returned %#lx.\n", hr); + ret = IMFSample_Release(output_sample); + ok(ret == 0, "Release returned %ld\n", ret); + + ret = check_mf_sample_collection(output_sample_collection, &output_sample_desc, L"h264encdata.bin"); + ok(ret == 0, "Got %lu%% diff\n", ret); + IMFCollection_Release(output_sample_collection); + IMFMediaType_Release(media_type); ret = IMFTransform_Release(transform); ok(ret == 0, "Release returned %lu\n", ret);
From: Ziqing Hui zhui@codeweavers.com
--- dlls/mf/tests/Makefile.in | 2 +- dlls/mf/tests/transform.c | 109 +++++++++++++++++++++++++++++--------- include/codecapi.h | 3 ++ 3 files changed, 88 insertions(+), 26 deletions(-)
diff --git a/dlls/mf/tests/Makefile.in b/dlls/mf/tests/Makefile.in index 432400d4efc..13a6c1803de 100644 --- a/dlls/mf/tests/Makefile.in +++ b/dlls/mf/tests/Makefile.in @@ -1,5 +1,5 @@ TESTDLL = mf.dll -IMPORTS = mf mfplat dmoguids mfuuid strmiids uuid wmcodecdspuuid ole32 user32 propsys msdmo d3d9 d3d11 dxva2 msvfw32 +IMPORTS = mf mfplat dmoguids mfuuid strmiids uuid wmcodecdspuuid ole32 user32 propsys msdmo d3d9 d3d11 dxva2 msvfw32 oleaut32
SOURCES = \ mf.c \ diff --git a/dlls/mf/tests/transform.c b/dlls/mf/tests/transform.c index 41cc36b6884..9870616c518 100644 --- a/dlls/mf/tests/transform.c +++ b/dlls/mf/tests/transform.c @@ -46,6 +46,7 @@ #include "initguid.h"
#include "codecapi.h" +#include "icodecapi.h"
#include "d3d11_4.h"
@@ -265,12 +266,41 @@ static void check_interface_(unsigned int line, void *iface_ptr, REFIID iid, BOO ok_ (file, line)((val).member == (exp).member, "Got " #member " " fmt ", expected " fmt ".\n", (val).member, (exp).member) #define check_member(val, exp, fmt, member) check_member_(__FILE__, __LINE__, val, exp, fmt, member)
+const char *debugstr_propvariant(const PROPVARIANT *propvar, BOOL ratio) +{ + char buffer[1024] = {0}, *ptr = buffer; + UINT i; + + switch (propvar->vt) + { + default: + return wine_dbg_sprintf("??"); + case VT_CLSID: + return wine_dbg_sprintf("%s", debugstr_guid(propvar->puuid)); + case VT_UI4: + return wine_dbg_sprintf("%lu", propvar->ulVal); + case VT_UI8: + if (ratio) + return wine_dbg_sprintf("%lu:%lu", propvar->uhVal.HighPart, propvar->uhVal.LowPart); + else + return wine_dbg_sprintf("%I64u", propvar->uhVal.QuadPart); + case VT_VECTOR | VT_UI1: + ptr += sprintf(ptr, "size %lu, data {", propvar->caub.cElems); + for (i = 0; i < 128 && i < propvar->caub.cElems; ++i) + ptr += sprintf(ptr, "0x%02x,", propvar->caub.pElems[i]); + if (propvar->caub.cElems > 128) + ptr += sprintf(ptr, "...}"); + else + ptr += sprintf(ptr - (i ? 1 : 0), "}"); + return wine_dbg_sprintf("%s", buffer); + } +} + void check_attributes_(const char *file, int line, IMFAttributes *attributes, const struct attribute_desc *desc, ULONG limit) { - char buffer[1024], *buf = buffer; PROPVARIANT value; - int i, j, ret; + int i, ret; HRESULT hr;
for (i = 0; i < limit && desc[i].key; ++i) @@ -280,32 +310,10 @@ void check_attributes_(const char *file, int line, IMFAttributes *attributes, ok_(file, line)(hr == S_OK, "%s missing, hr %#lx\n", debugstr_a(desc[i].name), hr); if (hr != S_OK) continue;
- switch (value.vt) - { - default: sprintf(buffer, "??"); break; - case VT_CLSID: sprintf(buffer, "%s", debugstr_guid(value.puuid)); break; - case VT_UI4: sprintf(buffer, "%lu", value.ulVal); break; - case VT_UI8: - if (desc[i].ratio) - sprintf(buffer, "%lu:%lu", value.uhVal.HighPart, value.uhVal.LowPart); - else - sprintf(buffer, "%I64u", value.uhVal.QuadPart); - break; - case VT_VECTOR | VT_UI1: - buf += sprintf(buf, "size %lu, data {", value.caub.cElems); - for (j = 0; j < 128 && j < value.caub.cElems; ++j) - buf += sprintf(buf, "0x%02x,", value.caub.pElems[j]); - if (value.caub.cElems > 128) - buf += sprintf(buf, "...}"); - else - buf += sprintf(buf - (j ? 1 : 0), "}"); - break; - } - ret = PropVariantCompareEx(&value, &desc[i].value, 0, 0); todo_wine_if(desc[i].todo_value) ok_(file, line)(ret == 0, "%s mismatch, type %u, value %s\n", - debugstr_a(desc[i].name), value.vt, buffer); + debugstr_a(desc[i].name), value.vt, debugstr_propvariant(&value, desc[i].ratio)); PropVariantClear(&value); } } @@ -4054,6 +4062,25 @@ static void test_h264_encoder(void) ATTR_UINT32(test_attr_guid, 0), {0}, }; + const struct attribute_desc expect_codec_api_attributes[] = + { + ATTR_UINT32(CODECAPI_AVEncCommonRateControlMode, eAVEncCommonRateControlMode_CBR, .todo = TRUE), + ATTR_UINT32(CODECAPI_AVEncCommonQuality, 65, .todo = TRUE), + ATTR_UINT32(CODECAPI_AVEncCommonBufferSize, 72577, .todo = TRUE), + ATTR_UINT32(CODECAPI_AVEncCommonMaxBitRate, 0, .todo = TRUE), + ATTR_UINT32(CODECAPI_AVEncCommonMeanBitRate, 193540, .todo = TRUE), + ATTR_UINT32(CODECAPI_AVEncCommonQualityVsSpeed, 33, .todo = TRUE), + ATTR_UINT32(CODECAPI_AVEncH264CABACEnable, 0, .todo = TRUE), + ATTR_UINT32(CODECAPI_AVEncH264PPSID, 0, .todo = TRUE), + ATTR_UINT32(CODECAPI_AVEncH264SPSID, 0, .todo = TRUE), + ATTR_UINT32(CODECAPI_AVEncMPVGOPSize, 0, .todo = TRUE), + ATTR_UINT32(CODECAPI_AVEncMPVDefaultBPictureCount, 1, .todo = TRUE), + ATTR_UINT64(CODECAPI_AVEncVideoEncodeQP, 26, .todo = TRUE), + ATTR_UINT32(CODECAPI_AVEncVideoMaxQP, 51, .todo = TRUE), + ATTR_UINT32(CODECAPI_AVEncVideoMinQP, 0, .todo = TRUE), + ATTR_UINT32(CODECAPI_AVEncVideoMaxNumRefFrame, 2, .todo = TRUE), + {0}, + }; const struct attribute_desc output_sample_attributes_key[] = { ATTR_UINT32(MFSampleExtension_CleanPoint, 1), @@ -4071,10 +4098,12 @@ static void test_h264_encoder(void) MFT_REGISTER_TYPE_INFO input_type = {MFMediaType_Video, MFVideoFormat_NV12}; IMFSample *input_sample, *output_sample; IMFCollection *output_sample_collection; + const struct attribute_desc *desc; ULONG nv12frame_data_size, size; const BYTE *nv12frame_data; IMFMediaType *media_type; IMFTransform *transform; + ICodecAPI *codec_api; DWORD output_status; HRESULT hr; ULONG ret; @@ -4099,6 +4128,8 @@ static void test_h264_encoder(void) ok(hr == S_OK, "CoCreateInstance returned %#lx.\n", hr);
check_interface(transform, &IID_IMFTransform, TRUE); + todo_wine + check_interface(transform, &IID_ICodecAPI, TRUE); check_interface(transform, &IID_IMediaObject, FALSE); check_interface(transform, &IID_IPropertyStore, FALSE); check_interface(transform, &IID_IPropertyBag, FALSE); @@ -4202,6 +4233,34 @@ static void test_h264_encoder(void) winetest_pop_context(); }
+ hr = IMFTransform_QueryInterface(transform, &IID_ICodecAPI, (void **)&codec_api); + todo_wine + ok(hr == S_OK, "QueryInterface returned %#lx.\n", hr); + if (hr == S_OK) + { + for (desc = &expect_codec_api_attributes[0]; desc->key; ++desc) + { + PROPVARIANT propvar; + VARIANT var; + + hr = ICodecAPI_GetValue(codec_api, desc->key, &var); + todo_wine_if(desc->todo) + ok(hr == S_OK, "%s is missing.\n", debugstr_a(desc->name)); + if (hr != S_OK) + continue; + hr = VariantToPropVariant(&var, &propvar); + ok(hr == S_OK, "VariantToPropVariant returned %#lx.\n", hr); + ret = PropVariantCompareEx(&propvar, &desc->value, 0, 0); + todo_wine_if(desc->todo_value) + ok(ret == 0, "%s mismatch, type %u, value %s.\n", + debugstr_a(desc->name), propvar.vt, debugstr_propvariant(&propvar, desc->ratio)); + + PropVariantClear(&propvar); + VariantClear(&var); + } + ICodecAPI_Release(codec_api); + } + check_mft_set_output_type(transform, output_type_desc, S_OK); check_mft_set_input_type(transform, input_type_desc, S_OK);
diff --git a/include/codecapi.h b/include/codecapi.h index b40d122c497..571d08ea1dd 100644 --- a/include/codecapi.h +++ b/include/codecapi.h @@ -242,6 +242,9 @@ DEFINE_GUID(CODECAPI_AVEncH264CABACEnable, 0xee6cad62, 0xd305, 0x4248, 0xa5, 0xe DEFINE_GUID(CODECAPI_AVEncH264SPSID, 0x50f38f51, 0x2b79, 0x40e3, 0xb3, 0x9c, 0x7e, 0x9f, 0xa0, 0x77, 0x5, 0x1); DEFINE_GUID(CODECAPI_AVEncH264PPSID, 0xbfe29ec2, 0x56c, 0x4d68, 0xa3, 0x8d, 0xae, 0x59, 0x44, 0xc8, 0x58, 0x2e);
+DEFINE_GUID(CODECAPI_AVEncMPVGOPSize, 0x95f31b26, 0x95a4, 0x41aa, 0x93, 0x03, 0x24, 0x6a, 0x7f, 0xc6, 0xee, 0xf1); +DEFINE_GUID(CODECAPI_AVEncMPVDefaultBPictureCount, 0x8d390aac, 0xdc5c, 0x4200, 0xb5, 0x7f, 0x81, 0x4d, 0x04, 0xba, 0xba, 0xb2); + DEFINE_GUID(CODECAPI_AVEncStatVideoOutputFrameRate, 0xbe747849, 0x9ab4, 0x4a63, 0x98, 0xfe, 0xf1, 0x43, 0xf0, 0x4f, 0x8e, 0xe9); DEFINE_GUID(CODECAPI_AVEncStatVideoCodedFrames, 0xd47f8d61, 0x6f5a, 0x4a26, 0xbb, 0x9f, 0xcd, 0x95, 0x18, 0x46, 0x2b, 0xcd); DEFINE_GUID(CODECAPI_AVEncStatVideoTotalFrames, 0xfdaa9916, 0x119a, 0x4222, 0x9a, 0xd6, 0x3f, 0x7c, 0xab, 0x99, 0xcc, 0x8b);
From: Ziqing Hui zhui@codeweavers.com
--- dlls/mf/tests/transform.c | 5 - dlls/winegstreamer/video_encoder.c | 144 +++++++++++++++++++++++++++++ 2 files changed, 144 insertions(+), 5 deletions(-)
diff --git a/dlls/mf/tests/transform.c b/dlls/mf/tests/transform.c index 9870616c518..cb353bee14e 100644 --- a/dlls/mf/tests/transform.c +++ b/dlls/mf/tests/transform.c @@ -4128,7 +4128,6 @@ static void test_h264_encoder(void) ok(hr == S_OK, "CoCreateInstance returned %#lx.\n", hr);
check_interface(transform, &IID_IMFTransform, TRUE); - todo_wine check_interface(transform, &IID_ICodecAPI, TRUE); check_interface(transform, &IID_IMediaObject, FALSE); check_interface(transform, &IID_IPropertyStore, FALSE); @@ -4234,10 +4233,7 @@ static void test_h264_encoder(void) }
hr = IMFTransform_QueryInterface(transform, &IID_ICodecAPI, (void **)&codec_api); - todo_wine ok(hr == S_OK, "QueryInterface returned %#lx.\n", hr); - if (hr == S_OK) - { for (desc = &expect_codec_api_attributes[0]; desc->key; ++desc) { PROPVARIANT propvar; @@ -4259,7 +4255,6 @@ static void test_h264_encoder(void) VariantClear(&var); } ICodecAPI_Release(codec_api); - }
check_mft_set_output_type(transform, output_type_desc, S_OK); check_mft_set_input_type(transform, input_type_desc, S_OK); diff --git a/dlls/winegstreamer/video_encoder.c b/dlls/winegstreamer/video_encoder.c index e15c799d81f..427fd5804c0 100644 --- a/dlls/winegstreamer/video_encoder.c +++ b/dlls/winegstreamer/video_encoder.c @@ -30,12 +30,15 @@
#include "initguid.h"
+#include "icodecapi.h" + WINE_DEFAULT_DEBUG_CHANNEL(mfplat); WINE_DECLARE_DEBUG_CHANNEL(winediag);
struct video_encoder { IMFTransform IMFTransform_iface; + ICodecAPI ICodecAPI_iface; LONG refcount;
const GUID *const *input_types; @@ -60,6 +63,11 @@ static inline struct video_encoder *impl_from_IMFTransform(IMFTransform *iface) return CONTAINING_RECORD(iface, struct video_encoder, IMFTransform_iface); }
+static inline struct video_encoder *impl_from_ICodecAPI(ICodecAPI *iface) +{ + return CONTAINING_RECORD(iface, struct video_encoder, ICodecAPI_iface); +} + static HRESULT video_encoder_create_input_type(struct video_encoder *encoder, const GUID *subtype, IMFMediaType **out) { @@ -120,6 +128,8 @@ static HRESULT WINAPI transform_QueryInterface(IMFTransform *iface, REFIID iid,
if (IsEqualGUID(iid, &IID_IMFTransform) || IsEqualGUID(iid, &IID_IUnknown)) *out = &encoder->IMFTransform_iface; + else if (IsEqualGUID(iid, &IID_ICodecAPI)) + *out = &encoder->ICodecAPI_iface; else { *out = NULL; @@ -553,6 +563,139 @@ static const IMFTransformVtbl transform_vtbl = transform_ProcessOutput, };
+static HRESULT WINAPI codec_api_QueryInterface(ICodecAPI *iface, REFIID riid, void **out) +{ + struct video_encoder *encoder = impl_from_ICodecAPI(iface); + return IMFTransform_QueryInterface(&encoder->IMFTransform_iface, riid, out); +} + +static ULONG WINAPI codec_api_AddRef(ICodecAPI *iface) +{ + struct video_encoder *encoder = impl_from_ICodecAPI(iface); + return IMFTransform_AddRef(&encoder->IMFTransform_iface); +} + +static ULONG WINAPI codec_api_Release(ICodecAPI *iface) +{ + struct video_encoder *encoder = impl_from_ICodecAPI(iface); + return IMFTransform_Release(&encoder->IMFTransform_iface); +} + +static HRESULT WINAPI codec_api_IsSupported(ICodecAPI *iface, const GUID *api) +{ + FIXME("iface %p, api %s.\n", iface, debugstr_guid(api)); + return E_NOTIMPL; +} + +static HRESULT WINAPI codec_api_IsModifiable(ICodecAPI *iface, const GUID *api) +{ + FIXME("iface %p, api %s.\n", iface, debugstr_guid(api)); + return E_NOTIMPL; +} + +static HRESULT WINAPI codec_api_GetParameterRange(ICodecAPI *iface, + const GUID *api, VARIANT *min, VARIANT *max, VARIANT *delta) +{ + FIXME("iface %p, api %s, min %p, max %p, delta %p.\n", + iface, debugstr_guid(api), min, max, delta); + return E_NOTIMPL; +} + +static HRESULT WINAPI codec_api_GetParameterValues(ICodecAPI *iface, const GUID *api, VARIANT **values, ULONG *count) +{ + FIXME("iface %p, api %s, values %p, count %p.\n", iface, debugstr_guid(api), values, count); + return E_NOTIMPL; +} + +static HRESULT WINAPI codec_api_GetDefaultValue(ICodecAPI *iface, const GUID *api, VARIANT *value) +{ + FIXME("iface %p, api %s, value %p.\n", iface, debugstr_guid(api), value); + return E_NOTIMPL; +} + +static HRESULT WINAPI codec_api_GetValue(ICodecAPI *iface, const GUID *api, VARIANT *value) +{ + FIXME("iface %p, api %s, value %p.\n", iface, debugstr_guid(api), value); + return E_NOTIMPL; +} + +static HRESULT WINAPI codec_api_SetValue(ICodecAPI *iface, const GUID *api, VARIANT *value) +{ + FIXME("iface %p, api %s, value %p.\n", iface, debugstr_guid(api), value); + return E_NOTIMPL; +} + +static HRESULT WINAPI codec_api_RegisterForEvent(ICodecAPI *iface, const GUID *api, LONG_PTR userData) +{ + FIXME("iface %p, api %s, value %p.\n", iface, debugstr_guid(api), LongToPtr(userData)); + return E_NOTIMPL; +} + +static HRESULT WINAPI codec_api_UnregisterForEvent(ICodecAPI *iface, const GUID *api) +{ + FIXME("iface %p, api %s.\n", iface, debugstr_guid(api)); + return E_NOTIMPL; +} + +static HRESULT WINAPI codec_api_SetAllDefaults(ICodecAPI *iface) +{ + FIXME("iface %p.\n", iface); + return E_NOTIMPL; +} + +static HRESULT WINAPI codec_api_SetValueWithNotify(ICodecAPI *iface, + const GUID *api, VARIANT *value, GUID **param, ULONG *count) +{ + FIXME("iface %p, api %s, param %p, count %p.\n", iface, debugstr_guid(api), param, count); + return E_NOTIMPL; +} + +static HRESULT WINAPI codec_api_SetAllDefaultsWithNotify(ICodecAPI *iface, GUID **param, ULONG *count) +{ + FIXME("iface %p, param %p, count %p.\n", iface, param, count); + return E_NOTIMPL; +} + +static HRESULT WINAPI codec_api_GetAllSettings(ICodecAPI *iface, IStream *stream) +{ + FIXME("iface %p, stream %p.\n", iface, stream); + return E_NOTIMPL; +} + +static HRESULT WINAPI codec_api_SetAllSettings(ICodecAPI *iface, IStream *stream) +{ + FIXME("iface %p, stream %p.\n", iface, stream); + return E_NOTIMPL; +} + +static HRESULT WINAPI codec_api_SetAllSettingsWithNotify(ICodecAPI *iface, IStream *stream, GUID **param, ULONG *count) +{ + FIXME("iface %p, stream %p, param %p, count %p.\n", iface, stream, param, count); + return E_NOTIMPL; +} + +static const ICodecAPIVtbl codec_api_vtbl = +{ + codec_api_QueryInterface, + codec_api_AddRef, + codec_api_Release, + codec_api_IsSupported, + codec_api_IsModifiable, + codec_api_GetParameterRange, + codec_api_GetParameterValues, + codec_api_GetDefaultValue, + codec_api_GetValue, + codec_api_SetValue, + codec_api_RegisterForEvent, + codec_api_UnregisterForEvent, + codec_api_SetAllDefaults, + codec_api_SetValueWithNotify, + codec_api_SetAllDefaultsWithNotify, + codec_api_GetAllSettings, + codec_api_SetAllSettings, + codec_api_SetAllSettingsWithNotify, +}; + static HRESULT video_encoder_create(const GUID *const *input_types, UINT input_type_count, const GUID *const *output_types, UINT output_type_count, struct video_encoder **out) { @@ -563,6 +706,7 @@ static HRESULT video_encoder_create(const GUID *const *input_types, UINT input_t return E_OUTOFMEMORY;
encoder->IMFTransform_iface.lpVtbl = &transform_vtbl; + encoder->ICodecAPI_iface.lpVtbl = &codec_api_vtbl; encoder->refcount = 1;
encoder->input_types = input_types;
From: Ziqing Hui zhui@codeweavers.com
--- dlls/winegstreamer/video_encoder.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-)
diff --git a/dlls/winegstreamer/video_encoder.c b/dlls/winegstreamer/video_encoder.c index 427fd5804c0..fd28cd150da 100644 --- a/dlls/winegstreamer/video_encoder.c +++ b/dlls/winegstreamer/video_encoder.c @@ -529,8 +529,22 @@ static HRESULT WINAPI transform_ProcessInput(IMFTransform *iface, DWORD id, IMFS static HRESULT WINAPI transform_ProcessOutput(IMFTransform *iface, DWORD flags, DWORD count, MFT_OUTPUT_DATA_BUFFER *samples, DWORD *status) { - FIXME("iface %p, flags %#lx, count %lu, samples %p, status %p.\n", iface, flags, count, samples, status); - return E_NOTIMPL; + struct video_encoder *encoder = impl_from_IMFTransform(iface); + HRESULT hr; + + TRACE("iface %p, flags %#lx, count %lu, samples %p, status %p.\n", iface, flags, count, samples, status); + + if (count != 1) + return E_INVALIDARG; + if (!encoder->wg_transform) + return MF_E_TRANSFORM_TYPE_NOT_SET; + if (!samples->pSample) + return E_INVALIDARG; + + if (SUCCEEDED(hr = wg_transform_read_mf(encoder->wg_transform, samples->pSample, 0, &samples->dwStatus))) + wg_sample_queue_flush(encoder->wg_sample_queue, false); + + return hr; }
static const IMFTransformVtbl transform_vtbl =
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=147988
Your paranoid android.
=== w7u_2qxl (32 bit report) ===
mf: mf.c:5383: Test failed: got hr 0x80072f8f mf.c:5383: Test failed: got hr 0x80072f8f mf.c:5454: Test failed: got hr 0x80072f8f mf.c:5460: Test failed: got hr 0x80072f8f mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf.c:6339: Test failed: WaitForSingleObject returned 258 mf.c:6339: Test failed: Unexpected hr 0xd36d8. mf: Timeout
=== w8 (32 bit report) ===
mf: transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5.
=== w8adm (32 bit report) ===
mf: transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5.
=== w864 (32 bit report) ===
mf: transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5.
=== w1064v1507 (32 bit report) ===
mf: transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5.
=== w1064v1809 (32 bit report) ===
mf: transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5.
=== w1064_tsign (32 bit report) ===
mf: transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5.
=== w10pro64 (32 bit report) ===
mf: transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5.
=== w10pro64_en_AE_u8 (32 bit report) ===
mf: transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5.
=== w11pro64 (32 bit report) ===
mf: transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5.
=== w864 (64 bit report) ===
mf: transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5.
=== w1064v1507 (64 bit report) ===
mf: transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5.
=== w1064v1809 (64 bit report) ===
Report validation errors: mf:transform crashed (c0000374)
=== w1064_2qxl (64 bit report) ===
mf: transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5.
=== w1064_adm (64 bit report) ===
mf: transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5.
=== w1064_tsign (64 bit report) ===
mf: transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5.
=== w10pro64 (64 bit report) ===
mf: transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5.
=== w10pro64_ar (64 bit report) ===
mf: transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5.
=== w10pro64_ja (64 bit report) ===
mf: transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5.
=== w10pro64_zh_CN (64 bit report) ===
mf: transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5.
=== w11pro64_amd (64 bit report) ===
mf: transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5. transform.c:4279: Test failed: h264enc: ProcessInput returned 0xc00d36b5.
Fwiw it still fails the Windows tests (on Gitlab but also in a local W10 VM).