]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/dcadata.c
h264: eliminate decode_postinit()
[ffmpeg] / libavcodec / dcadata.c
index 47fb9c53c19b2248c99d1033aa8d798496467c18..2369f55c1bc6b2e845518f02b85cde99a975c35d 100644 (file)
@@ -47,7 +47,7 @@ const uint8_t ff_dca_bits_per_sample[7] = {
 
 /* ADPCM data */
 
-/* 16bits signed fractional Q13 binary codes */
+/* 16 bits signed fractional Q13 binary codes */
 const int16_t ff_dca_adpcm_vb[4096][4] = {
     {   9928,  -2618,  -1093, -1263 },
     {  11077,  -2876,  -1747,  -308 },
@@ -4179,7 +4179,7 @@ const uint32_t ff_dca_scale_factor_quant7[128] = {
     5011872, 5688529, 6456542, 7328245, 8317638,       0,       0,       0
 };
 
-/* 20bits unsigned fractional binary codes */
+/* 20 bits unsigned fractional binary codes */
 const uint32_t ff_dca_lossy_quant[32] = {
          0, 6710886, 4194304, 3355443, 2474639, 2097152, 1761608, 1426063,
     796918,  461373,  251658,  146801,   79692,   46137,   27263,   16777,
@@ -4187,14 +4187,7 @@ const uint32_t ff_dca_lossy_quant[32] = {
         84,      42,      21,       0,       0,       0,       0,       0
 };
 
-const float ff_dca_lossy_quant_d[32] = {
-          0,     1.6,      1.0,     0.8,    0.59,    0.50,    0.42,    0.34,
-       0.19,    0.11,     0.06,   0.035,   0.019,   0.011,  0.0065,  0.0040,
-     0.0025,  0.0014,   0.0008, 0.00045, 0.00030, 0.00017, 0.00008, 0.00004,
-    0.00002, 0.00001, 0.000005,       0,       0,       0,       0,       0
-};
-
-/* 20bits unsigned fractional binary codes */
+/* 20 bits unsigned fractional binary codes */
 const uint32_t ff_dca_lossless_quant[32] = {
          0, 4194304, 2097152, 1384120, 1048576, 696254, 524288, 348127,
     262144,  131072,   65431,   33026,   16450,   8208,   4100,   2049,
@@ -4202,14 +4195,6 @@ const uint32_t ff_dca_lossless_quant[32] = {
          4,       2,       1,       0,       0,      0,      0,      0
 };
 
-const float ff_dca_lossless_quant_d[32] = {
-           0,      1.0,      0.5,     0.33,     0.25,    0.166,    0.125,
-       0.083,   0.0625,  0.03125,   0.0156, 7.874E-3, 3.922E-3, 1.957E-3,
-    9.775E-4, 4.885E-4, 2.442E-4, 1.221E-4, 6.104E-5, 3.052E-5, 1.526E-5,
-    7.629E-6, 3.815E-6, 1.907E-6, 9.537E-7, 4.768E-7, 2.384E-7,        0,
-           0,        0,        0,        0
-};
-
 /* Vector quantization tables */
 
 DECLARE_ALIGNED(8, const int8_t, ff_dca_high_freq_vq)[1024][32] = {
@@ -7522,6 +7507,600 @@ DECLARE_ALIGNED(16, const float, ff_dca_lfe_fir_128)[256] = {
 };
 #undef SCALE
 
+
+#define SCALE(c) ((float)(c) / (256.0f * 32768.0f * 8388608.0f))
+DECLARE_ALIGNED(16, const float, ff_dca_lfe_xll_fir_64)[256] = {
+    SCALE(   6103), SCALE(  52170), SCALE(-558064), SCALE(1592440),
+    SCALE(6290049), SCALE(1502534), SCALE(-546669), SCALE(  53047),
+    SCALE(   1930), SCALE(  51089), SCALE(-568920), SCALE(1683709),
+    SCALE(6286575), SCALE(1414057), SCALE(-534782), SCALE(  53729),
+    SCALE(   2228), SCALE(  49794), SCALE(-579194), SCALE(1776276),
+    SCALE(6279634), SCALE(1327070), SCALE(-522445), SCALE(  54228),
+    SCALE(   2552), SCALE(  48275), SCALE(-588839), SCALE(1870070),
+    SCALE(6269231), SCALE(1241632), SCALE(-509702), SCALE(  54550),
+    SCALE(   2904), SCALE(  46523), SCALE(-597808), SCALE(1965017),
+    SCALE(6255380), SCALE(1157798), SCALE(-496595), SCALE(  54708),
+    SCALE(   3287), SCALE(  44529), SCALE(-606054), SCALE(2061044),
+    SCALE(6238099), SCALE(1075621), SCALE(-483164), SCALE(  54710),
+    SCALE(   3704), SCALE(  42282), SCALE(-613529), SCALE(2158071),
+    SCALE(6217408), SCALE( 995149), SCALE(-469451), SCALE(  54566),
+    SCALE(   4152), SCALE(  39774), SCALE(-620186), SCALE(2256019),
+    SCALE(6193332), SCALE( 916430), SCALE(-455494), SCALE(  54285),
+    SCALE(   4631), SCALE(  36995), SCALE(-625976), SCALE(2354805),
+    SCALE(6165900), SCALE( 839507), SCALE(-441330), SCALE(  53876),
+    SCALE(   5139), SCALE(  33937), SCALE(-630850), SCALE(2454343),
+    SCALE(6135146), SCALE( 764419), SCALE(-426998), SCALE(  53348),
+    SCALE(   5682), SCALE(  30591), SCALE(-634759), SCALE(2554547),
+    SCALE(6101107), SCALE( 691203), SCALE(-412531), SCALE(  52711),
+    SCALE(   6264), SCALE(  26948), SCALE(-637655), SCALE(2655326),
+    SCALE(6063824), SCALE( 619894), SCALE(-397966), SCALE(  51972),
+    SCALE(   6886), SCALE(  23001), SCALE(-639488), SCALE(2756591),
+    SCALE(6023343), SCALE( 550521), SCALE(-383335), SCALE(  51140),
+    SCALE(   7531), SCALE(  18741), SCALE(-640210), SCALE(2858248),
+    SCALE(5979711), SCALE( 483113), SCALE(-368671), SCALE(  50224),
+    SCALE(   8230), SCALE(  14162), SCALE(-639772), SCALE(2960201),
+    SCALE(5932981), SCALE( 417692), SCALE(-354003), SCALE(  49231),
+    SCALE(   8959), SCALE(   9257), SCALE(-638125), SCALE(3062355),
+    SCALE(5883210), SCALE( 354281), SCALE(-339362), SCALE(  48168),
+    SCALE(   9727), SCALE(   4018), SCALE(-635222), SCALE(3164612),
+    SCALE(5830457), SCALE( 292897), SCALE(-324777), SCALE(  47044),
+    SCALE(  10535), SCALE(  -1558), SCALE(-631014), SCALE(3266872),
+    SCALE(5774785), SCALE( 233555), SCALE(-310273), SCALE(  45866),
+    SCALE(  11381), SCALE(  -7480), SCALE(-625455), SCALE(3369035),
+    SCALE(5716260), SCALE( 176267), SCALE(-295877), SCALE(  44640),
+    SCALE(  12267), SCALE( -13750), SCALE(-618499), SCALE(3471000),
+    SCALE(5654952), SCALE( 121042), SCALE(-281613), SCALE(  43373),
+    SCALE(  13190), SCALE( -20372), SCALE(-610098), SCALE(3572664),
+    SCALE(5590933), SCALE(  67886), SCALE(-267505), SCALE(  42072),
+    SCALE(  14152), SCALE( -27352), SCALE(-600209), SCALE(3673924),
+    SCALE(5524280), SCALE(  16800), SCALE(-253574), SCALE(  40743),
+    SCALE(  15153), SCALE( -34691), SCALE(-588788), SCALE(3774676),
+    SCALE(5455069), SCALE( -32214), SCALE(-239840), SCALE(  39391),
+    SCALE(  16192), SCALE( -42390), SCALE(-575791), SCALE(3874816),
+    SCALE(5383383), SCALE( -79159), SCALE(-226323), SCALE(  38022),
+    SCALE(  17267), SCALE( -50453), SCALE(-561178), SCALE(3974239),
+    SCALE(5309305), SCALE(-124041), SCALE(-213041), SCALE(  36642),
+    SCALE(  18377), SCALE( -58879), SCALE(-544906), SCALE(4072841),
+    SCALE(5232922), SCALE(-166869), SCALE(-200010), SCALE(  35256),
+    SCALE(  19525), SCALE( -67667), SCALE(-526937), SCALE(4170517),
+    SCALE(5154321), SCALE(-207653), SCALE(-187246), SCALE(  33866),
+    SCALE(  20704), SCALE( -76817), SCALE(-507233), SCALE(4267162),
+    SCALE(5073593), SCALE(-246406), SCALE(-174764), SCALE(  32480),
+    SCALE(  21915), SCALE( -86327), SCALE(-485757), SCALE(4362672),
+    SCALE(4990831), SCALE(-283146), SCALE(-162575), SCALE(  31101),
+    SCALE(  23157), SCALE( -96193), SCALE(-462476), SCALE(4456942),
+    SCALE(4906129), SCALE(-317890), SCALE(-150692), SCALE(  29732),
+    SCALE(  24426), SCALE(-106412), SCALE(-437356), SCALE(4549871),
+    SCALE(4819584), SCALE(-350658), SCALE(-139125), SCALE(  28376),
+    SCALE(  25721), SCALE(-116977), SCALE(-410365), SCALE(4641355),
+    SCALE(4731293), SCALE(-381475), SCALE(-127884), SCALE(  27038),
+};
+#undef SCALE
+
+DECLARE_ALIGNED(16, const float, ff_dca_fir_64bands)[1024] = {
+    /* Bank 0 */
+    -7.1279389866041690e-8, -7.0950903150874990e-8,
+    -7.9525034321375090e-8, -8.9326871281374790e-8,
+    -9.7483190494874640e-8, -1.0586659510721950e-7,
+    -1.1527363411865760e-7, -1.2523109645615350e-7,
+    -1.3555636137971380e-7, -1.4640931821191640e-7,
+    -1.5787424998123710e-7, -1.6994592926571220e-7,
+    -1.8264184311018150e-7, -1.9600594587757850e-7,
+    -2.1007899706006800e-7, -2.2489759047553620e-7,
+    -2.4050245877923400e-7, -2.5693874615777660e-7,
+    -2.7425370308549580e-7, -2.9249662541757600e-7,
+    -3.1171981968268900e-7, -3.3197864040473180e-7,
+    -3.5333134588843600e-7, -3.7583910465412180e-7,
+    -3.9956628121669190e-7, -4.2458045296159330e-7,
+    -4.5095249563698380e-7, -4.7875659112606760e-7,
+    -5.0807031294631050e-7, -5.3897464223335550e-7,
+    -5.7155423388793000e-7, -6.0589741192019800e-7,
+    -6.4209580087853050e-7, -6.8024432849991400e-7,
+    -7.2044165259013450e-7, -7.6279018172077200e-7,
+    -8.0739610368280600e-7, -8.5436937020293650e-7,
+    -9.0382333224895500e-7, -9.5587472540498280e-7,
+    -1.0106437128213760e-6, -1.0682538906146330e-6,
+    -1.1288323637155430e-6, -1.1925097184646100e-6,
+    -1.2594193438633260e-6, -1.3296974052300520e-6,
+    -1.4034829433780260e-6, -1.4809178634979940e-6,
+    -1.5621465913980060e-6, -1.6473160377545360e-6,
+    -1.7365751553971340e-6, -1.8300749104526120e-6,
+    -1.9279680902322050e-6, -2.0304092660990760e-6,
+    -2.1375541686662320e-6, -2.2495596253776460e-6,
+    -2.3665828120950560e-6, -2.4887811970856540e-6,
+    -2.6163120571644820e-6, -2.7493324266391140e-6,
+    -2.8879984579501380e-6, -3.0324653639203880e-6,
+    -3.1828867865974640e-6, -3.3394147240855820e-6,
+    -3.5021985520037540e-6, -3.6713849262294680e-6,
+    -3.8471166218015830e-6, -4.0295324657699800e-6,
+    -4.2187670209852250e-6, -4.4149505043312320e-6,
+    -4.6182073040543900e-6, -4.8286558658894680e-6,
+    -5.0464076705003400e-6, -5.2715671455405850e-6,
+    -5.5042307535458100e-6, -5.7444868785028750e-6,
+    -5.9924142424804800e-6, -6.2480817863072800e-6,
+    -6.5115476278604000e-6, -6.7828589565804950e-6,
+    -7.0620507545154100e-6, -7.3491456697144900e-6,
+    -7.6441525098592000e-6, -7.9470661364365490e-6,
+    -8.2578666429227760e-6, -8.5765192154768100e-6,
+    -8.9029718900122000e-6, -9.2371554195468400e-6,
+    -9.5789825988253100e-6, -9.9283481667264540e-6,
+    -1.0285127334608450e-5, -1.0649175634328590e-5,
+    -1.1020327046334650e-5, -1.1398393880881060e-5,
+    -1.1783166036693560e-5, -1.2174410889256530e-5,
+    -1.2571871574469220e-5, -1.2975266858030310e-5,
+    -1.3384289978242060e-5, -1.3798608540965960e-5,
+    -1.4217863365843780e-5, -1.4641668383496450e-5,
+    -1.5069609527679710e-5, -1.5501244597782600e-5,
+    -1.5936101341640500e-5, -1.6373677426466900e-5,
+    -1.6813441716539560e-5, -1.7254834143068570e-5,
+    -1.7697261563607500e-5, -1.8140097714618200e-5,
+    -1.8582686308483550e-5, -1.9024340970099240e-5,
+    -1.9464340744880170e-5, -1.9901930030141080e-5,
+    -2.0336321557464510e-5, -2.0766696417773940e-5,
+    -2.1192201630574280e-5, -2.1611950084231910e-5,
+    -2.2025021652894630e-5, -2.2430463239517170e-5,
+    -2.2827288605503470e-5, -2.3214478371918170e-5,
+    -2.3590980216497750e-5, -2.3955708939763280e-5,
+    -2.4307547722489910e-5, -2.4645348200903720e-5,
+    -2.4967930863542620e-5, -2.5274085082324960e-5,
+    /* Bank 1 */
+     2.5562569399199020e-5,  2.5832111724562040e-5,
+     2.6081413415833200e-5,  2.6309149390520640e-5,
+     2.6513966535124460e-5,  2.6694483850464800e-5,
+     2.6849297239997120e-5,  2.6976979753245170e-5,
+     2.7076082153012070e-5,  2.7145133103663890e-5,
+     2.7182642746157720e-5,  2.7187102980536760e-5,
+     2.7156990105794550e-5,  2.7090765064735940e-5,
+     2.6986876191054700e-5,  2.6843759539035120e-5,
+     2.6659843389908530e-5,  2.6433548592482960e-5,
+     2.6163291550639320e-5,  2.5847484577439320e-5,
+     2.5484540698002960e-5,  2.5072874052447260e-5,
+     2.4610903957661350e-5,  2.4097055300584120e-5,
+     2.3529763128539150e-5,  2.2907473117403740e-5,
+     2.2228647280994560e-5,  2.1491764461832140e-5,
+     2.0695325418576370e-5,  1.9837853265502040e-5,
+    /* NOTE: The spec has a duplicated row "160 | 1.7934037335534700e-5" ! */
+     1.8917898053528080e-5,  1.7934037335534700e-5,
+     1.6884884022311310e-5,  1.5769086921577900e-5,
+     1.4585334740507920e-5,  1.3332356590263080e-5,
+     1.2008929083235120e-5,  1.0613876973541650e-5,
+     9.1460801506922300e-6,  7.6044740757265500e-6,
+     5.9880523825897000e-6,  4.2958677847708840e-6,
+     2.5270494199802070e-6,  6.8080315386959900e-7,
+    -1.2435990827839660e-6, -3.2468187066945930e-6,
+    -5.3294268968052800e-6, -7.4919036559427900e-6,
+    -9.7346407524871100e-6, -1.2057941408635810e-5,
+    -1.4462010500550970e-5, -1.6946953848107710e-5,
+    -1.9512772389215240e-5, -2.2159361597292710e-5,
+    -2.4886504491416160e-5, -2.7693871041862060e-5,
+    -3.0581012081916960e-5, -3.3547358765259040e-5,
+    -3.6592216716540970e-5, -3.9714765485539260e-5,
+    -4.2914052387856640e-5, -4.6188991961724560e-5,
+    -4.9538360176954340e-5, -5.2960794000140600e-5,
+    -5.6454787620185350e-5, -6.0018691972791050e-5,
+    -6.3650708053788550e-5, -6.7348886525882700e-5,
+    -7.1111125753722860e-5, -7.4935171411178040e-5,
+    -7.8818609806320000e-5, -8.2758867628623800e-5,
+    -8.6753213062403400e-5, -9.0798755482139240e-5,
+    -9.4892437636254000e-5, -9.9031035415475500e-5,
+    -1.0321116057304920e-4, -1.0742926070674010e-4,
+    -1.1168161614264270e-4, -1.1596433966772030e-4,
+    -1.2027337376184880e-4, -1.2460449089034750e-4,
+    -1.2895330270761850e-4, -1.3331525983885840e-4,
+    -1.3768563787408340e-4, -1.4205953760578120e-4,
+    -1.4643190426323540e-4, -1.5079752791692290e-4,
+    -1.5515103314094370e-4, -1.5948687909058970e-4,
+    -1.6379937154642740e-4, -1.6808266356446820e-4,
+    -1.7233075773584680e-4, -1.7653750646560020e-4,
+    -1.8069661584612290e-4, -1.8480164638953740e-4,
+    -1.8884602526638050e-4, -1.9282304696531290e-4,
+    -1.9672587556804270e-4, -2.0054754547108610e-4,
+    -2.0428097498957360e-4, -2.0791896735659270e-4,
+    -2.1145421910491280e-4, -2.1487932080488700e-4,
+    -2.1818676491655660e-4, -2.2136894706917190e-4,
+    -2.2441818635854840e-4, -2.2732672676686290e-4,
+    -2.3008674810081220e-4, -2.3269036653525150e-4,
+    -2.3512963563507800e-4, -2.3739654799291240e-4,
+    -2.3948307023621970e-4, -2.4138114593372380e-4,
+    -2.4308272452941820e-4, -2.4457975717687980e-4,
+    -2.4586407616017000e-4, -2.4692741569938220e-4,
+    -2.4776199025177680e-4, -2.4836046092637280e-4,
+    -2.4871461830381660e-4, -2.4881540457247040e-4,
+    -2.4865471770248810e-4, -2.4822543333608940e-4,
+    -2.4752008219951220e-4, -2.4653081794176570e-4,
+    -2.4525003217524440e-4, -2.4367037437341020e-4,
+    /* Bank 2 */
+     2.4178457457919800e-4,  2.3958543985834340e-4,
+     2.3706595356421380e-4,  2.3421928008696620e-4,
+     2.3103877007019660e-4,  2.2751796132972940e-4,
+     2.2365059385031200e-4,  2.1943061159567880e-4,
+     2.1485218733324290e-4,  2.0990972538755550e-4,
+     2.0459789739171640e-4,  1.9891164424316180e-4,
+     1.9284618337957900e-4,  1.8639701070854740e-4,
+     1.7955993578371750e-4,  1.7233108395155490e-4,
+     1.6470690840351980e-4,  1.5668419239382670e-4,
+     1.4826008597798460e-4,  1.3943210818407590e-4,
+     1.3019815804235450e-4,  1.2055651618705740e-4,
+     1.1050586906665980e-4,  1.0004531116378850e-4,
+     8.9174369623037550e-5,  7.7893006105444910e-5,
+     6.6201632959158800e-5,  5.4101115008963200e-5,
+     4.1592792755171040e-5,  2.8678484003389880e-5,
+     1.5360496520469550e-5,  1.6416297019304470e-6,
+    -1.2474801400564880e-5, -2.6984964757674160e-5,
+    -4.1884506316022560e-5, -5.7168548169515050e-5,
+    -7.2831653374563650e-5, -8.8867825335203200e-5,
+    -1.0527052946041040e-4, -1.2203269185287530e-4,
+    -1.3914664880465400e-4, -1.5660414556657680e-4,
+    -1.7439635977956720e-4, -1.9251390142613000e-4,
+    -2.1094678833176480e-4, -2.2968444457655940e-4,
+    -2.4871569004884240e-4, -2.6802874127778880e-4,
+    -2.8761124019708440e-4, -3.0745025297166030e-4,
+    -3.2753221542219500e-4, -3.4784293347385130e-4,
+    -3.6836764760397900e-4, -3.8909103335715320e-4,
+    -4.0999714822829530e-4, -4.3106943097409840e-4,
+    -4.5229073958127750e-4, -4.7364335350426610e-4,
+    -4.9510898492628230e-4, -5.1666877822680600e-4,
+    -5.3830328700499900e-4, -5.5999247625413450e-4,
+    -5.8171579317559550e-4, -6.0345216810040500e-4,
+    -6.2517996394886800e-4, -6.4687697763330650e-4,
+    -6.6852052145861900e-4, -6.9008742526480550e-4,
+    -7.1155400216196750e-4, -7.3289605035434600e-4,
+    -7.5408892753413600e-4, -7.7510755325530950e-4,
+    -7.9592638676398950e-4, -8.1651942936660300e-4,
+    -8.3686029869896850e-4, -8.5692223230171550e-4,
+    -8.7667809201044900e-4, -8.9610036547340950e-4,
+    -9.1516119514986000e-4, -9.3383238324995840e-4,
+    -9.5208547141354700e-4, -9.6989174214394400e-4,
+    -9.8722217067251400e-4, -1.0040474297445790e-3,
+    -1.0203380430448350e-3, -1.0360643900964910e-3,
+    -1.0511966606168980e-3, -1.0657048556038330e-3,
+    -1.0795588568782010e-3, -1.0927284332850520e-3,
+    -1.1051833075734240e-3, -1.1168931605293980e-3,
+    -1.1278276550234160e-3, -1.1379564405661050e-3,
+    -1.1472492294891640e-3, -1.1556758000499310e-3,
+    -1.1632059885511800e-3, -1.1698096960154200e-3,
+    -1.1754570428998680e-3, -1.1801183720212010e-3,
+    -1.1837641581852870e-3, -1.1863650153060240e-3,
+    -1.1878919433902330e-3, -1.1883163316843900e-3,
+    -1.1876097809178440e-3, -1.1857441072376680e-3,
+    -1.1826916065321440e-3, -1.1784250628415020e-3,
+    -1.1729176690707690e-3, -1.1661430294353880e-3,
+    -1.1580752925519680e-3, -1.1486891568700730e-3,
+    -1.1379598570807350e-3, -1.1258631690530700e-3,
+    -1.1123755320313420e-3, -1.0974740543942100e-3,
+    -1.0811365181610850e-3, -1.0633413819325920e-3,
+    -1.0440678410743190e-3, -1.0232958338441730e-3,
+    -1.0010061160103870e-3, -9.7718026613602800e-4,
+    -9.5180072722007060e-4, -9.2485080945546600e-4,
+    -8.9631470926558100e-4, -8.6617751390929650e-4,
+    -8.3442528375666700e-4, -8.0104505655578600e-4,
+    /* Bank 3 */
+     7.6602485902806300e-4,  7.2935371157849700e-4,
+     6.9102172032639350e-4,  6.5102007948960100e-4,
+     6.0934103180698750e-4,  5.6597787244591100e-4,
+     5.2092507454409450e-4,  4.7417829303612970e-4,
+     4.2573432329476060e-4,  3.7559110239316400e-4,
+     3.2374777823389440e-4,  2.7020471361387040e-4,
+     2.1496350652513040e-4,  1.5802699163104190e-4,
+     9.9399252442146460e-5,  3.9085623279149610e-5,
+    -2.2907279717153710e-5, -8.6571556658577800e-5,
+    -1.5189801251884410e-4, -2.1887615668780720e-4,
+    -2.8749420455512610e-4, -3.5773907519488100e-4,
+    -4.2959633884346400e-4, -5.0305021853266900e-4,
+    -5.7808367853976800e-4, -6.5467842279709950e-4,
+    -7.3281477145293300e-4, -8.1247166091487090e-4,
+    -8.9362676824381250e-4, -9.7625651350435400e-4,
+    -1.0603359870796300e-3, -1.1458389497708370e-3,
+    -1.2327379076720450e-3, -1.3210041125919850e-3,
+    -1.4106074964587530e-3, -1.5015166759080980e-3,
+    -1.5936991188210680e-3, -1.6871211446584360e-3,
+    -1.7817477652804130e-3, -1.8775426862784720e-3,
+    -1.9744684954557180e-3, -2.0724866717198650e-3,
+    -2.1715575922482770e-3, -2.2716405301701940e-3,
+    -2.3726935964105480e-3, -2.4746737418493600e-3,
+    -2.5775368629845300e-3, -2.6812378156433060e-3,
+    -2.7857306109716460e-3, -2.8909684129992950e-3,
+    -2.9969032890820140e-3, -3.1034862132032660e-3,
+    -3.2106673881690480e-3, -3.3183962566563890e-3,
+    -3.4266214220855450e-3, -3.5352906520539890e-3,
+    -3.6443510330122110e-3, -3.7537489709635930e-3,
+    -3.8634300521859240e-3, -3.9733390588103910e-3,
+    -4.0834204508378470e-3, -4.1936183686073460e-3,
+    -4.3038762050876900e-3, -4.4141366059086620e-3,
+    -4.5243418977567100e-3, -4.6344341075783170e-3,
+    -4.7443549566589130e-3, -4.8540458565358850e-3,
+    -4.9634478250060780e-3, -5.0725014978718950e-3,
+    -5.1811474713480250e-3, -5.2893263173827950e-3,
+    -5.3969785783205650e-3, -5.5040447592375600e-3,
+    -5.6104651646665850e-3, -5.7161799140263450e-3,
+    -5.8211294443412250e-3, -5.9252545216101900e-3,
+    -6.0284959882028950e-3, -6.1307947602360250e-3,
+    -6.2320920224565700e-3, -6.3323292492425800e-3,
+    -6.4314484717364400e-3, -6.5293922762311450e-3,
+    -6.6261035015351700e-3, -6.7215252466922100e-3,
+    -6.8156013434509950e-3, -6.9082763630156450e-3,
+    -6.9994952920827200e-3, -7.0892035490577050e-3,
+    -7.1773476647806300e-3, -7.2638752839566550e-3,
+    -7.3487345159041400e-3, -7.4318739341000500e-3,
+    -7.5132432154309250e-3, -7.5927931627681400e-3,
+    -7.6704755623721500e-3, -7.7462431738117650e-3,
+    -7.8200496507836000e-3, -7.8918495587816850e-3,
+    -7.9615988430090790e-3, -8.0292548409052500e-3,
+    -8.0947760898363200e-3, -8.1581223027535600e-3,
+    -8.2192540249893810e-3, -8.2781326752680240e-3,
+    -8.3347217911436610e-3, -8.3889870206274740e-3,
+    -8.4408946925453690e-3, -8.4904118087845760e-3,
+    -8.5375073033623590e-3, -8.5821520672029750e-3,
+    -8.6243182341614300e-3, -8.6639791627160300e-3,
+    -8.7011097471794110e-3, -8.7356864659172800e-3,
+    -8.7676881309490440e-3, -8.7970958152554810e-3,
+    -8.8238905039462850e-3, -8.8480531477483150e-3,
+    -8.8695681885783190e-3, -8.8884235927356400e-3,
+    -8.9046080555685600e-3, -8.9181109318560050e-3,
+    -8.9289234995380550e-3, -8.9370390010903460e-3,
+    -8.9424522900292110e-3, -8.9451598223763610e-3,
+    /* Bank 4 */
+     8.9451598223763610e-3,  8.9424522900292110e-3,
+     8.9370390010903460e-3,  8.9289234995380550e-3,
+     8.9181109318560050e-3,  8.9046080555685600e-3,
+     8.8884235927356400e-3,  8.8695681885783190e-3,
+     8.8480531477483150e-3,  8.8238905039462850e-3,
+     8.7970958152554810e-3,  8.7676881309490440e-3,
+     8.7356864659172800e-3,  8.7011097471794110e-3,
+     8.6639791627160300e-3,  8.6243182341614300e-3,
+     8.5821520672029750e-3,  8.5375073033623590e-3,
+     8.4904118087845760e-3,  8.4408946925453690e-3,
+     8.3889870206274740e-3,  8.3347217911436610e-3,
+     8.2781326752680240e-3,  8.2192540249893810e-3,
+     8.1581223027535600e-3,  8.0947760898363200e-3,
+     8.0292548409052500e-3,  7.9615988430090790e-3,
+     7.8918495587816850e-3,  7.8200496507836000e-3,
+     7.7462431738117650e-3,  7.6704755623721500e-3,
+     7.5927931627681400e-3,  7.5132432154309250e-3,
+     7.4318739341000500e-3,  7.3487345159041400e-3,
+     7.2638752839566550e-3,  7.1773476647806300e-3,
+     7.0892035490577050e-3,  6.9994952920827200e-3,
+     6.9082763630156450e-3,  6.8156013434509950e-3,
+     6.7215252466922100e-3,  6.6261035015351700e-3,
+     6.5293922762311450e-3,  6.4314484717364400e-3,
+     6.3323292492425800e-3,  6.2320920224565700e-3,
+     6.1307947602360250e-3,  6.0284959882028950e-3,
+     5.9252545216101900e-3,  5.8211294443412250e-3,
+     5.7161799140263450e-3,  5.6104651646665850e-3,
+     5.5040447592375600e-3,  5.3969785783205650e-3,
+     5.2893263173827950e-3,  5.1811474713480250e-3,
+     5.0725014978718950e-3,  4.9634478250060780e-3,
+     4.8540458565358850e-3,  4.7443549566589130e-3,
+     4.6344341075783170e-3,  4.5243418977567100e-3,
+     4.4141366059086620e-3,  4.3038762050876900e-3,
+     4.1936183686073460e-3,  4.0834204508378470e-3,
+     3.9733390588103910e-3,  3.8634300521859240e-3,
+     3.7537489709635930e-3,  3.6443510330122110e-3,
+     3.5352906520539890e-3,  3.4266214220855450e-3,
+     3.3183962566563890e-3,  3.2106673881690480e-3,
+     3.1034862132032660e-3,  2.9969032890820140e-3,
+     2.8909684129992950e-3,  2.7857306109716460e-3,
+     2.6812378156433060e-3,  2.5775368629845300e-3,
+     2.4746737418493600e-3,  2.3726935964105480e-3,
+     2.2716405301701940e-3,  2.1715575922482770e-3,
+     2.0724866717198650e-3,  1.9744684954557180e-3,
+     1.8775426862784720e-3,  1.7817477652804130e-3,
+     1.6871211446584360e-3,  1.5936991188210680e-3,
+     1.5015166759080980e-3,  1.4106074964587530e-3,
+     1.3210041125919850e-3,  1.2327379076720450e-3,
+     1.1458389497708370e-3,  1.0603359870796300e-3,
+     9.7625651350435400e-4,  8.9362676824381250e-4,
+     8.1247166091487090e-4,  7.3281477145293300e-4,
+     6.5467842279709950e-4,  5.7808367853976800e-4,
+     5.0305021853266900e-4,  4.2959633884346400e-4,
+     3.5773907519488100e-4,  2.8749420455512610e-4,
+     2.1887615668780720e-4,  1.5189801251884410e-4,
+     8.6571556658577800e-5,  2.2907279717153710e-5,
+    -3.9085623279149610e-5, -9.9399252442146460e-5,
+    -1.5802699163104190e-4, -2.1496350652513040e-4,
+    -2.7020471361387040e-4, -3.2374777823389440e-4,
+    -3.7559110239316400e-4, -4.2573432329476060e-4,
+    -4.7417829303612970e-4, -5.2092507454409450e-4,
+    -5.6597787244591100e-4, -6.0934103180698750e-4,
+    -6.5102007948960100e-4, -6.9102172032639350e-4,
+    -7.2935371157849700e-4, -7.6602485902806300e-4,
+    /* Bank 5 */
+     8.0104505655578600e-4,  8.3442528375666700e-4,
+     8.6617751390929650e-4,  8.9631470926558100e-4,
+     9.2485080945546600e-4,  9.5180072722007060e-4,
+     9.7718026613602800e-4,  1.0010061160103870e-3,
+     1.0232958338441730e-3,  1.0440678410743190e-3,
+     1.0633413819325920e-3,  1.0811365181610850e-3,
+     1.0974740543942100e-3,  1.1123755320313420e-3,
+     1.1258631690530700e-3,  1.1379598570807350e-3,
+     1.1486891568700730e-3,  1.1580752925519680e-3,
+     1.1661430294353880e-3,  1.1729176690707690e-3,
+     1.1784250628415020e-3,  1.1826916065321440e-3,
+     1.1857441072376680e-3,  1.1876097809178440e-3,
+     1.1883163316843900e-3,  1.1878919433902330e-3,
+     1.1863650153060240e-3,  1.1837641581852870e-3,
+     1.1801183720212010e-3,  1.1754570428998680e-3,
+     1.1698096960154200e-3,  1.1632059885511800e-3,
+     1.1556758000499310e-3,  1.1472492294891640e-3,
+     1.1379564405661050e-3,  1.1278276550234160e-3,
+     1.1168931605293980e-3,  1.1051833075734240e-3,
+     1.0927284332850520e-3,  1.0795588568782010e-3,
+     1.0657048556038330e-3,  1.0511966606168980e-3,
+     1.0360643900964910e-3,  1.0203380430448350e-3,
+     1.0040474297445790e-3,  9.8722217067251400e-4,
+     9.6989174214394400e-4,  9.5208547141354700e-4,
+     9.3383238324995840e-4,  9.1516119514986000e-4,
+     8.9610036547340950e-4,  8.7667809201044900e-4,
+     8.5692223230171550e-4,  8.3686029869896850e-4,
+     8.1651942936660300e-4,  7.9592638676398950e-4,
+     7.7510755325530950e-4,  7.5408892753413600e-4,
+     7.3289605035434600e-4,  7.1155400216196750e-4,
+     6.9008742526480550e-4,  6.6852052145861900e-4,
+     6.4687697763330650e-4,  6.2517996394886800e-4,
+     6.0345216810040500e-4,  5.8171579317559550e-4,
+     5.5999247625413450e-4,  5.3830328700499900e-4,
+     5.1666877822680600e-4,  4.9510898492628230e-4,
+     4.7364335350426610e-4,  4.5229073958127750e-4,
+     4.3106943097409840e-4,  4.0999714822829530e-4,
+     3.8909103335715320e-4,  3.6836764760397900e-4,
+     3.4784293347385130e-4,  3.2753221542219500e-4,
+     3.0745025297166030e-4,  2.8761124019708440e-4,
+     2.6802874127778880e-4,  2.4871569004884240e-4,
+     2.2968444457655940e-4,  2.1094678833176480e-4,
+     1.9251390142613000e-4,  1.7439635977956720e-4,
+     1.5660414556657680e-4,  1.3914664880465400e-4,
+     1.2203269185287530e-4,  1.0527052946041040e-4,
+     8.8867825335203200e-5,  7.2831653374563650e-5,
+     5.7168548169515050e-5,  4.1884506316022560e-5,
+     2.6984964757674160e-5,  1.2474801400564880e-5,
+    -1.6416297019304470e-6, -1.5360496520469550e-5,
+    -2.8678484003389880e-5, -4.1592792755171040e-5,
+    -5.4101115008963200e-5, -6.6201632959158800e-5,
+    -7.7893006105444910e-5, -8.9174369623037550e-5,
+    -1.0004531116378850e-4, -1.1050586906665980e-4,
+    -1.2055651618705740e-4, -1.3019815804235450e-4,
+    -1.3943210818407590e-4, -1.4826008597798460e-4,
+    -1.5668419239382670e-4, -1.6470690840351980e-4,
+    -1.7233108395155490e-4, -1.7955993578371750e-4,
+    -1.8639701070854740e-4, -1.9284618337957900e-4,
+    -1.9891164424316180e-4, -2.0459789739171640e-4,
+    -2.0990972538755550e-4, -2.1485218733324290e-4,
+    -2.1943061159567880e-4, -2.2365059385031200e-4,
+    -2.2751796132972940e-4, -2.3103877007019660e-4,
+    -2.3421928008696620e-4, -2.3706595356421380e-4,
+    -2.3958543985834340e-4, -2.4178457457919800e-4,
+    /* Bank 6 */
+     2.4367037437341020e-4,  2.4525003217524440e-4,
+     2.4653081794176570e-4,  2.4752008219951220e-4,
+     2.4822543333608940e-4,  2.4865471770248810e-4,
+     2.4881540457247040e-4,  2.4871461830381660e-4,
+     2.4836046092637280e-4,  2.4776199025177680e-4,
+     2.4692741569938220e-4,  2.4586407616017000e-4,
+     2.4457975717687980e-4,  2.4308272452941820e-4,
+     2.4138114593372380e-4,  2.3948307023621970e-4,
+     2.3739654799291240e-4,  2.3512963563507800e-4,
+     2.3269036653525150e-4,  2.3008674810081220e-4,
+     2.2732672676686290e-4,  2.2441818635854840e-4,
+     2.2136894706917190e-4,  2.1818676491655660e-4,
+     2.1487932080488700e-4,  2.1145421910491280e-4,
+     2.0791896735659270e-4,  2.0428097498957360e-4,
+     2.0054754547108610e-4,  1.9672587556804270e-4,
+     1.9282304696531290e-4,  1.8884602526638050e-4,
+     1.8480164638953740e-4,  1.8069661584612290e-4,
+     1.7653750646560020e-4,  1.7233075773584680e-4,
+     1.6808266356446820e-4,  1.6379937154642740e-4,
+     1.5948687909058970e-4,  1.5515103314094370e-4,
+     1.5079752791692290e-4,  1.4643190426323540e-4,
+     1.4205953760578120e-4,  1.3768563787408340e-4,
+     1.3331525983885840e-4,  1.2895330270761850e-4,
+     1.2460449089034750e-4,  1.2027337376184880e-4,
+     1.1596433966772030e-4,  1.1168161614264270e-4,
+     1.0742926070674010e-4,  1.0321116057304920e-4,
+     9.9031035415475500e-5,  9.4892437636254000e-5,
+     9.0798755482139240e-5,  8.6753213062403400e-5,
+     8.2758867628623800e-5,  7.8818609806320000e-5,
+     7.4935171411178040e-5,  7.1111125753722860e-5,
+     6.7348886525882700e-5,  6.3650708053788550e-5,
+     6.0018691972791050e-5,  5.6454787620185350e-5,
+     5.2960794000140600e-5,  4.9538360176954340e-5,
+     4.6188991961724560e-5,  4.2914052387856640e-5,
+     3.9714765485539260e-5,  3.6592216716540970e-5,
+     3.3547358765259040e-5,  3.0581012081916960e-5,
+     2.7693871041862060e-5,  2.4886504491416160e-5,
+     2.2159361597292710e-5,  1.9512772389215240e-5,
+     1.6946953848107710e-5,  1.4462010500550970e-5,
+     1.2057941408635810e-5,  9.7346407524871100e-6,
+     7.4919036559427900e-6,  5.3294268968052800e-6,
+     3.2468187066945930e-6,  1.2435990827839660e-6,
+    -6.8080315386959900e-7, -2.5270494199802070e-6,
+    -4.2958677847708840e-6, -5.9880523825897000e-6,
+    -7.6044740757265500e-6, -9.1460801506922300e-6,
+    -1.0613876973541650e-5, -1.2008929083235120e-5,
+    -1.3332356590263080e-5, -1.4585334740507920e-5,
+    -1.5769086921577900e-5, -1.6884884022311310e-5,
+    -1.7934037335534700e-5, -1.8917898053528080e-5,
+    -1.9837853265502040e-5, -2.0695325418576370e-5,
+    -2.1491764461832140e-5, -2.2228647280994560e-5,
+    -2.2907473117403740e-5, -2.3529763128539150e-5,
+    -2.4097055300584120e-5, -2.4610903957661350e-5,
+    -2.5072874052447260e-5, -2.5484540698002960e-5,
+    -2.5847484577439320e-5, -2.6163291550639320e-5,
+    -2.6433548592482960e-5, -2.6659843389908530e-5,
+    -2.6843759539035120e-5, -2.6986876191054700e-5,
+    -2.7090765064735940e-5, -2.7156990105794550e-5,
+    -2.7187102980536760e-5, -2.7182642746157720e-5,
+    -2.7145133103663890e-5, -2.7076082153012070e-5,
+    -2.6976979753245170e-5, -2.6849297239997120e-5,
+    -2.6694483850464800e-5, -2.6513966535124460e-5,
+    -2.6309149390520640e-5, -2.6081413415833200e-5,
+    -2.5832111724562040e-5, -2.5562569399199020e-5,
+    /* Bank 7 */
+     2.5274085082324960e-5,  2.4967930863542620e-5,
+     2.4645348200903720e-5,  2.4307547722489910e-5,
+     2.3955708939763280e-5,  2.3590980216497750e-5,
+     2.3214478371918170e-5,  2.2827288605503470e-5,
+     2.2430463239517170e-5,  2.2025021652894630e-5,
+     2.1611950084231910e-5,  2.1192201630574280e-5,
+     2.0766696417773940e-5,  2.0336321557464510e-5,
+     1.9901930030141080e-5,  1.9464340744880170e-5,
+     1.9024340970099240e-5,  1.8582686308483550e-5,
+     1.8140097714618200e-5,  1.7697261563607500e-5,
+     1.7254834143068570e-5,  1.6813441716539560e-5,
+     1.6373677426466900e-5,  1.5936101341640500e-5,
+     1.5501244597782600e-5,  1.5069609527679710e-5,
+     1.4641668383496450e-5,  1.4217863365843780e-5,
+     1.3798608540965960e-5,  1.3384289978242060e-5,
+     1.2975266858030310e-5,  1.2571871574469220e-5,
+     1.2174410889256530e-5,  1.1783166036693560e-5,
+     1.1398393880881060e-5,  1.1020327046334650e-5,
+     1.0649175634328590e-5,  1.0285127334608450e-5,
+     9.9283481667264540e-6,  9.5789825988253100e-6,
+     9.2371554195468400e-6,  8.9029718900122000e-6,
+     8.5765192154768100e-6,  8.2578666429227760e-6,
+     7.9470661364365490e-6,  7.6441525098592000e-6,
+     7.3491456697144900e-6,  7.0620507545154100e-6,
+     6.7828589565804950e-6,  6.5115476278604000e-6,
+     6.2480817863072800e-6,  5.9924142424804800e-6,
+     5.7444868785028750e-6,  5.5042307535458100e-6,
+     5.2715671455405850e-6,  5.0464076705003400e-6,
+     4.8286558658894680e-6,  4.6182073040543900e-6,
+     4.4149505043312320e-6,  4.2187670209852250e-6,
+     4.0295324657699800e-6,  3.8471166218015830e-6,
+     3.6713849262294680e-6,  3.5021985520037540e-6,
+     3.3394147240855820e-6,  3.1828867865974640e-6,
+     3.0324653639203880e-6,  2.8879984579501380e-6,
+     2.7493324266391140e-6,  2.6163120571644820e-6,
+     2.4887811970856540e-6,  2.3665828120950560e-6,
+     2.2495596253776460e-6,  2.1375541686662320e-6,
+     2.0304092660990760e-6,  1.9279680902322050e-6,
+     1.8300749104526120e-6,  1.7365751553971340e-6,
+     1.6473160377545360e-6,  1.5621465913980060e-6,
+     1.4809178634979940e-6,  1.4034829433780260e-6,
+     1.3296974052300520e-6,  1.2594193438633260e-6,
+     1.1925097184646100e-6,  1.1288323637155430e-6,
+     1.0682538906146330e-6,  1.0106437128213760e-6,
+     9.5587472540498280e-7,  9.0382333224895500e-7,
+     8.5436937020293650e-7,  8.0739610368280600e-7,
+     7.6279018172077200e-7,  7.2044165259013450e-7,
+     6.8024432849991400e-7,  6.4209580087853050e-7,
+     6.0589741192019800e-7,  5.7155423388793000e-7,
+     5.3897464223335550e-7,  5.0807031294631050e-7,
+     4.7875659112606760e-7,  4.5095249563698380e-7,
+     4.2458045296159330e-7,  3.9956628121669190e-7,
+     3.7583910465412180e-7,  3.5333134588843600e-7,
+     3.3197864040473180e-7,  3.1171981968268900e-7,
+     2.9249662541757600e-7,  2.7425370308549580e-7,
+     2.5693874615777660e-7,  2.4050245877923400e-7,
+     2.2489759047553620e-7,  2.1007899706006800e-7,
+     1.9600594587757850e-7,  1.8264184311018150e-7,
+     1.6994592926571220e-7,  1.5787424998123710e-7,
+     1.4640931821191640e-7,  1.3555636137971380e-7,
+     1.2523109645615350e-7,  1.1527363411865760e-7,
+     1.0586659510721950e-7,  9.7483190494874640e-8,
+     8.9326871281374790e-8,  7.9525034321375090e-8,
+     7.0950903150874990e-8,  7.1279389866041690e-8,
+};
+
 /*
  * D.11 Look-up Table for Downmix Scale Factors
  *
@@ -7534,7 +8113,7 @@ DECLARE_ALIGNED(16, const float, ff_dca_lfe_fir_128)[256] = {
  * 2) [-29.750 to -15] with resolution of 0.250 dB
  * 3) [-14.875 to   0] with resolution of 0.125 dB
  */
-const uint16_t ff_dca_dmixtable[242] = {
+const uint16_t ff_dca_dmixtable[FF_DCA_DMIXTABLE_SIZE] = {
         0,    33,    35,    37,    39,    41,    44,    46,
        49,    52,    55,    58,    62,    65,    69,    73,
        78,    82,    87,    92,    98,   104,   110,   116,
@@ -7568,6 +8147,35 @@ const uint16_t ff_dca_dmixtable[242] = {
     32300, 32768,
 };
 
+const uint32_t ff_dca_inv_dmixtable[FF_DCA_INV_DMIXTABLE_SIZE] = {
+    6553600, 6186997, 5840902, 5514167, 5205710, 4914507, 4639593, 4380059,
+    4135042, 3903731, 3685360, 3479204, 3284581, 3100844, 2927386, 2763630,
+    2609035, 2463088, 2325305, 2195230, 2072430, 2013631, 1956500, 1900990,
+    1847055, 1794651, 1743733, 1694260, 1646190, 1599484, 1554103, 1510010,
+    1467168, 1425542, 1385096, 1345798, 1307615, 1270515, 1234468, 1199444,
+    1165413, 1132348, 1100221, 1069005, 1038676, 1009206,  980573,  952752,
+     925721,  899456,  873937,  849141,  825049,  801641,  778897,  756798,
+     735326,  714463,  694193,  674497,  655360,  636766,  618700,  601146,
+     584090,  567518,  551417,  535772,  520571,  505801,  491451,  477507,
+     463959,  450796,  438006,  425579,  413504,  401772,  390373,  379297,
+     368536,  363270,  358080,  352964,  347920,  342949,  338049,  333219,
+     328458,  323765,  319139,  314579,  310084,  305654,  301287,  296982,
+     292739,  288556,  284433,  280369,  276363,  272414,  268522,  264685,
+     260904,  257176,  253501,  249879,  246309,  242790,  239321,  235901,
+     232531,  229208,  225933,  222705,  219523,  216386,  213295,  210247,
+     207243,  204282,  201363,  198486,  195650,  192855,  190099,  187383,
+     184706,  182066,  179465,  176901,  174373,  171882,  169426,  167005,
+     164619,  162267,  159948,  157663,  155410,  153190,  151001,  148844,
+     146717,  144621,  142554,  140517,  138510,  136531,  134580,  132657,
+     130762,  128893,  127052,  125236,  123447,  121683,  119944,  118231,
+     116541,  114876,  113235,  111617,  110022,  108450,  106901,  105373,
+     103868,  102383,  100921,   99479,   98057,   96656,   95275,   93914,
+      92682,   91249,   89946,   88660,   87394,   86145,   84914,   83701,
+      82505,   81326,   80164,   79019,   77890,   76777,   75680,   74598,
+      73533,   72482,   71446,   70425,   69419,   68427,   67450,   66486,
+      65536,
+};
+
 const float ff_dca_default_coeffs[10][6][2] = {
     { { 0.707107, 0.707107 }, { 0.000000, 0.000000 },                                                                                                 }, // A [LFE]
     { { 1.000000, 0.000000 }, { 0.000000, 1.000000 }, { 0.000000, 0.000000 },                                                                         }, // A + B (dual mono) [LFE]
@@ -7581,6 +8189,11 @@ const float ff_dca_default_coeffs[10][6][2] = {
     { { 0.501187, 0.501187 }, { 0.707107, 0.000000 }, { 0.000000, 0.707107 }, { 0.501187, 0.000000 }, { 0.000000, 0.501187 }, { 0.000000, 0.000000 }, }, // C + L + R + SL + SR [LFE]
 };
 
+const int32_t ff_dca_sampling_freqs[16] = {
+      8000,  16000, 32000, 64000, 128000, 22050,  44100,  88200,
+    176400, 352800, 12000, 24000,  48000, 96000, 192000, 384000,
+};
+
 /* downmix coeffs
  *
  * TABLE 9