From: Rémi Bernon rbernon@codeweavers.com
--- dlls/mf/tests/aacdecdata.bin | Bin 0 -> 2048 bytes dlls/mf/tests/resource.rc | 3 ++ dlls/mf/tests/transform.c | 84 ++++++++++++++++++++++++++++++++++- 3 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 dlls/mf/tests/aacdecdata.bin
diff --git a/dlls/mf/tests/aacdecdata.bin b/dlls/mf/tests/aacdecdata.bin new file mode 100644 index 0000000000000000000000000000000000000000..2ff06b66e406e8e1cb16f28bd7033fa522a907c3 GIT binary patch literal 2048 zcmeIu`#%#1008h!Q_W)=dJxuTO*3ut7^kwt47aW6G0%>PxLoUex~r}$wWXKI?TkW+ zqLx!^vuT)-N0eN`g|@6K4ar%inhaZi#{JUwPxt}=-+UYRHt>H9>;}99{9%!75xm@W ziEqhXAb}@M?O;EE7ii2O6TotW+tAHpkb%Wat7D*gd%V@0UHB?57{XCE8n@}%aR0`t zx4@OPukU~r`ZUl3J<>p#J2(OX0j6MYGlJaILmtY(eq`Iz%>iXf6;q}}Ck5zFK~W1Q zpvJ{2($M_jz`pj><ryusWpbUsa$x$2T_O(?r4`8HzLT-T;-4MbmfH&0dgNLu;Ua4G zOJk4|ti^uJ88LU?l`@q{xjh|B#+Rwn#&YT+w>2$2W476LNi?&~CqDQMTiKp{Kw4&a zn0|(_1mI0-&znSbd%()d3h(0zC3cXX`?#n2biceuHh^lW?wNcD<c<r0+!~>mf2zbt zJfE9lIGlT6>|LRFntpf4a^c}mr@5t08Ke0~w6j>^Hq$x7=d?ByTZ>Xj|7t*9gIxei zRT10zLbf}fT*5AN?Rrsa+3C(Ri(HU?jcVv6byk5=GoPFPlCOiRVj+dvlfq(6=(&B} zDNQK~(`d<~xIW{v;M$_$SJN)_Pa&79GxOo9U_qKT$<v~>+GDKZ1E>q@Vy*T%^JJJ% z(gCK4W4R##K|*{sqh_O-ld*fdm6;O_ps>pq-+AcW83AU_RAgve0Ve6lb@z|I&xbK0 zkz0SD52B(s#UrP-6h$Dq>HC+Yukb#Vcfr_h;;I&hAlKRt<UmFPhK+1CbLjn)1jqjU zalu>T9hS%UVxL1<KUO*;sAdk+pBLK(|HLZYggFKe)EE)li4*H^%pA~0Z^;2{Z>TvW z2j1d`%d%eu<eHqWw1?U?wF(FoSDYy0ytzF?c;~%BR51m}eeVY35(1-Mn|hAVpSq=& zJJd(lk`yxO%%ccpQFS=*{v{XN3-@NN-ioI_Yf2gqb~cGJ2X5Hp(;GrByZ1t>BYUqG zz@_nGm?%9P@_=~ZUe$#B*M^^Oo5dct6iTAq_jkC6wrfz6y(mWiXJ->kI4XrO>wNDf z6rR1u>~hHWXjxg%U4BJ-R^jt0yA9st+jul@yzHXdm~B{GSEl-pR-C7uxw)cvwTNDL zurL}CSo7O@X-635R-I#*OT$i``fudY+Ey_{qCg|NC0}AdRUkst<<ywMEY?vVcf%vq zc~2pq$IKmB;0p3g&(W?>2GM{@AlrJbraI$a;BXj=byCdE$s=f^t{zP$OMD`!Zj9C5 zj<mJpp<w@#-Y6h<gkfy}`~C7U&3*jMW+&Ze`yh3F3X4>wjiqU8Le4ym@Xg{?;@CIS zw<~WXCF=7MV?59*f7yn5x^C1vCRuZinxkzFEq^}~o>|+M79>9vKil^j-_ez~W4&xe zdYwFdhh>>GVw``P2IMXgqypkLGp7S<=IkV`fbC5lw#MNJA>pKnHOmrg`ehL~kk77U zBR0{#o9*jk%cAyTW5f1U&R1m#r~j!u^hTxM1sU<Yn*Hv0$tyWTfEtOsI%@;ut{Db$ fPd?s4V>L%p9UK0tFtk(o>G#VgVB$j-&X2zWwqq|&
literal 0 HcmV?d00001
diff --git a/dlls/mf/tests/resource.rc b/dlls/mf/tests/resource.rc index 25ac6d2fe0c..08d123d5c8f 100644 --- a/dlls/mf/tests/resource.rc +++ b/dlls/mf/tests/resource.rc @@ -29,6 +29,9 @@ audioconvdata.bin RCDATA audioconvdata.bin /* @makedep: aacencdata.bin */ aacencdata.bin RCDATA aacencdata.bin
+/* @makedep: aacdecdata.bin */ +aacdecdata.bin RCDATA aacdecdata.bin + /* @makedep: wmaencdata.bin */ wmaencdata.bin RCDATA wmaencdata.bin
diff --git a/dlls/mf/tests/transform.c b/dlls/mf/tests/transform.c index f4148692489..0e0ae2417d5 100644 --- a/dlls/mf/tests/transform.c +++ b/dlls/mf/tests/transform.c @@ -1889,11 +1889,33 @@ static void test_aac_decoder(void) MFT_INPUT_STREAM_FIXED_SAMPLE_SIZE | MFT_INPUT_STREAM_HOLDS_BUFFERS, };
+ const struct buffer_desc output_buffer_desc[] = + { + {.length = 0x800}, + }; + const struct attribute_desc output_sample_attributes[] = + { + ATTR_UINT32(MFSampleExtension_CleanPoint, 1), + {0}, + }; + const struct sample_desc output_sample_desc[] = + { + { + .attributes = output_sample_attributes + (has_video_processor ? 0 : 1) /* MFSampleExtension_CleanPoint missing on Win7 */, + .sample_time = 0, .sample_duration = 232200, + .buffer_count = 1, .buffers = output_buffer_desc, + }, + }; + MFT_REGISTER_TYPE_INFO output_type = {MFMediaType_Audio, MFAudioFormat_Float}; MFT_REGISTER_TYPE_INFO input_type = {MFMediaType_Audio, MFAudioFormat_AAC}; + IMFSample *input_sample, *output_sample; + ULONG i, ret, ref, aacenc_data_len; + IMFCollection *output_samples; + DWORD length, output_status; IMFMediaType *media_type; IMFTransform *transform; - ULONG i, ret; + const BYTE *aacenc_data; HRESULT hr;
hr = CoInitialize(NULL); @@ -1974,6 +1996,66 @@ static void test_aac_decoder(void) check_mft_get_input_stream_info(transform, &input_info); check_mft_get_output_stream_info(transform, &output_info);
+ load_resource(L"aacencdata.bin", &aacenc_data, &aacenc_data_len); + ok(aacenc_data_len == 24861, "got length %lu\n", aacenc_data_len); + + input_sample = create_sample(aacenc_data + sizeof(DWORD), *(DWORD *)aacenc_data); + hr = IMFTransform_ProcessInput(transform, 0, input_sample, 0); + ok(hr == S_OK, "ProcessInput returned %#lx\n", hr); + hr = IMFTransform_ProcessInput(transform, 0, input_sample, 0); + ok(hr == MF_E_NOTACCEPTING, "ProcessInput returned %#lx\n", hr); + + /* As output_info.dwFlags doesn't have MFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLES + * IMFTransform_ProcessOutput needs a sample or returns MF_E_TRANSFORM_NEED_MORE_INPUT */ + + hr = check_mft_process_output(transform, NULL, &output_status); + ok(hr == E_INVALIDARG, "ProcessOutput returned %#lx\n", hr); + ok(output_status == 0, "got output[0].dwStatus %#lx\n", output_status); + hr = IMFTransform_ProcessInput(transform, 0, input_sample, 0); + ok(hr == MF_E_NOTACCEPTING, "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, input_sample, 0); + ok(hr == MF_E_NOTACCEPTING, "ProcessInput returned %#lx\n", hr); + + hr = MFCreateCollection(&output_samples); + ok(hr == S_OK, "MFCreateCollection returned %#lx\n", hr); + + output_sample = create_sample(NULL, output_info.cbSize); + for (i = 0; SUCCEEDED(hr = check_mft_process_output(transform, output_sample, &output_status)); i++) + { + winetest_push_context("%lu", i); + ok(hr == S_OK, "ProcessOutput returned %#lx\n", hr); + hr = IMFCollection_AddElement(output_samples, (IUnknown *)output_sample); + ok(hr == S_OK, "AddElement returned %#lx\n", hr); + ref = IMFSample_Release(output_sample); + ok(ref == 1, "Release returned %ld\n", ref); + output_sample = create_sample(NULL, output_info.cbSize); + winetest_pop_context(); + } + ok(hr == MF_E_TRANSFORM_NEED_MORE_INPUT, "ProcessOutput returned %#lx\n", hr); + ok(output_status == MFT_OUTPUT_DATA_BUFFER_NO_SAMPLE, "got output[0].dwStatus %#lx\n", output_status); + ret = IMFSample_Release(output_sample); + ok(ret == 0, "Release returned %lu\n", ret); + ok(i == 1, "got %lu output samples\n", i); + + ret = check_mf_sample_collection(output_samples, output_sample_desc, L"aacdecdata.bin"); + ok(ret == 0, "got %lu%% diff\n", ret); + IMFCollection_Release(output_samples); + + output_sample = create_sample(NULL, output_info.cbSize); + hr = check_mft_process_output(transform, output_sample, &output_status); + ok(hr == MF_E_TRANSFORM_NEED_MORE_INPUT, "ProcessOutput returned %#lx\n", hr); + ok(output_status == MFT_OUTPUT_DATA_BUFFER_NO_SAMPLE, "got output[0].dwStatus %#lx\n", output_status); + hr = IMFSample_GetTotalLength(output_sample, &length); + ok(hr == S_OK, "GetTotalLength returned %#lx\n", hr); + ok(length == 0, "got length %lu\n", length); + ret = IMFSample_Release(output_sample); + ok(ret == 0, "Release returned %lu\n", ret); + + ret = IMFSample_Release(input_sample); + ok(ret == 0, "Release returned %lu\n", ret); ret = IMFTransform_Release(transform); ok(ret == 0, "Release returned %lu\n", ret);