Signed-off-by: Rémi Bernon rbernon@codeweavers.com --- dlls/mf/tests/mf.c | 48 ++++++++++++++++++++++------------------------ 1 file changed, 23 insertions(+), 25 deletions(-)
diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c index 37520d48292..6f6213b1e26 100644 --- a/dlls/mf/tests/mf.c +++ b/dlls/mf/tests/mf.c @@ -6999,33 +6999,31 @@ static void test_h264_decoder(void) ok(output.dwStatus == 0, "got dwStatus %#lx\n", output.dwStatus); ok(!output.pEvents, "got pEvents %p\n", output.pEvents); ok(status == 0, "got status %#lx\n", status); - if (hr == S_OK) - { - /* Win8 and before pad the data with garbage instead of original - * buffer data, make sure it's consistent. */ - hr = IMFSample_ConvertToContiguousBuffer(output.pSample, &media_buffer); - ok(hr == S_OK, "ConvertToContiguousBuffer returned %#lx\n", hr); - hr = IMFMediaBuffer_Lock(media_buffer, &data, NULL, &length); - ok(hr == S_OK, "Lock returned %#lx\n", hr); - todo_wine - ok(length == nv12_frame_len, "got length %lu\n", length); - if (length == nv12_frame_len) - { - for (i = 0; i < actual_aperture.Area.cy; ++i) - { - memset(data + actual_width * i + actual_aperture.Area.cx, 0xcd, actual_width - actual_aperture.Area.cx); - memset(data + actual_width * (actual_height + i) + actual_aperture.Area.cx, 0xcd, actual_width - actual_aperture.Area.cx); - } - memset(data + actual_width * actual_aperture.Area.cy, 0xcd, (actual_height - actual_aperture.Area.cy) * actual_width); - memset(data + actual_width * (actual_height + actual_aperture.Area.cy / 2), 0xcd, (actual_height - actual_aperture.Area.cy) / 2 * actual_width); - } - hr = IMFMediaBuffer_Unlock(media_buffer); - ok(hr == S_OK, "Unlock returned %#lx\n", hr); - IMFMediaBuffer_Release(media_buffer); + if (hr != S_OK) goto skip_nv12_tests;
- if (length == nv12_frame_len) - check_sample(output.pSample, nv12_frame_data, output_file); + /* Win8 and before pad the data with garbage instead of original + * buffer data, make sure it's consistent. */ + hr = IMFSample_ConvertToContiguousBuffer(output.pSample, &media_buffer); + ok(hr == S_OK, "ConvertToContiguousBuffer returned %#lx\n", hr); + hr = IMFMediaBuffer_Lock(media_buffer, &data, NULL, &length); + ok(hr == S_OK, "Lock returned %#lx\n", hr); + ok(length == nv12_frame_len, "got length %lu\n", length); + + for (i = 0; i < actual_aperture.Area.cy; ++i) + { + memset(data + actual_width * i + actual_aperture.Area.cx, 0xcd, actual_width - actual_aperture.Area.cx); + memset(data + actual_width * (actual_height + i) + actual_aperture.Area.cx, 0xcd, actual_width - actual_aperture.Area.cx); } + memset(data + actual_width * actual_aperture.Area.cy, 0xcd, (actual_height - actual_aperture.Area.cy) * actual_width); + memset(data + actual_width * (actual_height + actual_aperture.Area.cy / 2), 0xcd, (actual_height - actual_aperture.Area.cy) / 2 * actual_width); + + hr = IMFMediaBuffer_Unlock(media_buffer); + ok(hr == S_OK, "Unlock returned %#lx\n", hr); + IMFMediaBuffer_Release(media_buffer); + + check_sample(output.pSample, nv12_frame_data, output_file); + +skip_nv12_tests: ret = IMFSample_Release(output.pSample); ok(ret == 0, "Release returned %lu\n", ret);
Instead of silent data. This shows some difference in the FFmpeg decoded data, with the data delayed by half a buffer, explaining the additional data we decode.
The audiodata.bin resource has been generated with:
gst-launch-1.0 audiomixer name=mix ! \ audio/x-raw,format=F32LE,rate=22050,channels=2 ! \ filesink location=dlls/winegstreamer/tests/audiodata.bin \ audiotestsrc freq=400 volume=0.2 num-buffers=1 \ samplesperbuffer=22050 ! mix. \ audiotestsrc freq=600 volume=0.2 num-buffers=1 \ samplesperbuffer=22050 timestamp-offset=20000000 ! mix.
Signed-off-by: Rémi Bernon rbernon@codeweavers.com --- dlls/mf/tests/audiodata.bin | Bin 0 -> 179928 bytes dlls/mf/tests/mf.c | 175 +++++++++++++++++++++++------------ dlls/mf/tests/resource.rc | 10 +- dlls/mf/tests/wmadata.bin | Bin 49071 -> 0 bytes dlls/mf/tests/wmadecdata.bin | Bin 0 -> 28672 bytes dlls/mf/tests/wmaencdata.bin | Bin 0 -> 4461 bytes 6 files changed, 123 insertions(+), 62 deletions(-) create mode 100644 dlls/mf/tests/audiodata.bin delete mode 100644 dlls/mf/tests/wmadata.bin create mode 100644 dlls/mf/tests/wmadecdata.bin create mode 100644 dlls/mf/tests/wmaencdata.bin
diff --git a/dlls/mf/tests/audiodata.bin b/dlls/mf/tests/audiodata.bin new file mode 100644 index 0000000000000000000000000000000000000000..5bf3fa1575ce8b980ef68a5c83b70a1b8e4760f2 GIT binary patch literal 179928 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 H+%NqPHAu^@
literal 0 HcmV?d00001
diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c index 6f6213b1e26..d6eddef01df 100644 --- a/dlls/mf/tests/mf.c +++ b/dlls/mf/tests/mf.c @@ -5738,9 +5738,42 @@ static void check_sample_(int line, IMFSample *sample, const void *expect_buf, H ok_(__FILE__, line)(ret == 1, "Release returned %lu\n", ret); }
+#define check_sample_pcm16(a, b, c, d) check_sample_pcm16_(__LINE__, a, b, c, d) +static void check_sample_pcm16_(int line, IMFSample *sample, const BYTE *expect_buf, HANDLE output_file, BOOL todo) +{ + IMFMediaBuffer *media_buffer; + DWORD i, length; + BYTE *buffer; + HRESULT hr; + ULONG ret; + + hr = IMFSample_ConvertToContiguousBuffer(sample, &media_buffer); + ok_(__FILE__, line)(hr == S_OK, "ConvertToContiguousBuffer returned %#lx\n", hr); + hr = IMFMediaBuffer_Lock(media_buffer, &buffer, NULL, &length); + ok_(__FILE__, line)(hr == S_OK, "Lock returned %#lx\n", hr); + + /* check that buffer values are close enough, there's some differences in + * the output of audio DSP between 32bit and 64bit implementation + */ + for (i = 0; i < length; i += 2) + { + DWORD expect = *(INT16 *)(expect_buf + i), value = *(INT16 *)(buffer + i); + if (expect - value + 512 > 1024) break; + } + + todo_wine_if(todo) + ok_(__FILE__, line)(i == length, "unexpected buffer data\n"); + + if (output_file) WriteFile(output_file, buffer, length, &length, NULL); + hr = IMFMediaBuffer_Unlock(media_buffer); + ok_(__FILE__, line)(hr == S_OK, "Unlock returned %#lx\n", hr); + ret = IMFMediaBuffer_Release(media_buffer); + ok_(__FILE__, line)(ret == 1, "Release returned %lu\n", ret); +} + static const BYTE wma_codec_data[10] = {0, 0x44, 0, 0, 0x17, 0, 0, 0, 0, 0}; -static const BYTE wma_decoded_data[0x4000] = {0}; -static const ULONG wma_block_size = 1487; +static const ULONG wmaenc_block_size = 1487; +static const ULONG wmadec_block_size = 0x2000;
static void test_wma_encoder(void) { @@ -5789,19 +5822,19 @@ static void test_wma_encoder(void) ATTR_UINT32(MF_MT_AUDIO_NUM_CHANNELS, 2), ATTR_UINT32(MF_MT_AUDIO_SAMPLES_PER_SECOND, 22050), ATTR_UINT32(MF_MT_AUDIO_AVG_BYTES_PER_SECOND, 4003), - ATTR_UINT32(MF_MT_AUDIO_BLOCK_ALIGNMENT, wma_block_size), + ATTR_UINT32(MF_MT_AUDIO_BLOCK_ALIGNMENT, wmaenc_block_size), ATTR_BLOB(MF_MT_USER_DATA, wma_codec_data, sizeof(wma_codec_data)), {0}, };
MFT_REGISTER_TYPE_INFO output_type = {MFMediaType_Audio, MFAudioFormat_WMAudioV8}; MFT_REGISTER_TYPE_INFO input_type = {MFMediaType_Audio, MFAudioFormat_Float}; + ULONG audio_data_len, wmaenc_data_len; + const BYTE *audio_data, *wmaenc_data; MFT_OUTPUT_STREAM_INFO output_info; MFT_INPUT_STREAM_INFO input_info; MFT_OUTPUT_DATA_BUFFER output; - const BYTE *wma_encoded_data; WCHAR output_path[MAX_PATH]; - ULONG wma_encoded_data_len; IMFMediaType *media_type; IMFTransform *transform; DWORD status, length; @@ -5847,39 +5880,42 @@ static void test_wma_encoder(void) hr = IMFTransform_GetOutputStreamInfo(transform, 0, &output_info); ok(hr == S_OK, "GetOutputStreamInfo returned %#lx\n", hr); ok(output_info.dwFlags == 0, "got dwFlags %#lx\n", output_info.dwFlags); - ok(output_info.cbSize == wma_block_size, "got cbSize %#lx\n", output_info.cbSize); + ok(output_info.cbSize == wmaenc_block_size, "got cbSize %#lx\n", output_info.cbSize); ok(output_info.cbAlignment == 1, "got cbAlignment %#lx\n", output_info.cbAlignment);
- i = 0; - sample = create_sample(wma_decoded_data, sizeof(wma_decoded_data)); - while (SUCCEEDED(hr = IMFTransform_ProcessInput(transform, 0, sample, 0))) - { - ok(hr == S_OK, "ProcessInput returned %#lx\n", hr); - i += sizeof(wma_decoded_data); - } - ok(hr == MF_E_NOTACCEPTING, "ProcessInput returned %#lx\n", hr); - ok(i == 0x204000, "ProcessInput consumed %#lx bytes\n", i); + resource = FindResourceW(NULL, L"audiodata.bin", (const WCHAR *)RT_RCDATA); + ok(resource != 0, "FindResourceW failed, error %lu\n", GetLastError()); + audio_data = LockResource(LoadResource(GetModuleHandleW(NULL), resource)); + audio_data_len = SizeofResource(GetModuleHandleW(NULL), resource); + ok(audio_data_len == 179928, "got length %lu\n", audio_data_len);
+ sample = create_sample(audio_data, audio_data_len); + hr = IMFSample_SetSampleTime(sample, 0); + ok(hr == S_OK, "SetSampleTime returned %#lx\n", hr); + hr = IMFSample_SetSampleDuration(sample, 10000000); + ok(hr == S_OK, "SetSampleDuration returned %#lx\n", hr); + hr = IMFTransform_ProcessInput(transform, 0, sample, 0); + ok(hr == S_OK, "ProcessInput returned %#lx\n", hr); hr = IMFTransform_ProcessMessage(transform, MFT_MESSAGE_COMMAND_DRAIN, 0); ok(hr == S_OK, "ProcessMessage returned %#lx\n", hr); hr = IMFTransform_ProcessInput(transform, 0, sample, 0); ok(hr == MF_E_NOTACCEPTING, "ProcessInput returned %#lx\n", hr); + IMFSample_Release(sample);
status = 0xdeadbeef; sample = create_sample(NULL, output_info.cbSize); memset(&output, 0, sizeof(output)); output.pSample = sample;
- /* check wmadata.bin against current encoder output */ - resource = FindResourceW(NULL, L"wmadata.bin", (const WCHAR *)RT_RCDATA); + resource = FindResourceW(NULL, L"wmaencdata.bin", (const WCHAR *)RT_RCDATA); ok(resource != 0, "FindResourceW failed, error %lu\n", GetLastError()); - wma_encoded_data = LockResource(LoadResource(GetModuleHandleW(NULL), resource)); - wma_encoded_data_len = SizeofResource(GetModuleHandleW(NULL), resource); - ok(wma_encoded_data_len % wma_block_size == 0, "got wma encoded length %lu\n", wma_encoded_data_len); + wmaenc_data = LockResource(LoadResource(GetModuleHandleW(NULL), resource)); + wmaenc_data_len = SizeofResource(GetModuleHandleW(NULL), resource); + ok(wmaenc_data_len % wmaenc_block_size == 0, "got length %lu\n", wmaenc_data_len);
/* and generate a new one as well in a temporary directory */ GetTempPathW(ARRAY_SIZE(output_path), output_path); - lstrcatW(output_path, L"wmadata.bin"); + lstrcatW(output_path, L"wmaencdata.bin"); output_file = CreateFileW(output_path, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0); ok(output_file != INVALID_HANDLE_VALUE, "CreateFileW failed, error %lu\n", GetLastError());
@@ -5890,14 +5926,14 @@ static void test_wma_encoder(void) ok(hr == S_OK, "ProcessOutput returned %#lx\n", hr); ok(output.pSample == sample, "got pSample %p\n", output.pSample); ok(output.dwStatus == MFT_OUTPUT_DATA_BUFFER_INCOMPLETE || - broken(output.dwStatus == (MFT_OUTPUT_DATA_BUFFER_INCOMPLETE|5)) /* win7 */, + broken(output.dwStatus == (MFT_OUTPUT_DATA_BUFFER_INCOMPLETE|7)) /* win7 */, "got dwStatus %#lx\n", output.dwStatus); ok(status == 0, "got status %#lx\n", status); - ok(wma_encoded_data_len > i * wma_block_size, "got %lu blocks\n", i); hr = IMFSample_GetTotalLength(sample, &length); ok(hr == S_OK, "GetTotalLength returned %#lx\n", hr); - ok(length == wma_block_size, "got length %lu\n", length); - check_sample(sample, wma_encoded_data + i * wma_block_size, output_file); + ok(length == wmaenc_block_size, "got length %lu\n", length); + ok(wmaenc_data_len > i * wmaenc_block_size, "got %lu blocks\n", i); + check_sample(sample, wmaenc_data + i * wmaenc_block_size, output_file); winetest_pop_context(); i++; } @@ -6019,7 +6055,7 @@ static void test_wma_decoder(void) ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio), ATTR_GUID(MF_MT_SUBTYPE, MFAudioFormat_WMAudioV8), ATTR_BLOB(MF_MT_USER_DATA, wma_codec_data, sizeof(wma_codec_data)), - ATTR_UINT32(MF_MT_AUDIO_BLOCK_ALIGNMENT, wma_block_size), + ATTR_UINT32(MF_MT_AUDIO_BLOCK_ALIGNMENT, wmaenc_block_size), ATTR_UINT32(MF_MT_AUDIO_SAMPLES_PER_SECOND, 22050), ATTR_UINT32(MF_MT_AUDIO_NUM_CHANNELS, 2), {0}, @@ -6027,26 +6063,28 @@ static void test_wma_decoder(void) static const struct attribute_desc output_type_desc[] = { ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio), - ATTR_GUID(MF_MT_SUBTYPE, MFAudioFormat_Float), - ATTR_UINT32(MF_MT_AUDIO_AVG_BYTES_PER_SECOND, 176400), - ATTR_UINT32(MF_MT_AUDIO_BITS_PER_SAMPLE, 32), + ATTR_GUID(MF_MT_SUBTYPE, MFAudioFormat_PCM), + ATTR_UINT32(MF_MT_AUDIO_AVG_BYTES_PER_SECOND, 88200), + ATTR_UINT32(MF_MT_AUDIO_BITS_PER_SAMPLE, 16), ATTR_UINT32(MF_MT_AUDIO_NUM_CHANNELS, 2), ATTR_UINT32(MF_MT_AUDIO_SAMPLES_PER_SECOND, 22050), - ATTR_UINT32(MF_MT_AUDIO_BLOCK_ALIGNMENT, 8), + ATTR_UINT32(MF_MT_AUDIO_BLOCK_ALIGNMENT, 4), {0}, };
MFT_REGISTER_TYPE_INFO input_type = {MFMediaType_Audio, MFAudioFormat_WMAudioV8}; MFT_REGISTER_TYPE_INFO output_type = {MFMediaType_Audio, MFAudioFormat_Float}; + ULONG wmadec_data_len, wmaenc_data_len; + const BYTE *wmadec_data, *wmaenc_data; MFT_OUTPUT_STREAM_INFO output_info; MFT_OUTPUT_DATA_BUFFER outputs[2]; MFT_INPUT_STREAM_INFO input_info; MFT_OUTPUT_DATA_BUFFER output; - const BYTE *wma_encoded_data; - ULONG wma_encoded_data_len; + WCHAR output_path[MAX_PATH]; IMFMediaType *media_type; IMFTransform *transform; DWORD status, length; + HANDLE output_file; IMFSample *sample; HRSRC resource; GUID class_id; @@ -6166,7 +6204,7 @@ static void test_wma_decoder(void) ok(hr == S_OK, "GetInputStreamInfo returned %#lx\n", hr); ok(input_info.hnsMaxLatency == 0, "got hnsMaxLatency %s\n", wine_dbgstr_longlong(input_info.hnsMaxLatency)); ok(input_info.dwFlags == 0, "got dwFlags %#lx\n", input_info.dwFlags); - ok(input_info.cbSize == wma_block_size, "got cbSize %lu\n", input_info.cbSize); + ok(input_info.cbSize == wmaenc_block_size, "got cbSize %lu\n", input_info.cbSize); ok(input_info.cbMaxLookahead == 0, "got cbMaxLookahead %#lx\n", input_info.cbMaxLookahead); ok(input_info.cbAlignment == 1, "got cbAlignment %#lx\n", input_info.cbAlignment);
@@ -6201,27 +6239,26 @@ static void test_wma_decoder(void) hr = IMFTransform_GetOutputStreamInfo(transform, 0, &output_info); ok(hr == S_OK, "GetOutputStreamInfo returned %#lx\n", hr); ok(output_info.dwFlags == 0, "got dwFlags %#lx\n", output_info.dwFlags); - ok(output_info.cbSize == sizeof(wma_decoded_data), "got cbSize %#lx\n", output_info.cbSize); + ok(output_info.cbSize == wmadec_block_size, "got cbSize %#lx\n", output_info.cbSize); ok(output_info.cbAlignment == 1, "got cbAlignment %#lx\n", output_info.cbAlignment);
- /* resource is generated using test_wma_encoder output file */ - resource = FindResourceW(NULL, L"wmadata.bin", (const WCHAR *)RT_RCDATA); + resource = FindResourceW(NULL, L"wmaencdata.bin", (const WCHAR *)RT_RCDATA); ok(resource != 0, "FindResourceW failed, error %lu\n", GetLastError()); - wma_encoded_data = LockResource(LoadResource(GetModuleHandleW(NULL), resource)); - wma_encoded_data_len = SizeofResource(GetModuleHandleW(NULL), resource); - ok(wma_encoded_data_len % wma_block_size == 0, "got wma encoded length %lu\n", wma_encoded_data_len); + wmaenc_data = LockResource(LoadResource(GetModuleHandleW(NULL), resource)); + wmaenc_data_len = SizeofResource(GetModuleHandleW(NULL), resource); + ok(wmaenc_data_len % wmaenc_block_size == 0, "got length %lu\n", wmaenc_data_len);
- sample = create_sample(wma_encoded_data, wma_block_size / 2); + sample = create_sample(wmaenc_data, wmaenc_block_size / 2); hr = IMFTransform_ProcessInput(transform, 0, sample, 0); ok(hr == S_OK, "ProcessInput returned %#lx\n", hr); ret = IMFSample_Release(sample); ok(ret == 0, "Release returned %lu\n", ret); - sample = create_sample(wma_encoded_data, wma_block_size + 1); + sample = create_sample(wmaenc_data, wmaenc_block_size + 1); hr = IMFTransform_ProcessInput(transform, 0, sample, 0); ok(hr == S_OK, "ProcessInput returned %#lx\n", hr); ret = IMFSample_Release(sample); ok(ret == 0, "Release returned %lu\n", ret); - sample = create_sample(wma_encoded_data, wma_block_size); + sample = create_sample(wmaenc_data, wmaenc_block_size); hr = IMFTransform_ProcessInput(transform, 0, sample, 0); ok(hr == S_OK, "ProcessInput returned %#lx\n", hr); hr = IMFTransform_ProcessInput(transform, 0, sample, 0); @@ -6245,7 +6282,7 @@ static void test_wma_decoder(void) ok(!output.pEvents, "got pEvents %p\n", output.pEvents); ok(status == 0, "got status %#lx\n", status);
- sample = create_sample(wma_encoded_data, wma_block_size); + sample = create_sample(wmaenc_data, wmaenc_block_size); hr = IMFTransform_ProcessInput(transform, 0, sample, 0); ok(hr == MF_E_NOTACCEPTING, "ProcessInput returned %#lx\n", hr); ret = IMFSample_Release(sample); @@ -6263,7 +6300,7 @@ static void test_wma_decoder(void)
status = 0xdeadbeef; memset(&output, 0, sizeof(output)); - output_info.cbSize = sizeof(wma_decoded_data); + output_info.cbSize = wmadec_block_size; sample = create_sample(NULL, output_info.cbSize); outputs[0].pSample = sample; sample = create_sample(NULL, output_info.cbSize); @@ -6273,18 +6310,30 @@ static void test_wma_decoder(void) IMFSample_Release(outputs[0].pSample); IMFSample_Release(outputs[1].pSample);
+ resource = FindResourceW(NULL, L"wmadecdata.bin", (const WCHAR *)RT_RCDATA); + ok(resource != 0, "FindResourceW failed, error %lu\n", GetLastError()); + wmadec_data = LockResource(LoadResource(GetModuleHandleW(NULL), resource)); + wmadec_data_len = SizeofResource(GetModuleHandleW(NULL), resource); + ok(wmadec_data_len == wmadec_block_size * 7 / 2, "got length %lu\n", wmadec_data_len); + + /* and generate a new one as well in a temporary directory */ + GetTempPathW(ARRAY_SIZE(output_path), output_path); + lstrcatW(output_path, L"wmadecdata.bin"); + output_file = CreateFileW(output_path, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0); + ok(output_file != INVALID_HANDLE_VALUE, "CreateFileW failed, error %lu\n", GetLastError()); + status = 0xdeadbeef; - output_info.cbSize = sizeof(wma_decoded_data); + output_info.cbSize = wmadec_block_size; sample = create_sample(NULL, output_info.cbSize); memset(&output, 0, sizeof(output)); output.pSample = sample; hr = IMFTransform_ProcessOutput(transform, 0, 1, &output, &status); - ok(hr == S_OK, "ProcessOutput returned %#lx\n", hr); - ok(output.pSample == sample, "got pSample %p\n", output.pSample);
- i = 0; - while (hr == S_OK) + for (i = 0; i < 4; ++i) { + winetest_push_context("%lu", i); + + ok(hr == S_OK, "ProcessOutput returned %#lx\n", hr); ok(output.pSample == sample, "got pSample %p\n", output.pSample); ok(output.dwStatus == MFT_OUTPUT_DATA_BUFFER_INCOMPLETE || output.dwStatus == 0 || broken(output.dwStatus == (MFT_OUTPUT_DATA_BUFFER_INCOMPLETE|7) || output.dwStatus == 7) /* Win7 */, @@ -6295,20 +6344,21 @@ static void test_wma_decoder(void) if (output.dwStatus == MFT_OUTPUT_DATA_BUFFER_INCOMPLETE || broken(output.dwStatus == (MFT_OUTPUT_DATA_BUFFER_INCOMPLETE|7))) { - ok(length == sizeof(wma_decoded_data), "got length %lu\n", length); - check_sample(sample, wma_decoded_data, NULL); - i += sizeof(wma_decoded_data); + ok(length == wmadec_block_size, "got length %lu\n", length); + check_sample_pcm16(sample, wmadec_data, output_file, TRUE); + wmadec_data += wmadec_block_size; + wmadec_data_len -= wmadec_block_size; } else { /* FFmpeg doesn't seem to decode WMA buffers in the same way as native */ todo_wine - ok(length == sizeof(wma_decoded_data) / 2, "got length %lu\n", length); - if (length == sizeof(wma_decoded_data) / 2) - { - check_sample(sample, wma_decoded_data, NULL); - i += sizeof(wma_decoded_data) / 2; - } + ok(length == wmadec_block_size / 2, "got length %lu\n", length); + + if (length == wmadec_block_size / 2) + check_sample_pcm16(sample, wmadec_data, output_file, FALSE); + wmadec_data += length; + wmadec_data_len -= length; } ret = IMFSample_Release(sample); ok(ret == 0, "Release returned %lu\n", ret); @@ -6318,9 +6368,14 @@ static void test_wma_decoder(void) memset(&output, 0, sizeof(output)); output.pSample = sample; hr = IMFTransform_ProcessOutput(transform, 0, 1, &output, &status); + + winetest_pop_context(); } todo_wine - ok(i == 0xe000, "ProcessOutput produced %#lx bytes\n", i); + ok(wmadec_data_len == 0, "missing %#lx bytes\n", wmadec_data_len); + + trace("created %s\n", debugstr_w(output_path)); + CloseHandle(output_file);
ok(hr == MF_E_TRANSFORM_NEED_MORE_INPUT, "ProcessOutput returned %#lx\n", hr); ok(output.pSample == sample, "got pSample %p\n", output.pSample); @@ -6346,7 +6401,7 @@ static void test_wma_decoder(void) ret = IMFSample_Release(sample); ok(ret == 0, "Release returned %lu\n", ret);
- sample = create_sample(wma_encoded_data, wma_block_size); + sample = create_sample(wmaenc_data, wmaenc_block_size); hr = IMFTransform_ProcessInput(transform, 0, sample, 0); ok(hr == S_OK, "ProcessInput returned %#lx\n", hr);
diff --git a/dlls/mf/tests/resource.rc b/dlls/mf/tests/resource.rc index 5a2bf913672..483ff53ca94 100644 --- a/dlls/mf/tests/resource.rc +++ b/dlls/mf/tests/resource.rc @@ -20,8 +20,14 @@
#include "windef.h"
-/* @makedep: wmadata.bin */ -wmadata.bin RCDATA wmadata.bin +/* @makedep: audiodata.bin */ +audiodata.bin RCDATA audiodata.bin + +/* @makedep: wmaencdata.bin */ +wmaencdata.bin RCDATA wmaencdata.bin + +/* @makedep: wmadecdata.bin */ +wmadecdata.bin RCDATA wmadecdata.bin
/* @makedep: h264data.bin */ h264data.bin RCDATA h264data.bin diff --git a/dlls/mf/tests/wmadata.bin b/dlls/mf/tests/wmadata.bin deleted file mode 100644 index 6c70c14ce3208f5c711effe156ac484c706686cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001
literal 49071 zcmeI%v1tQA5CzZ!Co(v2sMN-RN>FHQ2Zt+A0S?rGRe*vkK_#dJm7ofYN{~8G=;V@t zY2d@#Y&QD5fzQG|4#V$leA<6a-|s)KZ=Zi3&-<6f;1D1{fIybOau^hN*2<(MK!89e zuu|t8i#q}Y2&4(D)p^>=<Rw6WKqoM&^Nz(G0RjZl1U7S>`wC6loV)}G5GVp$uk+$z zAV7dXsK8F0hi*=60t5&Yfk~Yg4+8-L1VRN4>O6FFViO=hpa>l2I`<V?SPTRR5J(d^ zd7Y=NOkM&62y_Bxb>6YKBS3&an!rV!r>#t00t5(j0#|k3vA82ZfIynSeXes~p=q0w zmjD3*MPT7|UOWs02oMMrSgP~T&52Eb0D&T~Qs>3PK!5;&P=U2N58a&D1PBl)0^?lg zzCsI&fdBylX#yLs^R$)8OMn1@PGGCfI~I2Y2oOjU*s1fhmB~wh0D(?mQs*6uI|2j< zqzN46I`<WtwmEqT5Fk(lj$Y@*!$5!lflz^yIuG5P*aQd=C<147UOWs02oMMrxTy2c w&52Eb0D&TKo$K6JXkjrBAV45Z;O=#vwlaAM5FpSAJgD=I#T@|x1kwcl0V8@&#Q*>R
diff --git a/dlls/mf/tests/wmadecdata.bin b/dlls/mf/tests/wmadecdata.bin new file mode 100644 index 0000000000000000000000000000000000000000..4e339804f1f908f4b73c61ef275da893022da2b6 GIT binary patch literal 28672 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 LkTD^6zrp_iCe*Mb
literal 0 HcmV?d00001
diff --git a/dlls/mf/tests/wmaencdata.bin b/dlls/mf/tests/wmaencdata.bin new file mode 100644 index 0000000000000000000000000000000000000000..5cb4e42c6e8d3317a4743e8e06aeade5e5aa1983 GIT binary patch literal 4461 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 Sw4N#Oaqn9@p`Br?_xL9hNbigQ
literal 0 HcmV?d00001
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com
This is causing test failures for me:
meg@uriel:~/git/wine64/dlls/mf/tests$ make && ~/git/wine/tools/runtest make[1]: Entering directory '/home/meg/git/wine64' CC dlls/mf/tests/mf.cross.o CCLD dlls/mf/tests/mf_test.exe make[1]: Leaving directory '/home/meg/git/wine64' 002c:err:wineboot:process_run_key Error running cmd L"C:\windows\system32\winemenubuilder.exe -a -r" (2). 00c4:fixme:wmadec:transform_GetInputAvailableType iface 0000000000AC0758, id 0, index 0, type 000000000021F7A0 stub! mf.c:6126: Test marked todo: GetInputAvailableType returned 0x80004001 mf.c:6128: Test marked todo: 0 input media types 00c4:fixme:mfplat:mf_media_type_to_wg_format_wma Bitrate is not set. mf.c:6216: Test marked todo: got cbSize 0x2000 mf.c:6268: Test marked todo: Release returned 0 mf.c:6348: Test succeeded inside todo block: 0: unexpected buffer data mf.c:6348: Test succeeded inside todo block: 1: unexpected buffer data mf.c:6356: Test marked todo: 2: got length 8192 mf.c:6336: Test failed: 3: ProcessOutput returned 0xc00d6d72 mf.c:6356: Test marked todo: 3: got length 0 mf.c:6375: Test marked todo: missing 0x1000 bytes mf.c:6377: created L"C:\users\meg\Temp\wmadecdata.bin" 00c0:mf: 383 tests executed (7 marked as todo, 3 failures), 0 skipped.
I still think it's a mistake to try to test that the output matches this closely...
Signed-off-by: Rémi Bernon rbernon@codeweavers.com --- dlls/mf/tests/mf.c | 60 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 2 deletions(-)
diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c index d6eddef01df..0dcb51d0f21 100644 --- a/dlls/mf/tests/mf.c +++ b/dlls/mf/tests/mf.c @@ -6080,14 +6080,16 @@ static void test_wma_decoder(void) MFT_OUTPUT_DATA_BUFFER outputs[2]; MFT_INPUT_STREAM_INFO input_info; MFT_OUTPUT_DATA_BUFFER output; + DWORD status, flags, length; WCHAR output_path[MAX_PATH]; IMFMediaType *media_type; IMFTransform *transform; - DWORD status, length; + LONGLONG time, duration; HANDLE output_file; IMFSample *sample; HRSRC resource; GUID class_id; + UINT32 value; ULONG i, ret; HRESULT hr;
@@ -6339,12 +6341,34 @@ static void test_wma_decoder(void) broken(output.dwStatus == (MFT_OUTPUT_DATA_BUFFER_INCOMPLETE|7) || output.dwStatus == 7) /* Win7 */, "got dwStatus %#lx\n", output.dwStatus); ok(status == 0, "got status %#lx\n", status); + value = 0xdeadbeef; + hr = IMFSample_GetUINT32(sample, &MFSampleExtension_CleanPoint, &value); + todo_wine + ok(hr == S_OK, "GetUINT32 MFSampleExtension_CleanPoint returned %#lx\n", hr); + todo_wine + ok(value == 1, "got MFSampleExtension_CleanPoint %u\n", value); hr = IMFSample_GetTotalLength(sample, &length); ok(hr == S_OK, "GetTotalLength returned %#lx\n", hr); + flags = 0xdeadbeef; + hr = IMFSample_GetSampleFlags(sample, &flags); + ok(hr == S_OK, "GetSampleFlags returned %#lx\n", hr); + ok(flags == 0, "got flags %#lx\n", flags); + time = 0xdeadbeef; + hr = IMFSample_GetSampleTime(sample, &time); + todo_wine + ok(hr == S_OK, "GetSampleTime returned %#lx\n", hr); + todo_wine + ok(time == i * 928798, "got time %I64d\n", time); + duration = 0xdeadbeef; + hr = IMFSample_GetSampleDuration(sample, &duration); + todo_wine + ok(hr == S_OK, "GetSampleDuration returned %#lx\n", hr); if (output.dwStatus == MFT_OUTPUT_DATA_BUFFER_INCOMPLETE || broken(output.dwStatus == (MFT_OUTPUT_DATA_BUFFER_INCOMPLETE|7))) { ok(length == wmadec_block_size, "got length %lu\n", length); + todo_wine + ok(duration == 928798, "got duration %I64d\n", duration); check_sample_pcm16(sample, wmadec_data, output_file, TRUE); wmadec_data += wmadec_block_size; wmadec_data_len -= wmadec_block_size; @@ -6354,6 +6378,8 @@ static void test_wma_decoder(void) /* FFmpeg doesn't seem to decode WMA buffers in the same way as native */ todo_wine ok(length == wmadec_block_size / 2, "got length %lu\n", length); + todo_wine + ok(duration == 464399, "got duration %I64d\n", duration);
if (length == wmadec_block_size / 2) check_sample_pcm16(sample, wmadec_data, output_file, FALSE); @@ -6715,17 +6741,19 @@ static void test_h264_decoder(void) MFT_INPUT_STREAM_INFO input_info; MFT_OUTPUT_DATA_BUFFER output; IMFMediaBuffer *media_buffer; + DWORD status, length, count; WCHAR output_path[MAX_PATH]; IMFAttributes *attributes; IMFMediaType *media_type; + LONGLONG time, duration; IMFTransform *transform; - DWORD status, length; BOOL is_win7 = FALSE; ULONG i, ret, flags; HANDLE output_file; IMFSample *sample; HRSRC resource; GUID class_id; + UINT32 value; BYTE *data; HRESULT hr;
@@ -7056,6 +7084,34 @@ static void test_h264_decoder(void) ok(status == 0, "got status %#lx\n", status); if (hr != S_OK) goto skip_nv12_tests;
+ hr = IMFSample_GetUINT32(sample, &MFSampleExtension_CleanPoint, &value); + ok(hr == MF_E_ATTRIBUTENOTFOUND, "GetUINT32 MFSampleExtension_CleanPoint returned %#lx\n", hr); + + count = 0xdeadbeef; + hr = IMFSample_GetBufferCount(output.pSample, &count); + ok(hr == S_OK, "GetBufferCount returned %#lx\n", hr); + ok(count == 1, "got count %#lx\n", count); + + flags = 0xdeadbeef; + hr = IMFSample_GetSampleFlags(output.pSample, &flags); + ok(hr == S_OK, "GetSampleFlags returned %#lx\n", hr); + ok(flags == 0, "got flags %#lx\n", flags); + + time = 0xdeadbeef; + hr = IMFSample_GetSampleTime(output.pSample, &time); + todo_wine + ok(hr == S_OK, "GetSampleTime returned %#lx\n", hr); + todo_wine + ok(time == 0, "got time %I64d\n", time); + + /* doesn't matter what frame rate we've selected, duration is defined by the stream */ + duration = 0xdeadbeef; + hr = IMFSample_GetSampleDuration(output.pSample, &duration); + todo_wine + ok(hr == S_OK, "GetSampleDuration returned %#lx\n", hr); + todo_wine + ok(duration - 333666 <= 2, "got duration %I64d\n", duration); + /* Win8 and before pad the data with garbage instead of original * buffer data, make sure it's consistent. */ hr = IMFSample_ConvertToContiguousBuffer(output.pSample, &media_buffer);
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com
The h264data.bin source has been re-generated with a static pattern to avoid differences between the nv12 and i420 frames. The output format changes apparently drops some decoded frames in a way that's not really relevant and may make the GStreamer implementation harder:
gst-launch-1.0 videotestsrc num-buffers=60 pattern=smpte100 ! \ video/x-raw,format=I420,width=82,height=84,framerate=30000/1001 ! \ videoconvert ! x264enc ! filesink location=dlls/mf/tests/h264data.bin
Signed-off-by: Rémi Bernon rbernon@codeweavers.com --- dlls/mf/tests/h264data.bin | Bin 52276 -> 2330 bytes dlls/mf/tests/i420frame.bin | 1 + dlls/mf/tests/mf.c | 77 +++++++++++++++++++++++++++++++++--- dlls/mf/tests/nv12frame.bin | Bin 13824 -> 13824 bytes dlls/mf/tests/resource.rc | 3 ++ 5 files changed, 76 insertions(+), 5 deletions(-) create mode 100644 dlls/mf/tests/i420frame.bin
diff --git a/dlls/mf/tests/h264data.bin b/dlls/mf/tests/h264data.bin index d06aa5fb5f2053c60cd2a48a35fbcd2e6918b815..f6ba82c0036edc18d92143504bedb37d52b08ece 100644 GIT binary patch literal 2330 zcmd^<U2GIp6vt;ZSPPWUAc`pUCL-3*-JRJjOS@!%ZBstfA}NW%R2}ck-tA61J2N{o zZFd_Q5DXy%3BgDL$gWC2Vv3-lf=CsfAS!-fEi5VFLxZU$fQTYhyPi7>W!mM*S6^oC z{O`HH^FQaF48t(4!to3|8^X*39hrGE*Q8yIW5*Uf%`gQg7+3d^lF}t*bU)gE=_6RU z?i-cOUhA#t>$;d(uzyq8DU^Bq@|A=yP>$S4(hP#QfFButHo&48VKIPl05%qQAi!I@ zxMse)9EF~*hR86HV53^olM0Dg$j7pNw~zI4AVw`q4|=_=t*xFGIZQMKs~*j0@X{=v zs1;KnM$;`>Q_Ucfu!tp|Lk5ZPeiSC6qDf6W7i5Dh!YWphCgItHKgcFH&W~b*kCFs3 zn?+d7M7o)Tqwo}rFwc2dI0O$AlM^H?P$CB>1OuxLgy#ZCiW*uB3viS}mO&InHepqf zs0d3IETnjhXTbsvw`nTjeOwvGp$IlDK{uOZokrvUab3_N5tCTF+lQ>E0Vhl_uV`8m zj>3m<TjP+a$P#$DEwD&6>>QFD!xr@+s}?a73_+laO0$8Jf~3WCY{9n#EwT(OtAKz& z1Jjs@fn$W`69qj9YdOsOV2#6Ar&Wl8C}Wc*kqu(k)k@@ss3pRlrV~|Y&~(_%i8>r@ zB1vHLzRJp5OCct!@QF-`s6=YE_;QxoG%#(cLCh!|HzZ-GT)J;ayd)YZCPH6nS)vT_ zP@s=3uRwHVX$rj|6sN`UtOw>RuG2*J8z=ZcB?zWPbiN$5h%G`4C+-laAT~!#xeeex zUj>565TbDDD%=!`$cjQ}Uu7LG8wLw9fhQb?Iigd+tboBMYhGg}XD?kpHeuPi#N>VE z=hwTJDb@Q9o~U26^2JAH-K^exWa_2mYpow|WYVk7H}%avUVNo=m2u|UlwIq76Hj)3 zxS^+F%rn<do%J1W`(##QQvPyhX6`+;W4HD4$DVx9y2y;y>e~O@xc9N`pN(4e$Jwrj z-zmNKe5`-W<!IIK-+bNK+kU(RKf0HzF0NnF^nK;auY9Zo#lCv?`&F~2f92WJ?A_kJ zG4Og|aL`;<)$?}!!V9mqE?v{{&%AM+UA1d(3|#nNZe&qm|KPDXyEiBY#}{t;`_Q#1 z?_zG?g^7LX=Z^MvPjC6@jrjT}es1jQ)Yq@CDd{gzOTHUdSJk#~^e+e0fufgcC%oBi zetQ)0jfZ#N=q~wTPfzybjDol1Z5I#sFTGrRW%9h>iq*5W)t#At;3@jUC}iOg+A>uM z?HN41bLq5mwz!yzsj9@vEK`&jQd}u)g*0Z;Rfi%qQsq}$$)TbPcZH&xpS^!Z)&`y* z3J#@K*A$mMGy=K9M&<xCtt<7Ojm#y<Av*x6+(DjmAit=YST-rk6u5^pSE|nnEoX{O zIh6j!J4z0DbvV-DGCeLInReSqM=R3ak;tv(!;ub`>AJfh<0D<B%{*jcIMV5I(=DX^ z+b^^`m+s7Sx!*?SeA|U@Jv1EYbb0zNE^p?!{3{Q6ZaC86GF6iAGR2QXrsj-9Zkak9 z>2R5<%6CcUa>R|pT!P{#d<&gR#}GMPuD%Nr=5h#NcbCrPP?Fpb{qN_}pB?Pkv3Q!J jm+AjHm!ICc9xou*?X5k`(4P}+d?=mCzn=6!?lS%b`mWF4
literal 52276 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
diff --git a/dlls/mf/tests/i420frame.bin b/dlls/mf/tests/i420frame.bin new file mode 100644 index 00000000000..738f01b1154 --- /dev/null +++ b/dlls/mf/tests/i420frame.bin @@ -0,0 +1 @@ +����������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))������������������������������������Ҫ����������������������jjjjjjjjjjjjQQQQQQQQQQQQ))))))))))))�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������̀����H[�����n66666������ZZZZZZ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������̀����������Q"""""������������nnnnnn������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� \ No newline at end of file diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c index 0dcb51d0f21..b0632496743 100644 --- a/dlls/mf/tests/mf.c +++ b/dlls/mf/tests/mf.c @@ -6641,7 +6641,7 @@ static void test_h264_decoder(void) static const struct attribute_desc new_output_type_desc[] = { ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Video), - ATTR_GUID(MF_MT_SUBTYPE, MFVideoFormat_NV12), + ATTR_GUID(MF_MT_SUBTYPE, MFVideoFormat_I420), ATTR_RATIO(MF_MT_FRAME_SIZE, 96, 96), ATTR_RATIO(MF_MT_FRAME_RATE, 1, 1), ATTR_RATIO(MF_MT_PIXEL_ASPECT_RATIO, 1, 2), @@ -6650,7 +6650,7 @@ static void test_h264_decoder(void) static const struct attribute_desc new_output_type_desc_win7[] = { ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Video), - ATTR_GUID(MF_MT_SUBTYPE, MFVideoFormat_NV12), + ATTR_GUID(MF_MT_SUBTYPE, MFVideoFormat_I420), ATTR_RATIO(MF_MT_FRAME_SIZE, 96, 96), ATTR_RATIO(MF_MT_FRAME_RATE, 1, 1), ATTR_RATIO(MF_MT_PIXEL_ASPECT_RATIO, 1, 2), @@ -6734,9 +6734,9 @@ static void test_h264_decoder(void)
MFT_REGISTER_TYPE_INFO input_type = {MFMediaType_Video, MFVideoFormat_H264}; MFT_REGISTER_TYPE_INFO output_type = {MFMediaType_Video, MFVideoFormat_NV12}; + const BYTE *h264_encoded_data, *nv12_frame_data, *i420_frame_data; + ULONG h264_encoded_data_len, nv12_frame_len, i420_frame_len; DWORD input_id, output_id, input_count, output_count; - const BYTE *h264_encoded_data, *nv12_frame_data; - ULONG h264_encoded_data_len, nv12_frame_len; MFT_OUTPUT_STREAM_INFO output_info; MFT_INPUT_STREAM_INFO input_info; MFT_OUTPUT_DATA_BUFFER output; @@ -7009,7 +7009,7 @@ static void test_h264_decoder(void) todo_wine ok(i == 2, "got %lu iterations\n", i); todo_wine - ok(h264_encoded_data_len == 48194, "got h264_encoded_data_len %lu\n", h264_encoded_data_len); + ok(h264_encoded_data_len == 1180, "got h264_encoded_data_len %lu\n", h264_encoded_data_len); todo_wine ok(hr == MF_E_TRANSFORM_STREAM_CHANGE, "ProcessOutput returned %#lx\n", hr); ok(output.dwStreamID == 0, "got dwStreamID %lu\n", output.dwStreamID); @@ -7168,6 +7168,19 @@ skip_nv12_tests: hr = IMFTransform_ProcessOutput(transform, 0, 1, &output, &status); todo_wine ok(hr == MF_E_TRANSFORM_STREAM_CHANGE, "ProcessOutput returned %#lx\n", hr); + + if (hr == MF_E_TRANSFORM_NEED_MORE_INPUT) + { + hr = IMFTransform_ProcessInput(transform, 0, sample, 0); + ok(hr == S_OK, "ProcessInput returned %#lx\n", hr); + ret = IMFSample_Release(sample); + ok(ret <= 1, "Release returned %lu\n", ret); + sample = next_h264_sample(&h264_encoded_data, &h264_encoded_data_len); + hr = IMFTransform_ProcessOutput(transform, 0, 1, &output, &status); + todo_wine + ok(hr == MF_E_TRANSFORM_STREAM_CHANGE, "ProcessOutput returned %#lx\n", hr); + } + ok(output.dwStreamID == 0, "got dwStreamID %lu\n", output.dwStreamID); ok(!!output.pSample, "got pSample %p\n", output.pSample); todo_wine @@ -7181,6 +7194,17 @@ skip_nv12_tests: ret = IMFSample_Release(output.pSample); ok(ret == 0, "Release returned %lu\n", ret);
+ GetTempPathW(ARRAY_SIZE(output_path), output_path); + lstrcatW(output_path, L"i420frame.bin"); + output_file = CreateFileW(output_path, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0); + ok(output_file != INVALID_HANDLE_VALUE, "CreateFileW failed, error %lu\n", GetLastError()); + + resource = FindResourceW(NULL, L"i420frame.bin", (const WCHAR *)RT_RCDATA); + ok(resource != 0, "FindResourceW failed, error %lu\n", GetLastError()); + i420_frame_data = LockResource(LoadResource(GetModuleHandleW(NULL), resource)); + i420_frame_len = SizeofResource(GetModuleHandleW(NULL), resource); + ok(i420_frame_len == actual_width * actual_height * 3 / 2, "got frame length %lu\n", i420_frame_len); + status = 0; memset(&output, 0, sizeof(output)); output.pSample = create_sample(NULL, actual_width * actual_height * 2); @@ -7192,9 +7216,52 @@ skip_nv12_tests: ok(output.dwStatus == 0, "got dwStatus %#lx\n", output.dwStatus); ok(!output.pEvents, "got pEvents %p\n", output.pEvents); ok(status == 0, "got status %#lx\n", status); + if (hr != S_OK) goto skip_i420_tests; + + hr = IMFSample_GetSampleTime(output.pSample, &time); + ok(hr == S_OK, "GetSampleTime returned %#lx\n", hr); + ok(time - 333666 <= 2, "got time %I64d\n", time); + + duration = 0xdeadbeef; + hr = IMFSample_GetSampleDuration(output.pSample, &duration); + ok(hr == S_OK, "GetSampleDuration returned %#lx\n", hr); + ok(duration - 333666 <= 2, "got duration %I64d\n", duration); + + /* Win8 and before pad the data with garbage instead of original + * buffer data, make sure it's consistent. */ + hr = IMFSample_ConvertToContiguousBuffer(output.pSample, &media_buffer); + ok(hr == S_OK, "ConvertToContiguousBuffer returned %#lx\n", hr); + hr = IMFMediaBuffer_Lock(media_buffer, &data, NULL, &length); + ok(hr == S_OK, "Lock returned %#lx\n", hr); + ok(length == i420_frame_len, "got length %lu\n", length); + + for (i = 0; i < actual_aperture.Area.cy; ++i) + { + memset(data + actual_width * i + actual_aperture.Area.cx, 0xcd, actual_width - actual_aperture.Area.cx); + memset(data + actual_width * actual_height + actual_width / 2 * i + actual_aperture.Area.cx / 2, 0xcd, + actual_width / 2 - actual_aperture.Area.cx / 2); + memset(data + actual_width * actual_height + actual_width / 2 * (actual_height / 2 + i) + actual_aperture.Area.cx / 2, 0xcd, + actual_width / 2 - actual_aperture.Area.cx / 2); + } + memset(data + actual_width * actual_aperture.Area.cy, 0xcd, (actual_height - actual_aperture.Area.cy) * actual_width); + memset(data + actual_width * actual_height + actual_width / 2 * actual_aperture.Area.cy / 2, 0xcd, + (actual_height - actual_aperture.Area.cy) / 2 * actual_width / 2); + memset(data + actual_width * actual_height + actual_width / 2 * (actual_height / 2 + actual_aperture.Area.cy / 2), 0xcd, + (actual_height - actual_aperture.Area.cy) / 2 * actual_width / 2); + + hr = IMFMediaBuffer_Unlock(media_buffer); + ok(hr == S_OK, "Unlock returned %#lx\n", hr); + IMFMediaBuffer_Release(media_buffer); + + check_sample(output.pSample, i420_frame_data, output_file); + +skip_i420_tests: ret = IMFSample_Release(output.pSample); ok(ret == 0, "Release returned %lu\n", ret);
+ trace("created %s\n", debugstr_w(output_path)); + CloseHandle(output_file); + status = 0; memset(&output, 0, sizeof(output)); output.pSample = create_sample(NULL, actual_width * actual_height * 2); diff --git a/dlls/mf/tests/nv12frame.bin b/dlls/mf/tests/nv12frame.bin index 4267981efd4d4f398bd109a548abcce3f22f22c4..76a716b77dd262edebb519a303dc5c0c7a90b553 100644 GIT binary patch delta 33 mcmZq3X~<b1x-p@FYjeMRA<N_m^8A}rfSd#s2Uehn0}}w<MGMaW
literal 13824 zcmeI0TTc^F5Xb!p6;KKWw*?W4Mg<~h2y)Sg0#Tb7W4Kfb2-?O1VgLyk3@VC>w)KLT zsHL=M8!ey#6eyQAV8N!f0V0ZsB7!atd<0Xs%Q?$~(RdPrnVE;(J!kXl?tkaZ%qdMT znhP@nW=do-%*2?9Ftc-PkxtVX-i6@}2(QHOG7K-q@FEW04t%#xpbry75I>$p2J6d{ zCLljRen15V@&n`t=pUF>0R5GxNTT!r{U_U_L;nE%1C}6Qe*yao*uOKY0Qv{$AK?Eh zb`>o5{WVtEc$ncEMQj*vi?CrHrUK0>!yJL{*6FwPS?N*r&-I`8{KohHOMg7dI5N^S zXNtGtr+LN%jPdL~c?}zNqKx6u#toraf`ZbMa{*j^I1v0Z{SKcF)=NXZ8;v6GZ7HQi zyQZ93jZgRl`RSI4c*?wAY3#WeLD8#>IoqAPz7pi`{C40*SeNgaq{m)TrPTQDq;@ds zEJ40Prgx52iSPJ~Sz|LJv&`eurPJpL^6!q<hK=M12G^L4#X)j;!f{j0>mq`D-;}z~ zy$1goi$m5rBc0tkWt|Ns`TTQ7&o>+6qwn7e*}eA6my%cIF2xK*@cFMrlwZGLre3D@ zWqce63bw6l^^sH%<g4>O)?Y7dk7$%@;yO-u>Y`)4Hu;d_Q@bP8>*vM;9sM$sv#iA? zQit61t0TyNraES=ozpw&t5us*vd0~(bMxmj$ngai<^9v$6MIB&NBmBVIBIL+Z<n{& z2=XQT!BJOCQlhx}Mg0}qQ<FVgYN;W}4}X>(&~PZ^P_;ZJVyxiJk>X~1vVt66nB1b_ zuY2`;x{RM)Xp8Ko3ME@A+R5<+uHi?Iz3M_MPRHHMzq-b;BlFZJ{sD4)p)uW}eA|Ah zNny29$vM&f!Uy_9g85nK@32w*f+};`-TkAIR!fp$=ir4U_5E+^7iHz`o2qIGIG0_N zX9`aVI_$h~PdG$QAHnl|AD&P~hi^q!N%M#%<Dh0N>Y<p+hbvG36aWSOl>(KEw)Zkm z#d?}p&tqNT7a7R<&?NHI1>_3~<lHw|#8(2J(FpWmVhBY~>H><Mg(dwJ#E)Ai(1*!D zDEkaeLi{ip8uBxfBcQ%OeS!SIba2b3e?yh6qXgA@oe6zOoe7PzJ*oSMM!9F){%X1N z-zTu%lc>sN-&9?vGxhepce&lx*`{sN-cz~f)O(S$_bxqh^%+=&T$_yF+oq)lkhf{^ fxnG?F|5xf%R)RjDk6QsU>x&yra0LqdnF2omljWqd
diff --git a/dlls/mf/tests/resource.rc b/dlls/mf/tests/resource.rc index 483ff53ca94..49f9b0dc39c 100644 --- a/dlls/mf/tests/resource.rc +++ b/dlls/mf/tests/resource.rc @@ -34,3 +34,6 @@ h264data.bin RCDATA h264data.bin
/* @makedep: nv12frame.bin */ nv12frame.bin RCDATA nv12frame.bin + +/* @makedep: i420frame.bin */ +i420frame.bin RCDATA i420frame.bin
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Rémi Bernon rbernon@codeweavers.com --- dlls/mf/tests/mf.c | 122 +++++++++++++++------------------------------ 1 file changed, 39 insertions(+), 83 deletions(-)
diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c index b0632496743..75c873d5dc0 100644 --- a/dlls/mf/tests/mf.c +++ b/dlls/mf/tests/mf.c @@ -5621,9 +5621,8 @@ static void test_MFRequireProtectedEnvironment(void) }
static BOOL create_transform(GUID category, MFT_REGISTER_TYPE_INFO *input_type, - MFT_REGISTER_TYPE_INFO *output_type, const WCHAR *expect_name, - const media_type_desc *expect_input, ULONG expect_input_count, - const media_type_desc *expect_output, ULONG expect_output_count, + MFT_REGISTER_TYPE_INFO *output_type, const WCHAR *expect_name, const GUID *expect_major_type, + const GUID *expect_input, ULONG expect_input_count, const GUID *expect_output, ULONG expect_output_count, IMFTransform **transform, GUID *class_id) { MFT_REGISTER_TYPE_INFO *input_types = NULL, *output_types = NULL; @@ -5658,17 +5657,17 @@ static BOOL create_transform(GUID category, MFT_REGISTER_TYPE_INFO *input_type, ok(input_count == expect_input_count, "got input_count %u\n", input_count); for (i = 0; i < input_count; ++i) { - ok(IsEqualGUID(&input_types[i].guidMajorType, expect_input[i][0].value.puuid), + ok(IsEqualGUID(&input_types[i].guidMajorType, expect_major_type), "got input[%u] major %s\n", i, debugstr_guid(&input_types[i].guidMajorType)); - ok(IsEqualGUID(&input_types[i].guidSubtype, expect_input[i][1].value.puuid), + ok(IsEqualGUID(&input_types[i].guidSubtype, expect_input + i), "got input[%u] subtype %s\n", i, debugstr_guid(&input_types[i].guidSubtype)); } ok(output_count == expect_output_count, "got output_count %u\n", output_count); for (i = 0; i < output_count; ++i) { - ok(IsEqualGUID(&output_types[i].guidMajorType, expect_output[i][0].value.puuid), + ok(IsEqualGUID(&output_types[i].guidMajorType, expect_major_type), "got output[%u] major %s\n", i, debugstr_guid(&output_types[i].guidMajorType)); - ok(IsEqualGUID(&output_types[i].guidSubtype, expect_output[i][1].value.puuid), + ok(IsEqualGUID(&output_types[i].guidSubtype, expect_output + i), "got output[%u] subtype %s\n", i, debugstr_guid(&output_types[i].guidSubtype)); } CoTaskMemFree(output_types); @@ -5777,31 +5776,16 @@ static const ULONG wmadec_block_size = 0x2000;
static void test_wma_encoder(void) { - static const media_type_desc transform_inputs[] = + const GUID transform_inputs[] = { - { - ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio), - ATTR_GUID(MF_MT_SUBTYPE, MFAudioFormat_PCM), - }, - { - ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio), - ATTR_GUID(MF_MT_SUBTYPE, MFAudioFormat_Float), - }, + MFAudioFormat_PCM, + MFAudioFormat_Float, }; - static const media_type_desc transform_outputs[] = + const GUID transform_outputs[] = { - { - ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio), - ATTR_GUID(MF_MT_SUBTYPE, MFAudioFormat_WMAudioV8), - }, - { - ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio), - ATTR_GUID(MF_MT_SUBTYPE, MFAudioFormat_WMAudioV9), - }, - { - ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio), - ATTR_GUID(MF_MT_SUBTYPE, MFAudioFormat_WMAudio_Lossless), - }, + MFAudioFormat_WMAudioV8, + MFAudioFormat_WMAudioV9, + MFAudioFormat_WMAudio_Lossless, };
static const struct attribute_desc input_type_desc[] = @@ -5848,7 +5832,7 @@ static void test_wma_encoder(void) hr = CoInitialize(NULL); ok(hr == S_OK, "Failed to initialize, hr %#lx.\n", hr);
- if (!create_transform(MFT_CATEGORY_AUDIO_ENCODER, &input_type, &output_type, L"WMAudio Encoder MFT", + if (!create_transform(MFT_CATEGORY_AUDIO_ENCODER, &input_type, &output_type, L"WMAudio Encoder MFT", &MFMediaType_Audio, transform_inputs, ARRAY_SIZE(transform_inputs), transform_outputs, ARRAY_SIZE(transform_outputs), &transform, &class_id)) goto failed; @@ -5968,35 +5952,17 @@ failed:
static void test_wma_decoder(void) { - static const media_type_desc transform_inputs[] = + const GUID transform_inputs[] = { - { - ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio), - ATTR_GUID(MF_MT_SUBTYPE, MEDIASUBTYPE_MSAUDIO1), - }, - { - ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio), - ATTR_GUID(MF_MT_SUBTYPE, MFAudioFormat_WMAudioV8), - }, - { - ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio), - ATTR_GUID(MF_MT_SUBTYPE, MFAudioFormat_WMAudioV9), - }, - { - ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio), - ATTR_GUID(MF_MT_SUBTYPE, MFAudioFormat_WMAudio_Lossless), - }, + MEDIASUBTYPE_MSAUDIO1, + MFAudioFormat_WMAudioV8, + MFAudioFormat_WMAudioV9, + MFAudioFormat_WMAudio_Lossless, }; - static const media_type_desc transform_outputs[] = + const GUID transform_outputs[] = { - { - ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio), - ATTR_GUID(MF_MT_SUBTYPE, MFAudioFormat_PCM), - }, - { - ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio), - ATTR_GUID(MF_MT_SUBTYPE, MFAudioFormat_Float), - }, + MFAudioFormat_PCM, + MFAudioFormat_Float, };
static const media_type_desc expect_available_inputs[] = @@ -6096,7 +6062,7 @@ static void test_wma_decoder(void) hr = CoInitialize(NULL); ok(hr == S_OK, "Failed to initialize, hr %#lx.\n", hr);
- if (!create_transform(MFT_CATEGORY_AUDIO_DECODER, &input_type, &output_type, L"WMAudio Decoder MFT", + if (!create_transform(MFT_CATEGORY_AUDIO_DECODER, &input_type, &output_type, L"WMAudio Decoder MFT", &MFMediaType_Audio, transform_inputs, ARRAY_SIZE(transform_inputs), transform_outputs, ARRAY_SIZE(transform_outputs), &transform, &class_id)) goto failed; @@ -6463,7 +6429,20 @@ static IMFSample *next_h264_sample_(int line, const BYTE **h264_buf, ULONG *h264
static void test_h264_decoder(void) { - static const media_type_desc transform_inputs[] = + const GUID transform_inputs[] = + { + MFVideoFormat_H264, + MFVideoFormat_H264_ES, + }; + const GUID transform_outputs[] = + { + MFVideoFormat_NV12, + MFVideoFormat_YV12, + MFVideoFormat_IYUV, + MFVideoFormat_I420, + MFVideoFormat_YUY2, + }; + static const media_type_desc default_inputs[] = { { ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Video), @@ -6474,29 +6453,6 @@ static void test_h264_decoder(void) ATTR_GUID(MF_MT_SUBTYPE, MFVideoFormat_H264_ES), }, }; - static const media_type_desc transform_outputs[] = - { - { - ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Video), - ATTR_GUID(MF_MT_SUBTYPE, MFVideoFormat_NV12), - }, - { - ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Video), - ATTR_GUID(MF_MT_SUBTYPE, MFVideoFormat_YV12), - }, - { - ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Video), - ATTR_GUID(MF_MT_SUBTYPE, MFVideoFormat_IYUV), - }, - { - ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Video), - ATTR_GUID(MF_MT_SUBTYPE, MFVideoFormat_I420), - }, - { - ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Video), - ATTR_GUID(MF_MT_SUBTYPE, MFVideoFormat_YUY2), - }, - }; static const media_type_desc default_outputs[] = { { @@ -6760,7 +6716,7 @@ static void test_h264_decoder(void) hr = CoInitialize(NULL); ok(hr == S_OK, "Failed to initialize, hr %#lx.\n", hr);
- if (!create_transform(MFT_CATEGORY_VIDEO_DECODER, &input_type, &output_type, L"Microsoft H264 Video Decoder MFT", + if (!create_transform(MFT_CATEGORY_VIDEO_DECODER, &input_type, &output_type, L"Microsoft H264 Video Decoder MFT", &MFMediaType_Video, transform_inputs, ARRAY_SIZE(transform_inputs), transform_outputs, ARRAY_SIZE(transform_outputs), &transform, &class_id)) goto failed; @@ -6819,7 +6775,7 @@ static void test_h264_decoder(void) { winetest_push_context("in %lu", i); ok(hr == S_OK, "GetInputAvailableType returned %#lx\n", hr); - check_media_type(media_type, transform_inputs[i], -1); + check_media_type(media_type, default_inputs[i], -1); ret = IMFMediaType_Release(media_type); ok(ret == 0, "Release returned %lu\n", ret); winetest_pop_context();
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com