X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fopustab.c;h=fb340e07e8ee2bc5ef358c83a39d957593fc1c5a;hb=5480e82d77770e81e897a8c217f3c7f0c13a6de1;hp=02d548e71a0292df627023506f37a9e116ff5ffd;hpb=40cc925f9321c3665341b5a9c209cdc810446890;p=ffmpeg diff --git a/libavcodec/opustab.c b/libavcodec/opustab.c index 02d548e71a0..fb340e07e8e 100644 --- a/libavcodec/opustab.c +++ b/libavcodec/opustab.c @@ -772,11 +772,16 @@ const uint8_t ff_celt_log_freq_range[] = { 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 16, 16, 16, 21, 21, 24, 29, 34, 36 }; +/* Positive - increased freqeuency resolution (only possible on transients) + * Negative - increased time resolution */ const int8_t ff_celt_tf_select[4][2][2][2] = { - { { { 0, -1 }, { 0, -1 } }, { { 0, -1 }, { 0, -1 } } }, - { { { 0, -1 }, { 0, -2 } }, { { 1, 0 }, { 1, -1 } } }, - { { { 0, -2 }, { 0, -3 } }, { { 2, 0 }, { 1, -1 } } }, - { { { 0, -2 }, { 0, -3 } }, { { 3, 0 }, { 1, -1 } } } + /* OFF ON Transient frame */ + /* OFF ON OFF ON TF select flag */ + /* OFF ON OFF ON OFF ON OFF ON TF change flag */ + { { { 0, -1 }, { 0, -1 } }, { { 0, -1 }, { 0, -1 } } }, /* 120 */ + { { { 0, -1 }, { 0, -2 } }, { { 1, 0 }, { 1, -1 } } }, /* 240 */ + { { { 0, -2 }, { 0, -3 } }, { { 2, 0 }, { 1, -1 } } }, /* 480 */ + { { { 0, -2 }, { 0, -3 } }, { { 3, 0 }, { 1, -1 } } } /* 960 */ }; const float ff_celt_mean_energy[] = { @@ -791,8 +796,8 @@ const float ff_celt_alpha_coef[] = { 29440.0f/32768.0f, 26112.0f/32768.0f, 21248.0f/32768.0f, 16384.0f/32768.0f }; -const float ff_celt_beta_coef[] = { /* TODO: precompute 1 minus this if the code ends up neater */ - 30147.0f/32768.0f, 22282.0f/32768.0f, 12124.0f/32768.0f, 6554.0f/32768.0f +const float ff_celt_beta_coef[] = { + 1.0f - (30147.0f/32768.0f), 1.0f - (22282.0f/32768.0f), 1.0f - (12124.0f/32768.0f), 1.0f - (6554.0f/32768.0f), }; const uint8_t ff_celt_coarse_energy_dist[4][2][42] = { @@ -930,11 +935,12 @@ const uint8_t ff_celt_bit_deinterleave[] = { 0xC0, 0xC3, 0xCC, 0xCF, 0xF0, 0xF3, 0xFC, 0xFF }; -const uint8_t ff_celt_hadamard_ordery[] = { +const uint8_t ff_celt_hadamard_order[] = { 1, 0, 3, 0, 2, 1, 7, 0, 4, 3, 6, 1, 5, 2, - 15, 0, 8, 7, 12, 3, 11, 4, 14, 1, 9, 6, 13, 2, 10, 5 + 15, 0, 8, 7, 12, 3, 11, 4, 14, 1, 9, 6, 13, 2, 10, 5, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; const uint16_t ff_celt_qn_exp2[] = { @@ -1084,7 +1090,15 @@ const uint32_t ff_celt_pvq_u[1272] = { 1409933619 }; -DECLARE_ALIGNED(32, const float, ff_celt_window)[120] = { +const float ff_celt_postfilter_taps[3][3] = { + { 0.3066406250f, 0.2170410156f, 0.1296386719f }, + { 0.4638671875f, 0.2680664062f, 0.0 }, + { 0.7998046875f, 0.1000976562f, 0.0 } +}; + +DECLARE_ALIGNED(32, static const float, ff_celt_window_padded)[136] = { + 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f, + 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f, 6.7286966e-05f, 0.00060551348f, 0.0016815970f, 0.0032947962f, 0.0054439943f, 0.0081276923f, 0.011344001f, 0.015090633f, 0.019364886f, 0.024163635f, 0.029483315f, 0.035319905f, 0.041668911f, 0.048525347f, 0.055883718f, @@ -1108,9 +1122,13 @@ DECLARE_ALIGNED(32, const float, ff_celt_window)[120] = { 0.99499004f, 0.99592297f, 0.99672162f, 0.99739874f, 0.99796667f, 0.99843728f, 0.99882195f, 0.99913147f, 0.99937606f, 0.99956527f, 0.99970802f, 0.99981248f, 0.99988613f, 0.99993565f, 0.99996697f, - 0.99998518f, 0.99999457f, 0.99999859f, 0.99999982f, 1.0000000f, + 0.99998518f, 0.99999457f, 0.99999859f, 0.99999982f, 1.00000000f, + 1.00000000f, 1.00000000f, 1.00000000f, 1.00000000f, 1.00000000f, + 1.00000000f, 1.00000000f, 1.00000000f, }; +const float *ff_celt_window = &ff_celt_window_padded[8]; + /* square of the window, used for the postfilter */ const float ff_celt_window2[120] = { 4.5275357e-09f, 3.66647e-07f, 2.82777e-06f, 1.08557e-05f, 2.96371e-05f, 6.60594e-05f,