From: Rémi Bernon rbernon@codeweavers.com
--- dlls/mf/tests/mf.c | 8 ++- dlls/mf/tests/mf_test.h | 29 ++++---- dlls/mf/tests/transform.c | 143 ++++++++++++++++++++------------------ 3 files changed, 98 insertions(+), 82 deletions(-)
diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c index 3f75ca943c8..5959905a278 100644 --- a/dlls/mf/tests/mf.c +++ b/dlls/mf/tests/mf.c @@ -3918,7 +3918,9 @@ static void test_sample_grabber_orientation(GUID subtype) { const struct buffer_desc buffer_desc_rgb32 = { - .length = 64 * 64 * 4, .compare = compare_rgb32, .dump = dump_rgb32, .rect = {.right = 64, .bottom = 64}, + .length = 64 * 64 * 4, + .compare = compare_rgb32, .compare_rect = {.right = 64, .bottom = 64}, + .dump = dump_rgb32, .size = {.cx = 64, .cy = 64}, }; const struct sample_desc sample_desc_rgb32 = { @@ -3930,7 +3932,9 @@ static void test_sample_grabber_orientation(GUID subtype) { const struct buffer_desc buffer_desc_nv12 = { - .length = 64 * 64 * 3 / 2, .compare = compare_nv12, .dump = dump_nv12, .rect = {.right = 64, .bottom = 64}, + .length = 64 * 64 * 3 / 2, + .compare = compare_nv12, .compare_rect = {.right = 64, .bottom = 64}, + .dump = dump_nv12, .size = {.cx = 64, .cy = 64}, }; const struct sample_desc sample_desc_nv12 = { diff --git a/dlls/mf/tests/mf_test.h b/dlls/mf/tests/mf_test.h index 5a247e4a0ef..324815e3e8b 100644 --- a/dlls/mf/tests/mf_test.h +++ b/dlls/mf/tests/mf_test.h @@ -74,28 +74,29 @@ extern void check_attributes_(const char *file, int line, IMFAttributes *attribu const struct attribute_desc *desc, ULONG limit); extern void init_media_type(IMFMediaType *mediatype, const struct attribute_desc *desc, ULONG limit);
-typedef DWORD (*compare_cb)(const BYTE *data, DWORD *length, const RECT *rect, const BYTE *expect); -extern DWORD compare_nv12(const BYTE *data, DWORD *length, const RECT *rect, const BYTE *expect); -extern DWORD compare_i420(const BYTE *data, DWORD *length, const RECT *rect, const BYTE *expect); -extern DWORD compare_rgb32(const BYTE *data, DWORD *length, const RECT *rect, const BYTE *expect); -extern DWORD compare_rgb24(const BYTE *data, DWORD *length, const RECT *rect, const BYTE *expect); -extern DWORD compare_rgb16(const BYTE *data, DWORD *length, const RECT *rect, const BYTE *expect); -extern DWORD compare_pcm16(const BYTE *data, DWORD *length, const RECT *rect, const BYTE *expect); +typedef DWORD (*compare_cb)(const BYTE *data, DWORD *length, const SIZE *size, const RECT *rect, const BYTE *expect); +extern DWORD compare_nv12(const BYTE *data, DWORD *length, const SIZE *size, const RECT *rect, const BYTE *expect); +extern DWORD compare_i420(const BYTE *data, DWORD *length, const SIZE *size, const RECT *rect, const BYTE *expect); +extern DWORD compare_rgb32(const BYTE *data, DWORD *length, const SIZE *size, const RECT *rect, const BYTE *expect); +extern DWORD compare_rgb24(const BYTE *data, DWORD *length, const SIZE *size, const RECT *rect, const BYTE *expect); +extern DWORD compare_rgb16(const BYTE *data, DWORD *length, const SIZE *size, const RECT *rect, const BYTE *expect); +extern DWORD compare_pcm16(const BYTE *data, DWORD *length, const SIZE *size, const RECT *rect, const BYTE *expect);
-typedef void (*dump_cb)(const BYTE *data, DWORD length, const RECT *rect, HANDLE output); -extern void dump_rgb32(const BYTE *data, DWORD length, const RECT *rect, HANDLE output); -extern void dump_rgb24(const BYTE *data, DWORD length, const RECT *rect, HANDLE output); -extern void dump_rgb16(const BYTE *data, DWORD length, const RECT *rect, HANDLE output); -extern void dump_nv12(const BYTE *data, DWORD length, const RECT *rect, HANDLE output); -extern void dump_i420(const BYTE *data, DWORD length, const RECT *rect, HANDLE output); +typedef void (*dump_cb)(const BYTE *data, DWORD length, const SIZE *size, HANDLE output); +extern void dump_rgb32(const BYTE *data, DWORD length, const SIZE *size, HANDLE output); +extern void dump_rgb24(const BYTE *data, DWORD length, const SIZE *size, HANDLE output); +extern void dump_rgb16(const BYTE *data, DWORD length, const SIZE *size, HANDLE output); +extern void dump_nv12(const BYTE *data, DWORD length, const SIZE *size, HANDLE output); +extern void dump_i420(const BYTE *data, DWORD length, const SIZE *size, HANDLE output);
struct buffer_desc { DWORD length; BOOL todo_length; compare_cb compare; + RECT compare_rect; dump_cb dump; - RECT rect; + SIZE size; };
struct sample_desc diff --git a/dlls/mf/tests/transform.c b/dlls/mf/tests/transform.c index 6a4653cccee..a24176b5ff8 100644 --- a/dlls/mf/tests/transform.c +++ b/dlls/mf/tests/transform.c @@ -866,14 +866,14 @@ static HRESULT check_mft_process_output_(int line, IMFTransform *transform, IMFS return ret; }
-DWORD compare_nv12(const BYTE *data, DWORD *length, const RECT *rect, const BYTE *expect) +DWORD compare_nv12(const BYTE *data, DWORD *length, const SIZE *size, const RECT *rect, const BYTE *expect) { - DWORD x, y, size, diff = 0, width = (rect->right + 0xf) & ~0xf, height = (rect->bottom + 0xf) & ~0xf; + DWORD x, y, data_size, diff = 0, width = size->cx, height = size->cy;
/* skip BMP header and RGB data from the dump */ - size = *(DWORD *)(expect + 2); - *length = *length + size; - expect = expect + size; + data_size = *(DWORD *)(expect + 2); + *length = *length + data_size; + expect = expect + data_size;
for (y = 0; y < height; y++, data += width, expect += width) { @@ -896,18 +896,18 @@ DWORD compare_nv12(const BYTE *data, DWORD *length, const RECT *rect, const BYTE } }
- size = (rect->right - rect->left) * (rect->bottom - rect->top) * 3 / 2; - return diff * 100 / 256 / size; + data_size = (rect->right - rect->left) * (rect->bottom - rect->top) * 3 / 2; + return diff * 100 / 256 / data_size; }
-DWORD compare_i420(const BYTE *data, DWORD *length, const RECT *rect, const BYTE *expect) +DWORD compare_i420(const BYTE *data, DWORD *length, const SIZE *size, const RECT *rect, const BYTE *expect) { - DWORD i, x, y, size, diff = 0, width = (rect->right + 0xf) & ~0xf, height = (rect->bottom + 0xf) & ~0xf; + DWORD i, x, y, data_size, diff = 0, width = size->cx, height = size->cy;
/* skip BMP header and RGB data from the dump */ - size = *(DWORD *)(expect + 2); - *length = *length + size; - expect = expect + size; + data_size = *(DWORD *)(expect + 2); + *length = *length + data_size; + expect = expect + data_size;
for (y = 0; y < height; y++, data += width, expect += width) { @@ -929,18 +929,18 @@ DWORD compare_i420(const BYTE *data, DWORD *length, const RECT *rect, const BYTE } }
- size = (rect->right - rect->left) * (rect->bottom - rect->top) * 3 / 2; - return diff * 100 / 256 / size; + data_size = (rect->right - rect->left) * (rect->bottom - rect->top) * 3 / 2; + return diff * 100 / 256 / data_size; }
-static DWORD compare_rgb(const BYTE *data, DWORD *length, const RECT *rect, const BYTE *expect, UINT bits) +static DWORD compare_rgb(const BYTE *data, DWORD *length, const SIZE *size, const RECT *rect, const BYTE *expect, UINT bits) { - DWORD x, y, step = bits / 8, size, diff = 0, width = (rect->right + 0xf) & ~0xf, height = (rect->bottom + 0xf) & ~0xf; + DWORD x, y, step = bits / 8, data_size, diff = 0, width = size->cx, height = size->cy;
/* skip BMP header from the dump */ - size = *(DWORD *)(expect + 2 + 2 * sizeof(DWORD)); - *length = *length + size; - expect = expect + size; + data_size = *(DWORD *)(expect + 2 + 2 * sizeof(DWORD)); + *length = *length + data_size; + expect = expect + data_size;
for (y = 0; y < height; y++, data += width * step, expect += width * step) { @@ -954,49 +954,49 @@ static DWORD compare_rgb(const BYTE *data, DWORD *length, const RECT *rect, cons } }
- size = (rect->right - rect->left) * (rect->bottom - rect->top) * min(step, 3); - return diff * 100 / 256 / size; + data_size = (rect->right - rect->left) * (rect->bottom - rect->top) * min(step, 3); + return diff * 100 / 256 / data_size; }
-DWORD compare_rgb32(const BYTE *data, DWORD *length, const RECT *rect, const BYTE *expect) +DWORD compare_rgb32(const BYTE *data, DWORD *length, const SIZE *size, const RECT *rect, const BYTE *expect) { - return compare_rgb(data, length, rect, expect, 32); + return compare_rgb(data, length, size, rect, expect, 32); }
-DWORD compare_rgb24(const BYTE *data, DWORD *length, const RECT *rect, const BYTE *expect) +DWORD compare_rgb24(const BYTE *data, DWORD *length, const SIZE *size, const RECT *rect, const BYTE *expect) { - return compare_rgb(data, length, rect, expect, 24); + return compare_rgb(data, length, size, rect, expect, 24); }
-DWORD compare_rgb16(const BYTE *data, DWORD *length, const RECT *rect, const BYTE *expect) +DWORD compare_rgb16(const BYTE *data, DWORD *length, const SIZE *size, const RECT *rect, const BYTE *expect) { - return compare_rgb(data, length, rect, expect, 16); + return compare_rgb(data, length, size, rect, expect, 16); }
-DWORD compare_pcm16(const BYTE *data, DWORD *length, const RECT *rect, const BYTE *expect) +DWORD compare_pcm16(const BYTE *data, DWORD *length, const SIZE *size, const RECT *rect, const BYTE *expect) { const INT16 *data_pcm = (INT16 *)data, *expect_pcm = (INT16 *)expect; - DWORD i, size = *length / 2, diff = 0; + DWORD i, data_size = *length / 2, diff = 0;
- for (i = 0; i < size; i++) + for (i = 0; i < data_size; i++) diff += abs((int)*expect_pcm++ - (int)*data_pcm++);
- return diff * 100 / 65536 / size; + return diff * 100 / 65536 / data_size; }
-static DWORD compare_bytes(const BYTE *data, DWORD *length, const RECT *rect, const BYTE *expect) +static DWORD compare_bytes(const BYTE *data, DWORD *length, const SIZE *size, const RECT *rect, const BYTE *expect) { - DWORD i, size = *length, diff = 0; + DWORD i, data_size = *length, diff = 0;
- for (i = 0; i < size; i++) + for (i = 0; i < data_size; i++) diff += abs((int)*expect++ - (int)*data++);
- return diff * 100 / 256 / size; + return diff * 100 / 256 / data_size; }
-static void dump_rgb(const BYTE *data, DWORD length, const RECT *rect, HANDLE output, UINT bits) +static void dump_rgb(const BYTE *data, DWORD length, const SIZE *size, HANDLE output, UINT bits) { - DWORD width = (rect->right + 0xf) & ~0xf, height = (rect->bottom + 0xf) & ~0xf; + DWORD width = size->cx, height = size->cy; static const char magic[2] = "BM"; struct { @@ -1027,24 +1027,24 @@ static void dump_rgb(const BYTE *data, DWORD length, const RECT *rect, HANDLE ou ok(written == length, "written %lu bytes\n", written); }
-void dump_rgb32(const BYTE *data, DWORD length, const RECT *rect, HANDLE output) +void dump_rgb32(const BYTE *data, DWORD length, const SIZE *size, HANDLE output) { - return dump_rgb(data, length, rect, output, 32); + return dump_rgb(data, length, size, output, 32); }
-void dump_rgb24(const BYTE *data, DWORD length, const RECT *rect, HANDLE output) +void dump_rgb24(const BYTE *data, DWORD length, const SIZE *size, HANDLE output) { - return dump_rgb(data, length, rect, output, 24); + return dump_rgb(data, length, size, output, 24); }
-void dump_rgb16(const BYTE *data, DWORD length, const RECT *rect, HANDLE output) +void dump_rgb16(const BYTE *data, DWORD length, const SIZE *size, HANDLE output) { - return dump_rgb(data, length, rect, output, 16); + return dump_rgb(data, length, size, output, 16); }
-void dump_nv12(const BYTE *data, DWORD length, const RECT *rect, HANDLE output) +void dump_nv12(const BYTE *data, DWORD length, const SIZE *size, HANDLE output) { - DWORD written, x, y, width = (rect->right + 0xf) & ~0xf, height = (rect->bottom + 0xf) & ~0xf; + DWORD written, x, y, width = size->cx, height = size->cy; BYTE *rgb32_data = malloc(width * height * 4), *rgb32 = rgb32_data; BOOL ret;
@@ -1056,7 +1056,7 @@ void dump_nv12(const BYTE *data, DWORD length, const RECT *rect, HANDLE output) *rgb32++ = 0xff; }
- dump_rgb32(rgb32_data, width * height * 4, rect, output); + dump_rgb32(rgb32_data, width * height * 4, size, output); free(rgb32_data);
ret = WriteFile(output, data, length, &written, NULL); @@ -1064,9 +1064,9 @@ void dump_nv12(const BYTE *data, DWORD length, const RECT *rect, HANDLE output) ok(written == length, "written %lu bytes\n", written); }
-void dump_i420(const BYTE *data, DWORD length, const RECT *rect, HANDLE output) +void dump_i420(const BYTE *data, DWORD length, const SIZE *size, HANDLE output) { - DWORD written, x, y, width = (rect->right + 0xf) & ~0xf, height = (rect->bottom + 0xf) & ~0xf; + DWORD written, x, y, width = size->cx, height = size->cy; BYTE *rgb32_data = malloc(width * height * 4), *rgb32 = rgb32_data; BOOL ret;
@@ -1078,7 +1078,7 @@ void dump_i420(const BYTE *data, DWORD length, const RECT *rect, HANDLE output) *rgb32++ = 0xff; }
- dump_rgb32(rgb32_data, width * height * 4, rect, output); + dump_rgb32(rgb32_data, width * height * 4, size, output); free(rgb32_data);
ret = WriteFile(output, data, length, &written, NULL); @@ -1151,7 +1151,7 @@ static void dump_mf_media_buffer(IMFMediaBuffer *buffer, const struct buffer_des ok(hr == S_OK, "Lock returned %#lx\n", hr);
if (buffer_desc->dump) - buffer_desc->dump(data, length, &buffer_desc->rect, output); + buffer_desc->dump(data, length, &buffer_desc->size, output); else { if (buffer_desc->length == -1) @@ -1219,9 +1219,9 @@ static DWORD check_mf_media_buffer_(const char *file, int line, IMFMediaBuffer * todo_wine_if(expect->todo_length) ok_(file, line)(0, "missing %#lx bytes\n", length - *expect_data_len); else if (!expect->compare) - diff = compare_bytes(data, &length, NULL, *expect_data); + diff = compare_bytes(data, &length, NULL, NULL, *expect_data); else - diff = expect->compare(data, &length, &expect->rect, *expect_data); + diff = expect->compare(data, &length, &expect->size, &expect->compare_rect, *expect_data); }
hr = IMFMediaBuffer_Unlock(buffer); @@ -1453,9 +1453,9 @@ static DWORD check_dmo_output_data_buffer_(int line, DMO_OUTPUT_DATA_BUFFER *out if (data_length < buffer_length) ok_(__FILE__, line)(0, "Missing %#lx bytes\n", buffer_length - data_length); else if (!buffer_desc->compare) - diff = compare_bytes(buffer, &buffer_length, NULL, data); + diff = compare_bytes(buffer, &buffer_length, NULL, NULL, data); else - diff = buffer_desc->compare(buffer, &buffer_length, &buffer_desc->rect, data); + diff = buffer_desc->compare(buffer, &buffer_length, &buffer_desc->size, &buffer_desc->compare_rect, data);
return diff; } @@ -4191,7 +4191,8 @@ static void test_h264_decoder(void) const struct buffer_desc output_buffer_desc_nv12 = { .length = actual_width * actual_height * 3 / 2, - .compare = compare_nv12, .dump = dump_nv12, .rect = {.right = 82, .bottom = 84}, + .compare = compare_nv12, .compare_rect = {.right = 82, .bottom = 84}, + .dump = dump_nv12, .size = {.cx = actual_width, .cy = actual_height}, }; const struct sample_desc output_sample_desc_nv12 = { @@ -4202,7 +4203,8 @@ static void test_h264_decoder(void) const struct buffer_desc output_buffer_desc_i420 = { .length = actual_width * actual_height * 3 / 2, - .compare = compare_i420, .dump = dump_i420, .rect = {.right = 82, .bottom = 84}, + .compare = compare_i420, .compare_rect = {.right = 82, .bottom = 84}, + .dump = dump_i420, .size = {.cx = actual_width, .cy = actual_height}, }; const struct sample_desc expect_output_sample_i420 = { @@ -5837,12 +5839,14 @@ static void test_wmv_decoder(void) const struct buffer_desc output_buffer_desc_nv12 = { .length = actual_width * actual_height * 3 / 2, - .compare = compare_nv12, .dump = dump_nv12, .rect = {.right = 82, .bottom = 84}, + .compare = compare_nv12, .compare_rect = {.right = 82, .bottom = 84}, + .dump = dump_nv12, .size = {.cx = actual_width, .cy = actual_height}, }; const struct buffer_desc output_buffer_desc_rgb = { .length = actual_width * actual_height * 4, - .compare = compare_rgb32, .dump = dump_rgb32, .rect = {.right = 82, .bottom = 84}, + .compare = compare_rgb32, .compare_rect = {.right = 82, .bottom = 84}, + .dump = dump_rgb32, .size = {.cx = actual_width, .cy = actual_height}, }; const struct sample_desc output_sample_desc_nv12 = { @@ -6586,7 +6590,8 @@ static void test_wmv_decoder_media_object(void) const struct buffer_desc output_buffer_desc_nv12 = { .length = data_width * data_height * 3 / 2, - .compare = compare_nv12, .dump = dump_nv12, .rect = {.right = 82, .bottom = 84}, + .compare = compare_nv12, .compare_rect = {.right = 82, .bottom = 84}, + .dump = dump_nv12, .size = {.cx = data_width, .cy = data_height}, }; DWORD in_count, out_count, size, alignment, wmv_data_length, status, expected_status, diff; struct media_buffer *input_media_buffer = NULL, *output_media_buffer = NULL; @@ -6980,7 +6985,8 @@ static void test_color_convert(void) const struct buffer_desc output_buffer_desc = { .length = actual_width * actual_height * 4, - .compare = compare_rgb32, .dump = dump_rgb32, .rect = {.right = 82, .bottom = 84}, + .compare = compare_rgb32, .compare_rect = {.right = 82, .bottom = 84}, + .dump = dump_rgb32, .size = {.cx = actual_width, .cy = actual_height}, }; const struct attribute_desc output_sample_attributes[] = { @@ -7396,7 +7402,8 @@ static void test_video_processor(void) const struct buffer_desc rgb32_buffer_desc = { .length = actual_width * actual_height * 4, - .compare = compare_rgb32, .dump = dump_rgb32, .rect = {.top = 12, .right = 82, .bottom = 96}, + .compare = compare_rgb32, .compare_rect = {.top = 12, .right = 82, .bottom = 96}, + .dump = dump_rgb32, .size = {.cx = actual_width, .cy = actual_height}, }; const struct sample_desc rgb32_sample_desc = { @@ -7408,7 +7415,8 @@ static void test_video_processor(void) const struct buffer_desc rgb555_buffer_desc = { .length = actual_width * actual_height * 2, - .compare = compare_rgb16, .dump = dump_rgb16, .rect = {.top = 12, .right = 82, .bottom = 96}, + .compare = compare_rgb16, .compare_rect = {.top = 12, .right = 82, .bottom = 96}, + .dump = dump_rgb16, .size = {.cx = actual_width, .cy = actual_height}, }; const struct sample_desc rgb555_sample_desc = { @@ -7420,7 +7428,8 @@ static void test_video_processor(void) const struct buffer_desc nv12_buffer_desc = { .length = actual_width * actual_height * 3 / 2, - .compare = compare_nv12, .dump = dump_nv12, .rect = {.top = 12, .right = 82, .bottom = 96}, + .compare = compare_nv12, .compare_rect = {.top = 12, .right = 82, .bottom = 96}, + .dump = dump_nv12, .size = {.cx = actual_width, .cy = actual_height}, }; const struct sample_desc nv12_sample_desc = { @@ -8361,7 +8370,8 @@ static void test_h264_with_dxgi_manager(void) const struct buffer_desc output_buffer_desc_nv12 = { .length = aligned_width * aligned_height * 3 / 2, - .compare = compare_nv12, .dump = dump_nv12, .rect = {.top=0, .left=0, .right = set_width, .bottom = set_height}, + .compare = compare_nv12, .compare_rect = {.right = set_width, .bottom = set_height}, + .dump = dump_nv12, .size = {.cx = aligned_width, .cy = aligned_height}, }; const struct sample_desc output_sample_desc_nv12 = { @@ -8777,8 +8787,9 @@ static void test_iv50_decoder(void) }; const struct buffer_desc rgb_buffer_desc = { - .length = 96 * 96 * 3, .compare = compare_rgb24, .dump = dump_rgb24, - .rect = {.right = 82, .bottom = 84}, + .length = 96 * 96 * 3, + .compare = compare_rgb24, .compare_rect = {.right = 82, .bottom = 84}, + .dump = dump_rgb24, .size = {.cx = 96, .cy = 96}, }; const struct sample_desc rgb_sample_desc = {