This behaviour is expected by games such as Borderlands 3.
From: Shaun Ren sren@codeweavers.com
Some gstreamer plugins, such as asfdemux, generate multiple tag events. --- dlls/winegstreamer/wg_parser.c | 82 ++++++++++++++++++++-------------- 1 file changed, 48 insertions(+), 34 deletions(-)
diff --git a/dlls/winegstreamer/wg_parser.c b/dlls/winegstreamer/wg_parser.c index d2db1f039e4..281013162aa 100644 --- a/dlls/winegstreamer/wg_parser.c +++ b/dlls/winegstreamer/wg_parser.c @@ -1276,47 +1276,61 @@ static gboolean src_event_cb(GstPad *pad, GstObject *parent, GstEvent *event) static void query_tags(struct wg_parser_stream *stream) { const gchar *struct_name; - GstTagList *tag_list; GstEvent *tag_event; - guint i, tag_count; - const GValue *val; - GstSample *sample; - GstBuffer *buf; - gsize size; + guint i, j;
- if (!(tag_event = gst_pad_get_sticky_event(stream->their_src, GST_EVENT_TAG, 0))) - return; - - gst_event_parse_tag(tag_event, &tag_list); - gst_tag_list_get_string(tag_list, "language-code", &stream->tags[WG_PARSER_TAG_LANGUAGE]); + stream->tags[WG_PARSER_TAG_NAME] = NULL; + stream->tags[WG_PARSER_TAG_LANGUAGE] = NULL;
- /* Extract stream name from Quick Time demuxer private tag where it puts unrecognized chunks. */ - tag_count = gst_tag_list_get_tag_size(tag_list, "private-qt-tag"); - for (i = 0; i < tag_count; ++i) + i = 0; + while ((tag_event = gst_pad_get_sticky_event(stream->their_src, GST_EVENT_TAG, i++))) { - if (!(val = gst_tag_list_get_value_index(tag_list, "private-qt-tag", i))) - continue; - if (!GST_VALUE_HOLDS_SAMPLE(val) || !(sample = gst_value_get_sample(val))) - continue; - struct_name = gst_structure_get_name(gst_sample_get_info(sample)); - if (!struct_name || strcmp(struct_name, "application/x-gst-qt-name-tag")) - continue; - if (!(buf = gst_sample_get_buffer(sample))) - continue; - if ((size = gst_buffer_get_size(buf)) < 8) - continue; - size -= 8; - if (!(stream->tags[WG_PARSER_TAG_NAME] = g_malloc(size + 1))) - continue; - if (gst_buffer_extract(buf, 8, stream->tags[WG_PARSER_TAG_NAME], size) != size) + GstTagList *tag_list; + + gst_event_parse_tag(tag_event, &tag_list); + + if (!stream->tags[WG_PARSER_TAG_NAME]) + { + /* Extract stream name from Quick Time demuxer private tag where it puts unrecognized chunks. */ + const GValue *val; + GstSample *sample; + GstBuffer *buf; + gsize size; + guint tag_count = gst_tag_list_get_tag_size(tag_list, "private-qt-tag"); + + for (j = 0; j < tag_count; ++j) + { + if (!(val = gst_tag_list_get_value_index(tag_list, "private-qt-tag", j))) + continue; + if (!GST_VALUE_HOLDS_SAMPLE(val) || !(sample = gst_value_get_sample(val))) + continue; + struct_name = gst_structure_get_name(gst_sample_get_info(sample)); + if (!struct_name || strcmp(struct_name, "application/x-gst-qt-name-tag")) + continue; + if (!(buf = gst_sample_get_buffer(sample))) + continue; + if ((size = gst_buffer_get_size(buf)) < 8) + continue; + size -= 8; + if (!(stream->tags[WG_PARSER_TAG_NAME] = g_malloc(size + 1))) + continue; + if (gst_buffer_extract(buf, 8, stream->tags[WG_PARSER_TAG_NAME], size) != size) + { + g_free(stream->tags[WG_PARSER_TAG_NAME]); + stream->tags[WG_PARSER_TAG_NAME] = NULL; + continue; + } + stream->tags[WG_PARSER_TAG_NAME][size] = 0; + } + } + + if (!stream->tags[WG_PARSER_TAG_LANGUAGE]) { - g_free(stream->tags[WG_PARSER_TAG_NAME]); - stream->tags[WG_PARSER_TAG_NAME] = NULL; - continue; + gst_tag_list_get_string(tag_list, GST_TAG_LANGUAGE_CODE, &stream->tags[WG_PARSER_TAG_LANGUAGE]); } - stream->tags[WG_PARSER_TAG_NAME][size] = 0; + + gst_event_unref(tag_event); } - gst_event_unref(tag_event); }
static NTSTATUS wg_parser_connect(void *args)
From: Shaun Ren sren@codeweavers.com
--- configure | 14 +++++++------- configure.ac | 2 +- dlls/winegstreamer/wg_parser.c | 16 +++++++++++++++- 3 files changed, 23 insertions(+), 9 deletions(-)
diff --git a/configure b/configure index 0067b7f008c..27d2da51eab 100755 --- a/configure +++ b/configure @@ -2562,10 +2562,10 @@ Some influential environment variables: PULSE_LIBS Linker flags for libpulse, overriding pkg-config GSTREAMER_CFLAGS C compiler flags for gstreamer-1.0 gstreamer-video-1.0 - gstreamer-audio-1.0, overriding pkg-config + gstreamer-audio-1.0 gstreamer-tag-1.0, overriding pkg-config GSTREAMER_LIBS Linker flags for gstreamer-1.0 gstreamer-video-1.0 - gstreamer-audio-1.0, overriding pkg-config + gstreamer-audio-1.0 gstreamer-tag-1.0, overriding pkg-config UDEV_CFLAGS C compiler flags for libudev, overriding pkg-config UDEV_LIBS Linker flags for libudev, overriding pkg-config UNWIND_CFLAGS @@ -16984,7 +16984,7 @@ if ${GSTREAMER_CFLAGS:+false} : then : if test ${PKG_CONFIG+y} then : - GSTREAMER_CFLAGS=`$PKG_CONFIG --cflags gstreamer-1.0 gstreamer-video-1.0 gstreamer-audio-1.0 2>conftest.err` + GSTREAMER_CFLAGS=`$PKG_CONFIG --cflags gstreamer-1.0 gstreamer-video-1.0 gstreamer-audio-1.0 gstreamer-tag-1.0 2>conftest.err` fi fi
@@ -16992,15 +16992,15 @@ if ${GSTREAMER_LIBS:+false} : then : if test ${PKG_CONFIG+y} then : - GSTREAMER_LIBS=`$PKG_CONFIG --libs gstreamer-1.0 gstreamer-video-1.0 gstreamer-audio-1.0 2>/dev/null` + GSTREAMER_LIBS=`$PKG_CONFIG --libs gstreamer-1.0 gstreamer-video-1.0 gstreamer-audio-1.0 gstreamer-tag-1.0 2>/dev/null` fi fi
-printf "%s\n" "$as_me:${as_lineno-$LINENO}: gstreamer-1.0 gstreamer-video-1.0 gstreamer-audio-1.0 cflags: $GSTREAMER_CFLAGS" >&5 -printf "%s\n" "$as_me:${as_lineno-$LINENO}: gstreamer-1.0 gstreamer-video-1.0 gstreamer-audio-1.0 libs: $GSTREAMER_LIBS" >&5 +printf "%s\n" "$as_me:${as_lineno-$LINENO}: gstreamer-1.0 gstreamer-video-1.0 gstreamer-audio-1.0 gstreamer-tag-1.0 cflags: $GSTREAMER_CFLAGS" >&5 +printf "%s\n" "$as_me:${as_lineno-$LINENO}: gstreamer-1.0 gstreamer-video-1.0 gstreamer-audio-1.0 gstreamer-tag-1.0 libs: $GSTREAMER_LIBS" >&5 if test -s conftest.err; then - printf %s "$as_me:${as_lineno-$LINENO}: gstreamer-1.0 gstreamer-video-1.0 gstreamer-audio-1.0 errors: " >&5 + printf %s "$as_me:${as_lineno-$LINENO}: gstreamer-1.0 gstreamer-video-1.0 gstreamer-audio-1.0 gstreamer-tag-1.0 errors: " >&5 cat conftest.err >&5 fi rm -f conftest.err diff --git a/configure.ac b/configure.ac index d40c6f600af..3d579c1ff43 100644 --- a/configure.ac +++ b/configure.ac @@ -1572,7 +1572,7 @@ WINE_NOTICE_WITH(pulse, [test -z "$PULSE_LIBS"], dnl **** Check for gstreamer **** if test "x$with_gstreamer" != "xno" then - WINE_PACKAGE_FLAGS(GSTREAMER,[gstreamer-1.0 gstreamer-video-1.0 gstreamer-audio-1.0],,,, + WINE_PACKAGE_FLAGS(GSTREAMER,[gstreamer-1.0 gstreamer-video-1.0 gstreamer-audio-1.0 gstreamer-tag-1.0],,,, [AC_CHECK_HEADER([gst/gst.h], [AC_MSG_CHECKING([whether gint64 defined by gst/gst.h is indeed 64-bit]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <gst/gst.h>]], diff --git a/dlls/winegstreamer/wg_parser.c b/dlls/winegstreamer/wg_parser.c index 281013162aa..7dd1a495f55 100644 --- a/dlls/winegstreamer/wg_parser.c +++ b/dlls/winegstreamer/wg_parser.c @@ -33,6 +33,7 @@ #include <gst/gst.h> #include <gst/video/video.h> #include <gst/audio/audio.h> +#include <gst/tag/tag.h>
#include "ntstatus.h" #define WIN32_NO_STATUS @@ -1326,7 +1327,20 @@ static void query_tags(struct wg_parser_stream *stream)
if (!stream->tags[WG_PARSER_TAG_LANGUAGE]) { - gst_tag_list_get_string(tag_list, GST_TAG_LANGUAGE_CODE, &stream->tags[WG_PARSER_TAG_LANGUAGE]); + gchar *lang_code = NULL; + + gst_tag_list_get_string(tag_list, GST_TAG_LANGUAGE_CODE, &lang_code); + if (lang_code) + { + /* FIXME: don't convert to ISO 639-1 if the media is ASF. */ + const gchar *lang_code_iso_639_1 = gst_tag_get_language_code_iso_639_1(lang_code); + if (lang_code_iso_639_1) + stream->tags[WG_PARSER_TAG_LANGUAGE] = g_strdup(lang_code_iso_639_1); + else + stream->tags[WG_PARSER_TAG_LANGUAGE] = NULL; + + g_free(lang_code); + } }
gst_event_unref(tag_event);
From: Shaun Ren sren@codeweavers.com
--- dlls/mfplay/tests/mfplay.c | 64 +++++++++++++++++++++++++++++++ dlls/mfplay/tests/resource.rc | 27 +++++++++++++ dlls/mfplay/tests/test-ang.mp4 | Bin 0 -> 860 bytes dlls/mfplay/tests/test-ang.wma | Bin 0 -> 3867 bytes dlls/mfplay/tests/test-en-US.mp4 | Bin 0 -> 866 bytes dlls/mfplay/tests/test-en-US.wma | Bin 0 -> 3871 bytes dlls/mfplay/tests/test-en.wma | Bin 0 -> 3865 bytes dlls/mfplay/tests/test-eng.mp4 | Bin 0 -> 860 bytes dlls/mfplay/tests/test-eng.wma | Bin 0 -> 3867 bytes dlls/mfplay/tests/test-und.mp4 | Bin 0 -> 860 bytes dlls/mfplay/tests/test-und.wma | Bin 0 -> 3867 bytes 11 files changed, 91 insertions(+) create mode 100644 dlls/mfplay/tests/test-ang.mp4 create mode 100644 dlls/mfplay/tests/test-ang.wma create mode 100644 dlls/mfplay/tests/test-en-US.mp4 create mode 100644 dlls/mfplay/tests/test-en-US.wma create mode 100644 dlls/mfplay/tests/test-en.wma create mode 100644 dlls/mfplay/tests/test-eng.mp4 create mode 100644 dlls/mfplay/tests/test-eng.wma create mode 100644 dlls/mfplay/tests/test-und.mp4 create mode 100644 dlls/mfplay/tests/test-und.wma
diff --git a/dlls/mfplay/tests/mfplay.c b/dlls/mfplay/tests/mfplay.c index 6cecd3bbdd9..ef3c7696246 100644 --- a/dlls/mfplay/tests/mfplay.c +++ b/dlls/mfplay/tests/mfplay.c @@ -437,6 +437,69 @@ 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, "Unexpected hr %#lx.\n", hr); + + 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"); + todo_check_media_language(player, L"test-eng.wma", L"eng"); + todo_check_media_language(player, L"test-ang.wma", L"ang"); + todo_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 +662,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 0000000000000000000000000000000000000000..864e5347eab75ecbf2c49d22c1cdff8b0da6db61 GIT binary patch literal 860 zcmZuw%}T>S5S}Eh^&rxNqDaIDEqG9A>mT0Y&4V|=gLp~1sTQ+M$ZiXIkRE*%A3=No z-@=>VThwnhiA{?`x8FD4%+Aj4W{Jq{>!)O(Vo78ZBSuFi$8927?x$f0+?68GUp8F@ z<KD^n;nCS)yVWAQ<*!<sUX94vka0XlVkE~80$4KV2aX_%_&2jT2l9gN&ocjGHk!TA zY4C{PoqjZHI;F&-TDcd?h()AGUhw@w&#(~+tw7x{QaTUu4AiaUJzMWm3<7AL6pMS` z@ri0)_0!Beco0!)82(f|8Wx=K8osy;h9U|%#}aZd?1R*moGaQ8neK`-<Tx8Qv@%K~ zFXPsp(%lIBMQK$W0Ot&GtK29X`<dBPXTq(*PD3Sl!{kgRlP1zCzzu($CHj~^msKd$ z_1BwkS^~3h6|~mXX?{Fe4m3|`b9A8iu*`}$GJ}o>bkSXp1sHe3BhNFjXAb1XI=8?D z)|BqWxz2O;F}BowBG^geh<9%4Os8P3>fR^7B2r$ZI}$oT=vIaXIc>LmNx0ZFND{92 dX9t7qOK867nA_OK%itnhnBPYq@1tYh$1gSCZi)Z^
literal 0 HcmV?d00001
diff --git a/dlls/mfplay/tests/test-ang.wma b/dlls/mfplay/tests/test-ang.wma new file mode 100644 index 0000000000000000000000000000000000000000..ab15ca3c5af3d94aa347bc475055e69d6288fc36 GIT binary patch literal 3867 zcmXp|+f>?@c3yDVO@>trN#}AhnHa!;6-Y8NExfb3$9?5_!M-O92Y3{MQ!^lv7^EaW zRH(u3>b;F~85yD61HEq`%no6&hzt)z0%S=8kPX5IVi_2=GVhPq1KIN!V$Vvbe!)wZ zSMLIeKZA&~F;oL(R=PRYJb3@ddy}T6-95*cR%NJaMh1>VhCGIJAoujrXCg(%jGUWi zuFMQ#i;jwbDnX|}mP6eJb_k3OQU`J*%p)*;4ofavVt;%|aQX*^1t;TH1f)PE7#TDe z!Wn!S^ch@%E=Xp`XGmel1iK}eA(f#72qC;;uzDE=ABIGRGKMq;QwB>0Jq9BNb0BHR zU;u;+3=`S!Y~POL=_05d4)Zd9_(q=>T=AEoAwI@MJK*f${r!pO1-mx^qi)M11*kFx z86blLh#_uI1V)B~JOjfHZeUO|2rzJgl|kef4*-RLOoyP0ZL)?J1Q#y>`ij}(8_ZXZ zXyPDUObp^cpMrdo0`z4$LotH_(BG+G|0V+2jtr$>c0Q0D#$W-qjfo+V(F`r2ZGt8R zumU6kWCsW^GBz<V2*zFjyVrrC36iEb4gjS<sptSh!+!?`<^z617BGTy8rVZI!@@(L hSQ`bSAut*OqaiRF0;3@?8UmvsFd71*Auv=!007Z|2G;-p
literal 0 HcmV?d00001
diff --git a/dlls/mfplay/tests/test-en-US.mp4 b/dlls/mfplay/tests/test-en-US.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..e023fd5af4077cbccaaf2dfb4a1525cd8ef485be GIT binary patch literal 866 zcmZuwv2N5r5FOhIp+G1?cM?L5aHP<nTyzOUh|XOo=pqn8H1_S@<rJ@NdG}6&iZZ`K zM^8aXlW#~WB>p12x3+Uf#FKYt=FRNP?5<Zt;;H*w&uwKyLZQSsGWE+t5xGBYw1(U@ zDsxw%yv>%A<JSi-UL72c#}bayhr#1yOC;JcRkcK5VU}kKat+ZR7)k=+x57UL=sR}0 ziu|7zqS+JIWan^xa_7Eg#K7zC`<D=Xw)I{DPxc-L6L;*?leg2JR?fnTbzxn{as~2k zbZdj3M$I#DiBYS)w|zWKMYfXRFTZkhri#XEm~6Eud!6zWwtAD5s?dxHKA3qqg|cnU zDk<ze)$*}wH2nk{da!7Uq}7Aiy1aniSZDhKU`&o%WupY`7NKlYVXMG%Z51~xQH*J0 zkPd0ckFQ|N=H~F?{cpJ!;P_>byQVvm)(bAN&L0<4{7k+Ij>*d?fkbC^LIPk199^9E zeW9ZRc@}4afpwFr<GE%Z<B6Tsibhiv+^x@Za|125`K*TQJ?m8->7ty`r_0g1Q!4pF vxeW57(O#0<UB4<^Z<EzEYusWqZ~up9-(1DUcJMx!gr)dOrg$Ys{+0X%9oKNt
literal 0 HcmV?d00001
diff --git a/dlls/mfplay/tests/test-en-US.wma b/dlls/mfplay/tests/test-en-US.wma new file mode 100644 index 0000000000000000000000000000000000000000..61939c4deb51bb5c5f0a7e072c07bc991c1ee015 GIT binary patch literal 3871 zcmXp|+f>?@c3yDVO@>trN#}BMnHa!;6-Y8NExfb3$9?5_!M-O92Y3{MQ!^lv7^EaW zRH(u3>b;F~85yD61HEq`%no6&hzt)z0%S=8kPX5IVi_2=GVhPq1KIN!V$WKre!)wZ zSMLIeKZA&~G1LQPR=PRYJb3@ddy}T6-95*cR&}UqMh2c#hCBvchERrJpwQ{1&qRuj z896u4T$vff79AA<RfbN18~}A6*fB6RNFB(bFwemBIV`zwiT&{<!Ra3u7MzS*5s(6v zU}Vr>2xstR&}VQ3x+0k&pCN@I6Ua&jx+ayO1PCF#Vz7D{1|Nn*hBAgU22%!020aEN z26G^3$Y2133=9+5?`+?W<nbb?9S-v{fA~h97hLg|p&>rTMLXc^;r;!I=LNer0i$or zBL%231{olO1BfARPXtDYgFFMn4sKv@GYBwnft5kz7!Lr2fJ}#=i*2%o7X%kC0s4yB z;~UIZj%eZ_T}%w(K%atqlLGW*IYTjn0?^;7VE-lp*^UgQV0J!`9mZe*wvCA)k<kn- zv2B7T2e1Mp0%QjWFfukVFbKw80K3<Lp$U?%I1T`%Kq=_}L&JXu2Id2PLl!WCa~s%0 mF~h<`pjaCPqaiRF0;3@?8UmvsFd71*Aut*OqaiR<LjV95X$M^Z
literal 0 HcmV?d00001
diff --git a/dlls/mfplay/tests/test-en.wma b/dlls/mfplay/tests/test-en.wma new file mode 100644 index 0000000000000000000000000000000000000000..b3a9187785ea364f2e68771366b6bdca25bc308e GIT binary patch literal 3865 zcmXp|+f>?@c3yDVO@>trN#}CXnHa!;6-Y8NExfb3$9?5_!M-O92Y3{MQ!^lv7^EaW zRH(u3>b;F~85yD61HEq`%no6&hzt)z0%S=8kPX5IVi_2=GVhPq1KIN!V$X7@e!)wZ zSMLIeKZA&~F;oI&R=PRYJb3@ddy}T6-95*cRz;|4Mh3Q2hCCqW^wMV{MaPVsn`f@f z3}TCpihwFWr$AOiT?Tdrj15u;aw5zdFntb7E?i=Nd`WQn2ZjYF<5mQuKqVL%G#J7e zd>Ql^T!Ho{GvqU*Fk}K*=?uXPsSG7R2;mij)ypvWFeEaRF{Ck=GFUR`F&HtJ14%;$ z10ZBzn8<!-`*tKR7eVcCn3ws(H~PHbioXmE@i8vi0cQ{I?@v50*u4oDaa$fKK$S7b z02v%W3~_rRFe)7685nkO0|S~tfPo9F3?j#P04M}xIs{#8lQp~`xOfTBSIi#YV7_uh z69?&HVh{)V6y%!}pfAfAiWwAu{!Rt^HxbBoWGDr*^MULz1`DulObm&PW@yQ56Eq=! z6(A8HJ3xSuv5A2}F!lo2y$%dbkQBvn04N1YLkAcd{yQ)*AMhKpfDxR}z#fVj79Ik{ g+9((efzc2c4S~@R7!85Z5Eu=C(GVC7fuR}#09U96Y5)KL
literal 0 HcmV?d00001
diff --git a/dlls/mfplay/tests/test-eng.mp4 b/dlls/mfplay/tests/test-eng.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..7be1ad4e0e3a69125666572beb243ecec56e8493 GIT binary patch literal 860 zcmZuw%}T>S5S}FU=OEI9MUjXpwBSKY{l{CpdGIE95HD#r{lRP#vfF|lq(@)HM-U&t zx9}$T7W&O5v1xJW_WS0W+1c6MED^aq{g@0@EQxGl#5j`4$srM~_R=r})};var%l(v zq<ebNIzDe5w%cU4{dH^0TOo2bWgJhC7|F>%088e4!x3Z=|7JGlKwj|uS>}JtMzfbX z4IU7@*AHe*r<7P!EB9g<v4|AO3%+0I88$+p6{s6VO6MV-fx4BvXX{OhVF1mOVsY=g zKGBL-`!F*P1|mug!=H-Bqk=Quz!z7+NJJs$SV9g*J&>xBb442>(_N8<9B1Q(*2Zb% zW!&0Rx)XsvE3JwH;G7X|l^bPaKQo)EOt@9pS*QeWn4IZ!+C*9fxarqeqW39uxddgY z_Hz40%U~9+f;Kuj&5tL`f#xY~jt&$bmRS);X3+6~F1qWo0OM|W<as9c#DUyc=N7oY zhSJ?Q*Llu9#<uDwf}J#uc;}|h&kvZZI{gG#M9Qml#zF@O-O11(r`5}sgo{msB;ksG db}-DogyyS`xs4sX3@*Zj`F-^8K90=$_ytu@Zkhl9
literal 0 HcmV?d00001
diff --git a/dlls/mfplay/tests/test-eng.wma b/dlls/mfplay/tests/test-eng.wma new file mode 100644 index 0000000000000000000000000000000000000000..730516354e380b6dd6f6750b5311c5ddaaca1921 GIT binary patch literal 3867 zcmXp|+f>?@c3yDVO@>trN#}AhnHa!;6-Y8NExfb3$9?5_!M-O92Y3{MQ!^lv7^EaW zRH(u3>b;F~85yD61HEq`%no6&hzt)z0%S=8kPX5IVi_2=GVhPq1KIN!V$Vvbe!)wZ zSMLIeKZA&~F;oL(R=PRYJb3@ddy}T6-95*cR%NJaMh1>lhCGIJAoujrXCg(%jGUWi zuFMQ#i;jwbDnX|}mP6eJb_k3OQU`J*%p)*;4ofavVt;%|aQX*^1t;TH1f)PE7#TDe z!Wn!S^ch@%E=Xp`XGmel1iK}eA(f#72qC;;uzDE=ABIGRGKMq;QwB>0Jq9BNb0BHR zU;u;+3=`S!Y~POL=_05d4)Zd9_(q=>T=AEoAwI@MJK*f${r!pO1-mx^qi)M11*kFx z86blLh#_uI1V)B~JOjfHZeUO|2rzJgl|kef4*-RLOoyP0ZL)?J1Q#y>`ij}(8_ZXZ zXyPDUObp^cpMrdo0`z4$LotH_(BG+G|0V+2jtr$>c0Q0D#$W-qjfo+V(F`r2ZGt8R zumU6kWCsW^GBz<V2*zFjyVrrC36iEb4gjS<sptSh!+!?`<^z617BGTy8rVZI!@@(L hSQ`bSAut*OqaiRF0;3@?8UmvsFd71*Auv=!000WV2HOAt
literal 0 HcmV?d00001
diff --git a/dlls/mfplay/tests/test-und.mp4 b/dlls/mfplay/tests/test-und.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..302afb13c726c969f8a6c6ef8d60e511a0abe4e3 GIT binary patch literal 860 zcmZuwJx{|h5WOTo84&6~1wugt2_yzUEuUfw8v`4H0kI@?S}Niuirq>uppN_%egb0U zcd#MxFUmV7p=rgb?tAy{d_LPT5xE`xl=f62iELuTIF#vei-;CGSrh@cqzLqvO;^FN zeR6(qbav2cHpy=K%hsA#BXU+{k_?d;%i)6nR?PW<Bgi8DO>D}6JmdS5%>S5;W-oLW zJR*3nAI+LhC9$kl?Zq-;87Y%ze81Fl+>V4+pl%c^U4(cB>dqBCTklfz0%)ETvwPq4 ziE7@>r<u9`AmYq0{HbKnFFE5id~q4{MI3RCC1kJP0jVoFRdieAx+}7X<80i}(jbey zoLjp}hcWnz(yBZF>V;xluOubF-<=gj<E3MoRF8$r+7CJ4l-YuKEp@=wk$3&O@1R zyxxA(0+@xXpp{T(#qs1h&^)Eh(ShQ_GArW93_2drMR#o$VB8IlBG1I0IZznu+yWO^ zQM#QJI?vg|SXbRtu#+V*@7&ZGkHK6Oc2i&(sjd<Zgbon8laWDA+p1m?E;b9&lq>$( celPzLcHVTtZEWCWa1k!d@1ukFacJJhFU>7(*8l(j
literal 0 HcmV?d00001
diff --git a/dlls/mfplay/tests/test-und.wma b/dlls/mfplay/tests/test-und.wma new file mode 100644 index 0000000000000000000000000000000000000000..54243cee77f47153e28360c435798562e1787451 GIT binary patch literal 3867 zcmXp|+f>?@c3yDVO@>trN#}AhnHa!;6-Y8NExfb3$9?5_!M-O92Y3{MQ!^lv7^EaW zRH(u3>b;F~85yD61HEq`%no6&hzt)z0%S=8kPX5IVi_2=GVhPq1KIN!V$Vvbe!)wZ zSMLIeKZA&~F;oL(R=PRYJb3@ddy}T6-95*cR%NJaMh1>jhCGH8AoujrXCg(%jGUWi zuFMQ#i;jwbDnX|}mP6eJb_k3OQU`J*%p)*;4ofavVt;%|aQX*^1t;TH1c2-U0Y(N5 zhHwU727LxspbL^2@`0|%1hUc@f*Dd7N`Mf;D+a5UVenx{WGG`uV=!f~WYA+UVlW4i zh71Nk$iOg>{m%C7NS-bN>tSGUn3ws(H~PHbioXmE@i8vi0cQ{I?@v50*u4oDbz2@O zK$S7b02v%W3~_rRFfttE85nkO1B04DfPo9F3?j#P04M}xIs{#8lQp~`xOfTBSIi#Y zV7_uh69?&HVh{)V6y%!}pfAfAiWwAu{!Rt^HxbBoWGDr*^MULz1`DulObm&PW@rg* z6ErD+6(A8HJ3xSuv5A2}F!lo2y$%dbkTk_{04N1YMF$uf{yQ)*AMhKpfDxS2z#fVj k79Ik{+9((efzc2c4S~@R7!85Z5Eu=C(GVC7fuR}#0K}&T=l}o!
literal 0 HcmV?d00001
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=127151
Your paranoid android.
=== w8 (32 bit report) ===
mfplay: mfplay.c:489: Test failed: Unexpected hr 0xc00d36c4.
=== w8adm (32 bit report) ===
mfplay: mfplay.c:489: Test failed: Unexpected hr 0xc00d36c4.
=== w864 (32 bit report) ===
mfplay: mfplay.c:489: Test failed: Unexpected hr 0xc00d36c4.
=== w1064v1507 (32 bit report) ===
mfplay: mfplay.c:489: Test failed: Unexpected hr 0xc00d36c4. 0c58:mfplay: unhandled exception c0000005 at 004015C8
=== w864 (64 bit report) ===
mfplay: mfplay.c:489: Test failed: Unexpected hr 0xc00d36c4.
=== w1064v1507 (64 bit report) ===
mfplay: mfplay.c:489: Test failed: Unexpected hr 0xc00d36c4. 0b64:mfplay: unhandled exception c0000005 at 0000000000401587