From: Brendan McGrath bmcgrath@codeweavers.com
These tests ensure that a 2D buffer can override the stride settings of the input/output media attributes of a transform.
This tests the 2D 'width' of the buffer, and if the image is stored 'bottom-up' (determined by a positive or negative stride). --- dlls/mf/tests/mf_test.h | 1 + dlls/mf/tests/nv12frame-extra-width-2d.bmp | Bin 0 -> 101430 bytes dlls/mf/tests/nv12frame-extra-width.bmp | Bin 0 -> 76086 bytes dlls/mf/tests/resource.rc | 12 ++ dlls/mf/tests/rgb32frame-extra-width.bmp | Bin 0 -> 55350 bytes dlls/mf/tests/transform.c | 129 ++++++++++++++++++++- 6 files changed, 136 insertions(+), 6 deletions(-) create mode 100644 dlls/mf/tests/nv12frame-extra-width-2d.bmp create mode 100644 dlls/mf/tests/nv12frame-extra-width.bmp create mode 100644 dlls/mf/tests/rgb32frame-extra-width.bmp
diff --git a/dlls/mf/tests/mf_test.h b/dlls/mf/tests/mf_test.h index f118e921b11..bc3deaf3264 100644 --- a/dlls/mf/tests/mf_test.h +++ b/dlls/mf/tests/mf_test.h @@ -107,6 +107,7 @@ struct sample_desc LONGLONG sample_time; LONGLONG sample_duration; DWORD buffer_count; + DWORD total_length; const struct buffer_desc *buffers; DWORD repeat_count; BOOL todo_length; diff --git a/dlls/mf/tests/nv12frame-extra-width-2d.bmp b/dlls/mf/tests/nv12frame-extra-width-2d.bmp new file mode 100644 index 0000000000000000000000000000000000000000..463dc9adeeb26f12cf15f05c8095bf54483a964a GIT binary patch literal 101430 zcmeI&u})N57{zgYgLwo)b$J1arCL)^*pQgqS`td@>5L^bJ^>g)!7JR#1QQx!WkF-C zDBul_XY_`!PiWR&pEI+<|4cUF=>BGw-~OG$!R%Mt&!0VgvN)cP<DYT-H;#YD@$|{F z@#}c}|M!1R{(QZj&j*IlgAX5vZ{s*UI_nx27Z(F#bv?koVSjP&z<>1hi+}t-=AS?K z$3Ol}1CRN42%dj<{=t9O@4k!QnIH4LcOCxiJpY(K`?&u{U&Hvv|2o`<SCs+(_+OR1 zb@*KT9{6-t||lm@xLm2+rew$NxGwTvdk4+2O!2dhq(w@MRqA|5@E09_QM@zF~iH z@4$cb|9|2i|IYn0y%zuYPdDu3$3OlZKk2pj$A7wECqMr2@Ayft#XtVj4LkYqkAKHc zdM*C(pKjR6kAM6-e$s34kN<STPX3eQ*}yP*@cHF%JP!8%WbXgLzF~iH@4$cb{vZ6~ z-+6vWuf;$9(+xZM@sEGUPkJr>@t<zk$&Y{hJATq@@sIy>!%lwu<KOX<UW<SHryF+i z;~)QypY&S%<3HW7lmB3AV_+CPc)L9ujD!6@nfrgRZ`fblJMbU9{|Ep0cb*^8Yw?f& zbi+=5{Nvy8lU|E|{HGgs^5Y->j-T{e{Nq2}u#+GE_;>uI*Ww@l>4u&B_{YEFC%qQ` z_)j<N<lj5L8W=_ozJ4Fxjf4F^nfrgRZ`fblJMbU9{|Ep0cb*^8Yw?f&bi+=5{Nvy8 zlU|E|{HGgs^5Y->j-T{e{Nq2}u#+GE_;>uI*Ww@l>4u&B_{YEFC%qQ`_)j<N<lou7 z85l+n-v1oljD!6@nfrgRZ`fblJMbU9{|Ep0cb*^8Yw?f&bi+=5{Nvy8lU|E|{HGgs z^5Y->j-T{e{Nq2}u#+GE_;>uI*Ww@l>4u&B_{YEFC%qQ`_)j<N<lnsA9~edte$0m# z<6!?!=Kde-8}=9X4*W;&|G_{0o#%)2TKwZb-LR7%|M++Oq}Spf|LKOE{P@Se<0riq z|M*Wg?BvHk{vAK*wfM(>x?v|j{_*elNw38}{?iRR`Fr=RP<Ph7=jVR!oVBCY-*a?- zE%?61w9-cm`-Yt!Dr?2u`s>44J8J!F2h;VYm7ZeQH|+FKSu5t&Un|bqQR`njn65Xi z^c2IsVW)@6S~0i&T5;BnTL0R?biHY%rx^APJ3Um^in;aIinDgq`qvJo>rE>?#jtPK z>7lY#%&osxoVBCYzjiQPZ(8XohJC|M53j3_Z>P;MX8Ws0b^L4cOY24dCmp~KekLTO zQ~cmZ0yCM6AIZ;U_3@>7{5h4vbWE;}e@T9673lw@1NgzugoJd8AN)vQCX?|a`8laR zj+guVQyu?={P=ND;RiqXx%(j?Vd$9bwEDqXu3u>t9_*p>hfD7NLHTh<|MxdiGdm`i z$3GyyvJCWp+5!CFXKF$@#}9rKFVngBQT*&xAMcji|LXXA<X8Ay(EmvX@PnTT3F#C+ z_>sU&CgVr)vr~P%S?=>sb^IOj<HtdTAN=6w?uUScp<}Ys>IZANex+4-u!qhcF1i1k z)yIoF`oF)Cn%ObAI{qg4rB$H+lMdhqKNAwtDSq%HftgIkkL0I)TB$#i!gNfoPu#v^ zM<l7F{j~ZsDNM)Y`o!%!c0`g&+E1%LlfraNu20;)V@D*Zr2Vw|Gbv2R<od+zJ9b2p zO4?7WKa;|AOs-GdzGFuusigh1`ZFm^$K?9N?K^fvl1k>q$A^zcXZK%Hn2yQC@#o~% z7J>e^9l(#~XLeZodj0AC-RI~`OQX-OO+Py%zqSVSzwH2iG(X3)+Slio%f0{9razvM zA3u&M{Ahl*HfmpQx0ieWsZGDNL4N!=rtqWrIlroXef_@N`%i89^DFY>$1#N;&Cl*l z?d$!|<=%g4)9>DpA3u&M{Ahk|_iJB2=F7eR)TY1PCqI51Q~1&Rw0Dd8GcAoiyFPLI pj(Q@kqW!e`GcAoiyFPLIj(Q@kqW!e`GcAoiyFPLIj(Q@k;umL%C3gS-
literal 0 HcmV?d00001
diff --git a/dlls/mf/tests/nv12frame-extra-width.bmp b/dlls/mf/tests/nv12frame-extra-width.bmp new file mode 100644 index 0000000000000000000000000000000000000000..0fbb616d07919774ac0074e7d94b2caf7a82e5f3 GIT binary patch literal 76086 zcmeI2u}&L75QfPc_z@yk;RQgHgxZA*8YHCDSaM124$;MKcmf+)F8mfqAkkP95rrE> zMFDTH*$XMWSB$jx&q<f;x2Lr@?G2jy{p~-KEZ+wQzxMu&gZTL^&YyAqi1W+d*Z3L7 z-}TR%&(F8XBrpXHuCBvVoU8e|(R_S-4FB?k9f6%{@4*lLqj)g<zz_U1uA$T~>X*`g z!4LevkH`S^i~6N7pv2NY(?7!x{-ZFU#Nt2r5B%Ui3Ij@P;r_Gf%>q-<;N&LU#aZh4 z7wib^RC^D8@E^s4;Rk-;r*Z#G{i1#;=NIq;Kky?mK>ebADGVsF^w0Fq@Pq#-3@EYq z5B>u`_>aPX5?i?cEEm1N6g0R!4vRQTJ^z9oft_ma!4LkUcrg6H5BxOlpQ&HeFXj9K ze&7dwL<Xo|)GvhrC6@k~{uzGoAB6!W7XQJ2;0OOv7*Jvh_n+xuKQILi&Ie%{XQ}63 zup_Wj?LGLxe-safANYZv#{Dz(i~6OUU%(Iiz>mlP^^5wYFrdWJKhr<M5B{Stpv2-o z_z(QxKMDg%Y~lVhy59z-puxj)xQMgV^Do#D*s1m&{NO)|2g48iz)$1;nfgWjQqC{n z2Y%p3WPtib{ZbfEV(FjhpWz4pQ5aBS@gMvLe()cK0VTF@{~4aW2d1FG<!d;Nv()o1 z*b&&N_8$D;KZ*y#5B$JS<NlfYMg3CFFW?7$;74SD`bGUx7*JyApXs0B2metRP-5{P z{0DyUAB6!Wws8O1{}>0Rpux)|9K~7c`4{X6>{NRXe()c~gW(5$;HPo_O#PyMDd!jP z13&O1GC=*JeklwnvGmXM&+vo)C=4jE_z(UAKlqQrfD&7{|1>?fA#UCH%xhOW<=@U- zh~0e`e)eG^N5?KOpyZJAt~~3{m-5|pAr>b5naI(!3k)bZ<h(1-`m?5dcU_2u34bPX zH0=TdN)9>i%Cr8gDc@ZeVqwCci5yM4z<`oN&b#ugKWoZ&*M(S^@Mj`N(=ITe<dE~O zJnPSz^4)bI7AE|e$kDV53@ACgd5@=6GGcC7!#kZf^06gFAM~*muvg&+eQX8nRgs^K z_qa>S*D9-c#fQDq*^rMdDf*y~t$@7>Kj>pCV6Te&EWO7<t6$#fEXl`~6n)UgR={3` zAM~*muvbNXrtU+lU+(El$;Z|debC2Nz+QzP^syDNS2cb{-s6INOi9tllxKuK=wmBj zufk7J`V76tsaC(d(;1SFEh+k-kF9{c3P0#$D`2mR{Oo&=BdvaUr?XE!wxsBTKDGk( zD*T|2t$@8M@{?8@|GV73KlINa{f*?4>QTQ#pSmLHJ^G}2)bG%zu1I>1KB*q{yIg%H z&g1HOzTUmaClwfdQa$Q-|C>I&neTOSv%9<I>)ie2n@w*<KDMIh)2=>?p6_*gtnDw~ zY!*H8u@yz1cJ(>z`(Eb*ZGZV@bJ!;zTT%3BSD*W>@AdGk?JwVK?ziM)D~dkt>T~w) zdtJV2`^z_*vv=~b6-A$R_4ye4UM~}EfB9zfF(w~dQS@n7pL93)-{t=Qp??PHZzP{o PkNO?@)D=nZbM^TRqP14o
literal 0 HcmV?d00001
diff --git a/dlls/mf/tests/resource.rc b/dlls/mf/tests/resource.rc index 8eb147c90e6..949977ab8b2 100644 --- a/dlls/mf/tests/resource.rc +++ b/dlls/mf/tests/resource.rc @@ -137,6 +137,18 @@ abgr32frame-crop.bmp RCDATA abgr32frame-crop.bmp /* @makedep: rgb32frame-grabber.bmp */ rgb32frame-grabber.bmp RCDATA rgb32frame-grabber.bmp
+/* Generated from running the tests on Windows */ +/* @makedep: rgb32frame-extra-width.bmp */ +rgb32frame-extra-width.bmp RCDATA rgb32frame-extra-width.bmp + +/* Generated from running the tests on Windows */ +/* @makedep: nv12frame-extra-width.bmp */ +nv12frame-extra-width.bmp RCDATA nv12frame-extra-width.bmp + +/* Generated from running the tests on Windows */ +/* @makedep: nv12frame-extra-width-2d.bmp */ +nv12frame-extra-width-2d.bmp RCDATA nv12frame-extra-width-2d.bmp + /* Generated from running the tests on Windows */ /* @makedep: rgb555frame.bmp */ rgb555frame.bmp RCDATA rgb555frame.bmp diff --git a/dlls/mf/tests/rgb32frame-extra-width.bmp b/dlls/mf/tests/rgb32frame-extra-width.bmp new file mode 100644 index 0000000000000000000000000000000000000000..509ed6acaeb54d46fd6e2221b47124ec92dfbfcf GIT binary patch literal 55350 zcmeI)v27GV7>40>LLG!u-~x!D2YR3Y$7Ey(i4G_NiTnaG0wOw~0UvW-S1_-o+tWNJ z%}JK^*?a#!^X*xC^4s_KzqhBy{dj&e*5|Q4jCHrY9?#?P{Qdol{rT+CC-7_hh=;j# zy75OJo}X~$2ZAyIe#-P@`C*_;fS)owS$-HO6X2&zPnI7B$^`f+)05?gfieMp%JgIx z_Op$%Z?zfx_&J97Ft={}_ScD>X6G_Le)<eocE}Gu#Xmp%@H6*LtjtYz-*@^)|CGJJ z4?q04eiZ{HtAF$lKl-N_C|UiZfB2c}A99ME=j`_{%ijOuho8CT*;D-R!_NyCD4$|+ z{TiP_xbiu;<=@W_KgBOU{O~jNHpq4B1+LrrNB`&_{ZkB-tp3qI{OF%zpkx>BpSv+P ztIgo+w@=I7|6-@vxy+BBKEstA^21N@&ksNRO#S(FDsz+F_nrRHKV>iQ!w)~MU&TPl z>L2~XkNznJN>=~qAAaWg=W%>|%4#z>zxucA{V#T!oy+|A=`&o}AwT>S|NQX7kN3~T zK*{PK{lky`DF#Yb|L7ln^iMHRvie8=@S}f<fs$Rhf41%MY_%DD-2N_m|BIbw=Q2Nj z`V3cg$PYioKR^8NGxzsbnVams@AQxUDSLq*e)w_yDh5hc|L7ln^iMHRvie8=@H5vx z<L1}+7vff#!JqBjviHBr++_EC$B+Igdx0N*`0@Uy7${l&qks6(KgB@F>L2~XkNznJ zN>=~qAAa;tF;KGlNB{6M**_2C|F2nBo59>!J5Gw7>+YZ9NSHeke)yS_v#0psho9>j zD0{G+yCY=FYnSbAk6@r20|VVanPEA1N641fF5B%L!9Y0%2D*VV!*cG9kS(uWw%a>` bfpQECbOU9E<=h=1TVA_tw|4{s<rw}0eNi>b
literal 0 HcmV?d00001
diff --git a/dlls/mf/tests/transform.c b/dlls/mf/tests/transform.c index ffb3de92e2c..258974cd8ad 100644 --- a/dlls/mf/tests/transform.c +++ b/dlls/mf/tests/transform.c @@ -1376,7 +1376,7 @@ static DWORD check_mf_sample_(const char *file, int line, IMFSample *sample, con const BYTE **expect_data, DWORD *expect_data_len) { struct check_mf_sample_context ctx = {.data = *expect_data, .data_len = *expect_data_len, .file = file, .line = line}; - DWORD buffer_count, total_length, sample_flags; + DWORD buffer_count, total_length, sample_flags, expect_length; LONGLONG timestamp; HRESULT hr;
@@ -1410,15 +1410,19 @@ static DWORD check_mf_sample_(const char *file, int line, IMFSample *sample, con "got sample duration %I64d\n", timestamp);
enum_mf_media_buffers(sample, expect, check_mf_sample_buffer, &ctx); + if (expect->total_length) + expect_length = expect->total_length; + else + expect_length = ctx.total_length;
total_length = 0xdeadbeef; hr = IMFSample_GetTotalLength(sample, &total_length); ok_(file, line)(hr == S_OK, "GetTotalLength returned %#lx\n", hr); todo_wine_if(expect->todo_length) - ok_(file, line)(total_length == ctx.total_length, + ok_(file, line)(total_length == expect_length, "got total length %#lx\n", total_length); - ok_(file, line)(!*expect_data || *expect_data_len >= ctx.total_length, - "missing %#lx data\n", ctx.total_length - *expect_data_len); + ok_(file, line)(!*expect_data || *expect_data_len >= expect_length, + "missing %#lx data\n", expect_length - *expect_data_len);
*expect_data = ctx.data; *expect_data_len = ctx.data_len; @@ -7647,6 +7651,8 @@ static void test_video_processor(BOOL use_2d_buffer)
static const MFVideoArea actual_aperture = {.Area={82,84}}; static const DWORD actual_width = 96, actual_height = 96, nv12_aligned_width = 128; + static const DWORD extra_width = actual_width + 0x30; + static const DWORD nv12_aligned_extra_width = 192; const struct attribute_desc rgb32_with_aperture[] = { ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Video, .required = TRUE), @@ -7680,6 +7686,13 @@ static void test_video_processor(BOOL use_2d_buffer) ATTR_RATIO(MF_MT_FRAME_SIZE, actual_width, actual_height, .required = TRUE), {0}, }; + const struct attribute_desc nv12_extra_width[] = + { + ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Video, .required = TRUE), + ATTR_GUID(MF_MT_SUBTYPE, MFVideoFormat_NV12, .required = TRUE), + ATTR_RATIO(MF_MT_FRAME_SIZE, extra_width, actual_height, .required = TRUE), + {0}, + }; const struct attribute_desc rgb32_default_stride[] = { ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Video, .required = TRUE), @@ -7687,6 +7700,14 @@ static void test_video_processor(BOOL use_2d_buffer) ATTR_RATIO(MF_MT_FRAME_SIZE, actual_width, actual_height, .required = TRUE), {0}, }; + const struct attribute_desc rgb32_extra_width[] = + { + ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Video, .required = TRUE), + ATTR_GUID(MF_MT_SUBTYPE, MFVideoFormat_RGB32, .required = TRUE), + ATTR_RATIO(MF_MT_FRAME_SIZE, extra_width, actual_height, .required = TRUE), + ATTR_UINT32(MF_MT_DEFAULT_STRIDE, extra_width * 4), + {0}, + }; const struct attribute_desc rgb32_negative_stride[] = { ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Video, .required = TRUE), @@ -7758,6 +7779,7 @@ static void test_video_processor(BOOL use_2d_buffer) ATTR_UINT32(MF_MT_DEFAULT_STRIDE, -82 * 4), {0}, }; + const MFT_OUTPUT_STREAM_INFO initial_output_info = {0}; const MFT_INPUT_STREAM_INFO initial_input_info = {0}; MFT_OUTPUT_STREAM_INFO output_info = {0}; @@ -7805,6 +7827,19 @@ static void test_video_processor(BOOL use_2d_buffer) .sample_time = 0, .sample_duration = 10000000, .buffer_count = 1, .buffers = &rgb32_crop_buffer_2d_desc, }; + const struct buffer_desc rgb32_extra_width_buffer_desc = + { + .length = extra_width * actual_height * 4, + .compare = compare_rgb32, .compare_rect = {.top = 12, .right = 82, .bottom = 96}, + .dump = dump_rgb32, .size = {.cx = extra_width, .cy = actual_height}, + }; + const struct sample_desc rgb32_extra_width_sample_desc = + { + .attributes = output_sample_attributes, + .sample_time = 0, .sample_duration = 10000000, + .total_length = actual_width * actual_height * 4, + .buffer_count = 1, .buffers = &rgb32_extra_width_buffer_desc, + };
const struct buffer_desc rgb555_buffer_desc = { @@ -7844,6 +7879,32 @@ static void test_video_processor(BOOL use_2d_buffer) .buffer_count = 1, .buffers = &nv12_buffer_2d_desc, };
+ const struct buffer_desc nv12_extra_width_buffer_desc = + { + .length = extra_width * actual_height * 3 / 2, + .compare = compare_nv12, .compare_rect = {.top = 12, .right = 82, .bottom = 96}, + .dump = dump_nv12, .size = {.cx = extra_width, .cy = actual_height}, + }; + const struct sample_desc nv12_extra_width_sample_desc = + { + .attributes = output_sample_attributes, + .sample_time = 0, .sample_duration = 10000000, + .total_length = actual_width * actual_height * 3 / 2, + .buffer_count = 1, .buffers = &nv12_extra_width_buffer_desc, + }; + const struct buffer_desc nv12_extra_width_buffer_2d_desc = + { + .length = nv12_aligned_extra_width * actual_height * 3 / 2, + .compare = compare_nv12, .compare_rect = {.top = 12, .right = 82, .bottom = 96}, + .dump = dump_nv12, .size = {.cx = nv12_aligned_extra_width, .cy = actual_height}, + }; + const struct sample_desc nv12_extra_width_sample_2d_desc = + { + .attributes = output_sample_attributes, + .sample_time = 0, .sample_duration = 10000000, + .buffer_count = 1, .buffers = &nv12_extra_width_buffer_2d_desc, + }; + const struct transform_desc { const struct attribute_desc *input_type_desc; @@ -8013,6 +8074,57 @@ static void test_video_processor(BOOL use_2d_buffer) .output_sample_desc = &rgb32_crop_sample_desc, .output_sample_2d_desc = &rgb32_crop_sample_2d_desc, .delta = 3, /* Windows returns 3 */ }, + { /* Test 19 */ + .input_type_desc = nv12_default_stride, .input_bitmap = L"nv12frame.bmp", + .input_buffer_desc = use_2d_buffer ? nv12_default_stride : NULL, + .output_type_desc = rgb32_default_stride, .output_bitmap = L"rgb32frame-flip.bmp", .output_bitmap_2d = L"rgb32frame.bmp", .output_bitmap_1d = L"rgb32frame.bmp", + .output_buffer_desc = use_2d_buffer ? rgb32_default_stride : NULL, + .output_sample_desc = &rgb32_sample_desc, .output_sample_2d_desc = &rgb32_sample_desc, + .delta = 3, /* Windows returns 3 with 2D buffer */ + .todo = use_2d_buffer, + }, + { /* Test 20 */ + .input_type_desc = nv12_default_stride, .input_bitmap = L"nv12frame.bmp", + .input_buffer_desc = use_2d_buffer ? nv12_default_stride : NULL, + .output_type_desc = rgb32_default_stride, .output_bitmap = L"rgb32frame-flip.bmp", .output_bitmap_2d = L"rgb32frame.bmp", .output_bitmap_1d = L"rgb32frame.bmp", + .output_buffer_desc = use_2d_buffer ? rgb32_positive_stride : NULL, + .output_sample_desc = &rgb32_sample_desc, .output_sample_2d_desc = &rgb32_sample_desc, + .delta = 3, /* Windows returns 3 with 2D buffer */ + .todo = use_2d_buffer, + }, + + { /* Test 21, 2D only */ + .input_type_desc = nv12_default_stride, .input_bitmap = L"nv12frame.bmp", + .input_buffer_desc = nv12_default_stride, + .output_type_desc = rgb32_default_stride, .output_bitmap = L"rgb32frame-extra-width.bmp", + .output_buffer_desc = rgb32_extra_width, + .output_sample_desc = &rgb32_extra_width_sample_desc, .output_sample_2d_desc = &rgb32_extra_width_sample_desc, + .todo = TRUE, + }, + { /* Test 22, 2D only */ + .input_type_desc = rgb32_default_stride, .input_bitmap = L"rgb32frame-extra-width.bmp", + .input_buffer_desc = rgb32_extra_width, + .output_type_desc = nv12_default_stride, .output_bitmap_1d = L"nv12frame.bmp", .output_bitmap_2d = L"nv12frame-2d.bmp", + .output_buffer_desc = nv12_default_stride, + .output_sample_desc = &nv12_sample_desc, .output_sample_2d_desc = &nv12_sample_2d_desc, + .delta = 2, /* Windows returns 2 with 1D buffer */ .todo = TRUE, + }, + { /* Test 23, 2D only */ + .input_type_desc = rgb32_default_stride, .input_bitmap = L"rgb32frame-extra-width.bmp", + .input_buffer_desc = rgb32_extra_width, + .output_type_desc = nv12_default_stride, .output_bitmap_1d = L"nv12frame-extra-width.bmp", .output_bitmap_2d = L"nv12frame-extra-width-2d.bmp", + .output_buffer_desc = nv12_extra_width, + .output_sample_desc = &nv12_extra_width_sample_desc, .output_sample_2d_desc = &nv12_extra_width_sample_2d_desc, + .todo = TRUE, + }, + { /* Test 24, 2D only */ + .input_type_desc = nv12_default_stride, .input_bitmap = L"nv12frame-extra-width.bmp", + .input_buffer_desc = nv12_extra_width, + .output_type_desc = rgb32_default_stride, .output_bitmap_1d = L"rgb32frame.bmp", .output_bitmap_2d = L"rgb32frame.bmp", + .output_buffer_desc = rgb32_default_stride, + .output_sample_desc = &rgb32_sample_desc, .output_sample_2d_desc = &rgb32_sample_desc, + .todo = TRUE, + }, };
MFT_REGISTER_TYPE_INFO output_type = {MFMediaType_Video, MFVideoFormat_NV12}; @@ -8347,6 +8459,10 @@ static void test_video_processor(BOOL use_2d_buffer) { const struct transform_desc *test = video_processor_tests + i;
+ /* skip tests which require 2D buffers when not testing them */ + if (!use_2d_buffer && test->input_buffer_desc) + continue; + winetest_push_context("transform #%lu", i);
check_mft_set_input_type_required(transform, test->input_type_desc); @@ -8357,7 +8473,8 @@ static void test_video_processor(BOOL use_2d_buffer) check_mft_set_output_type(transform, test->output_type_desc, S_OK); check_mft_get_output_current_type(transform, test->output_type_desc);
- if (test->output_sample_desc == &nv12_sample_desc) + if (test->output_sample_desc == &nv12_sample_desc + || test->output_sample_desc == &nv12_extra_width_sample_desc) { output_info.cbSize = actual_width * actual_height * 3 / 2; check_mft_get_output_stream_info(transform, S_OK, &output_info); @@ -8412,7 +8529,7 @@ static void test_video_processor(BOOL use_2d_buffer) length = *(DWORD *)(input_data + 2 + 2 * sizeof(DWORD)); input_data_len -= length; } - ok(input_data_len == input_info.cbSize, "got length %lu\n", input_data_len); + if (!test->input_buffer_desc) ok(input_data_len == input_info.cbSize, "got length %lu\n", input_data_len); input_data += length;
input_sample = create_sample_(input_data, input_data_len, test->input_buffer_desc);