From: Elizabeth Figura zfigura@codeweavers.com
--- dlls/mfplat/tests/mfplat.c | 265 ++++++++++++++++++++++++++++++- dlls/mfplat/tests/resource.rc | 28 ++++ dlls/mfplat/tests/test-aac.mp4 | Bin 0 -> 2102 bytes dlls/mfplat/tests/test-h264.mp4 | Bin 0 -> 21173 bytes dlls/mfplat/tests/test-i420.avi | Bin 0 -> 6680 bytes dlls/mfplat/tests/test-mp3.mp4 | Bin 0 -> 2511 bytes dlls/mfplat/tests/test-pcm16.avi | Bin 0 -> 11026 bytes dlls/mfplat/tests/test-wma2.wmv | Bin 0 -> 5224 bytes dlls/mfplat/tests/test-wmv1.wmv | Bin 0 -> 38939 bytes 9 files changed, 291 insertions(+), 2 deletions(-) create mode 100644 dlls/mfplat/tests/test-aac.mp4 create mode 100644 dlls/mfplat/tests/test-h264.mp4 create mode 100644 dlls/mfplat/tests/test-i420.avi create mode 100644 dlls/mfplat/tests/test-mp3.mp4 create mode 100644 dlls/mfplat/tests/test-pcm16.avi create mode 100644 dlls/mfplat/tests/test-wma2.wmv create mode 100644 dlls/mfplat/tests/test-wmv1.wmv
diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c index 40853f6fc00..3b0a33aa479 100644 --- a/dlls/mfplat/tests/mfplat.c +++ b/dlls/mfplat/tests/mfplat.c @@ -41,6 +41,7 @@ #include "uuids.h" #include "evr.h" #include "mfmediaengine.h" +#include "codecapi.h"
#include "wine/test.h"
@@ -154,6 +155,70 @@ static void check_service_interface_(unsigned int line, void *iface_ptr, REFGUID IUnknown_Release(unk); }
+struct attribute_desc +{ + const GUID *key; + const char *name; + PROPVARIANT value; + BOOL ratio; + BOOL required; + BOOL todo; + BOOL todo_value; +}; + +#define ATTR_GUID(k, g, ...) {.key = &k, .name = #k, {.vt = VT_CLSID, .puuid = (GUID *)&g}, __VA_ARGS__ } +#define ATTR_UINT32(k, v, ...) {.key = &k, .name = #k, {.vt = VT_UI4, .ulVal = v}, __VA_ARGS__ } +#define ATTR_BLOB(k, p, n, ...) {.key = &k, .name = #k, {.vt = VT_VECTOR | VT_UI1, .caub = {.pElems = (void *)p, .cElems = n}}, __VA_ARGS__ } +#define ATTR_RATIO(k, n, d, ...) {.key = &k, .name = #k, {.vt = VT_UI8, .uhVal = {.HighPart = n, .LowPart = d}}, .ratio = TRUE, __VA_ARGS__ } +#define ATTR_UINT64(k, v, ...) {.key = &k, .name = #k, {.vt = VT_UI8, .uhVal = {.QuadPart = v}}, __VA_ARGS__ } + +#define check_media_type(a, b, c) check_attributes_(__FILE__, __LINE__, (IMFAttributes *)a, b, c) + +static void check_attributes_(const char *file, int line, IMFAttributes *attributes, + const struct attribute_desc *desc, ULONG limit) +{ + char buffer[1024], *buf = buffer; + PROPVARIANT value; + int i, j, ret; + HRESULT hr; + + for (i = 0; i < limit && desc[i].key; ++i) + { + hr = IMFAttributes_GetItem(attributes, desc[i].key, &value); + todo_wine_if(desc[i].todo) + ok_(file, line)(hr == S_OK, "%s missing, hr %#lx\n", debugstr_a(desc[i].name), hr); + if (hr != S_OK) continue; + + switch (value.vt) + { + default: sprintf(buffer, "??"); break; + case VT_CLSID: sprintf(buffer, "%s", debugstr_guid(value.puuid)); break; + case VT_UI4: sprintf(buffer, "%lu", value.ulVal); break; + case VT_UI8: + if (desc[i].ratio) + sprintf(buffer, "%lu:%lu", value.uhVal.HighPart, value.uhVal.LowPart); + else + sprintf(buffer, "%I64u", value.uhVal.QuadPart); + break; + case VT_VECTOR | VT_UI1: + buf += sprintf(buf, "size %lu, data {", value.caub.cElems); + for (j = 0; j < 128 && j < value.caub.cElems; ++j) + buf += sprintf(buf, "0x%02x,", value.caub.pElems[j]); + if (value.caub.cElems > 128) + buf += sprintf(buf, "...}"); + else + buf += sprintf(buf - (j ? 1 : 0), "}"); + break; + } + + ret = PropVariantCompareEx(&value, &desc[i].value, 0, 0); + todo_wine_if(desc[i].todo_value) + ok_(file, line)(ret == 0, "%s mismatch, type %u, value %s\n", + debugstr_a(desc[i].name), value.vt, buffer); + PropVariantClear(&value); + } +} + struct d3d9_surface_readback { IDirect3DSurface9 *surface, *readback_surface; @@ -939,6 +1004,197 @@ static HRESULT WINAPI bytestream_wrapper_Close(IMFByteStream *iface) return bytestream_vtbl_orig->Close(iface); }
+static void test_compressed_media_types(IMFSourceResolver *resolver) +{ + static const BYTE aac_data[] = + { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x12, 0x08, 0x56, 0xe5, 0x00, + }; + static const BYTE wma2_data[] = {0, 0, 0, 0, 1, 0, 0, 0, 0, 0}; + + static const struct + { + const WCHAR *filename; + const WCHAR *mime; + struct attribute_desc type[20]; + } + tests[] = + { + { + L"test-h264.mp4", + L"video/mp4", + { + ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Video), + ATTR_GUID(MF_MT_SUBTYPE, MFVideoFormat_H264, .todo_value = TRUE), + ATTR_GUID(MF_MT_AM_FORMAT_TYPE, FORMAT_MPEG2Video, .todo = TRUE), + ATTR_RATIO(MF_MT_FRAME_SIZE, 320, 240), + ATTR_RATIO(MF_MT_FRAME_RATE, 30, 1), + ATTR_RATIO(MF_MT_PIXEL_ASPECT_RATIO, 1, 1, .todo = TRUE), + ATTR_UINT32(MF_MT_MPEG2_PROFILE, eAVEncH264VProfile_High, .todo = TRUE), + ATTR_UINT32(MF_MT_MPEG2_LEVEL, eAVEncH264VLevel2, .todo = TRUE), + }, + }, + { + L"test-aac.mp4", + L"video/mp4", + { + ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio), + ATTR_GUID(MF_MT_SUBTYPE, MFAudioFormat_AAC, .todo_value = TRUE), + ATTR_GUID(MF_MT_AM_FORMAT_TYPE, FORMAT_WaveFormatEx, .todo = TRUE), + ATTR_UINT32(MF_MT_AUDIO_NUM_CHANNELS, 1), + ATTR_UINT32(MF_MT_AUDIO_BITS_PER_SAMPLE, 16, .todo_value = TRUE), + ATTR_UINT32(MF_MT_AUDIO_SAMPLES_PER_SECOND, 44100), + ATTR_UINT32(MF_MT_AUDIO_AVG_BYTES_PER_SECOND, 9180, .todo_value = TRUE), + ATTR_UINT32(MF_MT_AUDIO_PREFER_WAVEFORMATEX, 1, .todo = TRUE), + ATTR_UINT32(MF_MT_AVG_BITRATE, 73440, .todo = TRUE), + ATTR_UINT32(MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION, 0, .todo = TRUE), + ATTR_UINT32(MF_MT_AAC_PAYLOAD_TYPE, 0, .todo = TRUE), + ATTR_UINT32(MF_MT_FIXED_SIZE_SAMPLES, 1, .todo = TRUE), + ATTR_UINT32(MF_MT_ALL_SAMPLES_INDEPENDENT, 1), + ATTR_BLOB(MF_MT_USER_DATA, aac_data, sizeof(aac_data), .todo = TRUE), + }, + }, + { + L"test-wmv1.wmv", + L"video/x-ms-wmv", + { + ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Video), + ATTR_GUID(MF_MT_SUBTYPE, MFVideoFormat_WMV1, .todo_value = TRUE), + ATTR_RATIO(MF_MT_FRAME_SIZE, 320, 240), + ATTR_RATIO(MF_MT_PIXEL_ASPECT_RATIO, 1, 1, .todo = TRUE), + }, + }, + { + L"test-wma2.wmv", + L"video/x-ms-wmv", + { + ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio), + ATTR_GUID(MF_MT_SUBTYPE, MFAudioFormat_WMAudioV8, .todo_value = TRUE), + ATTR_UINT32(MF_MT_AUDIO_NUM_CHANNELS, 1), + ATTR_UINT32(MF_MT_AUDIO_SAMPLES_PER_SECOND, 44100), + ATTR_UINT32(MF_MT_AUDIO_AVG_BYTES_PER_SECOND, 16000, .todo_value = TRUE), + ATTR_UINT32(MF_MT_AUDIO_PREFER_WAVEFORMATEX, 1, .todo = TRUE), + ATTR_UINT32(MF_MT_AUDIO_BLOCK_ALIGNMENT, 743, .todo_value = TRUE), + ATTR_BLOB(MF_MT_USER_DATA, wma2_data, sizeof(wma2_data), .todo = TRUE), + }, + }, + { + L"test-mp3.mp4", + L"video/mp4", + { + ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio), + ATTR_GUID(MF_MT_SUBTYPE, MFAudioFormat_MP3, .todo_value = TRUE), + ATTR_GUID(MF_MT_AM_FORMAT_TYPE, FORMAT_WaveFormatEx, .todo = TRUE), + ATTR_UINT32(MF_MT_AUDIO_NUM_CHANNELS, 1), + ATTR_UINT32(MF_MT_AUDIO_SAMPLES_PER_SECOND, 44100), + ATTR_UINT32(MF_MT_AUDIO_PREFER_WAVEFORMATEX, 1, .todo = TRUE), + ATTR_UINT32(MF_MT_FIXED_SIZE_SAMPLES, 1, .todo = TRUE), + ATTR_UINT32(MF_MT_ALL_SAMPLES_INDEPENDENT, 1), + }, + }, + { + L"test-i420.avi", + L"video/avi", + { + ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Video), + ATTR_GUID(MF_MT_SUBTYPE, MFVideoFormat_I420), + ATTR_RATIO(MF_MT_FRAME_SIZE, 32, 24), + ATTR_RATIO(MF_MT_FRAME_RATE, 30, 1), + ATTR_RATIO(MF_MT_PIXEL_ASPECT_RATIO, 1, 1, .todo = TRUE), + ATTR_UINT32(MF_MT_ALL_SAMPLES_INDEPENDENT, 1), + ATTR_UINT32(MF_MT_DEFAULT_STRIDE, 32), + ATTR_UINT32(MF_MT_FIXED_SIZE_SAMPLES, 1, .todo = TRUE), + }, + }, + { + L"test-pcm16.avi", + L"video/avi", + { + ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio), + ATTR_GUID(MF_MT_SUBTYPE, MFAudioFormat_PCM), + ATTR_UINT32(MF_MT_AUDIO_AVG_BYTES_PER_SECOND, 44100 * 2), + ATTR_UINT32(MF_MT_AUDIO_BITS_PER_SAMPLE, 16), + ATTR_UINT32(MF_MT_AUDIO_BLOCK_ALIGNMENT, 2), + ATTR_UINT32(MF_MT_AUDIO_NUM_CHANNELS, 1), + ATTR_UINT32(MF_MT_AUDIO_SAMPLES_PER_SECOND, 44100), + ATTR_UINT32(MF_MT_AUDIO_PREFER_WAVEFORMATEX, 1, .todo = TRUE), + ATTR_UINT32(MF_MT_ALL_SAMPLES_INDEPENDENT, 1), + }, + }, + }; + + for (unsigned int i = 0; i < ARRAY_SIZE(tests); ++i) + { + IMFPresentationDescriptor *descriptor; + IMFMediaTypeHandler *handler; + IMFAttributes *attributes; + IMFMediaType *media_type; + IMFStreamDescriptor *sd; + MF_OBJECT_TYPE obj_type; + IMFMediaSource *source; + IMFByteStream *stream; + BOOL ret, selected; + WCHAR *filename; + DWORD count; + HRESULT hr; + + winetest_push_context("%s", debugstr_w(tests[i].filename)); + + filename = load_resource(tests[i].filename); + + hr = MFCreateFile(MF_ACCESSMODE_READ, MF_OPENMODE_FAIL_IF_NOT_EXIST, MF_FILEFLAGS_NONE, filename, &stream); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + hr = IMFByteStream_QueryInterface(stream, &IID_IMFAttributes, (void **)&attributes); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + hr = IMFAttributes_SetString(attributes, &MF_BYTESTREAM_CONTENT_TYPE, tests[i].mime); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + IMFAttributes_Release(attributes); + + hr = IMFSourceResolver_CreateObjectFromByteStream(resolver, stream, NULL, + MF_RESOLUTION_MEDIASOURCE, NULL, &obj_type, (IUnknown **)&source); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(obj_type == MF_OBJECT_MEDIASOURCE, "Got type %#x.\n", obj_type); + + hr = IMFMediaSource_CreatePresentationDescriptor(source, &descriptor); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + hr = IMFPresentationDescriptor_GetStreamDescriptorCount(descriptor, &count); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(count == 1, "Got count %lu.\n", count); + + hr = IMFPresentationDescriptor_GetStreamDescriptorByIndex(descriptor, 0, &selected, &sd); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(selected == TRUE, "Got selected %d.\n", selected); + + hr = IMFStreamDescriptor_GetMediaTypeHandler(sd, &handler); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + hr = IMFMediaTypeHandler_GetCurrentMediaType(handler, &media_type); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + check_media_type(media_type, tests[i].type, -1); + + IMFMediaType_Release(media_type); + + hr = IMFMediaTypeHandler_GetMediaTypeCount(handler, &count); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + todo_wine ok(count == 1, "Got type count %lu.\n", count); + + IMFMediaTypeHandler_Release(handler); + IMFStreamDescriptor_Release(sd); + + IMFPresentationDescriptor_Release(descriptor); + IMFMediaSource_Release(source); + IMFByteStream_Release(stream); + + ret = DeleteFileW(filename); + ok(ret, "Failed to delete %s, error %lu.\n", debugstr_w(filename), GetLastError()); + + winetest_pop_context(); + } +} + static void test_source_resolver(void) { struct test_callback *callback, *callback2; @@ -967,6 +1223,7 @@ static void test_source_resolver(void) float rate; UINT32 rotation; ULONG refcount; + BOOL ret;
if (!pMFCreateSourceResolver) { @@ -1341,6 +1598,12 @@ static void test_source_resolver(void)
IMFSchemeHandler_Release(scheme_handler);
+trace("%s\n", debugstr_w(filename)); + ret = DeleteFileW(filename); + ok(ret, "Failed to delete %s, error %lu.\n", debugstr_w(filename), GetLastError()); + + test_compressed_media_types(resolver); + if (do_uninit) CoUninitialize();
@@ -1351,8 +1614,6 @@ static void test_source_resolver(void)
IMFAsyncCallback_Release(&callback->IMFAsyncCallback_iface); IMFAsyncCallback_Release(&callback2->IMFAsyncCallback_iface); - - DeleteFileW(filename); }
static void init_functions(void) diff --git a/dlls/mfplat/tests/resource.rc b/dlls/mfplat/tests/resource.rc index e9bf920c319..2914d8e1723 100644 --- a/dlls/mfplat/tests/resource.rc +++ b/dlls/mfplat/tests/resource.rc @@ -22,3 +22,31 @@
/* @makedep: test.mp4 */ test.mp4 RCDATA test.mp4 + +/* gst-launch-1.0 videotestsrc num-buffers=5 ! video/x-raw,format=I420 ! videoconvert ! x264enc ! mp4mux ! filesink location=test-h264.mp4 */ +/* @makedep: test-h264.mp4 */ +test-h264.mp4 RCDATA test-h264.mp4 + +/* gst-launch-1.0 audiotestsrc num-buffers=5 ! audioconvert ! avenc_aac ! mp4mux ! filesink location=test-aac.mp4 */ +/* @makedep: test-aac.mp4 */ +test-aac.mp4 RCDATA test-aac.mp4 + +/* gst-launch-1.0 videotestsrc num-buffers=5 ! videoconvert ! avenc_wmv1 ! asfmux ! filesink location=test-wmv1.wmv */ +/* @makedep: test-wmv1.wmv */ +test-wmv1.wmv RCDATA test-wmv1.wmv + +/* gst-launch-1.0 audiotestsrc num-buffers=5 ! audioconvert ! avenc_wmav2 ! asfmux ! filesink location=test-wma2.wmv */ +/* @makedep: test-wma2.wmv */ +test-wma2.wmv RCDATA test-wma2.wmv + +/* gst-launch-1.0 audiotestsrc num-buffers=5 ! audioconvert ! lamemp3enc ! mp4mux ! filesink location=test-mp3.mp4 */ +/* @makedep: test-mp3.mp4 */ +test-mp3.mp4 RCDATA test-mp3.mp4 + +/* gst-launch-1.0 videotestsrc num-buffers=5 ! video/x-raw,format=I420,width=32,height=24 ! avimux ! filesink location=test-i420.avi */ +/* @makedep: test-i420.avi */ +test-i420.avi RCDATA test-i420.avi + +/* gst-launch-1.0 audiotestsrc num-buffers=5 ! audio/x-raw,format=S16LE ! avimux ! filesink location=test-pcm16.avi */ +/* @makedep: test-pcm16.avi */ +test-pcm16.avi RCDATA test-pcm16.avi diff --git a/dlls/mfplat/tests/test-aac.mp4 b/dlls/mfplat/tests/test-aac.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..d04b638514d6448f9578599e98c04658b8ef836d GIT binary patch literal 2102 zcmcIlX;4#F6uuz{*kZ*9G*Q$b!9hltKtx3l1QAIff{~@}#Jq<<5)$$rp(rjCT(J&9 zu|;qxi&g=51wn0WQHmnSCW1;7YaJJ2lvSyu_XZT}IGy%Kzjx04&OPVebM7+pE&zZT zK_<wh^6Ab10x?vlC_*NMihL#!3LFPugs~J8l5GYcK&TYWU^{Z09G%$Cz#yP-g`IZA z(vlL7`bSOITief?=k`uoWX7~z>B_LE3QF@0eigXGci#3dTp8cgwAfd!40J2b)v|7+ zpVXdTd9m2ze0Gv=&54nA6`|?#VlAoG&No~d{m*!|)#Ry?$z4}R)%(wy>E~In&ns=K za!cE!@Xnc*8i!x=N)|@HXp2@~kmkqtT53D8%g#AoYCfOp)86vf@-|Vl>&o`(vg5p` z7sAF?mfS1M@0Rvv%H4Vz%B61Sh?5f6TcRD+v0p87i67+_voCjd?y;&M{pVii*SPnx z)7k{w;M$1v&|rK~rf&#C5XFu57vS9Qb{@iQ?0Evg$$}}tS;6u}nUDm6&2|D`!*D2@ z?dE?LRA6eN+G%nb8Y+tK-qw14dv!39r;6sL*9}DK!?2BS;(9kQo1U%G1=gzDpNqpP zbq$^U-3~6rtEe`O6|vj%MjIKq`(mS+FD#EFCKRyejNvTxBDS-5OT1c}!ncl-@)tX> zwtYWa9H6^;vpMF^d=`D2#><+iQq^c^G&!Blxc7^<w^vfqzPl{eeKwoTDKGW&<Ep~L zakui6l<Mw|uCgYJ2?w-=7v3_fcvFLSpDz%**&j+>EDBkaTR)X=mwxo8GrzHCY%v-* zMKgt<(RiKNnO@e`%;ubNA%-a_$+QcmF+pi*Y2udB=||;hY3T<mPRpZkXyxR*I-wRH zkc|!7nyH>z$Kg+J;5$_v8o5`LfjD~;Wpa;0%8fCfdk1c4dibcn+a<nV-V|N$zn;%u zp3bFlsqVkmU7fXScX!T$Z&y1<dfxnFpu{CH)VzHSz1DS0%Z{RBKAPl2`nvwKzCNnD zZOlup@P%gH!~3H*$~`<xjVo1*x2h^F=<TIW3Fq`DWw25I2h)N3Shexbr3?<`g~ljA zwGKrlBB#-M0Go|+=Lo9$u4&dL{lqzF4$SBrK~clT3UqOb8XJ8NZhKjy8)&|xllAl+ zkI2iq(#K^TF5<GDGVAWdy&ZQh+lEvG9`m>PS~u^(1Gh^*uB%H>-_mwZu<u-Z^wF*C z5Qn3C_U_5*e%+PJW99N}1(`fPBe(#P_dg=$Ub(WPd4Iy=Pl*Qfaf->5g~f{>>z;J# zbWa}VXC(61=coH6<fpTe{hoD<Ei79TW~bydTg`OO&fqS<mcHR`7LQLYSUX<v?3k!L z!gY@*ODMm++(mhD#qlt4^%5uC#&+<V+<HCYRLkKtN&g<D6ptCxx_UP3s~tNq>#bsy zh5PKgWR{x`b88EDzJK-M7}@;(v-JTCKUpDt)PUxGS&3(Dl$P!hd-{3S#Zzjp1(Ljj zd1kT3P{MB{J0TttrRi-Bbj=v1+G($b#dh=mid_IujioY~68;t?Qe`9t8MJ2<UqcFj zu?g(<0}4PgjK6iD`=kEc;gO%R3;-|)B^5$33@#_d`kKbWHQ#6J|8TOt#7A}Bj~p5} z_rnPQuyBkdpvwxE5adt@Wf;smm{2UmqJ+@Llwu$6y~qauItZ!I&vb~yB#NONfRM$- zyt5H6hJDOW7=uZ0G=^d+jf#nYh8ZCpOo|3Uu&_bD6{f&Z904uEG)^I54%w{)xmp74 zl>|xXFJs8R5WZn(p$Ph=4_Ri2(NZDoaRNgd22?9J#?XAO1?nJBCO#Z7f@Tu>2pCb| z@dG+R>W@YrgN+dYhRC*pRYk~vKvj^!n4YJ>*ji}61N2iIp?(P+XQAdm-3|3NRC9t9 z$si-39BinfIE)lRUM9u$3{7DD?pURf5(T`9_eYF^2#!&McQ@q-hNG=bgfBKqf|3GZ b92O-bae`#V3zhIe2Xlr>xcrwACaA<;yM6D0
literal 0 HcmV?d00001
diff --git a/dlls/mfplat/tests/test-h264.mp4 b/dlls/mfplat/tests/test-h264.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..cba040e7508b93b625343c962de4202178955fff GIT binary patch literal 21173 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
literal 0 HcmV?d00001
diff --git a/dlls/mfplat/tests/test-i420.avi b/dlls/mfplat/tests/test-i420.avi new file mode 100644 index 0000000000000000000000000000000000000000..39e0f9228c41d76426b3a7709ae48f52421e38f3 GIT binary patch literal 6680 zcmWIYbaNAsVqkC#^HlKh3=a9h#K4e|Qk0WemYHF}z`$VI1SGZqF%Sp<F)NtGz`zKl z6@at^l#NV*%$fo;tGJ{n2Z+IDm1U+Bdzu&-AgcqJBL@`#nccvGEDK=+^`~h7nINnH z#31_^8F(1LW-$XfXuvDf&szd$H_RvlgOnsRC8OLC90H)U2};ZPDY-d7lmSX7ptJ`P zUn9oAkegqY2}(1dwD=kbE`h)*AeaaOSwIj70-7K&DnGo#2NcHwAOMPXFawkjzzk5- zza}J)Pzh!MlO2#&P*4y!E1bSadnv?hut})$v8S&tQP)aRz@@*SBKM`-Yt?1A<dZao zm#o$lGQ}nDQ(o-!;6l<;T=HwhV-DYOl-t+PARrLEEYHmB)TyYbr5`@fn-8*a>8Yg+ z4a=4_fWWb1iyIn%;RWUp!Eb1oG$~L(Qc3CFy$>JO=jG9x53+Inz4f4A13Ot%)Enf9 zV=(s<;*XX?qvb59i~#{~UZrw5<TqjU{x)Oz*SN|7(KRU+7hIm%;gWwD&~LO?qRI=G z{3@ZuiAk$&=HZfGa?HFwFKgKaT=Lgi0;dUIJ7P!gatGbM(Q;_CJp{^wpsIQ#w+Cre z4kef+?Y;S^;xVprpn2x4KEo?1^0?%WOYd7%rj(tHOWrASL)V!SaUWdrGaepXCHeI5 zIb8CY8=odU*MD#Xy<DI-f3zGLEr&+SAy5d=rakmRwdF;8%ZAms$^i%Kc~jM0<f?GV zKPf*^dnxZJ&T^{PxTbHyKKY%v^hY0zy?;zu^&~EN)s4b&HIvit)4SY3w{Nr@8ZC!F zd2qBnM4NJGc7NdxlO@>;ag_rOJ4$vhwRRA~C9f^wY&Kc##VuU&O6Lz{Zn#jj5tsZ4 ztx4)rB&To2B|j<kXzz<<7iOcE3-soX^l~UOrNS@(ICc#hClUhE62SQo(6}{>zknT; Tufc=L-vAtuL{@Jh3gH6)L^cPe
literal 0 HcmV?d00001
diff --git a/dlls/mfplat/tests/test-mp3.mp4 b/dlls/mfplat/tests/test-mp3.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..c56b88ab7bc7347a7910a2b0f34820912c62cb27 GIT binary patch literal 2511 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
literal 0 HcmV?d00001
diff --git a/dlls/mfplat/tests/test-pcm16.avi b/dlls/mfplat/tests/test-pcm16.avi new file mode 100644 index 0000000000000000000000000000000000000000..afd088a281380b96051d45c0bdd7f52f73bc5942 GIT binary patch literal 11026 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
literal 0 HcmV?d00001
diff --git a/dlls/mfplat/tests/test-wma2.wmv b/dlls/mfplat/tests/test-wma2.wmv new file mode 100644 index 0000000000000000000000000000000000000000..7f7143001d87cce47dc803e4cfe1ebf838f918c1 GIT binary patch literal 5224 zcmXp|+f>?@c3yDVO@>trN#}CP7#YBT8AviRExfb3$9?5_!M-O92Y3{MQ!^lv3^qqI zyWP?b2-f^zxfZgU>3W6;L?TH4EpOQVTZ~Xc7}gpIfDB^LbrJ<D=n#geV**kKgdmvV z3nRls_B-3RgY0<*u_p_njKN`E<`3WK^MWh>GBm`;xM(wk|5gY^=0nxVKxv4*i9q{Z z)-W(M*fB6X2U^7imW9Y|W!@jJ2eRog#HKc=PQgo;SMNe{0UJXEQ0DZ~XCg(%jGUWi zuFMQ#i;e<`VFf@xzyUHFDu^Tt7BNE$^-sXC00H!Hh3R8t42=ECahemNs<{zNbAbE? z3eo3GH~%{@Fz_tbIAt_v`KMF%_UAwS*>8WIu`Yt2@#h-WXMgS{hnW^!=U%$`_8|+^ zZI(ye{og6RW}d5T{Gd)~zis7_Z57-q3^nYx80?tuGRQNAGw^Y*c@%y8Q~e`5&UXK6 z$A7q9y7@NZUp`}9{Jh{Pb^FVHmy65G3thT(>+<vW_wDMvUuiDu(p=UOG(}O<NeDu) zOktV8$$*KDfWYAcexqPC1V{{lMsR)rr~7T-bbkkw?)jw>g68SzTl{Z0*uZ?CI)U-o z2B{2Ar8p7|A5}gY0)sRJ8bS3X132A3L8N;=J!GI=y6bM<_UN_u*Ix^qk}5xq=|Ei8 z4&&Rl8$2FKZ8`q==7%^YZw7uw_XhTcX~1k!>%jcyALsr@*318VUnleZbERMKlz(sk z)YN2WXXoGFU-xfT=CWCtOEtZMrhth_o+=oqVvq*csI!Ji2!K-kC>RZa(GVC7fzc2c R4S~@R7!85Z5Ezmn006YtL-qgw
literal 0 HcmV?d00001
diff --git a/dlls/mfplat/tests/test-wmv1.wmv b/dlls/mfplat/tests/test-wmv1.wmv new file mode 100644 index 0000000000000000000000000000000000000000..b0c2408d760c16577e43c8d4fd7a2b742643e8fe GIT binary patch literal 38939 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 CCaOdL
literal 0 HcmV?d00001
From: Elizabeth Figura zfigura@codeweavers.com
--- dlls/winegstreamer/wg_format.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/dlls/winegstreamer/wg_format.c b/dlls/winegstreamer/wg_format.c index ec239142339..e9b90002689 100644 --- a/dlls/winegstreamer/wg_format.c +++ b/dlls/winegstreamer/wg_format.c @@ -430,7 +430,9 @@ void wg_format_from_caps(struct wg_format *format, const GstCaps *caps) { wg_format_from_caps_video_wmv(format, caps); } - else if (!strcmp(name, "video/mpeg") && gst_structure_get_boolean(structure, "parsed", &parsed) && parsed) + else if (!strcmp(name, "video/mpeg") + && gst_structure_get_int(structure, "mpegversion", &version) && (version == 1 || version == 2) + && gst_structure_get_boolean(structure, "parsed", &parsed) && parsed) { wg_format_from_caps_video_mpeg1(format, caps); }
From: Elizabeth Figura zfigura@codeweavers.com
--- dlls/winegstreamer/wg_format.c | 61 ++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+)
diff --git a/dlls/winegstreamer/wg_format.c b/dlls/winegstreamer/wg_format.c index e9b90002689..af4b3340587 100644 --- a/dlls/winegstreamer/wg_format.c +++ b/dlls/winegstreamer/wg_format.c @@ -203,6 +203,60 @@ static void wg_format_from_caps_audio_mpeg1(struct wg_format *format, const GstC format->u.audio.rate = rate; }
+static void wg_format_from_caps_audio_mpeg4(struct wg_format *format, const GstCaps *caps) +{ + const GstStructure *structure = gst_caps_get_structure(caps, 0); + const GValue *codec_data_value; + const gchar *stream_format; + GstBuffer *codec_data; + gint channels, rate; + GstMapInfo map; + + if (!gst_structure_get_int(structure, "channels", &channels)) + { + GST_WARNING("Missing "channels" value in %" GST_PTR_FORMAT ".", caps); + return; + } + if (!gst_structure_get_int(structure, "rate", &rate)) + { + GST_WARNING("Missing "rate" value in %" GST_PTR_FORMAT ".", caps); + return; + } + if (!(codec_data_value = gst_structure_get_value(structure, "codec_data")) + || !(codec_data = gst_value_get_buffer(codec_data_value))) + { + GST_WARNING("Missing "codec_data" value in %" GST_PTR_FORMAT ".", caps); + return; + } + if (!(stream_format = gst_structure_get_string(structure, "stream-format"))) + { + GST_WARNING("Missing "stream-format" value in %" GST_PTR_FORMAT ".", caps); + return; + } + + format->major_type = WG_MAJOR_TYPE_AUDIO_MPEG4; + format->u.audio.channels = channels; + format->u.audio.rate = rate; + if (!strcmp(stream_format, "raw")) + format->u.audio.payload_type = 0; + else if (!strcmp(stream_format, "adts")) + format->u.audio.payload_type = 1; + else if (!strcmp(stream_format, "adif")) + format->u.audio.payload_type = 2; + else if (!strcmp(stream_format, "loas")) + format->u.audio.payload_type = 3; + + gst_buffer_map(codec_data, &map, GST_MAP_READ); + if (map.size <= sizeof(format->u.audio.codec_data)) + { + format->u.audio.codec_data_len = map.size; + memcpy(format->u.audio.codec_data, map.data, map.size); + } + else + GST_WARNING("Too big codec_data value (%u) in %" GST_PTR_FORMAT ".", (UINT)map.size, caps); + gst_buffer_unmap(codec_data, &map); +} + static void wg_format_from_caps_audio_wma(struct wg_format *format, const GstCaps *caps) { const GstStructure *structure = gst_caps_get_structure(caps, 0); @@ -397,6 +451,7 @@ void wg_format_from_caps(struct wg_format *format, const GstCaps *caps) const GstStructure *structure = gst_caps_get_structure(caps, 0); const char *name = gst_structure_get_name(structure); gboolean parsed; + gint version;
memset(format, 0, sizeof(*format));
@@ -418,6 +473,12 @@ void wg_format_from_caps(struct wg_format *format, const GstCaps *caps) { wg_format_from_caps_audio_mpeg1(format, caps); } + else if (!strcmp(name, "audio/mpeg") + && gst_structure_get_int(structure, "mpegversion", &version) && version == 4 + && gst_structure_get_boolean(structure, "framed", &parsed) && parsed) + { + wg_format_from_caps_audio_mpeg4(format, caps); + } else if (!strcmp(name, "audio/x-wma")) { wg_format_from_caps_audio_wma(format, caps);
From: Elizabeth Figura zfigura@codeweavers.com
--- dlls/winegstreamer/wg_format.c | 121 +++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+)
diff --git a/dlls/winegstreamer/wg_format.c b/dlls/winegstreamer/wg_format.c index af4b3340587..f6d82e9c09c 100644 --- a/dlls/winegstreamer/wg_format.c +++ b/dlls/winegstreamer/wg_format.c @@ -446,6 +446,123 @@ static void wg_format_from_caps_video_mpeg1(struct wg_format *format, const GstC format->u.video.fps_d = fps_d; }
+static const struct +{ + enum eAVEncH264VLevel level; + const char *string; +} +h264_levels[] = +{ + {eAVEncH264VLevel1, "1"}, + {eAVEncH264VLevel1_1, "1.1"}, + {eAVEncH264VLevel1_2, "1.2"}, + {eAVEncH264VLevel1_3, "1.3"}, + {eAVEncH264VLevel2, "2"}, + {eAVEncH264VLevel2_1, "2.1"}, + {eAVEncH264VLevel2_2, "2.2"}, + {eAVEncH264VLevel3, "3"}, + {eAVEncH264VLevel3_1, "3.1"}, + {eAVEncH264VLevel3_2, "3.2"}, + {eAVEncH264VLevel4, "4"}, + {eAVEncH264VLevel4_1, "4.1"}, + {eAVEncH264VLevel4_2, "4.2"}, + {eAVEncH264VLevel5, "5"}, + {eAVEncH264VLevel5_1, "5.1"}, + {eAVEncH264VLevel5_2, "5.2"}, +}; + +static enum eAVEncH264VLevel level_from_string(const char *string) +{ + for (unsigned int i = 0; i < ARRAY_SIZE(h264_levels); ++i) + { + if (!strcmp(h264_levels[i].string, string)) + return h264_levels[i].level; + } + + GST_FIXME("Unrecognized level %s.\n", string); + return eAVEncH264VLevel1; +} + +static void wg_format_from_caps_video_h264(struct wg_format *format, const GstCaps *caps) +{ + const GstStructure *structure = gst_caps_get_structure(caps, 0); + const gchar *stream_format, *profile, *level; + gint width, height, fps_n, fps_d; + const GValue *codec_data_value; + GstBuffer *codec_data; + GstMapInfo map; + + if (!(stream_format = gst_structure_get_string(structure, "stream-format"))) + { + GST_WARNING("Missing "stream-format" value in %" GST_PTR_FORMAT ".", caps); + return; + } + + /* Windows requires byte-stream format. */ + if (strcmp(stream_format, "byte-stream")) + { + GST_DEBUG("Rejecting stream format %s.\n", stream_format); + return; + } + + if (!gst_structure_get_int(structure, "width", &width)) + { + GST_WARNING("Missing "width" value in %" GST_PTR_FORMAT ".", caps); + return; + } + if (!gst_structure_get_int(structure, "height", &height)) + { + GST_WARNING("Missing "height" value in %" GST_PTR_FORMAT ".", caps); + return; + } + if (!gst_structure_get_fraction(structure, "framerate", &fps_n, &fps_d)) + { + fps_n = 0; + fps_d = 1; + } + if (!(profile = gst_structure_get_string(structure, "profile"))) + { + GST_WARNING("Missing "profile" value in %" GST_PTR_FORMAT ".", caps); + return; + } + if (!(level = gst_structure_get_string(structure, "level"))) + { + GST_WARNING("Missing "level" value in %" GST_PTR_FORMAT ".", caps); + return; + } + + format->major_type = WG_MAJOR_TYPE_VIDEO_H264; + format->u.video.width = width; + format->u.video.height = height; + format->u.video.fps_n = fps_n; + format->u.video.fps_d = fps_d; + + if (!strcmp(profile, "high")) + format->u.video.profile = eAVEncH264VProfile_High; + else if (!strcmp(profile, "high-4:4:4")) + format->u.video.profile = eAVEncH264VProfile_444; + else if (!strcmp(profile, "main")) + format->u.video.profile = eAVEncH264VProfile_Main; + else + GST_FIXME("Unhandled profile %s.\n", profile); + + format->u.video.level = level_from_string(level); + + if ((codec_data_value = gst_structure_get_value(structure, "streamheader")) + && (codec_data = gst_value_get_buffer(codec_data_value))) + { + gst_buffer_map(codec_data, &map, GST_MAP_READ); + if (map.size <= sizeof(format->u.video.codec_data)) + { + format->u.video.codec_data_len = map.size; + memcpy(format->u.video.codec_data, map.data, map.size); + } + else + GST_WARNING("Too big codec_data value (%u) in %" GST_PTR_FORMAT ".", (UINT)map.size, caps); + gst_buffer_unmap(codec_data, &map); + } +} + void wg_format_from_caps(struct wg_format *format, const GstCaps *caps) { const GstStructure *structure = gst_caps_get_structure(caps, 0); @@ -497,6 +614,10 @@ void wg_format_from_caps(struct wg_format *format, const GstCaps *caps) { wg_format_from_caps_video_mpeg1(format, caps); } + else if (!strcmp(name, "video/x-h264")) + { + wg_format_from_caps_video_h264(format, caps); + } else { GST_FIXME("Unhandled caps %" GST_PTR_FORMAT ".", caps);
From: Elizabeth Figura zfigura@codeweavers.com
--- dlls/winegstreamer/mfplat.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-)
diff --git a/dlls/winegstreamer/mfplat.c b/dlls/winegstreamer/mfplat.c index 5775e8552db..7602e1e5a45 100644 --- a/dlls/winegstreamer/mfplat.c +++ b/dlls/winegstreamer/mfplat.c @@ -563,6 +563,27 @@ static IMFMediaType *mf_media_type_from_wg_format_video(const struct wg_format * return NULL; }
+static IMFMediaType *mf_media_type_from_wg_format_h264(const struct wg_format *format) +{ + IMFMediaType *type; + + if (FAILED(MFCreateMediaType(&type))) + return NULL; + + IMFMediaType_SetGUID(type, &MF_MT_MAJOR_TYPE, &MFMediaType_Video); + IMFMediaType_SetGUID(type, &MF_MT_SUBTYPE, &MFVideoFormat_H264); + IMFMediaType_SetGUID(type, &MF_MT_AM_FORMAT_TYPE, &FORMAT_MPEG2Video); + IMFMediaType_SetUINT64(type, &MF_MT_FRAME_SIZE, + make_uint64(format->u.video.width, format->u.video.height)); + IMFMediaType_SetUINT64(type, &MF_MT_FRAME_RATE, + make_uint64(format->u.video.fps_n, format->u.video.fps_d)); + IMFMediaType_SetUINT32(type, &MF_MT_VIDEO_ROTATION, MFVideoRotationFormat_0); + IMFMediaType_SetUINT32(type, &MF_MT_MPEG2_PROFILE, format->u.video.profile); + IMFMediaType_SetUINT32(type, &MF_MT_MPEG2_LEVEL, format->u.video.level); + + return type; +} + IMFMediaType *mf_media_type_from_wg_format(const struct wg_format *format) { switch (format->major_type) @@ -571,7 +592,6 @@ IMFMediaType *mf_media_type_from_wg_format(const struct wg_format *format) case WG_MAJOR_TYPE_AUDIO_MPEG4: case WG_MAJOR_TYPE_AUDIO_WMA: case WG_MAJOR_TYPE_VIDEO_CINEPAK: - case WG_MAJOR_TYPE_VIDEO_H264: case WG_MAJOR_TYPE_VIDEO_WMV: case WG_MAJOR_TYPE_VIDEO_INDEO: case WG_MAJOR_TYPE_VIDEO_MPEG1: @@ -585,6 +605,9 @@ IMFMediaType *mf_media_type_from_wg_format(const struct wg_format *format)
case WG_MAJOR_TYPE_VIDEO: return mf_media_type_from_wg_format_video(format); + + case WG_MAJOR_TYPE_VIDEO_H264: + return mf_media_type_from_wg_format_h264(format); }
assert(0);
From: Elizabeth Figura zfigura@codeweavers.com
--- dlls/winegstreamer/mfplat.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-)
diff --git a/dlls/winegstreamer/mfplat.c b/dlls/winegstreamer/mfplat.c index 7602e1e5a45..3d59da09020 100644 --- a/dlls/winegstreamer/mfplat.c +++ b/dlls/winegstreamer/mfplat.c @@ -563,6 +563,29 @@ static IMFMediaType *mf_media_type_from_wg_format_video(const struct wg_format * return NULL; }
+static IMFMediaType *mf_media_type_from_wg_format_audio_mpeg4(const struct wg_format *format) +{ + IMFMediaType *type; + + if (FAILED(MFCreateMediaType(&type))) + return NULL; + + IMFMediaType_SetGUID(type, &MF_MT_MAJOR_TYPE, &MFMediaType_Audio); + IMFMediaType_SetGUID(type, &MF_MT_SUBTYPE, &MFAudioFormat_AAC); + IMFMediaType_SetGUID(type, &MF_MT_AM_FORMAT_TYPE, &FORMAT_WaveFormatEx); + IMFMediaType_SetUINT32(type, &MF_MT_AUDIO_BITS_PER_SAMPLE, 16); + IMFMediaType_SetUINT32(type, &MF_MT_AUDIO_SAMPLES_PER_SECOND, format->u.audio.rate); + IMFMediaType_SetUINT32(type, &MF_MT_AUDIO_NUM_CHANNELS, format->u.audio.channels); + IMFMediaType_SetUINT32(type, &MF_MT_AUDIO_CHANNEL_MASK, format->u.audio.channel_mask); + IMFMediaType_SetUINT32(type, &MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION, 0); /* unknown */ + IMFMediaType_SetUINT32(type, &MF_MT_AUDIO_PREFER_WAVEFORMATEX, TRUE); + IMFMediaType_SetUINT32(type, &MF_MT_FIXED_SIZE_SAMPLES, TRUE); + IMFMediaType_SetUINT32(type, &MF_MT_ALL_SAMPLES_INDEPENDENT, TRUE); + IMFMediaType_SetBlob(type, &MF_MT_USER_DATA, format->u.audio.codec_data, format->u.audio.codec_data_len); + + return type; +} + static IMFMediaType *mf_media_type_from_wg_format_h264(const struct wg_format *format) { IMFMediaType *type; @@ -589,7 +612,6 @@ IMFMediaType *mf_media_type_from_wg_format(const struct wg_format *format) switch (format->major_type) { case WG_MAJOR_TYPE_AUDIO_MPEG1: - case WG_MAJOR_TYPE_AUDIO_MPEG4: case WG_MAJOR_TYPE_AUDIO_WMA: case WG_MAJOR_TYPE_VIDEO_CINEPAK: case WG_MAJOR_TYPE_VIDEO_WMV: @@ -608,6 +630,9 @@ IMFMediaType *mf_media_type_from_wg_format(const struct wg_format *format)
case WG_MAJOR_TYPE_VIDEO_H264: return mf_media_type_from_wg_format_h264(format); + + case WG_MAJOR_TYPE_AUDIO_MPEG4: + return mf_media_type_from_wg_format_audio_mpeg4(format); }
assert(0);
From: Elizabeth Figura zfigura@codeweavers.com
--- dlls/winegstreamer/mfplat.c | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-)
diff --git a/dlls/winegstreamer/mfplat.c b/dlls/winegstreamer/mfplat.c index 3d59da09020..9371731fe4e 100644 --- a/dlls/winegstreamer/mfplat.c +++ b/dlls/winegstreamer/mfplat.c @@ -607,6 +607,38 @@ static IMFMediaType *mf_media_type_from_wg_format_h264(const struct wg_format *f return type; }
+static IMFMediaType *mf_media_type_from_wg_format_wmv(const struct wg_format *format) +{ + IMFMediaType *type; + + if (FAILED(MFCreateMediaType(&type))) + return NULL; + + IMFMediaType_SetGUID(type, &MF_MT_MAJOR_TYPE, &MFMediaType_Video); + + if (format->u.video.format == WG_VIDEO_FORMAT_WMV1) + IMFMediaType_SetGUID(type, &MF_MT_SUBTYPE, &MEDIASUBTYPE_WMV1); + else if (format->u.video.format == WG_VIDEO_FORMAT_WMV2) + IMFMediaType_SetGUID(type, &MF_MT_SUBTYPE, &MEDIASUBTYPE_WMV2); + else if (format->u.video.format == WG_VIDEO_FORMAT_WMV3) + IMFMediaType_SetGUID(type, &MF_MT_SUBTYPE, &MEDIASUBTYPE_WMV3); + else if (format->u.video.format == WG_VIDEO_FORMAT_WMVA) + IMFMediaType_SetGUID(type, &MF_MT_SUBTYPE, &MEDIASUBTYPE_WMVA); + else if (format->u.video.format == WG_VIDEO_FORMAT_WVC1) + IMFMediaType_SetGUID(type, &MF_MT_SUBTYPE, &MEDIASUBTYPE_WVC1); + else + FIXME("Unhandled format %#x.\n", format->u.video.format); + + IMFMediaType_SetUINT64(type, &MF_MT_FRAME_SIZE, + make_uint64(format->u.video.width, format->u.video.height)); + IMFMediaType_SetUINT32(type, &MF_MT_VIDEO_ROTATION, MFVideoRotationFormat_0); + + if (format->u.video.codec_data_len) + IMFMediaType_SetBlob(type, &MF_MT_USER_DATA, format->u.video.codec_data, format->u.video.codec_data_len); + + return type; +} + IMFMediaType *mf_media_type_from_wg_format(const struct wg_format *format) { switch (format->major_type) @@ -614,7 +646,6 @@ IMFMediaType *mf_media_type_from_wg_format(const struct wg_format *format) case WG_MAJOR_TYPE_AUDIO_MPEG1: case WG_MAJOR_TYPE_AUDIO_WMA: case WG_MAJOR_TYPE_VIDEO_CINEPAK: - case WG_MAJOR_TYPE_VIDEO_WMV: case WG_MAJOR_TYPE_VIDEO_INDEO: case WG_MAJOR_TYPE_VIDEO_MPEG1: FIXME("Format %u not implemented!\n", format->major_type); @@ -633,6 +664,9 @@ IMFMediaType *mf_media_type_from_wg_format(const struct wg_format *format)
case WG_MAJOR_TYPE_AUDIO_MPEG4: return mf_media_type_from_wg_format_audio_mpeg4(format); + + case WG_MAJOR_TYPE_VIDEO_WMV: + return mf_media_type_from_wg_format_wmv(format); }
assert(0);
From: Elizabeth Figura zfigura@codeweavers.com
--- dlls/winegstreamer/mfplat.c | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-)
diff --git a/dlls/winegstreamer/mfplat.c b/dlls/winegstreamer/mfplat.c index 9371731fe4e..b521c411057 100644 --- a/dlls/winegstreamer/mfplat.c +++ b/dlls/winegstreamer/mfplat.c @@ -639,12 +639,42 @@ static IMFMediaType *mf_media_type_from_wg_format_wmv(const struct wg_format *fo return type; }
+static IMFMediaType *mf_media_type_from_wg_format_wma(const struct wg_format *format) +{ + IMFMediaType *type; + + if (FAILED(MFCreateMediaType(&type))) + return NULL; + + IMFMediaType_SetGUID(type, &MF_MT_MAJOR_TYPE, &MFMediaType_Audio); + + if (format->u.audio.version == 1) + IMFMediaType_SetGUID(type, &MF_MT_SUBTYPE, &MEDIASUBTYPE_MSAUDIO1); + else if (format->u.audio.version == 2) + IMFMediaType_SetGUID(type, &MF_MT_SUBTYPE, &MFAudioFormat_WMAudioV8); + else if (format->u.audio.version == 3) + IMFMediaType_SetGUID(type, &MF_MT_SUBTYPE, &MFAudioFormat_WMAudioV9); + else if (format->u.audio.version == 4) + IMFMediaType_SetGUID(type, &MF_MT_SUBTYPE, &MFAudioFormat_WMAudio_Lossless); + else + FIXME("Unhandled version %#x.\n", format->u.audio.version); + + IMFMediaType_SetUINT32(type, &MF_MT_AUDIO_SAMPLES_PER_SECOND, format->u.audio.rate); + IMFMediaType_SetUINT32(type, &MF_MT_AUDIO_NUM_CHANNELS, format->u.audio.channels); + IMFMediaType_SetUINT32(type, &MF_MT_AUDIO_CHANNEL_MASK, format->u.audio.channel_mask); + IMFMediaType_SetUINT32(type, &MF_MT_AUDIO_AVG_BYTES_PER_SECOND, format->u.audio.bitrate / 8); + IMFMediaType_SetUINT32(type, &MF_MT_AUDIO_PREFER_WAVEFORMATEX, TRUE); + IMFMediaType_SetUINT32(type, &MF_MT_AUDIO_BLOCK_ALIGNMENT, format->u.audio.block_align); + IMFMediaType_SetBlob(type, &MF_MT_USER_DATA, format->u.audio.codec_data, format->u.audio.codec_data_len); + + return type; +} + IMFMediaType *mf_media_type_from_wg_format(const struct wg_format *format) { switch (format->major_type) { case WG_MAJOR_TYPE_AUDIO_MPEG1: - case WG_MAJOR_TYPE_AUDIO_WMA: case WG_MAJOR_TYPE_VIDEO_CINEPAK: case WG_MAJOR_TYPE_VIDEO_INDEO: case WG_MAJOR_TYPE_VIDEO_MPEG1: @@ -667,6 +697,9 @@ IMFMediaType *mf_media_type_from_wg_format(const struct wg_format *format)
case WG_MAJOR_TYPE_VIDEO_WMV: return mf_media_type_from_wg_format_wmv(format); + + case WG_MAJOR_TYPE_AUDIO_WMA: + return mf_media_type_from_wg_format_wma(format); }
assert(0);
From: Elizabeth Figura zfigura@codeweavers.com
--- dlls/winegstreamer/mfplat.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-)
diff --git a/dlls/winegstreamer/mfplat.c b/dlls/winegstreamer/mfplat.c index b521c411057..4869ee49bc1 100644 --- a/dlls/winegstreamer/mfplat.c +++ b/dlls/winegstreamer/mfplat.c @@ -563,6 +563,28 @@ static IMFMediaType *mf_media_type_from_wg_format_video(const struct wg_format * return NULL; }
+static IMFMediaType *mf_media_type_from_wg_format_audio_mpeg1(const struct wg_format *format) +{ + IMFMediaType *type; + + if (FAILED(MFCreateMediaType(&type))) + return NULL; + + if (format->u.audio.layer != 3) + FIXME("Unhandled layer %#x.\n", format->u.audio.layer); + + IMFMediaType_SetGUID(type, &MF_MT_MAJOR_TYPE, &MFMediaType_Audio); + IMFMediaType_SetGUID(type, &MF_MT_SUBTYPE, &MFAudioFormat_MP3); + IMFMediaType_SetGUID(type, &MF_MT_AM_FORMAT_TYPE, &FORMAT_WaveFormatEx); + IMFMediaType_SetUINT32(type, &MF_MT_AUDIO_NUM_CHANNELS, format->u.audio.channels); + IMFMediaType_SetUINT32(type, &MF_MT_AUDIO_CHANNEL_MASK, format->u.audio.channel_mask); + IMFMediaType_SetUINT32(type, &MF_MT_AUDIO_PREFER_WAVEFORMATEX, TRUE); + IMFMediaType_SetUINT32(type, &MF_MT_FIXED_SIZE_SAMPLES, TRUE); + IMFMediaType_SetUINT32(type, &MF_MT_ALL_SAMPLES_INDEPENDENT, TRUE); + + return type; +} + static IMFMediaType *mf_media_type_from_wg_format_audio_mpeg4(const struct wg_format *format) { IMFMediaType *type; @@ -674,7 +696,6 @@ IMFMediaType *mf_media_type_from_wg_format(const struct wg_format *format) { switch (format->major_type) { - case WG_MAJOR_TYPE_AUDIO_MPEG1: case WG_MAJOR_TYPE_VIDEO_CINEPAK: case WG_MAJOR_TYPE_VIDEO_INDEO: case WG_MAJOR_TYPE_VIDEO_MPEG1: @@ -692,6 +713,9 @@ IMFMediaType *mf_media_type_from_wg_format(const struct wg_format *format) case WG_MAJOR_TYPE_VIDEO_H264: return mf_media_type_from_wg_format_h264(format);
+ case WG_MAJOR_TYPE_AUDIO_MPEG1: + return mf_media_type_from_wg_format_audio_mpeg1(format); + case WG_MAJOR_TYPE_AUDIO_MPEG4: return mf_media_type_from_wg_format_audio_mpeg4(format);
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=146399
Your paranoid android.
=== w7u_2qxl (32 bit report) ===
mfplat: mfplat.c:1156: Test failed: L"test-pcm16.avi": Got hr 0xc00d36c4.
=== w7u_adm (32 bit report) ===
mfplat: mfplat.c:1156: Test failed: L"test-pcm16.avi": Got hr 0xc00d36c4.
=== w7u_el (32 bit report) ===
mfplat: mfplat.c:1156: Test failed: L"test-pcm16.avi": Got hr 0xc00d36c4.
=== w8 (32 bit report) ===
mfplat: mfplat.c:1156: Test failed: L"test-pcm16.avi": Got hr 0xc00d36c4. 0c2c:mfplat: unhandled exception c0000005 at 1A010000
=== w8adm (32 bit report) ===
mfplat: mfplat.c:1156: Test failed: L"test-pcm16.avi": Got hr 0xc00d36c4. 0ddc:mfplat: unhandled exception c0000096 at 6EAB2077
=== w864 (32 bit report) ===
mfplat: mfplat.c:1156: Test failed: L"test-pcm16.avi": Got hr 0xc00d36c4. 09c8:mfplat: unhandled exception c0000005 at 0000AC44
=== w1064v1507 (32 bit report) ===
mfplat: mfplat.c:1156: Test failed: L"test-pcm16.avi": Got hr 0xc00d36c4. 0b84:mfplat: unhandled exception c0000005 at 0000282C
=== w7pro64 (64 bit report) ===
mfplat: mfplat.c:1156: Test failed: L"test-pcm16.avi": Got hr 0xc00d36c4.
=== w864 (64 bit report) ===
mfplat: mfplat.c:1334: Test failed: Unexpected refcount 3 mfplat.c:1156: Test failed: L"test-pcm16.avi": Got hr 0xc00d36c4. 0b0c:mfplat: unhandled exception c0000005 at 0000000000000000
=== w1064v1507 (64 bit report) ===
mfplat: mfplat.c:1156: Test failed: L"test-pcm16.avi": Got hr 0xc00d36c4. 0e8c:mfplat: unhandled exception c0000005 at 0000000000000000