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 | 76 ++++++++++++++++++++++++++++++++++ 3 files changed, 80 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..7ba5a249394 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,65 @@ 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 < 16; ++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 || hr == MF_E_NOTACCEPTING, "ProcessInput returned %#lx.\n", hr); + ret = IMFSample_Release(input_sample); + todo_wine + ok(ret == 0, "Release returned %ld.\n", ret); + if (hr != S_OK) + break; + } + todo_wine + ok(hr == MF_E_NOTACCEPTING, "ProcessInput returned %#lx.\n", hr); + ok(i >= 4, "Processed %ld input samples.\n", i); + + /* 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);