diff --git a/dlls/mfplay/tests/mfplay.c b/dlls/mfplay/tests/mfplay.c index 6cecd3bbdd9..fa66ccae57e 100644 --- a/dlls/mfplay/tests/mfplay.c +++ b/dlls/mfplay/tests/mfplay.c @@ -437,6 +437,75 @@ static void test_media_item(void) IMFPMediaPlayer_Release(player); } +#define check_media_language(player, resource_name, expected_lang) \ + _check_media_language(__LINE__, FALSE, player, resource_name, expected_lang) +#define todo_check_media_language(player, resource_name, expected_lang) \ + _check_media_language(__LINE__, TRUE, player, resource_name, expected_lang) +static void _check_media_language(unsigned line, BOOL todo, IMFPMediaPlayer *player, + const WCHAR *resource_name, const WCHAR *expected_lang) +{ + WCHAR *filename; + IMFPMediaItem *item; + PROPVARIANT propvar; + const WCHAR *lang = NULL; + HRESULT hr; + + filename = load_resource(resource_name); + + hr = IMFPMediaPlayer_CreateMediaItemFromURL(player, filename, TRUE, 123, &item); + ok_(__FILE__, line)(hr == S_OK || broken(hr == MF_E_UNSUPPORTED_BYTESTREAM_TYPE) /* win8 - win10 1507 */, + "Unexpected hr %#lx.\n", hr); + if (hr != S_OK) + { + DeleteFileW(filename); + return; + } + + hr = IMFPMediaItem_GetStreamAttribute(item, 0, &MF_SD_LANGUAGE, &propvar); + ok_(__FILE__, line)(hr == S_OK || hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); + + if (hr == S_OK) + { + ok_(__FILE__, line)(propvar.vt == VT_LPWSTR, "Unexpected vt %u.\n", propvar.vt); + if (propvar.vt == VT_LPWSTR) + lang = propvar.pwszVal; + } + + todo_wine_if(todo) + { + if (expected_lang) + ok_(__FILE__, line)(lang && !wcscmp(lang, expected_lang), "Unexpected value %s.\n", debugstr_w(lang)); + else + ok_(__FILE__, line)(!lang, "Unexpected value %s.\n", debugstr_w(lang)); + } + + PropVariantClear(&propvar); + IMFPMediaItem_Release(item); + DeleteFileW(filename); +} + +static void test_media_language(void) +{ + IMFPMediaPlayer *player; + HRESULT hr; + + hr = MFPCreateMediaPlayer(NULL, FALSE, 0, NULL, NULL, &player); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + check_media_language(player, L"test-eng.mp4", L"en"); + check_media_language(player, L"test-ang.mp4", NULL); + check_media_language(player, L"test-und.mp4", NULL); + check_media_language(player, L"test-en-US.mp4", L"en"); + + check_media_language(player, L"test-en.wma", L"en"); + check_media_language(player, L"test-eng.wma", L"eng"); + check_media_language(player, L"test-ang.wma", L"ang"); + check_media_language(player, L"test-und.wma", L"und"); + todo_check_media_language(player, L"test-en-US.wma", L"en-US"); + + IMFPMediaPlayer_Release(player); +} + static void test_video_control(void) { MFVideoNormalizedRect rect; @@ -599,6 +668,7 @@ START_TEST(mfplay) test_create_player(); test_shutdown(); test_media_item(); + test_media_language(); test_video_control(); test_duration(); test_playback_rate(); diff --git a/dlls/mfplay/tests/resource.rc b/dlls/mfplay/tests/resource.rc index 38c4a5f9e01..bccf60db9ed 100644 --- a/dlls/mfplay/tests/resource.rc +++ b/dlls/mfplay/tests/resource.rc @@ -20,3 +20,30 @@ /* @makedep: test.mp4 */ test.mp4 RCDATA test.mp4 + +/* @makedep: test-eng.mp4 */ +test-eng.mp4 RCDATA test-eng.mp4 + +/* @makedep: test-ang.mp4 */ +test-ang.mp4 RCDATA test-ang.mp4 + +/* @makedep: test-und.mp4 */ +test-und.mp4 RCDATA test-und.mp4 + +/* @makedep: test-en-US.mp4 */ +test-en-US.mp4 RCDATA test-en-US.mp4 + +/* @makedep: test-en.wma */ +test-en.wma RCDATA test-en.wma + +/* @makedep: test-eng.wma */ +test-eng.wma RCDATA test-eng.wma + +/* @makedep: test-ang.wma */ +test-ang.wma RCDATA test-ang.wma + +/* @makedep: test-und.wma */ +test-und.wma RCDATA test-und.wma + +/* @makedep: test-en-US.wma */ +test-en-US.wma RCDATA test-en-US.wma diff --git a/dlls/mfplay/tests/test-ang.mp4 b/dlls/mfplay/tests/test-ang.mp4 new file mode 100644 index 00000000000..864e5347eab Binary files /dev/null and b/dlls/mfplay/tests/test-ang.mp4 differ diff --git a/dlls/mfplay/tests/test-ang.wma b/dlls/mfplay/tests/test-ang.wma new file mode 100644 index 00000000000..ab15ca3c5af Binary files /dev/null and b/dlls/mfplay/tests/test-ang.wma differ diff --git a/dlls/mfplay/tests/test-en-US.mp4 b/dlls/mfplay/tests/test-en-US.mp4 new file mode 100644 index 00000000000..e023fd5af40 Binary files /dev/null and b/dlls/mfplay/tests/test-en-US.mp4 differ diff --git a/dlls/mfplay/tests/test-en-US.wma b/dlls/mfplay/tests/test-en-US.wma new file mode 100644 index 00000000000..61939c4deb5 Binary files /dev/null and b/dlls/mfplay/tests/test-en-US.wma differ diff --git a/dlls/mfplay/tests/test-en.wma b/dlls/mfplay/tests/test-en.wma new file mode 100644 index 00000000000..b3a9187785e Binary files /dev/null and b/dlls/mfplay/tests/test-en.wma differ diff --git a/dlls/mfplay/tests/test-eng.mp4 b/dlls/mfplay/tests/test-eng.mp4 new file mode 100644 index 00000000000..7be1ad4e0e3 Binary files /dev/null and b/dlls/mfplay/tests/test-eng.mp4 differ diff --git a/dlls/mfplay/tests/test-eng.wma b/dlls/mfplay/tests/test-eng.wma new file mode 100644 index 00000000000..730516354e3 Binary files /dev/null and b/dlls/mfplay/tests/test-eng.wma differ diff --git a/dlls/mfplay/tests/test-und.mp4 b/dlls/mfplay/tests/test-und.mp4 new file mode 100644 index 00000000000..302afb13c72 Binary files /dev/null and b/dlls/mfplay/tests/test-und.mp4 differ diff --git a/dlls/mfplay/tests/test-und.wma b/dlls/mfplay/tests/test-und.wma new file mode 100644 index 00000000000..54243cee77f Binary files /dev/null and b/dlls/mfplay/tests/test-und.wma differ