diff options
-rw-r--r-- | documentation/aacDecoder.pdf | 2434 | ||||
-rw-r--r-- | documentation/aacEncoder.pdf | 12 | ||||
-rw-r--r-- | libAACdec/src/aacdec_drc.cpp | 38 | ||||
-rw-r--r-- | libAACdec/src/aacdec_drc.h | 5 | ||||
-rw-r--r-- | libAACdec/src/aacdecoder.cpp | 15 | ||||
-rw-r--r-- | libAACdec/src/aacdecoder_lib.cpp | 2 | ||||
-rw-r--r-- | libAACenc/src/aacenc_lib.cpp | 2 | ||||
-rw-r--r-- | libAACenc/src/band_nrg.cpp | 14 | ||||
-rw-r--r-- | libAACenc/src/line_pe.cpp | 2 | ||||
-rw-r--r-- | libAACenc/src/tns_param.cpp | 93 | ||||
-rw-r--r-- | libFDK/include/FDK_archdef.h | 1 | ||||
-rw-r--r-- | libFDK/include/clz.h | 3 | ||||
-rw-r--r-- | libFDK/include/mips/cplx_mul.h | 39 | ||||
-rw-r--r-- | libFDK/include/mips/fixmul_mips.h | 7 | ||||
-rw-r--r-- | libFDK/include/x86/clz_x86.h (renamed from libAACenc/src/tns_param.h) | 76 | ||||
-rw-r--r-- | libFDK/src/FDK_core.cpp | 2 | ||||
-rw-r--r-- | libPCMutils/src/pcmutils_lib.cpp | 13 | ||||
-rw-r--r-- | libSBRdec/src/sbr_dec.cpp | 18 | ||||
-rw-r--r-- | libSBRdec/src/sbrdec_drc.cpp | 37 | ||||
-rw-r--r-- | libSBRdec/src/sbrdec_drc.h | 1 | ||||
-rw-r--r-- | libSBRdec/src/sbrdecoder.cpp | 19 |
21 files changed, 1443 insertions, 1390 deletions
diff --git a/documentation/aacDecoder.pdf b/documentation/aacDecoder.pdf index 0d42e79..a8cee17 100644 --- a/documentation/aacDecoder.pdf +++ b/documentation/aacDecoder.pdf @@ -586,15 +586,15 @@ endobj << /S /GoTo /D [390 0 R /Fit ] >> endobj 394 0 obj << -/Length 954 +/Length 956 /Filter /FlateDecode >> stream -xڅV[6~fj, MߜlgI5yЂ0jArXg{tۉΘsUGcw?_(QpJb]%Q/Y$s+҉(B渜ثG;&إ]^9,Vo H7kDݔ)Et?m`3Y:Ym?c-?>ZȣwR5/(0OY3j%1`,/t$8ݒx<&O'\A!mC^I%OO0eEAy -1% - -X߯JQ& PuLs+QgF(HbjU=&wU`PP^<Ӫ1HeD.^&`rǒ3n]&qb
sj5LsO+}j<g`he,HЪ+VqI'{?4~2Y{|i.[{'1>ZOVS1mq78><+u[RFK_S<,W;5z`89
{]_KWX[0?1mn-%dF܉j -D֖\\w4N\̙j*.\h\KΤ8lhh9f%=Ww{jQ:u~'Vv>,vÉ^==k ѪOڰal\nq[]اHu^vc)ds;!ׁI&7oE +xڅVKs6WHT\KIq;i["Z`AЊx5ψ}|(8(xBMI$*گYe8+Ҋr3̒jfo$o7î +j +mI~AYq~Kw|5'G5Sџ%8Q`Qf$1`4+yW;;<"Of\B>(ֳp:%y7'rϏpJ~x] !L9 +/uiÚhlշEE^2ŸmraitI32j7EQzùTA{#{7yx2Hz})U65[{'1٘d.ZGҹ$<#RFzKWš#b +}kL9o]Vil\+YzlW~qcx|afq^||pX[G4 endstream endobj 390 0 obj << @@ -8995,8 +8995,8 @@ endobj >> endobj 1403 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.10)/Keywords() -/CreationDate (D:20120817135834+02'00') -/ModDate (D:20120817135834+02'00') +/CreationDate (D:20120927161848+02'00') +/ModDate (D:20120927161848+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.10-2.2 (TeX Live 2009/Debian) kpathsea version 5.0.0) >> endobj @@ -9004,1413 +9004,1413 @@ xref 0 1404 0000000000 65535 f 0000000015 00000 n -0000183151 00000 n -0000506332 00000 n +0000183153 00000 n +0000506334 00000 n 0000000060 00000 n 0000000146 00000 n -0000183320 00000 n -0000506262 00000 n +0000183322 00000 n +0000506264 00000 n 0000000193 00000 n 0000000244 00000 n -0000183437 00000 n -0000506191 00000 n +0000183439 00000 n +0000506193 00000 n 0000000291 00000 n 0000000391 00000 n -0000187368 00000 n -0000506066 00000 n +0000187370 00000 n +0000506068 00000 n 0000000437 00000 n 0000000532 00000 n -0000187538 00000 n -0000505992 00000 n +0000187540 00000 n +0000505994 00000 n 0000000580 00000 n 0000000685 00000 n -0000187655 00000 n -0000505905 00000 n +0000187657 00000 n +0000505907 00000 n 0000000733 00000 n 0000000843 00000 n -0000193760 00000 n -0000505831 00000 n +0000193762 00000 n +0000505833 00000 n 0000000891 00000 n 0000000986 00000 n -0000222466 00000 n -0000505705 00000 n +0000222468 00000 n +0000505707 00000 n 0000001032 00000 n 0000001165 00000 n -0000222636 00000 n -0000505631 00000 n +0000222638 00000 n +0000505633 00000 n 0000001213 00000 n 0000001434 00000 n -0000222754 00000 n -0000505544 00000 n +0000222756 00000 n +0000505546 00000 n 0000001482 00000 n 0000001681 00000 n -0000222872 00000 n -0000505433 00000 n +0000222874 00000 n +0000505435 00000 n 0000001729 00000 n 0000001882 00000 n -0000228898 00000 n -0000505359 00000 n +0000228900 00000 n +0000505361 00000 n 0000001935 00000 n 0000001992 00000 n -0000229016 00000 n -0000505272 00000 n +0000229018 00000 n +0000505274 00000 n 0000002045 00000 n 0000002135 00000 n -0000231745 00000 n -0000505198 00000 n +0000231747 00000 n +0000505200 00000 n 0000002188 00000 n 0000002324 00000 n -0000234296 00000 n -0000505072 00000 n +0000234298 00000 n +0000505074 00000 n 0000002370 00000 n 0000002490 00000 n -0000234471 00000 n -0000504974 00000 n +0000234473 00000 n +0000504976 00000 n 0000002538 00000 n 0000002610 00000 n -0000234584 00000 n -0000504900 00000 n +0000234586 00000 n +0000504902 00000 n 0000002663 00000 n 0000002788 00000 n -0000234697 00000 n -0000504826 00000 n +0000234699 00000 n +0000504828 00000 n 0000002841 00000 n 0000002961 00000 n -0000237268 00000 n -0000504700 00000 n +0000237270 00000 n +0000504702 00000 n 0000003007 00000 n 0000003092 00000 n -0000237324 00000 n -0000504639 00000 n +0000237326 00000 n +0000504641 00000 n 0000003140 00000 n 0000003220 00000 n -0000239489 00000 n -0000504513 00000 n +0000239491 00000 n +0000504515 00000 n 0000003266 00000 n 0000003346 00000 n -0000239545 00000 n -0000504452 00000 n +0000239547 00000 n +0000504454 00000 n 0000003394 00000 n 0000003469 00000 n -0000245205 00000 n -0000504325 00000 n +0000245207 00000 n +0000504327 00000 n 0000003515 00000 n 0000003640 00000 n -0000245318 00000 n -0000504226 00000 n +0000245320 00000 n +0000504228 00000 n 0000003688 00000 n 0000003861 00000 n -0000245431 00000 n -0000504150 00000 n +0000245433 00000 n +0000504152 00000 n 0000003914 00000 n 0000004045 00000 n -0000246768 00000 n -0000504033 00000 n +0000246770 00000 n +0000504035 00000 n 0000004099 00000 n 0000004258 00000 n -0000246882 00000 n -0000503954 00000 n +0000246884 00000 n +0000503956 00000 n 0000004317 00000 n 0000004410 00000 n -0000247001 00000 n -0000503861 00000 n +0000247003 00000 n +0000503863 00000 n 0000004469 00000 n 0000004587 00000 n -0000247120 00000 n -0000503768 00000 n +0000247122 00000 n +0000503770 00000 n 0000004646 00000 n 0000004689 00000 n -0000247239 00000 n -0000503675 00000 n +0000247241 00000 n +0000503677 00000 n 0000004748 00000 n 0000004811 00000 n -0000247358 00000 n -0000503582 00000 n +0000247360 00000 n +0000503584 00000 n 0000004870 00000 n 0000004963 00000 n -0000247477 00000 n -0000503489 00000 n +0000247479 00000 n +0000503491 00000 n 0000005022 00000 n 0000005090 00000 n -0000247596 00000 n -0000503396 00000 n +0000247598 00000 n +0000503398 00000 n 0000005149 00000 n 0000005207 00000 n -0000247715 00000 n -0000503303 00000 n +0000247717 00000 n +0000503305 00000 n 0000005266 00000 n 0000005369 00000 n -0000247834 00000 n -0000503210 00000 n +0000247836 00000 n +0000503212 00000 n 0000005428 00000 n 0000005481 00000 n -0000247953 00000 n -0000503117 00000 n +0000247955 00000 n +0000503119 00000 n 0000005541 00000 n 0000005614 00000 n -0000249694 00000 n -0000503024 00000 n +0000249696 00000 n +0000503026 00000 n 0000005674 00000 n 0000005787 00000 n -0000249808 00000 n -0000502931 00000 n +0000249810 00000 n +0000502933 00000 n 0000005847 00000 n 0000005930 00000 n -0000249927 00000 n -0000502838 00000 n +0000249929 00000 n +0000502840 00000 n 0000005990 00000 n 0000006073 00000 n -0000250041 00000 n -0000502745 00000 n +0000250043 00000 n +0000502747 00000 n 0000006133 00000 n 0000006251 00000 n -0000250155 00000 n -0000502652 00000 n +0000250157 00000 n +0000502654 00000 n 0000006311 00000 n 0000006434 00000 n -0000250268 00000 n -0000502559 00000 n +0000250270 00000 n +0000502561 00000 n 0000006494 00000 n 0000006587 00000 n -0000250387 00000 n -0000502466 00000 n +0000250389 00000 n +0000502468 00000 n 0000006647 00000 n 0000006750 00000 n -0000250506 00000 n -0000502373 00000 n +0000250508 00000 n +0000502375 00000 n 0000006810 00000 n 0000006898 00000 n -0000250625 00000 n -0000502280 00000 n +0000250627 00000 n +0000502282 00000 n 0000006958 00000 n 0000007021 00000 n -0000251706 00000 n -0000502201 00000 n +0000251708 00000 n +0000502203 00000 n 0000007081 00000 n 0000007159 00000 n -0000256951 00000 n -0000502083 00000 n +0000256953 00000 n +0000502085 00000 n 0000007206 00000 n 0000007327 00000 n -0000257065 00000 n -0000501965 00000 n +0000257067 00000 n +0000501967 00000 n 0000007376 00000 n 0000007568 00000 n -0000289845 00000 n -0000501886 00000 n +0000289847 00000 n +0000501888 00000 n 0000007622 00000 n 0000007753 00000 n -0000289902 00000 n -0000501754 00000 n +0000289904 00000 n +0000501756 00000 n 0000007807 00000 n 0000007938 00000 n -0000290016 00000 n -0000501675 00000 n +0000290018 00000 n +0000501677 00000 n 0000007997 00000 n 0000008098 00000 n -0000290133 00000 n -0000501582 00000 n +0000290135 00000 n +0000501584 00000 n 0000008157 00000 n 0000008258 00000 n -0000290252 00000 n -0000501489 00000 n +0000290254 00000 n +0000501491 00000 n 0000008317 00000 n 0000008408 00000 n -0000290365 00000 n -0000501396 00000 n +0000290367 00000 n +0000501398 00000 n 0000008467 00000 n 0000008553 00000 n -0000290483 00000 n -0000501303 00000 n +0000290485 00000 n +0000501305 00000 n 0000008612 00000 n 0000008721 00000 n -0000293226 00000 n -0000501210 00000 n +0000293228 00000 n +0000501212 00000 n 0000008780 00000 n 0000008879 00000 n -0000293345 00000 n -0000501131 00000 n +0000293347 00000 n +0000501133 00000 n 0000008938 00000 n 0000009047 00000 n -0000293402 00000 n -0000500999 00000 n +0000293404 00000 n +0000501001 00000 n 0000009101 00000 n 0000009237 00000 n -0000293516 00000 n -0000500934 00000 n +0000293518 00000 n +0000500936 00000 n 0000009296 00000 n 0000009412 00000 n -0000293573 00000 n -0000500802 00000 n +0000293575 00000 n +0000500804 00000 n 0000009466 00000 n 0000009650 00000 n -0000293687 00000 n -0000500723 00000 n +0000293689 00000 n +0000500725 00000 n 0000009709 00000 n 0000009828 00000 n -0000298544 00000 n -0000500644 00000 n +0000298546 00000 n +0000500646 00000 n 0000009887 00000 n 0000009978 00000 n -0000302537 00000 n -0000500525 00000 n +0000302539 00000 n +0000500527 00000 n 0000010032 00000 n 0000010173 00000 n -0000302651 00000 n -0000500446 00000 n +0000302653 00000 n +0000500448 00000 n 0000010232 00000 n 0000010368 00000 n -0000304424 00000 n -0000500353 00000 n +0000304426 00000 n +0000500355 00000 n 0000010427 00000 n 0000010568 00000 n -0000304538 00000 n -0000500260 00000 n +0000304540 00000 n +0000500262 00000 n 0000010627 00000 n 0000010738 00000 n -0000304651 00000 n -0000500167 00000 n +0000304653 00000 n +0000500169 00000 n 0000010797 00000 n 0000010928 00000 n -0000307030 00000 n -0000500074 00000 n +0000307032 00000 n +0000500076 00000 n 0000010987 00000 n 0000011128 00000 n -0000307144 00000 n -0000499981 00000 n +0000307146 00000 n +0000499983 00000 n 0000011187 00000 n 0000011293 00000 n -0000309114 00000 n -0000499888 00000 n +0000309116 00000 n +0000499890 00000 n 0000011352 00000 n 0000011498 00000 n -0000309227 00000 n -0000499795 00000 n +0000309229 00000 n +0000499797 00000 n 0000011557 00000 n 0000011693 00000 n -0000309340 00000 n -0000499702 00000 n +0000309342 00000 n +0000499704 00000 n 0000011752 00000 n 0000011903 00000 n -0000310994 00000 n -0000499609 00000 n +0000310996 00000 n +0000499611 00000 n 0000011963 00000 n 0000012069 00000 n -0000311110 00000 n -0000499530 00000 n +0000311112 00000 n +0000499532 00000 n 0000012129 00000 n 0000012255 00000 n -0000311225 00000 n -0000499412 00000 n +0000311227 00000 n +0000499414 00000 n 0000012304 00000 n 0000012453 00000 n -0000321806 00000 n -0000499333 00000 n +0000321808 00000 n +0000499335 00000 n 0000012507 00000 n 0000012638 00000 n -0000323786 00000 n -0000499201 00000 n +0000323788 00000 n +0000499203 00000 n 0000012692 00000 n 0000012823 00000 n -0000323903 00000 n -0000499122 00000 n +0000323905 00000 n +0000499124 00000 n 0000012882 00000 n 0000012976 00000 n -0000324019 00000 n -0000499029 00000 n +0000324021 00000 n +0000499031 00000 n 0000013035 00000 n 0000013134 00000 n -0000324133 00000 n -0000498936 00000 n +0000324135 00000 n +0000498938 00000 n 0000013193 00000 n 0000013282 00000 n -0000324248 00000 n -0000498843 00000 n +0000324250 00000 n +0000498845 00000 n 0000013341 00000 n 0000013445 00000 n -0000324365 00000 n -0000498750 00000 n +0000324367 00000 n +0000498752 00000 n 0000013504 00000 n 0000013590 00000 n -0000324482 00000 n -0000498671 00000 n +0000324484 00000 n +0000498673 00000 n 0000013649 00000 n 0000013743 00000 n -0000324540 00000 n -0000498539 00000 n +0000324542 00000 n +0000498541 00000 n 0000013797 00000 n 0000013938 00000 n -0000324656 00000 n -0000498474 00000 n +0000324658 00000 n +0000498476 00000 n 0000013997 00000 n 0000014045 00000 n -0000325729 00000 n -0000498355 00000 n +0000325731 00000 n +0000498357 00000 n 0000014099 00000 n 0000014240 00000 n -0000325845 00000 n -0000498276 00000 n +0000325847 00000 n +0000498278 00000 n 0000014299 00000 n 0000014372 00000 n -0000325961 00000 n -0000498183 00000 n +0000325963 00000 n +0000498185 00000 n 0000014431 00000 n 0000014514 00000 n -0000326077 00000 n -0000498090 00000 n +0000326079 00000 n +0000498092 00000 n 0000014573 00000 n 0000014621 00000 n -0000326194 00000 n -0000497997 00000 n +0000326196 00000 n +0000497999 00000 n 0000014680 00000 n 0000014751 00000 n -0000326311 00000 n -0000497904 00000 n +0000326313 00000 n +0000497906 00000 n 0000014810 00000 n 0000014878 00000 n -0000326427 00000 n -0000497811 00000 n +0000326429 00000 n +0000497813 00000 n 0000014937 00000 n 0000015015 00000 n -0000326544 00000 n -0000497718 00000 n +0000326546 00000 n +0000497720 00000 n 0000015074 00000 n 0000015142 00000 n -0000326661 00000 n -0000497625 00000 n +0000326663 00000 n +0000497627 00000 n 0000015201 00000 n 0000015292 00000 n -0000326777 00000 n -0000497532 00000 n +0000326779 00000 n +0000497534 00000 n 0000015351 00000 n 0000015444 00000 n -0000327613 00000 n -0000497439 00000 n +0000327615 00000 n +0000497441 00000 n 0000015504 00000 n 0000015602 00000 n -0000327730 00000 n -0000497360 00000 n +0000327732 00000 n +0000497362 00000 n 0000015662 00000 n 0000015730 00000 n -0000016817 00000 n -0000016951 00000 n -0000160274 00000 n -0000160402 00000 n +0000016819 00000 n +0000016953 00000 n +0000160276 00000 n +0000160404 00000 n 0000015782 00000 n -0000160345 00000 n -0000495352 00000 n -0000495708 00000 n -0000496064 00000 n -0000128677 00000 n -0000160742 00000 n -0000160623 00000 n -0000160523 00000 n -0000162004 00000 n -0000162155 00000 n -0000162309 00000 n -0000162461 00000 n -0000162611 00000 n -0000162764 00000 n -0000162918 00000 n -0000163072 00000 n -0000163223 00000 n -0000163377 00000 n -0000163531 00000 n -0000163685 00000 n -0000163844 00000 n -0000164003 00000 n -0000164162 00000 n -0000164313 00000 n -0000164467 00000 n -0000164626 00000 n -0000164785 00000 n -0000164936 00000 n -0000165089 00000 n -0000165240 00000 n -0000165394 00000 n -0000165544 00000 n -0000167322 00000 n -0000165754 00000 n -0000161681 00000 n -0000160783 00000 n -0000165697 00000 n -0000167481 00000 n -0000167640 00000 n -0000167800 00000 n -0000167964 00000 n -0000168127 00000 n -0000168291 00000 n -0000168455 00000 n -0000168618 00000 n -0000168781 00000 n -0000168945 00000 n -0000169109 00000 n -0000169273 00000 n -0000169438 00000 n -0000169603 00000 n -0000169768 00000 n -0000169933 00000 n -0000170097 00000 n -0000170262 00000 n -0000170426 00000 n -0000170591 00000 n -0000170755 00000 n -0000170920 00000 n -0000171071 00000 n -0000171225 00000 n -0000171384 00000 n -0000171543 00000 n -0000171707 00000 n -0000171870 00000 n -0000172034 00000 n -0000172198 00000 n -0000172362 00000 n -0000172526 00000 n -0000172690 00000 n -0000172849 00000 n -0000173012 00000 n -0000174770 00000 n -0000173170 00000 n -0000166903 00000 n -0000165839 00000 n -0000174934 00000 n -0000175098 00000 n -0000175257 00000 n -0000175421 00000 n -0000175585 00000 n -0000175749 00000 n -0000175913 00000 n -0000176076 00000 n -0000176240 00000 n -0000176403 00000 n -0000176566 00000 n -0000176730 00000 n -0000176894 00000 n -0000177059 00000 n -0000177213 00000 n -0000177371 00000 n -0000177529 00000 n -0000177693 00000 n -0000177857 00000 n -0000178021 00000 n -0000178185 00000 n -0000178349 00000 n -0000178513 00000 n -0000178672 00000 n -0000178836 00000 n -0000178995 00000 n -0000179159 00000 n -0000179322 00000 n -0000179486 00000 n -0000179649 00000 n -0000179811 00000 n -0000179975 00000 n -0000180138 00000 n -0000180302 00000 n -0000180466 00000 n -0000181154 00000 n -0000180630 00000 n -0000174351 00000 n -0000173255 00000 n -0000181319 00000 n -0000181015 00000 n -0000180715 00000 n -0000183493 00000 n -0000182976 00000 n -0000181404 00000 n -0000183095 00000 n -0000183206 00000 n -0000183263 00000 n -0000183375 00000 n -0000496182 00000 n -0000183980 00000 n -0000183805 00000 n -0000183578 00000 n -0000183924 00000 n -0000186261 00000 n -0000186421 00000 n -0000186573 00000 n -0000186732 00000 n -0000186926 00000 n -0000187119 00000 n -0000190724 00000 n -0000190876 00000 n -0000191071 00000 n -0000191524 00000 n -0000187882 00000 n -0000186082 00000 n -0000184052 00000 n -0000187312 00000 n -0000187424 00000 n -0000187481 00000 n -0000187594 00000 n -0000187711 00000 n -0000495178 00000 n -0000187768 00000 n -0000187825 00000 n -0000257008 00000 n -0000311168 00000 n -0000234352 00000 n -0000309397 00000 n -0000304594 00000 n -0000306974 00000 n -0000191718 00000 n -0000191913 00000 n -0000192108 00000 n -0000192302 00000 n -0000192453 00000 n -0000192648 00000 n -0000192798 00000 n -0000193168 00000 n -0000195150 00000 n -0000193816 00000 n -0000190466 00000 n -0000187980 00000 n -0000193363 00000 n -0000193419 00000 n -0000191298 00000 n -0000193476 00000 n -0000193532 00000 n -0000193589 00000 n -0000193646 00000 n -0000193703 00000 n -0000192984 00000 n -0000294054 00000 n -0000307087 00000 n -0000309284 00000 n -0000304481 00000 n -0000324077 00000 n -0000218031 00000 n -0000195016 00000 n -0000193914 00000 n -0000217913 00000 n -0000217969 00000 n -0000495034 00000 n -0000494600 00000 n -0000494745 00000 n -0000494889 00000 n -0000208039 00000 n -0000218608 00000 n -0000218433 00000 n -0000218203 00000 n -0000218552 00000 n -0000220670 00000 n -0000220829 00000 n -0000221214 00000 n -0000221442 00000 n -0000221669 00000 n -0000221864 00000 n -0000222057 00000 n -0000222216 00000 n -0000224943 00000 n -0000225170 00000 n -0000225624 00000 n -0000222989 00000 n -0000220467 00000 n -0000218680 00000 n -0000222410 00000 n -0000222522 00000 n -0000222579 00000 n -0000221022 00000 n -0000222692 00000 n -0000222810 00000 n -0000222928 00000 n -0000496300 00000 n -0000245261 00000 n -0000249865 00000 n -0000298601 00000 n -0000301983 00000 n -0000311052 00000 n -0000225784 00000 n -0000225977 00000 n -0000226170 00000 n -0000226361 00000 n -0000226587 00000 n -0000226779 00000 n -0000227007 00000 n -0000227461 00000 n -0000227619 00000 n -0000227811 00000 n -0000228004 00000 n -0000228196 00000 n -0000228423 00000 n -0000228651 00000 n -0000230269 00000 n -0000230497 00000 n -0000230952 00000 n -0000229133 00000 n -0000224660 00000 n -0000223074 00000 n -0000228842 00000 n -0000225397 00000 n -0000228954 00000 n -0000227235 00000 n -0000229072 00000 n -0000250444 00000 n -0000250325 00000 n -0000247891 00000 n -0000231112 00000 n -0000231305 00000 n -0000231498 00000 n -0000231801 00000 n -0000230082 00000 n -0000229231 00000 n -0000231689 00000 n -0000230725 00000 n -0000232307 00000 n -0000232132 00000 n -0000231899 00000 n -0000232251 00000 n -0000233751 00000 n -0000233903 00000 n -0000234088 00000 n -0000234753 00000 n -0000233596 00000 n -0000232379 00000 n -0000234240 00000 n -0000234409 00000 n -0000234527 00000 n -0000234640 00000 n -0000324598 00000 n -0000236184 00000 n -0000236009 00000 n -0000234851 00000 n -0000236128 00000 n -0000236898 00000 n -0000237058 00000 n -0000237380 00000 n -0000236751 00000 n -0000236269 00000 n -0000237212 00000 n -0000496418 00000 n -0000237868 00000 n -0000237693 00000 n -0000237465 00000 n -0000237812 00000 n -0000238648 00000 n -0000238809 00000 n -0000238963 00000 n -0000239114 00000 n -0000239279 00000 n -0000239601 00000 n -0000238477 00000 n -0000237940 00000 n -0000239433 00000 n -0000240086 00000 n -0000239911 00000 n -0000239686 00000 n -0000240030 00000 n -0000241277 00000 n -0000241471 00000 n -0000241665 00000 n -0000241859 00000 n -0000242052 00000 n -0000242246 00000 n -0000242439 00000 n -0000242633 00000 n -0000242827 00000 n -0000243021 00000 n -0000243215 00000 n -0000243409 00000 n -0000243603 00000 n -0000243796 00000 n -0000243990 00000 n -0000244184 00000 n -0000244376 00000 n -0000244568 00000 n -0000244762 00000 n -0000244956 00000 n -0000245487 00000 n -0000240986 00000 n -0000240158 00000 n -0000245149 00000 n -0000245374 00000 n -0000250682 00000 n -0000246825 00000 n -0000250563 00000 n -0000247058 00000 n -0000247296 00000 n -0000247177 00000 n -0000246939 00000 n -0000247534 00000 n -0000247653 00000 n -0000247772 00000 n -0000247415 00000 n -0000249984 00000 n -0000250211 00000 n -0000249751 00000 n -0000250098 00000 n -0000249637 00000 n -0000248010 00000 n -0000246593 00000 n -0000245611 00000 n -0000246712 00000 n -0000249387 00000 n -0000250743 00000 n -0000249248 00000 n -0000248095 00000 n -0000249581 00000 n -0000496536 00000 n -0000251492 00000 n -0000251763 00000 n -0000251353 00000 n -0000250854 00000 n -0000251650 00000 n -0000252433 00000 n -0000256828 00000 n -0000258677 00000 n -0000262114 00000 n -0000257122 00000 n -0000252299 00000 n -0000251850 00000 n -0000256895 00000 n -0000253343 00000 n -0000253473 00000 n -0000253613 00000 n -0000253900 00000 n -0000254305 00000 n -0000254509 00000 n -0000254530 00000 n -0000256806 00000 n -0000262181 00000 n -0000262341 00000 n -0000262535 00000 n -0000262729 00000 n -0000262924 00000 n -0000263119 00000 n -0000263313 00000 n -0000263508 00000 n -0000263703 00000 n -0000263898 00000 n -0000264093 00000 n -0000264320 00000 n -0000264547 00000 n -0000264774 00000 n -0000264997 00000 n -0000265222 00000 n -0000267279 00000 n -0000267506 00000 n -0000265732 00000 n -0000258403 00000 n -0000257248 00000 n -0000265448 00000 n -0000265504 00000 n -0000495884 00000 n -0000265561 00000 n -0000265618 00000 n -0000265675 00000 n -0000259340 00000 n -0000259470 00000 n -0000259610 00000 n -0000259861 00000 n -0000260225 00000 n -0000260429 00000 n -0000260450 00000 n -0000262092 00000 n -0000290540 00000 n -0000290422 00000 n -0000293283 00000 n -0000290073 00000 n -0000290190 00000 n -0000290309 00000 n -0000289959 00000 n -0000293459 00000 n -0000293630 00000 n -0000293744 00000 n -0000293806 00000 n -0000293868 00000 n -0000293930 00000 n -0000293992 00000 n -0000267733 00000 n -0000267956 00000 n -0000268183 00000 n -0000268410 00000 n -0000268636 00000 n -0000268863 00000 n -0000269090 00000 n -0000269317 00000 n -0000269544 00000 n -0000269771 00000 n -0000269998 00000 n -0000270225 00000 n -0000270452 00000 n -0000270679 00000 n -0000270906 00000 n -0000271133 00000 n -0000271359 00000 n -0000271584 00000 n -0000271811 00000 n -0000272038 00000 n -0000272265 00000 n -0000272492 00000 n -0000272718 00000 n -0000272945 00000 n -0000273172 00000 n -0000273398 00000 n -0000273625 00000 n -0000273851 00000 n -0000274078 00000 n -0000274305 00000 n -0000274531 00000 n -0000274758 00000 n -0000274983 00000 n -0000275176 00000 n -0000275403 00000 n -0000275630 00000 n -0000275856 00000 n -0000278659 00000 n -0000278886 00000 n -0000279113 00000 n -0000276138 00000 n -0000266836 00000 n -0000265884 00000 n -0000276082 00000 n -0000294116 00000 n -0000294178 00000 n -0000294240 00000 n -0000294302 00000 n -0000294364 00000 n -0000294426 00000 n -0000294488 00000 n -0000294550 00000 n -0000294611 00000 n -0000294673 00000 n -0000294735 00000 n -0000294797 00000 n -0000297125 00000 n -0000297187 00000 n -0000297249 00000 n -0000297311 00000 n -0000297372 00000 n -0000297434 00000 n -0000297496 00000 n -0000297558 00000 n -0000297620 00000 n -0000297682 00000 n -0000297744 00000 n -0000297806 00000 n -0000297868 00000 n -0000297930 00000 n -0000297992 00000 n -0000298054 00000 n -0000298116 00000 n -0000298178 00000 n -0000298240 00000 n -0000298302 00000 n -0000298364 00000 n -0000298426 00000 n -0000298487 00000 n -0000301859 00000 n -0000301921 00000 n -0000279340 00000 n -0000279566 00000 n -0000279793 00000 n -0000280020 00000 n -0000280247 00000 n -0000280474 00000 n -0000280668 00000 n -0000280863 00000 n -0000281056 00000 n -0000281251 00000 n -0000281446 00000 n -0000281639 00000 n -0000281834 00000 n -0000282028 00000 n -0000282415 00000 n -0000282608 00000 n -0000282803 00000 n -0000282998 00000 n -0000283387 00000 n -0000283582 00000 n -0000283777 00000 n -0000283972 00000 n -0000284167 00000 n -0000284360 00000 n -0000284546 00000 n -0000284737 00000 n -0000284928 00000 n -0000285120 00000 n -0000285315 00000 n -0000285510 00000 n -0000287718 00000 n -0000287913 00000 n -0000286011 00000 n -0000278240 00000 n -0000276236 00000 n -0000285898 00000 n -0000285954 00000 n -0000282223 00000 n -0000283193 00000 n -0000285705 00000 n -0000302045 00000 n -0000302103 00000 n -0000302165 00000 n -0000302227 00000 n -0000302289 00000 n -0000302351 00000 n -0000302413 00000 n -0000302475 00000 n -0000304367 00000 n -0000302594 00000 n -0000309057 00000 n -0000326019 00000 n -0000288108 00000 n -0000288268 00000 n -0000288461 00000 n -0000288656 00000 n -0000288815 00000 n -0000289010 00000 n -0000289205 00000 n -0000289400 00000 n -0000289595 00000 n -0000290596 00000 n -0000287499 00000 n -0000286122 00000 n -0000289789 00000 n -0000495528 00000 n -0000496654 00000 n -0000309171 00000 n -0000292781 00000 n -0000294859 00000 n -0000292634 00000 n -0000290733 00000 n -0000293170 00000 n -0000292976 00000 n -0000298663 00000 n -0000296950 00000 n -0000294983 00000 n -0000297069 00000 n -0000302708 00000 n -0000301684 00000 n -0000298761 00000 n -0000301803 00000 n -0000304708 00000 n -0000304192 00000 n -0000302819 00000 n -0000304311 00000 n -0000307201 00000 n -0000306799 00000 n -0000304819 00000 n -0000306918 00000 n -0000308682 00000 n -0000308841 00000 n -0000309453 00000 n -0000308535 00000 n -0000307312 00000 n -0000309001 00000 n -0000496772 00000 n -0000310770 00000 n -0000312778 00000 n -0000317978 00000 n -0000311283 00000 n -0000310628 00000 n -0000309565 00000 n -0000310936 00000 n -0000318045 00000 n -0000318232 00000 n -0000318419 00000 n -0000318606 00000 n -0000318793 00000 n -0000318980 00000 n -0000319167 00000 n -0000319354 00000 n -0000319541 00000 n -0000319728 00000 n -0000319914 00000 n -0000320101 00000 n -0000320287 00000 n -0000320473 00000 n -0000320659 00000 n -0000320846 00000 n -0000321032 00000 n -0000321218 00000 n -0000321405 00000 n -0000321864 00000 n -0000312458 00000 n -0000311395 00000 n -0000321571 00000 n -0000321629 00000 n -0000321688 00000 n -0000321747 00000 n -0000314214 00000 n -0000314345 00000 n -0000314488 00000 n -0000314793 00000 n -0000315216 00000 n -0000315422 00000 n -0000315444 00000 n -0000317955 00000 n -0000323961 00000 n -0000324306 00000 n -0000324423 00000 n -0000323844 00000 n -0000324189 00000 n -0000326719 00000 n -0000327554 00000 n -0000325902 00000 n -0000326485 00000 n -0000326602 00000 n -0000327671 00000 n -0000325787 00000 n -0000326135 00000 n -0000326252 00000 n -0000326368 00000 n -0000323532 00000 n -0000324714 00000 n -0000323389 00000 n -0000321991 00000 n -0000323728 00000 n -0000326835 00000 n -0000325549 00000 n -0000324826 00000 n -0000325671 00000 n -0000327788 00000 n -0000327374 00000 n -0000326934 00000 n -0000327496 00000 n -0000329258 00000 n -0000329409 00000 n -0000329559 00000 n -0000329710 00000 n -0000329861 00000 n -0000330012 00000 n -0000330163 00000 n -0000330314 00000 n -0000330465 00000 n -0000330615 00000 n -0000330766 00000 n -0000330917 00000 n -0000331068 00000 n -0000331219 00000 n -0000331370 00000 n -0000331520 00000 n -0000331671 00000 n -0000331822 00000 n -0000331973 00000 n -0000332124 00000 n -0000332275 00000 n -0000332426 00000 n -0000332576 00000 n -0000332727 00000 n -0000332878 00000 n -0000333029 00000 n -0000333180 00000 n -0000333331 00000 n -0000333482 00000 n -0000333633 00000 n -0000333784 00000 n -0000333935 00000 n -0000334086 00000 n -0000334237 00000 n -0000334388 00000 n -0000334539 00000 n -0000334689 00000 n -0000334840 00000 n -0000334991 00000 n -0000335142 00000 n -0000335292 00000 n -0000335443 00000 n -0000335594 00000 n -0000337900 00000 n -0000335803 00000 n -0000328736 00000 n -0000327874 00000 n -0000335745 00000 n -0000496895 00000 n -0000338051 00000 n -0000338202 00000 n -0000338353 00000 n -0000338503 00000 n -0000338653 00000 n -0000338804 00000 n -0000338955 00000 n -0000339106 00000 n -0000339257 00000 n -0000339408 00000 n -0000339559 00000 n -0000339710 00000 n -0000339861 00000 n -0000340012 00000 n -0000340163 00000 n -0000340314 00000 n -0000340465 00000 n -0000340616 00000 n -0000340766 00000 n -0000340917 00000 n -0000341067 00000 n -0000341217 00000 n -0000341367 00000 n -0000341518 00000 n -0000341669 00000 n -0000341819 00000 n -0000341970 00000 n -0000342121 00000 n -0000342272 00000 n -0000342422 00000 n -0000342573 00000 n -0000342723 00000 n -0000342874 00000 n -0000343024 00000 n -0000343175 00000 n -0000343326 00000 n -0000343476 00000 n -0000343626 00000 n -0000343777 00000 n -0000343928 00000 n -0000344079 00000 n -0000344230 00000 n -0000344380 00000 n -0000344531 00000 n -0000344680 00000 n -0000344831 00000 n -0000344982 00000 n -0000345132 00000 n -0000345283 00000 n -0000345433 00000 n -0000345584 00000 n -0000345735 00000 n -0000345886 00000 n -0000346036 00000 n -0000346187 00000 n -0000346338 00000 n -0000346489 00000 n -0000346640 00000 n -0000346791 00000 n -0000346942 00000 n -0000347093 00000 n -0000347244 00000 n -0000347395 00000 n -0000347545 00000 n -0000347696 00000 n -0000347847 00000 n -0000347998 00000 n -0000348149 00000 n -0000348299 00000 n -0000348449 00000 n -0000348599 00000 n -0000348750 00000 n -0000348958 00000 n -0000337108 00000 n -0000335889 00000 n -0000348900 00000 n -0000350847 00000 n -0000350997 00000 n -0000351148 00000 n -0000351299 00000 n -0000351450 00000 n -0000351601 00000 n -0000351752 00000 n -0000351903 00000 n -0000352054 00000 n -0000352204 00000 n -0000352354 00000 n -0000352505 00000 n -0000352655 00000 n -0000352804 00000 n -0000352952 00000 n -0000353102 00000 n -0000353253 00000 n -0000353404 00000 n -0000353555 00000 n -0000353706 00000 n -0000353856 00000 n -0000354006 00000 n -0000354157 00000 n -0000354306 00000 n -0000354456 00000 n -0000354607 00000 n -0000354758 00000 n -0000354909 00000 n -0000355060 00000 n -0000355211 00000 n -0000355362 00000 n -0000355513 00000 n -0000355663 00000 n -0000355814 00000 n -0000355965 00000 n -0000356116 00000 n -0000356265 00000 n -0000356415 00000 n -0000356566 00000 n -0000356717 00000 n -0000356867 00000 n -0000357017 00000 n -0000357168 00000 n -0000357319 00000 n -0000357469 00000 n -0000357620 00000 n -0000357770 00000 n -0000357920 00000 n -0000358070 00000 n -0000358220 00000 n -0000358370 00000 n -0000358521 00000 n -0000358672 00000 n -0000358823 00000 n -0000358974 00000 n -0000359125 00000 n -0000359276 00000 n -0000359426 00000 n -0000359577 00000 n -0000359728 00000 n -0000359879 00000 n -0000360030 00000 n -0000360181 00000 n -0000360331 00000 n -0000360481 00000 n -0000360632 00000 n -0000360783 00000 n -0000360934 00000 n -0000361085 00000 n -0000361236 00000 n -0000361387 00000 n -0000361538 00000 n -0000362987 00000 n -0000361747 00000 n -0000350064 00000 n -0000349044 00000 n -0000361689 00000 n -0000363138 00000 n -0000363289 00000 n -0000363440 00000 n -0000363591 00000 n -0000363742 00000 n -0000363893 00000 n -0000364044 00000 n -0000364195 00000 n -0000364345 00000 n -0000364495 00000 n -0000364646 00000 n -0000364797 00000 n -0000364948 00000 n -0000365099 00000 n -0000365249 00000 n -0000365400 00000 n -0000365550 00000 n -0000365701 00000 n -0000365850 00000 n -0000365999 00000 n -0000366149 00000 n -0000366300 00000 n -0000366451 00000 n -0000366602 00000 n -0000366753 00000 n -0000366904 00000 n -0000367054 00000 n -0000367205 00000 n -0000367355 00000 n -0000367506 00000 n -0000367657 00000 n -0000367807 00000 n -0000367958 00000 n -0000368108 00000 n -0000368258 00000 n -0000368409 00000 n -0000368618 00000 n -0000362519 00000 n -0000361833 00000 n -0000368560 00000 n -0000494131 00000 n -0000368704 00000 n -0000369176 00000 n -0000369652 00000 n -0000370253 00000 n -0000370337 00000 n -0000370535 00000 n -0000370561 00000 n -0000370949 00000 n -0000371828 00000 n -0000372318 00000 n -0000383003 00000 n -0000383268 00000 n -0000392651 00000 n -0000392921 00000 n -0000400115 00000 n -0000400354 00000 n -0000407383 00000 n -0000407615 00000 n -0000425931 00000 n -0000426477 00000 n -0000444500 00000 n -0000445041 00000 n -0000459123 00000 n -0000459499 00000 n -0000479378 00000 n -0000479969 00000 n -0000493739 00000 n -0000497002 00000 n -0000497122 00000 n -0000497211 00000 n -0000497284 00000 n -0000506441 00000 n -0000506676 00000 n -0000506870 00000 n -0000507059 00000 n -0000507369 00000 n -0000507786 00000 n -0000508317 00000 n -0000508947 00000 n -0000509742 00000 n -0000510438 00000 n -0000510969 00000 n -0000511698 00000 n -0000512493 00000 n -0000513288 00000 n -0000514083 00000 n -0000514878 00000 n -0000515673 00000 n -0000516318 00000 n -0000516498 00000 n -0000516787 00000 n -0000517252 00000 n -0000517716 00000 n -0000518070 00000 n -0000518241 00000 n -0000518411 00000 n -0000518582 00000 n -0000518753 00000 n -0000518930 00000 n -0000519098 00000 n -0000519283 00000 n -0000519480 00000 n -0000519677 00000 n -0000519875 00000 n -0000520284 00000 n -0000520807 00000 n -0000521330 00000 n -0000521746 00000 n -0000521985 00000 n -0000522228 00000 n -0000522500 00000 n -0000522791 00000 n -0000523077 00000 n -0000523360 00000 n -0000523643 00000 n -0000523928 00000 n -0000524211 00000 n -0000524494 00000 n -0000524779 00000 n -0000525062 00000 n -0000525185 00000 n -0000525355 00000 n -0000525594 00000 n -0000525790 00000 n -0000525908 00000 n -0000526028 00000 n -0000526157 00000 n -0000526296 00000 n -0000526440 00000 n -0000526539 00000 n -0000526673 00000 n -0000526785 00000 n -0000526888 00000 n -0000526928 00000 n -0000527109 00000 n +0000160347 00000 n +0000495354 00000 n +0000495710 00000 n +0000496066 00000 n +0000128679 00000 n +0000160744 00000 n +0000160625 00000 n +0000160525 00000 n +0000162006 00000 n +0000162157 00000 n +0000162311 00000 n +0000162463 00000 n +0000162613 00000 n +0000162766 00000 n +0000162920 00000 n +0000163074 00000 n +0000163225 00000 n +0000163379 00000 n +0000163533 00000 n +0000163687 00000 n +0000163846 00000 n +0000164005 00000 n +0000164164 00000 n +0000164315 00000 n +0000164469 00000 n +0000164628 00000 n +0000164787 00000 n +0000164938 00000 n +0000165091 00000 n +0000165242 00000 n +0000165396 00000 n +0000165546 00000 n +0000167324 00000 n +0000165756 00000 n +0000161683 00000 n +0000160785 00000 n +0000165699 00000 n +0000167483 00000 n +0000167642 00000 n +0000167802 00000 n +0000167966 00000 n +0000168129 00000 n +0000168293 00000 n +0000168457 00000 n +0000168620 00000 n +0000168783 00000 n +0000168947 00000 n +0000169111 00000 n +0000169275 00000 n +0000169440 00000 n +0000169605 00000 n +0000169770 00000 n +0000169935 00000 n +0000170099 00000 n +0000170264 00000 n +0000170428 00000 n +0000170593 00000 n +0000170757 00000 n +0000170922 00000 n +0000171073 00000 n +0000171227 00000 n +0000171386 00000 n +0000171545 00000 n +0000171709 00000 n +0000171872 00000 n +0000172036 00000 n +0000172200 00000 n +0000172364 00000 n +0000172528 00000 n +0000172692 00000 n +0000172851 00000 n +0000173014 00000 n +0000174772 00000 n +0000173172 00000 n +0000166905 00000 n +0000165841 00000 n +0000174936 00000 n +0000175100 00000 n +0000175259 00000 n +0000175423 00000 n +0000175587 00000 n +0000175751 00000 n +0000175915 00000 n +0000176078 00000 n +0000176242 00000 n +0000176405 00000 n +0000176568 00000 n +0000176732 00000 n +0000176896 00000 n +0000177061 00000 n +0000177215 00000 n +0000177373 00000 n +0000177531 00000 n +0000177695 00000 n +0000177859 00000 n +0000178023 00000 n +0000178187 00000 n +0000178351 00000 n +0000178515 00000 n +0000178674 00000 n +0000178838 00000 n +0000178997 00000 n +0000179161 00000 n +0000179324 00000 n +0000179488 00000 n +0000179651 00000 n +0000179813 00000 n +0000179977 00000 n +0000180140 00000 n +0000180304 00000 n +0000180468 00000 n +0000181156 00000 n +0000180632 00000 n +0000174353 00000 n +0000173257 00000 n +0000181321 00000 n +0000181017 00000 n +0000180717 00000 n +0000183495 00000 n +0000182978 00000 n +0000181406 00000 n +0000183097 00000 n +0000183208 00000 n +0000183265 00000 n +0000183377 00000 n +0000496184 00000 n +0000183982 00000 n +0000183807 00000 n +0000183580 00000 n +0000183926 00000 n +0000186263 00000 n +0000186423 00000 n +0000186575 00000 n +0000186734 00000 n +0000186928 00000 n +0000187121 00000 n +0000190726 00000 n +0000190878 00000 n +0000191073 00000 n +0000191526 00000 n +0000187884 00000 n +0000186084 00000 n +0000184054 00000 n +0000187314 00000 n +0000187426 00000 n +0000187483 00000 n +0000187596 00000 n +0000187713 00000 n +0000495180 00000 n +0000187770 00000 n +0000187827 00000 n +0000257010 00000 n +0000311170 00000 n +0000234354 00000 n +0000309399 00000 n +0000304596 00000 n +0000306976 00000 n +0000191720 00000 n +0000191915 00000 n +0000192110 00000 n +0000192304 00000 n +0000192455 00000 n +0000192650 00000 n +0000192800 00000 n +0000193170 00000 n +0000195152 00000 n +0000193818 00000 n +0000190468 00000 n +0000187982 00000 n +0000193365 00000 n +0000193421 00000 n +0000191300 00000 n +0000193478 00000 n +0000193534 00000 n +0000193591 00000 n +0000193648 00000 n +0000193705 00000 n +0000192986 00000 n +0000294056 00000 n +0000307089 00000 n +0000309286 00000 n +0000304483 00000 n +0000324079 00000 n +0000218033 00000 n +0000195018 00000 n +0000193916 00000 n +0000217915 00000 n +0000217971 00000 n +0000495036 00000 n +0000494602 00000 n +0000494747 00000 n +0000494891 00000 n +0000208041 00000 n +0000218610 00000 n +0000218435 00000 n +0000218205 00000 n +0000218554 00000 n +0000220672 00000 n +0000220831 00000 n +0000221216 00000 n +0000221444 00000 n +0000221671 00000 n +0000221866 00000 n +0000222059 00000 n +0000222218 00000 n +0000224945 00000 n +0000225172 00000 n +0000225626 00000 n +0000222991 00000 n +0000220469 00000 n +0000218682 00000 n +0000222412 00000 n +0000222524 00000 n +0000222581 00000 n +0000221024 00000 n +0000222694 00000 n +0000222812 00000 n +0000222930 00000 n +0000496302 00000 n +0000245263 00000 n +0000249867 00000 n +0000298603 00000 n +0000301985 00000 n +0000311054 00000 n +0000225786 00000 n +0000225979 00000 n +0000226172 00000 n +0000226363 00000 n +0000226589 00000 n +0000226781 00000 n +0000227009 00000 n +0000227463 00000 n +0000227621 00000 n +0000227813 00000 n +0000228006 00000 n +0000228198 00000 n +0000228425 00000 n +0000228653 00000 n +0000230271 00000 n +0000230499 00000 n +0000230954 00000 n +0000229135 00000 n +0000224662 00000 n +0000223076 00000 n +0000228844 00000 n +0000225399 00000 n +0000228956 00000 n +0000227237 00000 n +0000229074 00000 n +0000250446 00000 n +0000250327 00000 n +0000247893 00000 n +0000231114 00000 n +0000231307 00000 n +0000231500 00000 n +0000231803 00000 n +0000230084 00000 n +0000229233 00000 n +0000231691 00000 n +0000230727 00000 n +0000232309 00000 n +0000232134 00000 n +0000231901 00000 n +0000232253 00000 n +0000233753 00000 n +0000233905 00000 n +0000234090 00000 n +0000234755 00000 n +0000233598 00000 n +0000232381 00000 n +0000234242 00000 n +0000234411 00000 n +0000234529 00000 n +0000234642 00000 n +0000324600 00000 n +0000236186 00000 n +0000236011 00000 n +0000234853 00000 n +0000236130 00000 n +0000236900 00000 n +0000237060 00000 n +0000237382 00000 n +0000236753 00000 n +0000236271 00000 n +0000237214 00000 n +0000496420 00000 n +0000237870 00000 n +0000237695 00000 n +0000237467 00000 n +0000237814 00000 n +0000238650 00000 n +0000238811 00000 n +0000238965 00000 n +0000239116 00000 n +0000239281 00000 n +0000239603 00000 n +0000238479 00000 n +0000237942 00000 n +0000239435 00000 n +0000240088 00000 n +0000239913 00000 n +0000239688 00000 n +0000240032 00000 n +0000241279 00000 n +0000241473 00000 n +0000241667 00000 n +0000241861 00000 n +0000242054 00000 n +0000242248 00000 n +0000242441 00000 n +0000242635 00000 n +0000242829 00000 n +0000243023 00000 n +0000243217 00000 n +0000243411 00000 n +0000243605 00000 n +0000243798 00000 n +0000243992 00000 n +0000244186 00000 n +0000244378 00000 n +0000244570 00000 n +0000244764 00000 n +0000244958 00000 n +0000245489 00000 n +0000240988 00000 n +0000240160 00000 n +0000245151 00000 n +0000245376 00000 n +0000250684 00000 n +0000246827 00000 n +0000250565 00000 n +0000247060 00000 n +0000247298 00000 n +0000247179 00000 n +0000246941 00000 n +0000247536 00000 n +0000247655 00000 n +0000247774 00000 n +0000247417 00000 n +0000249986 00000 n +0000250213 00000 n +0000249753 00000 n +0000250100 00000 n +0000249639 00000 n +0000248012 00000 n +0000246595 00000 n +0000245613 00000 n +0000246714 00000 n +0000249389 00000 n +0000250745 00000 n +0000249250 00000 n +0000248097 00000 n +0000249583 00000 n +0000496538 00000 n +0000251494 00000 n +0000251765 00000 n +0000251355 00000 n +0000250856 00000 n +0000251652 00000 n +0000252435 00000 n +0000256830 00000 n +0000258679 00000 n +0000262116 00000 n +0000257124 00000 n +0000252301 00000 n +0000251852 00000 n +0000256897 00000 n +0000253345 00000 n +0000253475 00000 n +0000253615 00000 n +0000253902 00000 n +0000254307 00000 n +0000254511 00000 n +0000254532 00000 n +0000256808 00000 n +0000262183 00000 n +0000262343 00000 n +0000262537 00000 n +0000262731 00000 n +0000262926 00000 n +0000263121 00000 n +0000263315 00000 n +0000263510 00000 n +0000263705 00000 n +0000263900 00000 n +0000264095 00000 n +0000264322 00000 n +0000264549 00000 n +0000264776 00000 n +0000264999 00000 n +0000265224 00000 n +0000267281 00000 n +0000267508 00000 n +0000265734 00000 n +0000258405 00000 n +0000257250 00000 n +0000265450 00000 n +0000265506 00000 n +0000495886 00000 n +0000265563 00000 n +0000265620 00000 n +0000265677 00000 n +0000259342 00000 n +0000259472 00000 n +0000259612 00000 n +0000259863 00000 n +0000260227 00000 n +0000260431 00000 n +0000260452 00000 n +0000262094 00000 n +0000290542 00000 n +0000290424 00000 n +0000293285 00000 n +0000290075 00000 n +0000290192 00000 n +0000290311 00000 n +0000289961 00000 n +0000293461 00000 n +0000293632 00000 n +0000293746 00000 n +0000293808 00000 n +0000293870 00000 n +0000293932 00000 n +0000293994 00000 n +0000267735 00000 n +0000267958 00000 n +0000268185 00000 n +0000268412 00000 n +0000268638 00000 n +0000268865 00000 n +0000269092 00000 n +0000269319 00000 n +0000269546 00000 n +0000269773 00000 n +0000270000 00000 n +0000270227 00000 n +0000270454 00000 n +0000270681 00000 n +0000270908 00000 n +0000271135 00000 n +0000271361 00000 n +0000271586 00000 n +0000271813 00000 n +0000272040 00000 n +0000272267 00000 n +0000272494 00000 n +0000272720 00000 n +0000272947 00000 n +0000273174 00000 n +0000273400 00000 n +0000273627 00000 n +0000273853 00000 n +0000274080 00000 n +0000274307 00000 n +0000274533 00000 n +0000274760 00000 n +0000274985 00000 n +0000275178 00000 n +0000275405 00000 n +0000275632 00000 n +0000275858 00000 n +0000278661 00000 n +0000278888 00000 n +0000279115 00000 n +0000276140 00000 n +0000266838 00000 n +0000265886 00000 n +0000276084 00000 n +0000294118 00000 n +0000294180 00000 n +0000294242 00000 n +0000294304 00000 n +0000294366 00000 n +0000294428 00000 n +0000294490 00000 n +0000294552 00000 n +0000294613 00000 n +0000294675 00000 n +0000294737 00000 n +0000294799 00000 n +0000297127 00000 n +0000297189 00000 n +0000297251 00000 n +0000297313 00000 n +0000297374 00000 n +0000297436 00000 n +0000297498 00000 n +0000297560 00000 n +0000297622 00000 n +0000297684 00000 n +0000297746 00000 n +0000297808 00000 n +0000297870 00000 n +0000297932 00000 n +0000297994 00000 n +0000298056 00000 n +0000298118 00000 n +0000298180 00000 n +0000298242 00000 n +0000298304 00000 n +0000298366 00000 n +0000298428 00000 n +0000298489 00000 n +0000301861 00000 n +0000301923 00000 n +0000279342 00000 n +0000279568 00000 n +0000279795 00000 n +0000280022 00000 n +0000280249 00000 n +0000280476 00000 n +0000280670 00000 n +0000280865 00000 n +0000281058 00000 n +0000281253 00000 n +0000281448 00000 n +0000281641 00000 n +0000281836 00000 n +0000282030 00000 n +0000282417 00000 n +0000282610 00000 n +0000282805 00000 n +0000283000 00000 n +0000283389 00000 n +0000283584 00000 n +0000283779 00000 n +0000283974 00000 n +0000284169 00000 n +0000284362 00000 n +0000284548 00000 n +0000284739 00000 n +0000284930 00000 n +0000285122 00000 n +0000285317 00000 n +0000285512 00000 n +0000287720 00000 n +0000287915 00000 n +0000286013 00000 n +0000278242 00000 n +0000276238 00000 n +0000285900 00000 n +0000285956 00000 n +0000282225 00000 n +0000283195 00000 n +0000285707 00000 n +0000302047 00000 n +0000302105 00000 n +0000302167 00000 n +0000302229 00000 n +0000302291 00000 n +0000302353 00000 n +0000302415 00000 n +0000302477 00000 n +0000304369 00000 n +0000302596 00000 n +0000309059 00000 n +0000326021 00000 n +0000288110 00000 n +0000288270 00000 n +0000288463 00000 n +0000288658 00000 n +0000288817 00000 n +0000289012 00000 n +0000289207 00000 n +0000289402 00000 n +0000289597 00000 n +0000290598 00000 n +0000287501 00000 n +0000286124 00000 n +0000289791 00000 n +0000495530 00000 n +0000496656 00000 n +0000309173 00000 n +0000292783 00000 n +0000294861 00000 n +0000292636 00000 n +0000290735 00000 n +0000293172 00000 n +0000292978 00000 n +0000298665 00000 n +0000296952 00000 n +0000294985 00000 n +0000297071 00000 n +0000302710 00000 n +0000301686 00000 n +0000298763 00000 n +0000301805 00000 n +0000304710 00000 n +0000304194 00000 n +0000302821 00000 n +0000304313 00000 n +0000307203 00000 n +0000306801 00000 n +0000304821 00000 n +0000306920 00000 n +0000308684 00000 n +0000308843 00000 n +0000309455 00000 n +0000308537 00000 n +0000307314 00000 n +0000309003 00000 n +0000496774 00000 n +0000310772 00000 n +0000312780 00000 n +0000317980 00000 n +0000311285 00000 n +0000310630 00000 n +0000309567 00000 n +0000310938 00000 n +0000318047 00000 n +0000318234 00000 n +0000318421 00000 n +0000318608 00000 n +0000318795 00000 n +0000318982 00000 n +0000319169 00000 n +0000319356 00000 n +0000319543 00000 n +0000319730 00000 n +0000319916 00000 n +0000320103 00000 n +0000320289 00000 n +0000320475 00000 n +0000320661 00000 n +0000320848 00000 n +0000321034 00000 n +0000321220 00000 n +0000321407 00000 n +0000321866 00000 n +0000312460 00000 n +0000311397 00000 n +0000321573 00000 n +0000321631 00000 n +0000321690 00000 n +0000321749 00000 n +0000314216 00000 n +0000314347 00000 n +0000314490 00000 n +0000314795 00000 n +0000315218 00000 n +0000315424 00000 n +0000315446 00000 n +0000317957 00000 n +0000323963 00000 n +0000324308 00000 n +0000324425 00000 n +0000323846 00000 n +0000324191 00000 n +0000326721 00000 n +0000327556 00000 n +0000325904 00000 n +0000326487 00000 n +0000326604 00000 n +0000327673 00000 n +0000325789 00000 n +0000326137 00000 n +0000326254 00000 n +0000326370 00000 n +0000323534 00000 n +0000324716 00000 n +0000323391 00000 n +0000321993 00000 n +0000323730 00000 n +0000326837 00000 n +0000325551 00000 n +0000324828 00000 n +0000325673 00000 n +0000327790 00000 n +0000327376 00000 n +0000326936 00000 n +0000327498 00000 n +0000329260 00000 n +0000329411 00000 n +0000329561 00000 n +0000329712 00000 n +0000329863 00000 n +0000330014 00000 n +0000330165 00000 n +0000330316 00000 n +0000330467 00000 n +0000330617 00000 n +0000330768 00000 n +0000330919 00000 n +0000331070 00000 n +0000331221 00000 n +0000331372 00000 n +0000331522 00000 n +0000331673 00000 n +0000331824 00000 n +0000331975 00000 n +0000332126 00000 n +0000332277 00000 n +0000332428 00000 n +0000332578 00000 n +0000332729 00000 n +0000332880 00000 n +0000333031 00000 n +0000333182 00000 n +0000333333 00000 n +0000333484 00000 n +0000333635 00000 n +0000333786 00000 n +0000333937 00000 n +0000334088 00000 n +0000334239 00000 n +0000334390 00000 n +0000334541 00000 n +0000334691 00000 n +0000334842 00000 n +0000334993 00000 n +0000335144 00000 n +0000335294 00000 n +0000335445 00000 n +0000335596 00000 n +0000337902 00000 n +0000335805 00000 n +0000328738 00000 n +0000327876 00000 n +0000335747 00000 n +0000496897 00000 n +0000338053 00000 n +0000338204 00000 n +0000338355 00000 n +0000338505 00000 n +0000338655 00000 n +0000338806 00000 n +0000338957 00000 n +0000339108 00000 n +0000339259 00000 n +0000339410 00000 n +0000339561 00000 n +0000339712 00000 n +0000339863 00000 n +0000340014 00000 n +0000340165 00000 n +0000340316 00000 n +0000340467 00000 n +0000340618 00000 n +0000340768 00000 n +0000340919 00000 n +0000341069 00000 n +0000341219 00000 n +0000341369 00000 n +0000341520 00000 n +0000341671 00000 n +0000341821 00000 n +0000341972 00000 n +0000342123 00000 n +0000342274 00000 n +0000342424 00000 n +0000342575 00000 n +0000342725 00000 n +0000342876 00000 n +0000343026 00000 n +0000343177 00000 n +0000343328 00000 n +0000343478 00000 n +0000343628 00000 n +0000343779 00000 n +0000343930 00000 n +0000344081 00000 n +0000344232 00000 n +0000344382 00000 n +0000344533 00000 n +0000344682 00000 n +0000344833 00000 n +0000344984 00000 n +0000345134 00000 n +0000345285 00000 n +0000345435 00000 n +0000345586 00000 n +0000345737 00000 n +0000345888 00000 n +0000346038 00000 n +0000346189 00000 n +0000346340 00000 n +0000346491 00000 n +0000346642 00000 n +0000346793 00000 n +0000346944 00000 n +0000347095 00000 n +0000347246 00000 n +0000347397 00000 n +0000347547 00000 n +0000347698 00000 n +0000347849 00000 n +0000348000 00000 n +0000348151 00000 n +0000348301 00000 n +0000348451 00000 n +0000348601 00000 n +0000348752 00000 n +0000348960 00000 n +0000337110 00000 n +0000335891 00000 n +0000348902 00000 n +0000350849 00000 n +0000350999 00000 n +0000351150 00000 n +0000351301 00000 n +0000351452 00000 n +0000351603 00000 n +0000351754 00000 n +0000351905 00000 n +0000352056 00000 n +0000352206 00000 n +0000352356 00000 n +0000352507 00000 n +0000352657 00000 n +0000352806 00000 n +0000352954 00000 n +0000353104 00000 n +0000353255 00000 n +0000353406 00000 n +0000353557 00000 n +0000353708 00000 n +0000353858 00000 n +0000354008 00000 n +0000354159 00000 n +0000354308 00000 n +0000354458 00000 n +0000354609 00000 n +0000354760 00000 n +0000354911 00000 n +0000355062 00000 n +0000355213 00000 n +0000355364 00000 n +0000355515 00000 n +0000355665 00000 n +0000355816 00000 n +0000355967 00000 n +0000356118 00000 n +0000356267 00000 n +0000356417 00000 n +0000356568 00000 n +0000356719 00000 n +0000356869 00000 n +0000357019 00000 n +0000357170 00000 n +0000357321 00000 n +0000357471 00000 n +0000357622 00000 n +0000357772 00000 n +0000357922 00000 n +0000358072 00000 n +0000358222 00000 n +0000358372 00000 n +0000358523 00000 n +0000358674 00000 n +0000358825 00000 n +0000358976 00000 n +0000359127 00000 n +0000359278 00000 n +0000359428 00000 n +0000359579 00000 n +0000359730 00000 n +0000359881 00000 n +0000360032 00000 n +0000360183 00000 n +0000360333 00000 n +0000360483 00000 n +0000360634 00000 n +0000360785 00000 n +0000360936 00000 n +0000361087 00000 n +0000361238 00000 n +0000361389 00000 n +0000361540 00000 n +0000362989 00000 n +0000361749 00000 n +0000350066 00000 n +0000349046 00000 n +0000361691 00000 n +0000363140 00000 n +0000363291 00000 n +0000363442 00000 n +0000363593 00000 n +0000363744 00000 n +0000363895 00000 n +0000364046 00000 n +0000364197 00000 n +0000364347 00000 n +0000364497 00000 n +0000364648 00000 n +0000364799 00000 n +0000364950 00000 n +0000365101 00000 n +0000365251 00000 n +0000365402 00000 n +0000365552 00000 n +0000365703 00000 n +0000365852 00000 n +0000366001 00000 n +0000366151 00000 n +0000366302 00000 n +0000366453 00000 n +0000366604 00000 n +0000366755 00000 n +0000366906 00000 n +0000367056 00000 n +0000367207 00000 n +0000367357 00000 n +0000367508 00000 n +0000367659 00000 n +0000367809 00000 n +0000367960 00000 n +0000368110 00000 n +0000368260 00000 n +0000368411 00000 n +0000368620 00000 n +0000362521 00000 n +0000361835 00000 n +0000368562 00000 n +0000494133 00000 n +0000368706 00000 n +0000369178 00000 n +0000369654 00000 n +0000370255 00000 n +0000370339 00000 n +0000370537 00000 n +0000370563 00000 n +0000370951 00000 n +0000371830 00000 n +0000372320 00000 n +0000383005 00000 n +0000383270 00000 n +0000392653 00000 n +0000392923 00000 n +0000400117 00000 n +0000400356 00000 n +0000407385 00000 n +0000407617 00000 n +0000425933 00000 n +0000426479 00000 n +0000444502 00000 n +0000445043 00000 n +0000459125 00000 n +0000459501 00000 n +0000479380 00000 n +0000479971 00000 n +0000493741 00000 n +0000497004 00000 n +0000497124 00000 n +0000497213 00000 n +0000497286 00000 n +0000506443 00000 n +0000506678 00000 n +0000506872 00000 n +0000507061 00000 n +0000507371 00000 n +0000507788 00000 n +0000508319 00000 n +0000508949 00000 n +0000509744 00000 n +0000510440 00000 n +0000510971 00000 n +0000511700 00000 n +0000512495 00000 n +0000513290 00000 n +0000514085 00000 n +0000514880 00000 n +0000515675 00000 n +0000516320 00000 n +0000516500 00000 n +0000516789 00000 n +0000517254 00000 n +0000517718 00000 n +0000518072 00000 n +0000518243 00000 n +0000518413 00000 n +0000518584 00000 n +0000518755 00000 n +0000518932 00000 n +0000519100 00000 n +0000519285 00000 n +0000519482 00000 n +0000519679 00000 n +0000519877 00000 n +0000520286 00000 n +0000520809 00000 n +0000521332 00000 n +0000521748 00000 n +0000521987 00000 n +0000522230 00000 n +0000522502 00000 n +0000522793 00000 n +0000523079 00000 n +0000523362 00000 n +0000523645 00000 n +0000523930 00000 n +0000524213 00000 n +0000524496 00000 n +0000524781 00000 n +0000525064 00000 n +0000525187 00000 n +0000525357 00000 n +0000525596 00000 n +0000525792 00000 n +0000525910 00000 n +0000526030 00000 n +0000526159 00000 n +0000526298 00000 n +0000526442 00000 n +0000526541 00000 n +0000526675 00000 n +0000526787 00000 n +0000526890 00000 n +0000526930 00000 n +0000527111 00000 n trailer << /Size 1404 /Root 1402 0 R /Info 1403 0 R -/ID [<F29439B9CC44BC2F87089A748E426729> <F29439B9CC44BC2F87089A748E426729>] >> +/ID [<F402B200711665781F0B684C4A0FC9D9> <F402B200711665781F0B684C4A0FC9D9>] >> startxref -527436 +527438 %%EOF diff --git a/documentation/aacEncoder.pdf b/documentation/aacEncoder.pdf index 2af41ae..84100eb 100644 --- a/documentation/aacEncoder.pdf +++ b/documentation/aacEncoder.pdf @@ -632,7 +632,11 @@ endobj /Filter /FlateDecode >> stream -x}UM6W(ͬi,7wIvķDYl%Rud;q;@@GGW?qDGۢD%ɣ_g4uW11#<$zR7]?WwF4CŮ ѱJdK_c&+^'kxT嗏僬Tug@SxL@L!Yf[j0/PI/c2`:eI~A%4GOH-ÜMܫ!OԮucZ .+v +BV~;M3\Gvn@KD[lj|f2~L'-6+>W-$O\I2/!qfN.&aemUW1|CBd)1IUDp-*>FHcjUM=&8ɫ4ބ@_il2(/ʤCpK/q3;ZpMcܐCF$Yp:1CtS?jUO JA[{?yf5k]'1ȷNad>[/V3-p!Qӳ8tL. +x}UM6Wp1m2Ljd|KrA% !;i}riunI(8(AMI$&A^q7oP2hB9fI9w/}</n]*b_$ J}$u[XE +Xm1AcSͥ[>ɚ5S +i2uO2$ld?t,JH('ÜNUl~nƸ8o݉v"[<~ؕ9ۑ}\yIHpD+01_Ĩ[5UYq4sתę o$#82yB\WQqAY~[ +zn\.u1c\ َ}~JGzcQ/\~ +@Sx:Wpld@Zb}JTxFtx5[k#bmXOwY˽;3W`b @2*̴p MW= endstream endobj 418 0 obj << @@ -8985,8 +8989,8 @@ endobj >> endobj 1416 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.10)/Keywords() -/CreationDate (D:20120817142105+02'00') -/ModDate (D:20120817142105+02'00') +/CreationDate (D:20120927164403+02'00') +/ModDate (D:20120927164403+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.10-2.2 (TeX Live 2009/Debian) kpathsea version 5.0.0) >> endobj @@ -10413,7 +10417,7 @@ trailer << /Size 1417 /Root 1415 0 R /Info 1416 0 R -/ID [<09BA174B99D03051E2360592CE4C1DF3> <09BA174B99D03051E2360592CE4C1DF3>] >> +/ID [<6568D5E6D3D414DEC0C8E7A6930872CF> <6568D5E6D3D414DEC0C8E7A6930872CF>] >> startxref 508901 %%EOF diff --git a/libAACdec/src/aacdec_drc.cpp b/libAACdec/src/aacdec_drc.cpp index c660b83..ebc6975 100644 --- a/libAACdec/src/aacdec_drc.cpp +++ b/libAACdec/src/aacdec_drc.cpp @@ -220,8 +220,9 @@ AAC_DECODER_ERROR aacDecoder_drcSetParam ( else { /* ref_level must be between 0 and MAX_REFERENCE_LEVEL, inclusive */ self->digitalNorm = 1; - self->progRefLevel = AACDEC_DRC_DEFAULT_REF_LEVEL; self->params.targetRefLevel = value; + self->progRefLevel = (SCHAR)value; /* Set the program reference level equal to the target + level according to 4.5.2.7.3 of ISO/IEC 14496-3. */ } break; case APPLY_HEAVY_COMPRESSION: @@ -783,6 +784,7 @@ void aacDecoder_drcApply ( { int band, top, bin, numBands; int bottom = 0; + int modifyBins = 0; FIXP_DBL max_mantissa; INT max_exponent; @@ -937,6 +939,12 @@ void aacDecoder_drcApply ( if (fact_exponent[band] < max_exponent) { fact_mantissa[band] >>= max_exponent - fact_exponent[band]; } + if (fact_mantissa[band] != FL2FXCONST_DBL(0.5f)) { + modifyBins = 1; + } + } + if (max_exponent != 1) { + modifyBins = 1; } } @@ -948,23 +956,28 @@ void aacDecoder_drcApply ( { bottom = 0; - for (band = 0; band < numBands; band++) + if (!modifyBins) { + /* We don't have to modify the spectral bins because the fractional part of all factors is 0.5. + In order to keep accurancy we don't apply the factor but decrease the exponent instead. */ + max_exponent -= 1; + } else { - top = fixMin((int)( (pDrcChData->bandTop[band]+1)<<2 ), aacFrameSize); /* ... * DRC_BAND_MULT; */ + for (band = 0; band < numBands; band++) + { + top = fixMin((int)( (pDrcChData->bandTop[band]+1)<<2 ), aacFrameSize); /* ... * DRC_BAND_MULT; */ - for (bin = bottom; bin < top; bin++) { - pSpectralCoefficient[bin] = fMult(pSpectralCoefficient[bin], fact_mantissa[band]); - } + for (bin = bottom; bin < top; bin++) { + pSpectralCoefficient[bin] = fMult(pSpectralCoefficient[bin], fact_mantissa[band]); + } - bottom = top; + bottom = top; + } } /* above topmost DRC band gain factor is 1 */ if (max_exponent > 0) { - FIXP_DBL fact = FL2FXCONST_DBL(0.5f) >> (max_exponent - 1); - - for (bin = top; bin < aacFrameSize; bin++) { - pSpectralCoefficient[bin] = fMult(pSpectralCoefficient[bin], fact); + for (bin = bottom; bin < aacFrameSize; bin+=1) { + pSpectralCoefficient[bin] >>= max_exponent; } } @@ -980,12 +993,13 @@ void aacDecoder_drcApply ( } else { HANDLE_SBRDECODER hSbrDecoder = (HANDLE_SBRDECODER)pSbrDec; + UINT numBands = pDrcChData->numBands; /* feed factors into SBR decoder for application in QMF domain. */ sbrDecoder_drcFeedChannel ( hSbrDecoder, ch, - pDrcChData->numBands, + numBands, fact_mantissa, max_exponent, pDrcChData->drcInterpolationScheme, diff --git a/libAACdec/src/aacdec_drc.h b/libAACdec/src/aacdec_drc.h index 07e7eff..9c90e32 100644 --- a/libAACdec/src/aacdec_drc.h +++ b/libAACdec/src/aacdec_drc.h @@ -99,10 +99,7 @@ amm-info@iis.fraunhofer.de #include "FDK_bitstream.h" #define AACDEC_DRC_DEFAULT_REF_LEVEL ( 108 ) /* -27 dB below full scale (typical for movies) */ -#define AACDEC_DRC_DFLT_EXPIRY_FRAMES ( 40 ) /* Default DRC data expiry time in AAC frames */ -#define MAX_SBR_SYN_CHAN ( 64 ) -#define MAX_SBR_COLS ( 32 ) - +#define AACDEC_DRC_DFLT_EXPIRY_FRAMES ( 50 ) /* Default DRC data expiry time in AAC frames */ /** * \brief DRC module setting parameters diff --git a/libAACdec/src/aacdecoder.cpp b/libAACdec/src/aacdecoder.cpp index 2843e9f..8d3c18d 100644 --- a/libAACdec/src/aacdecoder.cpp +++ b/libAACdec/src/aacdecoder.cpp @@ -865,6 +865,17 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_Init(HANDLE_AACDECODER self, const CS self->chMapping[ch] = 255; } } + #ifdef TP_PCE_ENABLE + else { + if (CProgramConfig_IsValid(&asc->m_progrConfigElement)) { + /* Set matrix mixdown infos if available from PCE. */ + pcmDmx_SetMatrixMixdownFromPce ( self->hPcmUtils, + asc->m_progrConfigElement.MatrixMixdownIndexPresent, + asc->m_progrConfigElement.MatrixMixdownIndex, + asc->m_progrConfigElement.PseudoSurroundEnable ); + } + } + #endif self->streamInfo.channelConfig = asc->m_channelConfiguration; @@ -1565,7 +1576,7 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_DecodeFrame( self->streamInfo.numChannels = aacChannels; #ifdef TP_PCE_ENABLE - if (pceRead == 1 || CProgramConfig_IsValid(pce)) { + if (pceRead == 1 && CProgramConfig_IsValid(pce)) { /* Set matrix mixdown infos if available from PCE. */ pcmDmx_SetMatrixMixdownFromPce ( self->hPcmUtils, pce->MatrixMixdownIndexPresent, @@ -1673,7 +1684,7 @@ LINKSPEC_CPP AAC_DECODER_ERROR CAacDecoder_DecodeFrame( break; } if ( flags&AACDEC_FLUSH ) { - FDKmemclear(pAacDecoderChannelInfo->pSpectralCoefficient, sizeof(FIXP_DBL)*self->streamInfo.aacSamplesPerFrame); + FDKmemclear(pAacDecoderChannelInfo->pSpectralCoefficient, sizeof(FIXP_DBL)*self->streamInfo.aacSamplesPerFrame); FDKmemclear(self->pAacDecoderStaticChannelInfo[c]->pOverlapBuffer, OverlapBufferSize*sizeof(FIXP_DBL)); } } diff --git a/libAACdec/src/aacdecoder_lib.cpp b/libAACdec/src/aacdecoder_lib.cpp index 87f9ab0..a3db39e 100644 --- a/libAACdec/src/aacdecoder_lib.cpp +++ b/libAACdec/src/aacdecoder_lib.cpp @@ -110,7 +110,7 @@ amm-info@iis.fraunhofer.de /* Decoder library info */ #define AACDECODER_LIB_VL0 2 #define AACDECODER_LIB_VL1 4 -#define AACDECODER_LIB_VL2 5 +#define AACDECODER_LIB_VL2 7 #define AACDECODER_LIB_TITLE "AAC Decoder Lib" #define AACDECODER_LIB_BUILD_DATE __DATE__ #define AACDECODER_LIB_BUILD_TIME __TIME__ diff --git a/libAACenc/src/aacenc_lib.cpp b/libAACenc/src/aacenc_lib.cpp index a245358..07cfddc 100644 --- a/libAACenc/src/aacenc_lib.cpp +++ b/libAACenc/src/aacenc_lib.cpp @@ -98,7 +98,7 @@ amm-info@iis.fraunhofer.de /* Encoder library info */ #define AACENCODER_LIB_VL0 3 #define AACENCODER_LIB_VL1 3 -#define AACENCODER_LIB_VL2 2 +#define AACENCODER_LIB_VL2 3 #define AACENCODER_LIB_TITLE "AAC Encoder" #define AACENCODER_LIB_BUILD_DATE __DATE__ #define AACENCODER_LIB_BUILD_TIME __TIME__ diff --git a/libAACenc/src/band_nrg.cpp b/libAACenc/src/band_nrg.cpp index 458aa9c..0e46b45 100644 --- a/libAACenc/src/band_nrg.cpp +++ b/libAACenc/src/band_nrg.cpp @@ -260,21 +260,21 @@ FDKaacEnc_CalcBandEnergyOptimShort(const FIXP_DBL *RESTRICT mdctSpectrum, for(i=0; i<numBands; i++) { - int leadingBits = fixMax(0,sfbMaxScaleSpec[i]-4); /* max sfbWidth = 96 ; 2^7=128 => 7/2 = 4 (spc*spc) */ + int leadingBits = sfbMaxScaleSpec[i]-3; /* max sfbWidth = 36 ; 2^6=64 => 6/2 = 3 (spc*spc) */ FIXP_DBL tmp = FL2FXCONST_DBL(0.0); for (j=bandOffset[i];j<bandOffset[i+1];j++) { - FIXP_DBL spec = mdctSpectrum[j]<<leadingBits; + FIXP_DBL spec = scaleValue(mdctSpectrum[j],leadingBits); tmp = fPow2AddDiv2(tmp, spec); } - bandEnergy[i] = tmp<<1; + bandEnergy[i] = tmp; } for(i=0; i<numBands; i++) { - INT scale = 2*fixMax(0,sfbMaxScaleSpec[i]-4); /* max sfbWidth = 96 ; 2^7=128 => 7/2 = 4 (spc*spc) */ - scale = fixMin(scale,(DFRACT_BITS-1)); - bandEnergy[i] >>= scale; + INT scale = (2*(sfbMaxScaleSpec[i]-3))-1; /* max sfbWidth = 36 ; 2^6=64 => 6/2 = 3 (spc*spc) */ + scale = fixMax(fixMin(scale,(DFRACT_BITS-1)),-(DFRACT_BITS-1)); + bandEnergy[i] = scaleValueSaturate(bandEnergy[i], -scale); } } @@ -343,7 +343,7 @@ void FDKaacEnc_CalcBandNrgMSOpt(const FIXP_DBL *RESTRICT mdctSpectrumLeft, { /* using the minimal scaling of left and right channel can cause very small energies; check ldNrg before subtract scaling multiplication: fract*INT we don't need fMult */ - + int minus = scale*FL2FXCONST_DBL(1.0/64); if (bandEnergyMidLdData[i] != FL2FXCONST_DBL(-1.0f)) diff --git a/libAACenc/src/line_pe.cpp b/libAACenc/src/line_pe.cpp index ed5ee7f..7014bcb 100644 --- a/libAACenc/src/line_pe.cpp +++ b/libAACenc/src/line_pe.cpp @@ -122,6 +122,8 @@ void FDKaacEnc_prepareSfbPe(PE_CHANNEL_DATA *peChanData, avgFormFactorLdData = ((-sfbEnergyLdData[sfbGrp+sfb]>>1) + (CalcLdInt(sfbWidth)>>1))>>1; peChanData->sfbNLines[sfbGrp+sfb] = (INT)CalcInvLdData( (sfbFormFactorLdData[sfbGrp+sfb] + formFacScaling) + avgFormFactorLdData); + /* Make sure sfbNLines is never greater than sfbWidth due to unaccuracies (e.g. sfbEnergyLdData[sfbGrp+sfb] = 0x80000000) */ + peChanData->sfbNLines[sfbGrp+sfb] = fMin(sfbWidth, peChanData->sfbNLines[sfbGrp+sfb]); } else { peChanData->sfbNLines[sfbGrp+sfb] = 0; diff --git a/libAACenc/src/tns_param.cpp b/libAACenc/src/tns_param.cpp deleted file mode 100644 index 3c04c51..0000000 --- a/libAACenc/src/tns_param.cpp +++ /dev/null @@ -1,93 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - - Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Frderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/******************************** MPEG Audio Encoder ************************** - - Initial author: M.Werner - contents/description: TNS parameters - -******************************************************************************/ - -#include "tns_param.h" - - diff --git a/libFDK/include/FDK_archdef.h b/libFDK/include/FDK_archdef.h index 22ec0ed..a963f55 100644 --- a/libFDK/include/FDK_archdef.h +++ b/libFDK/include/FDK_archdef.h @@ -155,7 +155,6 @@ amm-info@iis.fraunhofer.de #endif - /* Define preferred Multiplication type */ #if defined(FDK_HIGH_PERFORMANCE) && !defined(FDK_HIGH_QUALITY) /* FDK_HIGH_PERFORMANCE */ diff --git a/libFDK/include/clz.h b/libFDK/include/clz.h index 90cdb2b..38c5073 100644 --- a/libFDK/include/clz.h +++ b/libFDK/include/clz.h @@ -100,6 +100,9 @@ amm-info@iis.fraunhofer.de #elif defined(__mips__) /* cppp replaced: elif */ #include "mips/clz_mips.h" +#elif defined(__x86__) /* cppp replaced: elif */ +#include "x86/clz_x86.h" + #endif /* all cores */ diff --git a/libFDK/include/mips/cplx_mul.h b/libFDK/include/mips/cplx_mul.h index 4e8f26f..fb777ce 100644 --- a/libFDK/include/mips/cplx_mul.h +++ b/libFDK/include/mips/cplx_mul.h @@ -107,10 +107,23 @@ inline void cplxMultDiv2( FIXP_DBL *c_Re, FIXP_DBL b_Re, FIXP_DBL b_Im) { - INT result; - result = (((long long)a_Re * b_Re) - ((long long) a_Im * b_Im)) >> 32; + INT result; + + __asm__ ("mult %[a_Re], %[b_Re];\n" + "msub %[a_Im], %[b_Im];\n" + "mfhi %[result];\n" + : [result]"=r"(result) + : [a_Re]"d"(a_Re), [b_Re]"d"(b_Re), [a_Im]"d"(a_Im), [b_Im]"d"(b_Im) + : "lo"); + *c_Re = result; - result = (((long long)a_Re * b_Im) - ((long long) a_Im * b_Re)) >> 32; + + __asm__ ("mult %[a_Re], %[b_Im];\n" + "madd %[a_Im], %[b_Re];\n" + "mfhi %[result];\n" + : [result]"=r"(result) + : [a_Re]"r"(a_Re), [b_Im]"r"(b_Im), [a_Im]"r"(a_Im), [b_Re]"r"(b_Re) + : "lo"); *c_Im = result; } #endif @@ -123,10 +136,24 @@ inline void cplxMult( FIXP_DBL *c_Re, FIXP_DBL b_Re, FIXP_DBL b_Im) { - INT result; - result = (((long long)a_Re * b_Re) - ((long long) a_Im * b_Im)) >> 32; + INT result; + + __asm__ ("mult %[a_Re], %[b_Re];\n" + "msub %[a_Im], %[b_Im];\n" + "mfhi %[result];\n" + //"extr_w %[result], 31;\n" + : [result]"=r"(result) + : [a_Re]"r"(a_Re), [b_Re]"r"(b_Re), [a_Im]"r"(a_Im), [b_Im]"r"(b_Im) + : "lo"); *c_Re = result<<1; - result = (((long long)a_Re * b_Im) - ((long long) a_Im * b_Re)) >> 32; + + __asm__ ("mult %[a_Re], %[b_Im];\n" + "madd %[a_Im], %[b_Re];\n" + "mfhi %[result];\n" + //"extr_w %[result], 31;\n" + : [result]"=r"(result) + : [a_Re]"r"(a_Re), [b_Im]"r"(b_Im), [a_Im]"r"(a_Im), [b_Re]"r"(b_Re) + : "lo"); *c_Im = result<<1; } #endif diff --git a/libFDK/include/mips/fixmul_mips.h b/libFDK/include/mips/fixmul_mips.h index 0e7af0d..62d059e 100644 --- a/libFDK/include/mips/fixmul_mips.h +++ b/libFDK/include/mips/fixmul_mips.h @@ -100,11 +100,14 @@ amm-info@iis.fraunhofer.de inline INT fixmuldiv2_DD (const INT a, const INT b) { - - return ((long long) a * b) >> 32; + INT result ; + result = ((long long)a * b)>>32; + return result ; } #endif /* (__GNUC__) && defined(__mips__) */ #endif /* __mips__ */ +#define FUNCTION_fixmulBitExact_DD +#define fixmulBitExact_DD fixmul_DD diff --git a/libAACenc/src/tns_param.h b/libFDK/include/x86/clz_x86.h index b191b5c..db7970d 100644 --- a/libAACenc/src/tns_param.h +++ b/libFDK/include/x86/clz_x86.h @@ -81,16 +81,74 @@ www.iis.fraunhofer.de/amm amm-info@iis.fraunhofer.de ----------------------------------------------------------------------------------------------------------- */ -/******************************** MPEG Audio Encoder ************************** +/*************************** Fraunhofer IIS FDK Tools ********************** - Initial author: Alex Goeschel - contents/description: Temporal noise shaping + Author(s): + Description: fixed point intrinsics ******************************************************************************/ -#ifndef _TNS_PARAM_H -#define _TNS_PARAM_H - - - -#endif /* _TNS_PARAM_H */ +#if defined(__GNUC__) && (defined(__x86__) || defined(__x86_64__)) + + #define FUNCTION_fixnormz_D + #define FUNCTION_fixnorm_D + + inline INT fixnormz_D(LONG value) + { + INT result; + + if (value != 0) { + result = __builtin_clz(value); + } else { + result = 32; + } + return result; + } + + inline INT fixnorm_D(LONG value) + { + INT result; + if (value == 0) { + return 0; + } + if (value < 0) { + value = ~value; + } + result = fixnormz_D(value); + return result - 1; + } + + +#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64)) + +#include <intrin.h> + + #define FUNCTION_fixnormz_D + #define FUNCTION_fixnorm_D + + inline INT fixnormz_D(LONG value) + { + unsigned long result = 0; + unsigned char err; + err = _BitScanReverse(&result, value); + if (err) { + return 31 - result; + } else { + return 32; + } + } + + inline INT fixnorm_D(LONG value) + { + INT result; + if (value == 0) { + return 0; + } + if (value < 0) { + value = ~value; + } + result = fixnormz_D(value); + return result - 1; + } + +#endif /* toolchain */ diff --git a/libFDK/src/FDK_core.cpp b/libFDK/src/FDK_core.cpp index 98a051f..8a07aa9 100644 --- a/libFDK/src/FDK_core.cpp +++ b/libFDK/src/FDK_core.cpp @@ -93,7 +93,7 @@ amm-info@iis.fraunhofer.de /* FDK tools library info */ #define FDK_TOOLS_LIB_VL0 2 #define FDK_TOOLS_LIB_VL1 2 -#define FDK_TOOLS_LIB_VL2 7 +#define FDK_TOOLS_LIB_VL2 8 #define FDK_TOOLS_LIB_TITLE "FDK Tools" #define FDK_TOOLS_LIB_BUILD_DATE __DATE__ #define FDK_TOOLS_LIB_BUILD_TIME __TIME__ diff --git a/libPCMutils/src/pcmutils_lib.cpp b/libPCMutils/src/pcmutils_lib.cpp index 4272548..e0a9817 100644 --- a/libPCMutils/src/pcmutils_lib.cpp +++ b/libPCMutils/src/pcmutils_lib.cpp @@ -96,7 +96,7 @@ amm-info@iis.fraunhofer.de /* Decoder library info */ #define PCMDMX_LIB_VL0 2 -#define PCMDMX_LIB_VL1 2 +#define PCMDMX_LIB_VL1 3 #define PCMDMX_LIB_VL2 1 #define PCMDMX_LIB_TITLE "PCM Downmix Lib" #define PCMDMX_LIB_BUILD_DATE __DATE__ @@ -107,7 +107,7 @@ amm-info@iis.fraunhofer.de #define PCM_DMX_MAX_CHANNELS ( 8 ) #define PCM_DMX_MAX_CHANNEL_GROUPS ( 4 ) #define PCM_DMX_MAX_CHANNELS_PER_GROUP ( 3 ) /* The maximum over all groups */ -#define PCMDMX_DFLT_EXPIRY_FRAME ( 40 ) /* At least 400ms (FL 960 @ 96kHz) */ +#define PCMDMX_DFLT_EXPIRY_FRAME ( 50 ) /* At least 500ms (FL 960 @ 96kHz) */ /* Fixed and unique channel group indices. * The last group index has to be smaller than PCM_DMX_MAX_CHANNEL_GROUPS. */ @@ -264,7 +264,6 @@ C_ALLOC_MEM_STATIC(PcmDmxInstance, struct PCM_DMX_INSTANCE, 1) * @param [in] The total number of channels of the given configuration. * @param [in] Array holding the corresponding channel types for each channel. * @param [in] Array holding the corresponding channel type indices for each channel. - * @param [in] Array containing the channel mapping to be used (From MPEG PCE ordering to whatever is required). * @param [out] Array where the buffer offsets for each channel are stored into. * @returns Returns the packed channel mode. **/ @@ -273,7 +272,6 @@ PCM_DMX_CHANNEL_MODE getChannelMode ( const INT numChannels, /* in */ const AUDIO_CHANNEL_TYPE channelType[], /* in */ const UCHAR channelIndices[], /* in */ - const UCHAR channelMapping[PCM_DMX_MAX_CHANNELS], /* in */ UCHAR offsetTable[PCM_DMX_MAX_CHANNELS] /* out */ ) { @@ -284,12 +282,12 @@ PCM_DMX_CHANNEL_MODE getChannelMode ( FDK_ASSERT(channelType != NULL); FDK_ASSERT(channelIndices != NULL); - FDK_ASSERT(channelMapping != NULL); FDK_ASSERT(offsetTable != NULL); /* For details see ISO/IEC 13818-7:2005(E), 8.5.3 Channel configuration */ FDKmemclear(numChInGrp, PCM_DMX_MAX_CHANNEL_GROUPS*sizeof(UCHAR)); FDKmemset(offsetTable, 255, PCM_DMX_MAX_CHANNELS*sizeof(UCHAR)); + FDKmemset(chIdx, 255, PCM_DMX_MAX_CHANNEL_GROUPS*PCM_DMX_MAX_CHANNELS_PER_GROUP*sizeof(UCHAR)); /* Categorize channels */ for (ch = 0; ch < numChannels; ch += 1) { @@ -335,7 +333,7 @@ PCM_DMX_CHANNEL_MODE getChannelMode ( if (numChInGrp[CH_GROUP_FRONT] & 0x1) { /* Odd number of front channels -> we have a center channel. In MPEG-4 the center has the index 0. */ - offsetTable[CENTER_FRONT_CHANNEL] = channelMapping[chIdx[CH_GROUP_FRONT][0]]; + offsetTable[CENTER_FRONT_CHANNEL] = chIdx[CH_GROUP_FRONT][0]; } for (grpIdx = 0; grpIdx < PCM_DMX_MAX_CHANNEL_GROUPS; grpIdx += 1) { @@ -367,7 +365,7 @@ PCM_DMX_CHANNEL_MODE getChannelMode ( for ( ; ch < numChInGrp[grpIdx]; ch += 1) { if (ch < maxChannels) { - offsetTable[chMapPos] = channelMapping[chIdx[grpIdx][ch]]; + offsetTable[chMapPos] = chIdx[grpIdx][ch]; chMapPos += 1; } else { err = -1; @@ -814,7 +812,6 @@ PCMDMX_ERROR pcmDmx_ApplyFrame ( numInChannels, channelType, channelIndices, - channelMapping[numInChannels], inOffsetTable ); if (inChMode == CH_MODE_UNDEFINED) { diff --git a/libSBRdec/src/sbr_dec.cpp b/libSBRdec/src/sbr_dec.cpp index 5a8b320..bd3cd10 100644 --- a/libSBRdec/src/sbr_dec.cpp +++ b/libSBRdec/src/sbr_dec.cpp @@ -585,14 +585,16 @@ sbr_dec ( HANDLE_SBR_DEC hSbrDec, /*!< handle to Decoder channel */ int maxShift = 0; - if (hSbrDec->sbrDrcChannel.prevFact_exp > maxShift) { - maxShift = hSbrDec->sbrDrcChannel.prevFact_exp; - } - if (hSbrDec->sbrDrcChannel.currFact_exp > maxShift) { - maxShift = hSbrDec->sbrDrcChannel.currFact_exp; - } - if (hSbrDec->sbrDrcChannel.nextFact_exp > maxShift) { - maxShift = hSbrDec->sbrDrcChannel.nextFact_exp; + if (hSbrDec->sbrDrcChannel.enable != 0) { + if (hSbrDec->sbrDrcChannel.prevFact_exp > maxShift) { + maxShift = hSbrDec->sbrDrcChannel.prevFact_exp; + } + if (hSbrDec->sbrDrcChannel.currFact_exp > maxShift) { + maxShift = hSbrDec->sbrDrcChannel.currFact_exp; + } + if (hSbrDec->sbrDrcChannel.nextFact_exp > maxShift) { + maxShift = hSbrDec->sbrDrcChannel.nextFact_exp; + } } /* copy DRC data to right channel (with PS both channels use the same DRC gains) */ diff --git a/libSBRdec/src/sbrdec_drc.cpp b/libSBRdec/src/sbrdec_drc.cpp index ce5247a..7497b66 100644 --- a/libSBRdec/src/sbrdec_drc.cpp +++ b/libSBRdec/src/sbrdec_drc.cpp @@ -115,17 +115,17 @@ void sbrDecoder_drcInitChannel ( } for (band = 0; band < (64); band++) { - hDrcData->prevFact_mag[band] = (FIXP_DBL)MAXVAL_DBL /*FL2FXCONST_DBL(1.0f)*/; + hDrcData->prevFact_mag[band] = FL2FXCONST_DBL(0.5f); } for (band = 0; band < SBRDEC_MAX_DRC_BANDS; band++) { - hDrcData->currFact_mag[band] = (FIXP_DBL)MAXVAL_DBL /*FL2FXCONST_DBL(1.0f)*/; - hDrcData->nextFact_mag[band] = (FIXP_DBL)MAXVAL_DBL /*FL2FXCONST_DBL(1.0f)*/; + hDrcData->currFact_mag[band] = FL2FXCONST_DBL(0.5f); + hDrcData->nextFact_mag[band] = FL2FXCONST_DBL(0.5f); } - hDrcData->prevFact_exp = 0; - hDrcData->currFact_exp = 0; - hDrcData->nextFact_exp = 0; + hDrcData->prevFact_exp = 1; + hDrcData->currFact_exp = 1; + hDrcData->nextFact_exp = 1; hDrcData->numBandsCurr = 0; hDrcData->numBandsNext = 0; @@ -238,7 +238,7 @@ void sbrDecoder_drcApplySlot ( } else { if (j >= offset[hDrcData->drcInterpolationSchemeCurr - 1]) { - alphaValue = FL2FXCONST_DBL(1.0f); + alphaValue = (FIXP_DBL)MAXVAL_DBL; } } } @@ -262,7 +262,7 @@ void sbrDecoder_drcApplySlot ( } else { if (j >= offset[hDrcData->drcInterpolationSchemeNext - 1]) { - alphaValue = FL2FXCONST_DBL(1.0f); + alphaValue = (FIXP_DBL)MAXVAL_DBL; } } @@ -301,7 +301,7 @@ void sbrDecoder_drcApplySlot ( } else { if (j >= offset[hDrcData->drcInterpolationSchemeNext - 1]) { - alphaValue = FL2FXCONST_DBL(1.0f); + alphaValue = (FIXP_DBL)MAXVAL_DBL; } } } @@ -322,7 +322,7 @@ void sbrDecoder_drcApplySlot ( for (band = 0; band < (int)numBands; band++) { int bottomQmf, topQmf; - FIXP_DBL drcFact_mag = FL2FXCONST_DBL(1.0f); + FIXP_DBL drcFact_mag = (FIXP_DBL)MAXVAL_DBL; topMdct = (bandTop[band]+1) << 2; @@ -361,7 +361,13 @@ void sbrDecoder_drcApplySlot ( } /* interpolate */ - drcFact_mag = fMult(alphaValue, drcFact2_mag) + fMult((FL2FXCONST_DBL(1.0f) - alphaValue), drcFact1_mag); + if (alphaValue == (FIXP_DBL)0) { + drcFact_mag = drcFact1_mag; + } else if (alphaValue == (FIXP_DBL)MAXVAL_DBL) { + drcFact_mag = drcFact2_mag; + } else { + drcFact_mag = fMult(alphaValue, drcFact2_mag) + fMult(((FIXP_DBL)MAXVAL_DBL - alphaValue), drcFact1_mag); + } /* apply scaling */ qmfRealSlot[bin] = fMult(qmfRealSlot[bin], drcFact_mag); @@ -481,6 +487,15 @@ void sbrDecoder_drcApply ( int col; int maxShift = 0; + if (hDrcData == NULL) { + return; + } + if ( (hDrcData->enable == 0) + || ((hDrcData->numBandsCurr == 0) && (hDrcData->numBandsNext == 0)) + ) { + return; /* Avoid changing the scaleFactor even though the processing is disabled. */ + } + /* get max scale factor */ if (hDrcData->prevFact_exp > maxShift) { maxShift = hDrcData->prevFact_exp; diff --git a/libSBRdec/src/sbrdec_drc.h b/libSBRdec/src/sbrdec_drc.h index 2577e89..14deff7 100644 --- a/libSBRdec/src/sbrdec_drc.h +++ b/libSBRdec/src/sbrdec_drc.h @@ -94,6 +94,7 @@ amm-info@iis.fraunhofer.de #include "sbrdecoder.h" + #define SBRDEC_MAX_DRC_CHANNELS (6) #define SBRDEC_MAX_DRC_BANDS ( 16 ) diff --git a/libSBRdec/src/sbrdecoder.cpp b/libSBRdec/src/sbrdecoder.cpp index a40e5ba..192bdd2 100644 --- a/libSBRdec/src/sbrdecoder.cpp +++ b/libSBRdec/src/sbrdecoder.cpp @@ -137,7 +137,7 @@ amm-info@iis.fraunhofer.de /* Decoder library info */ #define SBRDECODER_LIB_VL0 2 #define SBRDECODER_LIB_VL1 1 -#define SBRDECODER_LIB_VL2 2 +#define SBRDECODER_LIB_VL2 3 #define SBRDECODER_LIB_TITLE "SBR Decoder" #define SBRDECODER_LIB_BUILD_DATE __DATE__ #define SBRDECODER_LIB_BUILD_TIME __TIME__ @@ -533,7 +533,7 @@ SBR_ERROR sbrDecoder_InitElement ( FDKmemclear(self->pSbrElement[elementIndex]->frameErrorFlag, ((1)+1)*sizeof(UCHAR)); /* Initialize this instance */ - sbrError = sbrDecoder_ResetElement( + sbrError = sbrDecoder_ResetElement( self, sampleRateIn, sampleRateOut, @@ -577,7 +577,7 @@ SBR_ERROR sbrDecoder_HeaderUpdate( ) { SBR_ERROR errorStatus = SBRDEC_OK; - + /* change of control data, reset decoder */ @@ -818,6 +818,7 @@ SBR_ERROR sbrDecoder_drcFeedChannel ( HANDLE_SBRDECODER self, USHORT *pBandTop ) { SBRDEC_DRC_CHANNEL *pSbrDrcChannelData = NULL; + int band, isValidData = 0; if (self == NULL) { return SBRDEC_NOT_INITIALIZED; @@ -826,10 +827,21 @@ SBR_ERROR sbrDecoder_drcFeedChannel ( HANDLE_SBRDECODER self, return SBRDEC_SET_PARAM_FAIL; } + /* Search for gain values different to 1.0f */ + for (band = 0; band < numBands; band += 1) { + if ( !((pNextFact_mag[band] == FL2FXCONST_DBL(0.5)) && (nextFact_exp == 1)) + && !((pNextFact_mag[band] == (FIXP_DBL)MAXVAL_DBL) && (nextFact_exp == 0)) ) { + isValidData = 1; + break; + } + } + /* Find the right SBR channel */ pSbrDrcChannelData = sbrDecoder_drcGetChannel( self, ch ); if ( pSbrDrcChannelData != NULL ) { + if ( pSbrDrcChannelData->enable || isValidData ) + { /* Activate processing only with real and valid data */ int i; pSbrDrcChannelData->enable = 1; @@ -844,6 +856,7 @@ SBR_ERROR sbrDecoder_drcFeedChannel ( HANDLE_SBRDECODER self, pSbrDrcChannelData->nextFact_mag[i] = pNextFact_mag[i]; } } + } return SBRDEC_OK; } |