From cb0053f8608a61a52f155ed7fe4c39093ae3f816 Mon Sep 17 00:00:00 2001 From: jwwang Date: Tue, 24 Dec 2013 16:25:30 +0800 Subject: [PATCH] Add decoder test --- Makefile | 2 +- res/test_vd_1d.264 | Bin 0 -> 57385 bytes res/test_vd_rc.264 | Bin 0 -> 49334 bytes test/decoder_test.cpp | 199 ++++++++++++++++++++++++++++++++++++++ test/simple_test.cpp | 34 ------- test/utils/BufferedData.h | 65 +++++++++++++ 6 files changed, 265 insertions(+), 35 deletions(-) create mode 100644 res/test_vd_1d.264 create mode 100644 res/test_vd_rc.264 create mode 100644 test/decoder_test.cpp create mode 100644 test/utils/BufferedData.h diff --git a/Makefile b/Makefile index 72cf0691..1d1aedde 100644 --- a/Makefile +++ b/Makefile @@ -70,7 +70,7 @@ H264ENC_INCLUDES = $(ENCODER_INCLUDES) -Icodec/console/enc/inc H264ENC_LDFLAGS = -L. -lencoder -lprocessing -lcommon H264ENC_DEPS = $(LIBPREFIX)encoder.$(LIBSUFFIX) $(LIBPREFIX)processing.$(LIBSUFFIX) $(LIBPREFIX)common.$(LIBSUFFIX) -CODEC_UNITTEST_LDFLAGS = -L. -lgtest -ldecoder -lcommon +CODEC_UNITTEST_LDFLAGS = -L. -lgtest -ldecoder -lcommon -lcrypto CODEC_UNITTEST_DEPS = $(LIBPREFIX)gtest.$(LIBSUFFIX) $(LIBPREFIX)decoder.$(LIBSUFFIX) $(LIBPREFIX)common.$(LIBSUFFIX) .PHONY: test diff --git a/res/test_vd_1d.264 b/res/test_vd_1d.264 new file mode 100644 index 0000000000000000000000000000000000000000..ab7704ee322ac013be18d80e4dd589cbcd17303f GIT binary patch literal 57385 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

  • Uj7ghbquyzvw_`rO2)o9E=!D0kb7ND}yU zB3~J)wo0IzrLRsRu&;~|q>6(C!a2AX;^6JYDWuO3HB2@e2Tt?=)0>SAQAF#ulq zAU>k=L1jY#|M%JJDgWpXq=PJ7ts4zyDXk#?uOA)&G4X>?5(&WBt7} z&(Xpe2f~H-=DL9bv7XZ5I|p8b{C-h%UguD!oxJc&JIuf(`uf}Fy0Ibn3v}b_cQ7Sr z&wAI60stlR}ILnUjZ9l2JbF&oMGR8;3f3T)H=_s4}Zrlb!-qL8mK~I z<@2}81(Plx#TdX>Qk-@iYlY%=2%Af6#zL8dBOlp>3|||SjGt6&h7@bnbOYj-yR&+v z&-kVtB!f|a5c>5s%`efB_>)A}kBZPE>)%kFTMj7zOi={M#Oy1ceD&-oA|9dt)uYkT zi4^BN_-;R^uo0fHKZ~^M!1>&|@%`YV)tz}g4zDe2i1FN7_{HuPLN&mn3JvRhFtIx4 zq>VR>cS%?D;Pbz}?!@(U_RZd>*zT*9BrDXJqyDuw1UzQ;VOq}|TKqJtpf}IgFvE(; zJ0BwdNQDUhQ}RK0ZU!*{>~TI1$lvcA&AUfU81GLzpo0>Enp*GrZZ@;2-Y~oXf7<8s z-}V6O-y{FY<_T%H0jEHKF;iVZzqJjYr&sqamjQsJ&N0>}e2N%_9_M zY!-9fBbWn!S-HScs#Hb)w7NWa7kA7!4a@(B@WIqbe)v;UkBB8wEUn{FE{=x}a9L;2 zD;4|~dr5n_)(n6+G~ z)MNqY!8%p;njZkp5)1|fWfTB4BBlLJzur<2homWutaGEr`l+E$+(7ja99~bT0Tbs% z7-k)qN$5`tVw&gxf`SM?6Xn0UI z8VV32+)kz@6y>m4P_W2Ln~WcU1H&7>HOWs!3#h(*0I~n`c6%`eY$^u3Dc^LyXlaI& zDBzcK&AAPmwPT1UmHteG1e8${ki*7g6&MX+f*lp&hpS3`=+(r2idqP3d8ySKma&=7 zb;ZJCD^EJ#VgsE6Nnd}|1NGK!79e4Hso3;2ha|V|xG4w)BA5jc<2d<%21{{FMci#j zzhnk;fj@BN8!*<`;_`SC59|F$U;(fKfBzh{ggv9aCkxXZdF={!zAoe;i?^P-sdO^S zV!r}N2905FXPVJ4gq_(P~h)XRmMK8O>Jddl2t|Z3M0CIyq1^v2ETA0Un8Y-CzAH; z9Iw^5>JwpiQ7{SU*nT30#l?<9)o3ERRTEjWBJcLd$A6C|XUtv1O z6W{q7{-*d)r!*;$3g+}xN5me1(n@UN$Y~usPqVJ%_X7v*aa^SSY`TxfS*ztox?w~} z(+f6b)$XW!or!9+6n4WPh&Eub4XXZQ8UROP&@K%Hm>JwuQAe4H7VHJIUh@Bf1O&(p zK4SU=NHDz_egxh_JH#0#03B8yq6tsJb$Xh@fgQzX#$}e>?(Wqx!fYrq-tb7RcPA68 zYq?$AR(o+<97JK1+_b%u&bKZ#4+119sT1tR;0;;Hp1I~-^mlKs56Dlv%oS94`T-gA zvS?@WRovfVd7?J-GqwN+fD;x4;LC}{=>-lQc{JKC^(SNBFOA(_{qDfCji_CFySsG4 z61)I}A`T%U9c1=nuYjtucu!eB26d|68dm%9K|q_huI0>2##Zv!t*0F%;e!pNm7vF; zn~8t9awqp-HLHthw+H%TSpuMxF?*k9v*QM!DM0tt(ZjCP(*c+WiURHqrxJyr_3AX&8Bi{a|nB{H^I@K^b{_Q$opbA@u(Jg z5dZ%c;ttAe0f+qev)f?MmuVHUuzmx#Oeu}4?4+InTE05ptO+p$T)Pd#^3UCY4)XL$=LFUXn6}um9?&n}vd|vIT0Wu3YhBafB zBi06k+IFxPa`>iF!VLTSm`RKpWtA3+2cdxQB|$QjqaY-Bjyx|$_EVefoZ)g07vab~ z2d?cf$b|vjoqOdExmiMjgfVZ+UJ&Q;@Q)?A@nijh!j6a(3V?!kKBnUV(NO9HdH^2I zL9(3ASh&DBy;6+k@4(n44KJTCX<_7cYxx2flYKZE_sLKNVufH2^G5Q+R@l z8!T?)pVk|BJ_?@N-p2mNW;OGIkL!NpZY4p5^rsj6%?1RJp+a02^BCKQ(SPj9FD?*D z#fQ<25(zs6J4+(Nb_3^e7aFJ~lEd12$CHioeZIRmj0x3#JC zTsG~^ae9D=gDpw$ck7QB6in`3TXL~@QQU8daoI?A4Y(pOQdrG`gRR?T@^MzMN&>dr zmc?a`a}D+1TD=Wt#!%T+HtwA%6o03gg0yp&ZtR4;xH!qz7w(YomE(0@{5}|u7y=xu zVOvyW^aNzeodDD6nW#c*99+;rADV)GM6EXqx0m+aM#sOCji-Z7g$2Ogu;4xLi-)6) ziSWW~VtGxUj~Wrc{AiT{vxsyZT?`=ofcw_T7?nl@>@wC+Va^0jIJ5u_Iul&M4qx$DOcp|ovJ>Ze@Hqse8lBwFkw5ba1VSt2;c+;AFmqec`eDT7 z5FSo(FN6`$iD5(sW#+@{43A*W48O6JhC%IMG>Xsr@jm%{NKnKU(FVJ8h*N=h=RSN< zskU=xs!~WQR2cM6=P>TWp=}dC2mj0VpqwI@!>LdJBwHk}%a}wUXXI8vFRjP^AzQ7y zJi;IZPw1mjHj}Sr>i2B846q!ud;Y=S(-m!tV&27a_9~KmC z*ozx(Zq$l1!#sY_yxgo3j+fIF?&U*$AfW>#nfU3MWY7Q)+csd9;5kof24rP2)M;H< z=z*(X>3Xn26n!~AGKrO(%_7)sKln)QrR=MUP27W>| zc9-aG7BN4$kR?1PQ;~hUf-BlW3hsP^126(F760N2#tfO4zz3835}Xm1i?@EXjfYK_ z|HwEBf!LNNqa!~!!3nBwKwV>%e-W##9tZqU0V_fQuLHwtXmeU`?(~DW34I{=B|)N4 zsT$;7zpwmGsCh5@U z{uEcm#>6w6yjEC01`!SWR@MEHDYNVmQcH6VD1DZ6K(ApSrlsrn000010pI|@0=`3a&_%ud3UmHILc>=hu=f3e5B@c|$F4?NhtP^tFC~zY854*3mH!nUY->D;AX*L#7vCjCv`ql&Km>9P=kV|U& zz6welk|{!y8mg&GtvQSb*GCLFgFh3Le5d?UWIDv#phwUcu+d(3M*EvS6ftN46?N5b|Ci*hcx!=s-z4-_c+-?e=lk5w8EmEtR)#_Z z48v=ohR-B-GbwcY8g!W|?$`Ktdv_Qjr9)$>@I=${IWQaN=A#S|nT0=S05}8Qxq0Mr zix5i07^!6cceTa}H(_tX9;e&r6xjSZ`m~Kx9f1MDnlB(H|1bPU1@};`@%#$R>J(%> z8-g%1(#OxohIYUQ=U>Cdj3sn-2A6(}-4cch54hUk%RxntYJgT| z$6yMb!Znfs1!>EAQB4r;K&~^Iu!wg!j3ZQXorv;41W=JMR673JCM; z3{f7~e=7_zN3bt-$81wtQMNtAgtJxPzPo$&4e$j89E@w;Tcj}S7sdy~j@S=-z)CW@ z`n*@ZBKeP8kfu+?65{<<@_6Q|qvO~mRs?>p(#N6B z`?tPu#euoI`U4#V;oMM?QPUhZU-n$<&z^k_Ivs>hstj&`Z?FHcuX5g8K{~{a3?8sR z=ndcyF|+7-1@-Ucpz_urNGuST60+4aY@_AZ?rgrp&W{d*orX6a4VHSH z|1zQsDFTF;H6R+DPRvgKBO_!D3Z(yB)h!n%O7;UqQ#qb~B5@&T3l-&7gfzmAOx+>$ z{YS-f)SYz5pHd9239Qf-55@seQAL~9fNM3DRH~D%Jv+}Ks zQIf$K_8!c<(E&9d_oJf;QFUBY6}=>yR-?@etV~gIutp-@?Iyy3IOx&Vl3rYf)2Cte zRW(p>2cK$^$|<%eDFBhSvF`?uO0pLvH4`&|2B~{rWuz8nis|SG8o#gq18VIYDLoD) zy#D`6<7Cp~pv$F;#o`$m3OLx-?+GkV{-gNl6NJwaU(NJwb_j<+9c-LG_&7k>p9Mzf z2yaf5d>QGmHa&&b0_5ffIina3ildD0)PL8t03$VRqCfqyPf3jd{;VDo(bx^vvg>?o zK<@Cd+kHTPzrr*DWJ!blxqpJ&dB?hwH+@gv+7iLP^D;q#-`@Ye{L6#Nm*Dc*&>(-S z^QPA4SmONQ-+xEf(*uKu+XaKwZE3!f*GCyj*tvN+vH7>DvxP!oYkl70Qz&Hwd<*&f z&?I>pHC75)D8Fje-T;TH>GfWA$j;vhYyY1wjX4RzpsU~oxiWO@|A88gMy=N<^#SVf zhPO1?esI{-5683@!ifJ(P=2;>35k@TZrtH*<<5q&zv=GgQ-2;CMTTmi)UZ8mDTf_; z3K6tYvBXwxa>J>RoNn`G4qQz(JTe(RDyk>ChRg^CiFd#)w*>gS9U|i3tsjz1!lUt! zSuYjm%_kv%-%RK$C}m6rQ_jy-3I_;*f>6Sm0z8e84(+yR7iw_bUmC2!KqZZq$)`9Mtn zQJ&@+L%az;0smYQcWbb_b`VdfTj7Tt$=hX8#u{QrJj5*wJ8>L&u6hhnKB;TS35^4! z&?AHt&4`0XANVyK0oVO5!h^@mo@yjAoi-F{X!4^6UN2JP`3>v0zs3lssxy_sjC?Fe z`zR0^FO{*U0sh;GURp$_$L;jLuJAiZJiLM@!i}U8!CY3t(}4oN3(WIN+p6P(afcl(8%p_!+07nFJg(Hbpl^3AqvV!CNJeN9N$UOt!!sIbQ`)iP-V??%!h z``g6Dbd!HZlZ#_QYNA7vQ6TV+4}4Q67tVQO6^cCvg&)dWqN<%UmG9SJ)7&WVArCM8Wt_ei=#Cy(caa-$mpaz`9|)S9aqd z-g5;7cXH;@tRpF$J_Jv%J?I|Iz?aV7ZVtjvVVU4o2S4IK3A@a#rZ_AV5D!}+X*q8m z3|d~OEqr$~>5%s8ktl@<6j30ky$y;GttV_iC?cxLpnDJjERf{AViR5y2n<2Swh?&X z#xt-22IunXgH!O6ez6T0buc{`a>#idd*BQlq64;+b3AED9){m9jSVb>AlIKGsq7)- zz=cPFEl;iiT4yXvm6Db`X4GKFTVfX@<$$=Tn^!W-iA&3CHS+ybejO8pL43g7PtgpJ zSiju1E0Ku*6Wlz-fJMvmd?ugmxA^Q8cS+Geqa>N=Ofdz9RGd-V)Y?p3M_9}xAz(Z> z-%j?h_omitXr84*7w;9Pgy5`5fM8g{%$fkn5AH8NisnI#UjB=eGA z2EkT(Skv4m-&rtEM^>j0>31X`5^i_nAc_FrzkuEK{H7Q|++deb*kJO&a#9KlWNKd$ zBawkd%{Ri{ae@k`KyD|m>BK#VAqxUK1%;XDqA*HJDIfzD$Z{5-bpFFNAfiYAv`~%- zQD!f&;Od@{OJD93f?j4JVAlEL^{Gl;UYvIdoXWK~Q-`v`z@e$+LMFT}%PoH!3Xn9m zDcCU1n_f0*S-0qmUP#MnpMsehMZXV0D3+Sqt77{?xAhQ7u5bQ&k!+tl5R&nfT9@%) z00001A>aVO13p9VVMC-uPXQQcZSIZG=ZbWT%tvz!_$g?b9=USi`|&^+Cj4#YNn0oe z$aMHDag&4El4u%EtxY`}JC0$-F(?sd^{#;7@{ge)kZbOh7ljJaWy)`MZ8e*2D;lSu zp@qf8#nfF^Y!k*)ND``w*}=ZP6f)OYa&F74v<)%SC(XH7D@wc)&GeMAjF?r&0{o6@ zDXdoHV+5Y+x$>^sSvm&*ZDO$wbQH9Fi_|tI35tZeh;r&wg@>5Fj%hB?L@j5hZHNUw z0hVkEMq*>|pq9xBtA(EtW7Q*+CFBw_rZy3;HM7D1*r+SX$1jZ%q_Mz?r#4dEC(BZK zM!?MHICw`(mO4Z(P(z7Z)7=6z+H+_4DHKE{88R-mPOlsjepJgs0O_AVv?iVD6AzEU z^P*@K-WKZtR_1YR(5ta7%=6cM3 z_8)GGq9#eJTA1A7d;C{*PFoRE4%1Ge`N@tQYw}Jy zwdfZ432eoT9ohelDkzqJBK*L!fcv_2^p4%!i}Ij2-PxY*#yO8NUaQeT?yGSyOg9VF z*ngI4FrbR7g5=d^!)3Zo&`?Ca0RC>1;LK%Ma{7KO<275`pf~u1wxyuWc%%~{U+*g+ ztZqR-sArJ^ejA~V(56fhB8U5XK!B;i9%#TM{bBy-!wA}wI?e0>Hhw_O+x&=Vx+*6&UXtP(d)TAy~?{V}3iXnUCe(T*c#T;JdHDOrx$%UWa4>NRc_ zULH7D!|JBchg(0kd4hohMf!eV_nm*%_o_{^)eBG=i|L^M-4_d#1=D*HMmb>7$!7n4 zD3)7=2FKO5Zu0YZ!iy!h3zn}yAs${H?mMIl251?8N2`z2ZKxr@Uku{KGF!j*|3JVs zdFvtnblP`;kjIT-kM6whuf9|EAC%&BKSA6r{ z1t|dg^qV`Q@z~jbv|y?ESI&_4sLP~M7ra9F&twFX$Vmcf z`PbI6JP!H*?(PHqqyk!T#^U-L8js7$>Aki&{%y^R6A>HS=x&2!M6hujd($i~nAVEyHvNJqHClAD$2Unx=uDi?(cvd~fOht5IhIea$pgbMwdAs@139WCb9(fR=d|g07BteQosNZMs#V3`4237 z$5Dxa^Sp>C5}X(Pj&JM`o?y19(w@7XpLv15^Cz@FAi=G=b@(-ZYJb#dK+ZHj%C7qK zSI?6Vp7^h{9m9+@m;c+IMh{(JSbZR)1^h(sY5V=j$C}`hO6GIe(FQOjzi2*lQIA|! zK30GDEnE_*p)`wYU*(PSB8C+4>Qlwj%mHsD=BK~THnMf|{vMWaq&KzIz4pTbVzs09 z+*b`WEw6s1e3McN0egJWbI4MiPFNCk*NGIV#)Iwp&29f~kfh#Hf8WAqYmw)DDH@uK z$s{54HSe{nvXOiO(YAfBQp11z@^Q!+%9po&GP`=B+id$POO1~S} zBI6r|ATs}Vee;}1%#W>Q09CH+Hk0o=!dmli zfPh$Av^uv=-)!wvASrw83}c>Zs=e^#I8Z?~FuD*I*1Q-j?_F|LYc(^+G9m}NeEwFr z&=hV6<$)+w3;ZM2}M_Euoty|zB+sW zU(E_m@*n%2x5UPe+;$SB4IihQJ^#s@*BADuo2PH>IRcQ&90!4?iCwKa;s}wDyaO;2cJiPzug3VRca0XIN4;Jo9asg=36lm8o0c#?NZp253;_N#rx%kkgUNaqL!44@JUOvpdN^Zrw8pF@U=dac9mY#ezG`CG#)_U;gA}|NM%U>u803T` zb|thwXYd*Y)gG`iN&x&;2$#R3-*pH^i2xn|Z@O5=;p3F9Q}6ow_=W=w!qYi3S#-MZ zEOUA|@d5^!&+Wkw6PW122@IFD<^e3=I`wfP;yZZQ?1RYd)M%vJ zxW|alyvoERuZ{*>00X|YxoM_ zNQ#_Z+(YJYo0?3N(~}Cd8HTVpb+8Owxyvp8{@Al`7Kv}d)&eKuK`=1tq?1cB7uT(j zTeqQ87M4taovJ9c>bCPcm}Eom>p-qBgfu?L$7N1&-~oX_K$%zs+_$N&&<|wkf&Wz>7u0`Z!aK!)+#_`Rnf+Z8_jLy{+TEQ-diR5Mhtw_%WBpg+aPeBc;jf&;qR<6EYiy`i1J2UPIgVM2_|9Fe!e z!MQ=Uz1||f!y`HIV?r@@)KJCCEt{IB3=-6-$caON%;;N9zvU7(N)FfzY!(JVW6XHp z>=`#C0r*xWHiIbJD=d)!d?4sPag3u^)!@DvcghRG!^b-G%uwP?dE4cMu=vqo(GH;j z|GxuQswWvUXiE~C5B3Dj%n7#${m2XFE59r3ZT&y;-MpS=V;#QD_s!&7w*)v1U1Y$1 zzIa}WV*8aiIs$OmI}%(cjiQ50H8LAJb7>fOi+A<{9Vd_(kB)n6^bN`&fZ!fLJxK6W zAe8-*fEqO*Jz){3%ab0Pj_zc?NWO(UzzbUx#fg&k--S7|r!vto=l<(jr%O0r`2&tK zz>Vj3$Zj|M440iUh$}97?AbM=370H3U%E73y6)#?w13-%_esyo6XtrK&9FsY7cgZ_ z_|)gNuID~tMhHFBfz}Fm^UTCf5B(i*-%M(^N8xe^d|ecaf5CS`>c!nqe><}nqX{-W zviyB8)Dv+w2v21Wqmg`>^uzF2!(mlBWByllb+fE6~t9R@gR_%KyEGXhE(!X;37t@0R&4f-43OW$p8Py!M#hzYuWr;l+v-Z3Y@ zNDhgWn>>M*{3io%$$S$B0f2N7ph{t|K3AEAXfXHf=^WMz3|^Pkq6#Eo9~M9ISl}y< z)-M1kcoY+gNYW1$gbUMSRzji>EO~zrm^R@^x&o!Y$Z^xL8u^w1ctBKZE&u@lJy)p@ zfg*avLAYo8gDyF@RUrrk?ihU7jKJYZOTY}0O*#N8}-I6u7*dKb*vFJ|CQ%Z}*FO$2=7X%kJupZv72#9i*OvpM$?< z#6{&*573MIv!CXOelQ?9C~R@VB|MdGI0dSprjuN7x3*%J=mq`N-!dEsuz(f?ywRlL z17C#iU>)2}SBYExx2;%`Mm^avVKC{jiZ?o)LrhX{g$~^MM+e2kklm(uI7|nCEvm6w z(FFqZ2JbIkE4Ua1&tAhrE%p^&3bV&Rf72rT3kMg?mQJ2!+`9@mI&A zYfR~iJRYQi`k6F$W_|wr@zG7hb6q|Mw7vfI|NXSCn)k{x%m+;hxYHbx0X9I%zifIj z5}#m{K*QXej(cS~3W2i?u8nDK+*X7^0h9TKYm|sV0+s2H|1g1@t0Ai*BcUeR5AlL> zfH>B)b#sXbvOy+E1|hZP3;%wLTau>EVQdx3ci4K{M1k)1mPn(39r}JKw$)&;0EwEkim&XAA@=tz=HDuKrd+c zi~(Td+)RQim<=9q0B{OG!hwpmq37`L(jt6fKkO5Z8r}nrC2gd<{tE*Gn^FeW%1ZR{ zDG1lh*+7Z75iLpqYqWMHGdkaot@M+*#2%fygt$x-YI-i?S9?MVlp z;>Cd)_OKnZ7qrOXiLySHuc!7PPBbmS;Rmh8^uqQVj~KAsH%iSOMDoYT<5lIyZ2`*s z+gy>Q(1*;S&~+2}!k6f58-8N6lF+-sZ9ZCO@BQb{=_Z;4fiG5OV5q5oSZtrzZ1=ASe}JwV5{XTp^QaL2VEkG%T0LmS$fh95vSat%SGnRm%OqgaDKvbH-5ZoK^v4ff|s z+`e)N95BJ6g$cp}VYN3d;8pB1n@xH&0h>V7A9Gg+!Zub1(}B4fRQ=02Nm zLH~n$u^A7EpEwGS8#L%0uj54T1BL)g?$IwkJmI4H5~^~bHFw%$SsfDJT_l>YNw{2&8JHQjkx97z1`RmLmmi3U}EcDctoQ z3dIE16Kg;KfV5}J`V9;T@n8z|cmN)F015cOfH1-lQ49@LK~N$8k)eaYg24ahlM0Hg z@exPZ`uy57h5-9$iGe8y00ICOQbZIEZi4|Ar?D1bTmuY&fC={Vo?ckyDs+WLiFKaj z8JZ>0}RG{WFO25k>CNTk`e+uzkmT^BIG)P9e;%$ECBLg3ZjDG6T*@u6n}wl zW(%NR#D{=6y-x$fusGlbJItdahu1!U>_f5hB`t!Am`E{Vxo=%9vQ-RyM)=x>`hLb6 z)MKHP1_XA?t=lgH1QnoSRTB|W-4km%DIyGrT_Mq(`(Zs_l`C5EexN3C@22Ta-V||DFj;8PISL&7^TDqB&68{AJiT11GdjBc*h?{>$K$;69fu`bZt? z@2B_Nf1SJa7#C6w|9Sb-;FZT0){Ez{F4y9}eTVe)*TC1$_M-lBc!308&H>p+6Srq9 zFacDvNA@;86;i;}HNFNDo~FMJlzX$+`alA&$^Z_8{)9%4@L)5%$YVf<`VB_S<|_+! zABIT-|5R0U-8D4KL7pEF0%W|7i{M*LYJWk%jupn(*bFKU)q&0b$AD25fucjq3rqBf z^qyhuIC}n@_X@PMSTC= z_{tC$M%uBs=VSBe{0cCsQU*X0tBaFQehSrn_V4pI@6(T*nXAHsLZv@zJnX0y2o@@*(rb{c}lv=K&%H=Gm5@V{fKO+Q- z8Ulep40uv+MIkXKN6Q3cIzanU`F6oTyb(6ANRb{2rdyKcq~x-&U~wEr#(jQ5NuSN z=Nvh#)>|8RU@4tN^9!mr0XXWD`g}gP-A2%I{W3t=hc5F-yRC>LGXk9*(8AlW-}=1k z{wwoUdVi7>C@m$bRn-*;^NkUQL1aSNf!_Bj)>QHi-%b8ccnau{8;|Bzl+oE@_)=iW zLBNf~u$V~qcQ+$HLxsKb!ZCNB$qIzQ2)BOTKvKokRqCjwGeLgmQGp`V8&3E>dPUa? z!zPl4cxaBcz5jpikad3EdY7(l{J(sEWsg-79-^U~y@A#?52IM{uz^pz`Mwk`NeE29 z^Y(!690*VDHg%WR(A)iRoQ=dpHCc?MN<%uO%f-^M(VsP_XIv-N_z6dxYzQRmabh1k#+>&L%F6Hg=D zmcKE@k$F!6o`=CBQe=eOhr+#TjX$?!-#-_TzOxqyvELJN@kd!9Op;O|C*2HJ0^2Ps zoTYto922u~cGb1=IqXO(-tTTME=(?w{uu=mR zz3Z{x>be2%J++{>$3n+Nk^hm?du=Cso+7QBN=!Vda78Wrb# zBU?JrK3`^n;3;whp`9OLRIKDM4G%|ntg=NE;I2>ngHA%5+3GOVSExvWM|grQ z@D=6(NQa%y;N-jGJk&E`&eCH|p3+gPZ*T4q#DuUNy*DBzlZgW4q>B~V;Wjib5!JwJ z{6f#q*5l=@e2496rEYSV0KzB<_3lcx|%VE11K_>%nZ(2`>4-u>wwsRl#3K?V~ zGg+U>Kc4bOvP-C|WaglfEFN|r!t&1~ApH@XI|-e}o!GvvCubp@pvJL)Y?f*MjlIbG z$`-dDwEYPw0wb`1T0!U$bq$cE9sgItH5>|rJ_S}pMN_6Hu6<`-qgPQKwOCEb@R*8V zwxh~B$!1QxP8Go3cyO5DyyMBu1o5;Z)1TCs(OpgwPhPCovvLW?Ll55NT#2x}?h|^)VDT8& z_TW1>exXh1_le`Waa_rV5ukA4Bu^_2m*4cFlBfS{DH-*%Zt>lc2;rNvM<_geqf2)1{o(u@uBmac*wJh?LwRhe-(v$2TXyo$} zU~R`Y*{{xhrElP9u4JG3!vIKDH|+22CjWdRiY2@MevsF{TKvRHkM%03saL@Heun7$ z79i^vh#m$NcAh5@fB`O+pF2Y!Es2^_@c|6I>kfwYl^>Wex@6rovH$(RoVL{vZFl}) zOq>}upW7FO2_#%|apM%zI1YBESTH{x@WsKlVeA(*UzgFlS@P(`l*GGxIsJV z6vn(tr1#z381$BVr>E%Q!;F?<@D~?J?|=R^*R_^622?@_y^5`caEY_t(wcAFpQ`xL zaos&u?5@FkG0J@m4zXYU6eKU;PYDcrUvK}lG_|w;xzqK;wQdTE(yWpwgl_fe7mzjT&WciqDVWd{6|#;qC&V`oDoD0Gl119t;Z% z^UDkgIgu;QiS;gl|GMaR@X^(81t8{mWYk|}L@3aQGa{UsrLq76lxE12$n}Jae3iib z4F3C(e2Ib+iewpr0|uLcY!7@W5Bgl7*tY-ymuPDzvJ=<$JA6P?9ElY$7y(4UkqhH} zIDEjSh!jbuLP>7p3v0nlQt7R_#h;2C5h_dnZ|C4qhGw0rf3Lwn0aTe+4WbD5WE_k= zV8r@ReA8-1`<~Kib~KIuyni%JebYf*8~Fb01c6puWVSv1^`&arqO|IeN4PK;b_%^R ziWHhNA)-XZDNmIW;dnDT+~G4x{YqEaJ5uBGo@bt1!MdqB;Q4Kk6!@4QAj!KQ{%=!R zi6xzeq#XQbhY@z&G-38Mcu*#Mi>DRhnv)CDKUoAQX~V>VTaPi@|MHC5VI}!Tg*%Ij z+q3oW@@3xCLh*%*sDQpZ-9m=ZK_*2mC6iZDt|Xy@xLcv_oHs8kktmV#8F)Xtxw}A^ zC9@7tfb7g;q5?GsXcim=mgV#EqYvLXON2PnRR+F(TmY0d`9DglEB^$RJLE>zr(h3| zjb69AxXlk>-U03bC4b!eZb;a2e3l^$@!p?UyU5RUF-k)8aYmO-(`-BOjTzi2?7CG{ zkMaTy&xe21pVo6PhdPZ03o`(Xt&w~RM>7P*P{0I)6qX@@XmjPhWC63Kx*Hfv^qU$r zmf660cSEBupzP!O&4ymfpWnf}s0+SMVDn3W-F---Y|ax6#dB;B8GiFqTZITeblwag z{-8fVTiK|KvhRcwaBnfT`#)uyl4>2i3+B99YF)qx0M%N5|NPN}QnTs~_x>2X)~A10 zmUW%A{6{-sMjdq0y8rJ-J__vi{_gudOB{08IZO|^c*OasfA5vINS7b{Vukb!z#@LB z@Ha@(sH}0F?*0aXSJO?)`^EC$eayba zd)=w;mxmi#e}i_Rx$7TKUA~AcJ+L2+<5Im-u}d)sRi(gw0RZXGZB~usp+Os`Hw-OE zCmvsa_yGm<3JTYG!CUn*D?X$4VV{aXD1ob+G9fc3Hp$C$E4Vinm!V)E8_&eQY!n9g zj+n8F3xeVE(@glX0Eo~kXBYZ+@MHm5j1?99>yUbS zpvJ)hi>>;2Snqw*9CRQAh`R>$@!{w;9KLydvkuc5U>82oh~3N@p3MsX802Odwxu9r zU1#|KAUY_11_4xL6f!^ej{}z0fm{gphn9 zjGicJZ@4?%v(ziq5hwSC5C%xIx86E23H9UD1HaHqR(|b)C@sKVfb%M>{f?P?$@$G~ zG;QRtR*t3@EgD94^pF3N`8iDn+B?c1X+R0Tie{WKw$leAf@R;;S(pxELv+YW7>UPE zq5r$>0#Zip2cU7X%ZlRlR|QWD(!bKXCiOL3ph-T(=0Md`4WV5S;i8I3NUbk_n_0_5 zXtE&rx#HM~TL<4vRhfw8@{Eir2*F7#O8y<;IE|2hVN9f?Q|)>Ut7QBL11uKdQE=ui z9?g&Q=4c_}c&oKP7^$_tr$Dq&AcZ@=eGC0jadY(9=|d7IH?89RIC|V}6g=VUmA-?d zsXVRf^-F$c#5rq@S|9K>51d(5x$o`UlgeM!|H*O{Gv;`VUf(d~bDL`>$MH?ehi<@kqK>FFtX z_*BgNjTze-sGw}g5H!M3B+nHGm=iFPV7@>6%Ajbb zW`{4TfSzA^t(55>?Ia`g6r7OiKUmyBN~&`Vuh*E1w^|?J7$6&w=p~Y;kH6rx@WEmv z?%s6seJ_)l1y9XxWrgO+MiX^NPzHyG7;I)-2Ku)i@X8GYBaJ2TIc__^;`!K2veAHf zcQ7q^h~q}*u6UVPbcmCKs~@$F3?r*fA;9;D;MCZ&TkzV4{d)e~XA}|z#~d{UfOJ!t z!13TbkO8&#Co}&~fOJ2qC1Qxx;u*y(0hR#H00)l%cn)Ne{BG|a9s?WIT9v#Nfu;}B z#`ZkH!i|(%Q+P9aMw)ciH6}iYDIa{PfLSj93SbgH5r^Q=dwZa0?hL6jIzdxU!p0z! z3ILz}>>HH8D<&5hz1_$7Oqj_>aS-N)5Af#{Ei{kjz~fjP4NlciOyQ~{;hBY!v7&Y^z= zNv}SBAjEadyrN?}ZP2jjl4TGKB*Ly>EvIs}_Yi=`_)x!t(>$*o^gOwTQZ)Q>tI1b| z3Jc#KevrnHAJm9XFK7wdzp{Godh?CWAMA^>KoDj$9f5!D;+M`x+~i-?jvz?U>Xg+r zg0lH%`y-&_*im&ms~9KzBG~fw#a(6g9}`0x7%P`4)5yCR0YW<|P?i0vPao1B(f&vv z7#{3u5i1$dp2)EPI-l5qng%JQYRsP{@1s)dNIZpJ4-X{=g2 zj0)B$=RT=-3y{}fNF}WYnMi5Z1G(a%gG5UVU}0u2UeP-NqI9tzJ*|G!*B9)UF_6@}m&{p$qM{ z5EpGO2>$iM>Zz9?P$Eotv@TvsRPdOE`4?DC%3a@rne>8~Qed|S%y#a>#h9!beT4)k zB{2c5HGzFf%{uo0bjx91{bO_$7B743har) zG%l3sF!0;}1t3N=1cgZ8Ia()?57NrAXEwdQ6IQKEPxA|Q2>pm92nBQvoerT$InMk_00IKoJkAa?RV#y-6%q(g zs^jz+nBo~L$(;awCrTTMcyX-UY7cDicD29SI?SgX>H)9QaeQQi6naScZeg|s-N!j( zl_qtX%ogpxas=Hc&Mv4da5IE0CN7lEag4)Jlj6WBC&#YpSP_ReBd$L5M3O9aQtw>8 z77m00rW7<-)NlY5!xRRjpa4%0{$O5!^}5u9tE?~rHePNQ_s0MMe3LdhbONR@FGqg; zQPD0WQ{WD&7Ek|QzY2s~*+cTaPg#O7KmkufFwwu>KgGI~5(Y-F$`_-;bOl|%7mRs8q>;~)T9@BmL7KxFE5T7O}Vs^4j5Foa}mw=ap4eTE*&Y|Jwx74zYAYDO#ygy9OuL>HquS@py6r zz;FqYYvS{W*WiFgwX73)C?`P8r}=OmfRFI3*68eFoep=4F~ER1v2Z~5Py(;nxKV>9 z#uVS*=DJTaG8$bl2dYT{=BuP!9esa#6Mj+=Ww2-`AhxZvAbRWtm31X^b!Q6fn6g zAR+@sne*nZCkEV~llS;=OiRl#9STZ|AMmy>*sYV=3Rv3cDPDMc#o`cx>x=q{vYq6(!z?PJ=K8*cz;moQllh8BDTdG*RKr{s$aM1V$=POw~{nBhpOXcpQNXNo>WK!e@E@(}n-~`(u`6lVJE2 z!VhyST{5?&Zh!?4|FVb;h#OnGWK%r#>WL`#EYPFQfB^MJB_JfQu)tcH>`~zy4=iad zX!Aps7kfa^No0YREt1dPKa|8z^@?~2=+UG;wH{)I9Bo(TSY_wp4i9+TB&%{eptt*< zw=)CK$=%3e?nJq@?I`lhh3cYs?9trDp^IG`aFSj&o!eKEVXgT5TP6t@lAwa?fb;IYV)3y##>Z-6A{RRE$vnK>|UnVa{hWjQ3P`s{+!YR!P|5V$7L z<$X__Am#~JppV z5GrO;JOuu{oB$$L9RL9i3bGuyp|4>z*a5l9laxvUK`|BzWfB)=NgPHWj4qJM2TQgu zR7(@Ik3ayoV~_wWtf$~XXY-h#1-KhPfCn@U;AVgtPbkgt&mQcyO91Ix|JB9;aL4UO zR<~_xs$-QhPsV+?jSxRK(|g)ogL7?Ri^8)xFkVLs5Hz~D3;ZR7zJ9u8nUM~$6| zU$|HEk6?fTmNc!P9)}{+FcVP_17eY<0BPc`GO{Qr5vZeEJOF%mz)tKu4DZhHM-8tr zL?$oa{G_=3a7tiO$y%mhJd1hWNE-zVF;&m^~*GN%QTR7ofK>@zNKoJ;B zkn%E_)kE8irf#G;!+dNfpe(3!_)cr6vqNlQR}<_KSJFC1;+=3YfEI`{@?|E z=K>@_%c6f2F@6|AdcR-%iCu~qyGyPhUV#8tFE8~F5N-EInLn@qCAoi_rhp;D@Bz<3 zz9KmbfUmMKYi;zwTfzuvWnFTV(oz-EHKMcWlfyPeM0{dK$(?!sY9T4 z8^x7k<)$kY=a@@GQ9xTFZS?$M8ALF1_4tvfj2G%IDT|BhsxB#u)N;0O{1}{UC>7@~ zR{E-`AgX1JsfhpbLP1IW`Ii9(yzGDO6BCN=+AHl3D(NG);MUSfP{3=_9%k!7O!&n= z;XsP77pS(yf9#$gj;Ek@}BWVQs zs}BNjqE)7WB_~{tW8-A(;Z1<=jpBk7&zrq%WFa@%hE-e4K{O8I20e3~S!MH`mLbR? z-7Y8|f;RWoHI4QmpFMC&1aLxE731zmQ7F2qdaJ01F%AeEA0L;}<;MjF1i=r9tOe_< zziZBElXd)Eb3QXoN8`am+6Y#fHRoWZHw8zrvhR`IUwkf6LA6zjWFuih)&R*@oYir- zspos|-`CV=*~>httf-vh!6>y=+FiPW7Vi2#9FQYv*sAy_)~c$g=NQoIfw!H6hiUr2 zG2&s;p)E3u9!qtXeGJ_fa!3eVuHGQM*<=_C0&#I$$pPqwWg%R+y==ZqLlEW=3^eBA zy9_XFk8#z-#A%rw^wrM7x!LpA1k5QE)Lm3lRTow6)Lg_0Axykavz`9oTGdPtwR6%H z@PHqkv+mn(u!ukk+)o(~V(mw-1>BulAF%=$p@L=70UJ&uQa z(owgVsf&WhfUF0s1bcxCO!Ns5RK1U~d{Ng(C{W(|PzIbf9LGy?V~{_u;l5nNaOuEH z^NhOG%7D-J*Bb!xIqUapZoK=XKK_|O%y3f4shK1jnyo{= zL`Z{u`|wZ(3VoRPdmRERFz`kvE>Zq0B$ao+DDX*DCUkS*^`o3|5fyg9kq(9oS1?al zWbYI?Tu+Otlgz$!bt#dBV{zb?u8im)emmymIW*M8rd~rmJqC4(@{|;LXtHTo@8;!< zE8)A=p?E-93-;y&R*p$!U-(xbP{YPZrkn51R6xqenDovqhiuOI>)}KZ?>GnN&7{70 zqa2;X-x){ee!EAcF|IM4^tSi*>{epysc8O~QXd$)jdeM3jd=#(9mQY`S(%?mnKDji zW#VUt68$TVm1IB$9S`J%GBA>&^z@0+<^r{6uMT>;HQj&16sab?+i@N9>@|W9C{UD= zAp}0}IL~)d=rJ zBSTUZdDS>D9W;CYi=^m337=5Lo4Kp{K}9rvCVtZp+$4y?$@n|Z;`Jz5%hp}W5HQNt zXpc#f1@Z(7k0|QH;D*A^+L~e)_TFwDa4?u%XXo$pc~x!^)Ro@tH2hDr7FG9*P%t@p zcjg#yf}$8sJ@*dHU7Xn_A0!NSre53{GL;qBHx7cqwA@4RmX~(*AM|JyoH#I0|C7}I z9bsy@hA>e{mSO&>Fn`x1+;aV_J&YUxMC<0a{i^dxVTu(ITfp9O-+k2j%9bcihqfpI zpxSdL$&4Eev;*uP{uE(+uc%+sl`?mhlKPo zCPm6o=IdY4L((f^s1DCr$FS}Gwa)qLwiFPpuGQ?F35tqcw0+x$yizRuKf0XEY2*Tb zCXLb_5E;8+Mmb`()ewYLMN!Q}v7>Q@dN^FN?&Kk`O;WIRR_vZJ%xj7d-QpkvBUzwP-#k5P400xw=^ z`XVlYn|%ji{73=h^LHo5(a0XHJ&Q|Uzp-W1bYV3-KKn_!DD&Zt!iV!`CG5%)CnEI} z^=(ZcjlCNBz<=w&{QlT2-To<-;Xw!fsv`qDGM87wu?P}2G;cs(7Cn>^8ioZnUnVy= zI0`JiYZr3>AiUXu;ETXQd}0k8IfCZPfE|L=09zu!%M`|t@nn;Ph=m%J(h4i>>qzms z+iN!%p>vpvaG5X*11p@J`>jcfrfuDgtS?oI&K~-6Y1=de(hyU2t$e?410C}_AZp%km6yyc^}$iRM>cGpPb(#ZviOnt+l2)VCL_1q;XV&I zJAo}}r^vP;$@pxCfE*aXHI@`UAagDN72S8A0?PIwzn3@@HAkurS{&+!k*-KBqCnS0wvw2%kRFCNys}AwGkDf^BwS&hs9hgWQs$cod%`a zH1|EdiwaU&l^UL+nVs47YrOcvA4iRYV0z#N-O+^ULfgDH!jXw+^LjqdM&P`93mz^ge&oW(=x@|IHNe zR!7T^{Ysm?I;=m45$}M>oXhP|RfQxi0pFqke0`{B5U??*M4AJ_t@MjzZ9|I(p@JS!b<=wUh-PK$+a2P{+G+D4hRHLSA*-3b*y8QYuWa4iY(mH4f0yPD!!uhtmgV;F5!2u`%WI9%9sy*` zffvW;M%)DTiRif2A?*W%qJjV+OJoo(jYz;Kn1_9mr>T5?nq&B-tDku1F7a|)_-TSZ{62M6g0LeEAO}sy&H)ew2?^OYULu9+PRyy8YdEmk`{MyQ z%Pocy*gec83<|%IL_YbK?v$Zq6zlTga#G2<-XI{@4gZ1sq|dnKc$>_2s;cY0ASJ_M zll_5P>TCq4fA6y3^4Wj6e7GArKYX9}Okx%b9oc`A!Za#0|M!Z-dZm3-|cHP>`zL0hoZm1?l|$yN7;YW!#LycfcO{D!SeW z9!`3oQU9Q^P9rzrLAQaGx!ryL)#JL%&`2r#2FOqOZ?}NeyJRH2PJut)ObdLX9rHzx zy#OKaMD*HY$@6}C|C>+j$+83aw=sNr_~+PP3?#-~G9UPF-s% zUkuXEXm*to%j}8`B&T$b$LgXm{rIVg-s}WGz^g&KuIRvgIy6H&yfoM|1j7(o<2(-o zMZkog6KhP>wJ#a`q7r;fks#9VPd40i`9XIrDlRTA#-)t~k5N2np>cC%Q|>~FS+cgx z>7${gj~{>}1Z8!ZU;>Z!*d()n{Mum5G>S?k1mnB_1OS7;_u`uX0RaFTuM>P_7x-a- z06=g7lN%G*GiHFS%Y%~E_wi5w9IAZwm=oXJ3@M%>0lkI-gg}>@y(jRaNr4mPHV$lV z86l*FE+xUM?cL9k{!-alG1)ILwiHEG4|#CdJLHG?#$Vivyc#vT&R=;<5RM25;uY|q zwg?sf7|{cnKpRKpDaZfptv$Ev|Nmv~QT6qBszWaHgSXH&dS%b&;U%i;bL91IwBP4A zKm4WF5@Q_V>`2p$7_r1jHA$4o=wM3JqD7tTlUWO@=_v%cdhraAw3#|{{uD43ZuQX4 zYN&tDXn*VF@5ACIh2L6cg!wGqRve$nm_*VU=*RBeK^B6R9Qfx&A~o_pL}AUXA-9ze z_`_^&9cL#Jp=L~O9+%Xz0|TnsBry=*+4l-X#o+`j9GnYeid-a_z{@@6(YW1Q&?uCI zx;;>h=AwDgJqZivTALO<1^|@8uad0c$UD13Yq9FY;jW7x@L4y)V;{O%wFc)nOJTNOz zlspe*&JPy>gQxk=&HR7R(!YK0yhabxB|3o!3gEaXDYE=ErW7O>oDqEex%D81n$17a z;~knNIJD2-=9L&eQN#uZON+H%{!tj@s(Cl)~=N8!Pxogv(IwZQN$&AAcU-1Jcg z0$tO=TWxGvkD<~qA!@m&5rTF8qo;@}%_cir zR=rK!*gGHGC@W%4z668Ct5U-b6=ksu`2(}h@Lrw{(9@BnlAn4j)5srfEcroo6cfN*VMl~;IpM$p@ zeqwG!-M(ai^@b;nD14RY^B{jv9@ypV0J=0Cwh>1aeIPM6|Ar8_sJep~0;pQJ7?I!J z!-R%Kg|HxH{|7-Mzp%;r^2W775OMB;2v9hPU#yXL9lXUlfLt$kvEe@d1yICd+XK2% z*cdwF&vyf)K@%Dqwj<*m(z9e~iVk9d7;Fy!Q5rh`pNSKm z4SNGrT*jC>zP!q!;-2$$?OxxN%C$(sDAfGpA&mzY5;Cc$pm^e7Qh04N5TLgjXcz)y+hVSo zVwRlCce|3FQgV1y=Q$5eN?RkxU=s&-S284jn;Q#vQW5NePV~IAH-g6s|F=`98l?7C2)Q!${7ml z?@nb^cS<$XFeibb)kfkU*wxyGHEV-#;mW9zIkTQh918)pkvq~0@1z4eF!u*wkN_l; zvwT!>l~)fwaiqaP`c0uEhilj!#xI?3s9%w!2iV%ui9XXG{ya|skn%GV6u*26EMoY< zYQ~8%xe;HpZ=D{Nc$_>&o0&Qr>!!>r5MkM2D3ot z$;~80ryu+BpTJSZLC~euWB!2>yDth!_nsZ51OR|-;ZuM&?d~&dH`Fnakg8oY1__K} zUuWgAs1+onp-Bd)GDmfCbNqh;@DFE*d4$32v0TDY?Z2N{jX1}UO{KJ=BZGuO7W>CP zMCjqO27-t_OA~oxE;maVV|KQUs~GH2ngk#vcX3BzChyb^tkgTb-bZXm_r`W9ir=et z=pZ4mp-Gtf$+D?gCN~Zol@HpNUK0+zf4ZjdquX|I%gO6kXqm;Ze*C>Y&NxJ1N(ftC z?zc$qlBkv!{!gz6Y!W%{g(QNEiE8Xsg+?+$miYnaDg-0?QOm?+Vs}k_9|mqo(&S}#*h?|@W(vgQ06`&% zOP&B44JZ;hox~g&Sw`e)Nb@vDL?ZqIl=TE3rS3!vvb{VsDJ>DWcTmlh8T1?Yv$(5+ zHY+o~=91ZljC#cPfi;pT8*i^L4D*Yg<#rj|&v)$_v*nC|(4)g?mvxz>YDx~2QI{Gw z=l>qM*~>yQnWQ_k0FA|2x?}Do`{{)OOPMzy%l@g~f7gSsj_D4?!Ue8Y+F$a4b_drW zj@TbM)g^ZhjObERxKQl%S&u{BW7IGjow0;hkN4~e8Pli06dkfj=l}if7kT(M|NrCv z-4nbm_4yUyw^_lof^b=KONN%;8BdjfmnF$7Pz2LFSgIoTR%UYs(X1&np+r;7&maa) z{a@ed>6;*C5Vx*_t!>k0x2Qu)Ij}Sb$eQsVx*H}EW5WM{`TlrB9KU57-yZ&3X`z*< z+P#Nm@B~^EV=|6n6ddpX;4Nuv1g9_oJjPgfUf9H-3XwFgfbv#^kN^-2RD0mktb=TfnZ&K&f3s(cljN z;pWl+7;!7(E<8ye44?uJXiXaI+Q1gzSSADa(tKIoTHH#0(Fwq>$oYHV4-~^a9V~ z9V`w?XNt@Ch?Bf2A&bldL4^#DzcEIO|DgGTP3Dsg9sJG^X8+Jhsa`)~Z1XyB5Bd!s zy7KKjYJlKrC-`)q2a9*${5lmdkWQQ`LyeK8xqaXfmXA6mFU!R@e8B(}|IlcA)^__^ z&w;?!2!I*_gHOeQeGD34-~b5A`JM4!{RV{}%!}{W{~v)a6-@{%=jrjrd5UX{B9vfo z{}PZK8tI#Jgvu6=gUBUeU9*yQb6JVE=lb*I6%Y5^P!)j=AfZ#WEB*0B!-=P5zi +#include +#include +#include +#include +#include +#include + +#include "codec_def.h" +#include "codec_app_def.h" +#include "codec_api.h" + +#include "utils/BufferedData.h" + +static bool CompareHash(unsigned char(&digest)[SHA_DIGEST_LENGTH], + const char* hashStr) { + + char hashStrCmp[SHA_DIGEST_LENGTH * 2 + 1]; + for (int i = 0; i < SHA_DIGEST_LENGTH; ++i) { + sprintf(&hashStrCmp[i*2], "%.2x", digest[i]); + } + hashStrCmp[SHA_DIGEST_LENGTH * 2] = '\0'; + return strncmp(hashStr, hashStrCmp, SHA_DIGEST_LENGTH * 2) == 0; +} + +static void UpdateHashFromPlane(SHA_CTX* ctx, const uint8_t* plane, + int width, int height, int stride) { + + for (int i = 0; i < height; i++) { + SHA1_Update(ctx, plane, width); + plane += stride; + } +} + +/** + * @return frame size (>= 0), or -1 for memory allocation error. + */ +static int ReadFrame(std::ifstream* file, BufferedData* buf) { + // start code of a frame is {0, 0, 0, 1} + int zeroCount = 0; + char b; + + while (file->read(&b, 1), file->gcount() == 1) { + if (!buf->Push(b)) { + return -1; + } + + if (buf->Length() <= 4) { + continue; + } + + if (zeroCount < 3) { + zeroCount = b != 0 ? 0 : zeroCount + 1; + } else { + if (b == 1) { + file->seekg(-4, file->cur); + return buf->Length() - 4; + } else if (b == 0) { + zeroCount = 3; + } else { + zeroCount = 0; + } + } + } + return buf->Length(); +} + +/** + * @return true if a frame is decoded successfully, otherwise false. + */ +static bool DecodeAndProcess(ISVCDecoder* decoder, const uint8_t* src, + int sliceSize, SHA_CTX* ctx) { + + void* data[3]; + SBufferInfo bufInfo; + memset(data, 0, sizeof(data)); + memset(&bufInfo, 0, sizeof(SBufferInfo)); + + DECODING_STATE rv = decoder->DecodeFrame(src, sliceSize, data, &bufInfo); + if (rv == dsErrorFree) { + if (bufInfo.iBufferStatus == 1) { + // y plane + UpdateHashFromPlane(ctx, static_cast(data[0]), + bufInfo.UsrData.sSystemBuffer.iWidth, + bufInfo.UsrData.sSystemBuffer.iHeight, + bufInfo.UsrData.sSystemBuffer.iStride[0]); + // u plane + UpdateHashFromPlane(ctx, static_cast(data[1]), + bufInfo.UsrData.sSystemBuffer.iWidth / 2, + bufInfo.UsrData.sSystemBuffer.iHeight / 2, + bufInfo.UsrData.sSystemBuffer.iStride[1]); + // v plane + UpdateHashFromPlane(ctx, static_cast(data[2]), + bufInfo.UsrData.sSystemBuffer.iWidth / 2, + bufInfo.UsrData.sSystemBuffer.iHeight / 2, + bufInfo.UsrData.sSystemBuffer.iStride[1]); + } + return true; + } else { + return false; + } +} + +static void CompareFileToHash(ISVCDecoder* decoder, + const char* fileName, const char* hashStr) { + + std::ifstream file(fileName, std::ios::in | std::ios::binary); + ASSERT_TRUE(file.is_open()); + + unsigned char digest[SHA_DIGEST_LENGTH]; + SHA_CTX ctx; + SHA1_Init(&ctx); + + BufferedData buf; + int sliceSize; + + while ((sliceSize = ReadFrame(&file, &buf)) > 0) { + if (DecodeAndProcess(decoder, buf.data(), sliceSize, &ctx)) { + buf.Clear(); + } else { + SHA1_Final(digest, &ctx); + FAIL() << "unable to decode frame"; + } + } + + if (sliceSize < 0) { + SHA1_Final(digest, &ctx); + FAIL() << "unable to allocate memory"; + } + + int32_t iEndOfStreamFlag = true; + decoder->SetOption(DECODER_OPTION_END_OF_STREAM, &iEndOfStreamFlag); + + // Get pending last frame + if (!DecodeAndProcess(decoder, NULL, 0, &ctx)) { + SHA1_Final(digest, &ctx); + FAIL() << "unable to decode last frame"; + } + + SHA1_Final(digest, &ctx); + ASSERT_TRUE(CompareHash(digest, hashStr)); +} + +class DecoderInitTest : public ::testing::Test { +public: + DecoderInitTest() : decoder_(NULL) {} + + virtual void SetUp() { + long rv = CreateDecoder(&decoder_); + ASSERT_EQ(0, rv); + ASSERT_TRUE(decoder_ != NULL); + + SDecodingParam decParam; + memset(&decParam, 0, sizeof(SDecodingParam)); + decParam.iOutputColorFormat = videoFormatI420; + decParam.uiTargetDqLayer = UCHAR_MAX; + decParam.uiEcActiveFlag = 1; + decParam.sVideoProperty.eVideoBsType = VIDEO_BITSTREAM_DEFAULT; + + rv = decoder_->Initialize(&decParam, INIT_TYPE_PARAMETER_BASED); + ASSERT_EQ(0, rv); + } + + virtual void TearDown() { + if (decoder_ != NULL) { + decoder_->Uninitialize(); + DestroyDecoder(decoder_); + } + } + +protected: + ISVCDecoder* decoder_; +}; + + +TEST_F(DecoderInitTest, JustInit) { +} + +struct FileParam { + const char* fileName; + const char* hashStr; +}; + +class DecoderOutputTest : public DecoderInitTest, + public ::testing::WithParamInterface { +}; + +TEST_P(DecoderOutputTest, CompareOutput) { + FileParam p = GetParam(); + CompareFileToHash(decoder_, p.fileName, p.hashStr); +} + +static const FileParam kFileParamArray[] = { + {"res/test_vd_1d.264", "5827d2338b79ff82cd091c707823e466197281d3"}, + {"res/test_vd_rc.264", "eea02e97bfec89d0418593a8abaaf55d02eaa1ca"} +}; + +INSTANTIATE_TEST_CASE_P(DecodeFile, DecoderOutputTest, + ::testing::ValuesIn(kFileParamArray)); diff --git a/test/simple_test.cpp b/test/simple_test.cpp index d923bf46..eb79e817 100644 --- a/test/simple_test.cpp +++ b/test/simple_test.cpp @@ -1,38 +1,4 @@ #include -#if defined (WIN32) -#include -#include -#else -#include -#endif -#include -#include -#include - -#include "codec_def.h" -#include "codec_app_def.h" -#include "codec_api.h" - -class CodecTest : public ::testing::Test { - public: - CodecTest() : decoder_ (NULL) {} - - ~CodecTest() { - if (decoder_) DestroyDecoder (decoder_); - } - - void SetUp() { - long rv = CreateDecoder (&decoder_); - ASSERT_EQ (0, rv); - ASSERT_TRUE (decoder_); - } - - protected: - ISVCDecoder* decoder_; -}; - -TEST_F (CodecTest, JustInit) { -} int main (int argc, char** argv) { testing::InitGoogleTest (&argc, argv); diff --git a/test/utils/BufferedData.h b/test/utils/BufferedData.h new file mode 100644 index 00000000..aaf32fb7 --- /dev/null +++ b/test/utils/BufferedData.h @@ -0,0 +1,65 @@ +#ifndef __BUFFEREDDATA_H__ +#define __BUFFEREDDATA_H__ + +#include +#include + +class BufferedData +{ +public: + BufferedData() : data_(NULL), capacity_(0), length_(0) { + } + + ~BufferedData() { + free(data_); + } + + bool Push(uint8_t c) { + if (!EnsureCapacity(length_ + 1)) { + return false; + } + data_[length_++] = c; + return true; + } + + void Clear() { + length_ = 0; + } + + void SetLength(size_t newLen) { + if (EnsureCapacity(newLen)) { + length_ = newLen; + } + } + + size_t Length() const { + return length_; + } + + uint8_t* data() { + return data_; + } + +private: + bool EnsureCapacity(size_t capacity) { + if (capacity > capacity_) { + size_t newsize = capacity * 2; + + uint8_t* data = static_cast(realloc(data_, newsize)); + + if (!data) + return false; + + data_ = data; + capacity_ = newsize; + return true; + } + return true; + } + + uint8_t* data_; + size_t capacity_; + size_t length_; +}; + +#endif //__BUFFEREDDATA_H__