aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/aacdec_fixed.c
diff options
context:
space:
mode:
authorLynne <dev@lynne.ee>2024-03-16 05:16:50 +0100
committerLynne <dev@lynne.ee>2024-04-23 08:31:37 +0200
commit49e7be1e370a52d5ad2bc52830a2448384b5a58c (patch)
tree66155242b6c7a56d845397d455ebda818f0705fb /libavcodec/aacdec_fixed.c
parentb1718ce0f98216702e3330335ccf4be3b7896cbb (diff)
downloadffmpeg-49e7be1e370a52d5ad2bc52830a2448384b5a58c.tar.gz
aacdec: move prediction to separate files
Diffstat (limited to 'libavcodec/aacdec_fixed.c')
-rw-r--r--libavcodec/aacdec_fixed.c116
1 files changed, 0 insertions, 116 deletions
diff --git a/libavcodec/aacdec_fixed.c b/libavcodec/aacdec_fixed.c
index 03b39854f8..880c18b0f8 100644
--- a/libavcodec/aacdec_fixed.c
+++ b/libavcodec/aacdec_fixed.c
@@ -127,124 +127,8 @@ static const int * const tns_tmp2_map_fixed[4] = {
};
// @}
-static av_always_inline void reset_predict_state(PredictorState *ps)
-{
- ps->r0.mant = 0;
- ps->r0.exp = 0;
- ps->r1.mant = 0;
- ps->r1.exp = 0;
- ps->cor0.mant = 0;
- ps->cor0.exp = 0;
- ps->cor1.mant = 0;
- ps->cor1.exp = 0;
- ps->var0.mant = 0x20000000;
- ps->var0.exp = 1;
- ps->var1.mant = 0x20000000;
- ps->var1.exp = 1;
-}
-
static const int exp2tab[4] = { Q31(1.0000000000/2), Q31(1.1892071150/2), Q31(1.4142135624/2), Q31(1.6817928305/2) }; // 2^0, 2^0.25, 2^0.5, 2^0.75
-static av_always_inline SoftFloat flt16_round(SoftFloat pf)
-{
- SoftFloat tmp;
- int s;
-
- tmp.exp = pf.exp;
- s = pf.mant >> 31;
- tmp.mant = (pf.mant ^ s) - s;
- tmp.mant = (tmp.mant + 0x00200000U) & 0xFFC00000U;
- tmp.mant = (tmp.mant ^ s) - s;
-
- return tmp;
-}
-
-static av_always_inline SoftFloat flt16_even(SoftFloat pf)
-{
- SoftFloat tmp;
- int s;
-
- tmp.exp = pf.exp;
- s = pf.mant >> 31;
- tmp.mant = (pf.mant ^ s) - s;
- tmp.mant = (tmp.mant + 0x001FFFFFU + (tmp.mant & 0x00400000U >> 16)) & 0xFFC00000U;
- tmp.mant = (tmp.mant ^ s) - s;
-
- return tmp;
-}
-
-static av_always_inline SoftFloat flt16_trunc(SoftFloat pf)
-{
- SoftFloat pun;
- int s;
-
- pun.exp = pf.exp;
- s = pf.mant >> 31;
- pun.mant = (pf.mant ^ s) - s;
- pun.mant = pun.mant & 0xFFC00000U;
- pun.mant = (pun.mant ^ s) - s;
-
- return pun;
-}
-
-static av_always_inline void predict(PredictorState *ps, int *coef,
- int output_enable)
-{
- const SoftFloat a = { 1023410176, 0 }; // 61.0 / 64
- const SoftFloat alpha = { 973078528, 0 }; // 29.0 / 32
- SoftFloat e0, e1;
- SoftFloat pv;
- SoftFloat k1, k2;
- SoftFloat r0 = ps->r0, r1 = ps->r1;
- SoftFloat cor0 = ps->cor0, cor1 = ps->cor1;
- SoftFloat var0 = ps->var0, var1 = ps->var1;
- SoftFloat tmp;
-
- if (var0.exp > 1 || (var0.exp == 1 && var0.mant > 0x20000000)) {
- k1 = av_mul_sf(cor0, flt16_even(av_div_sf(a, var0)));
- }
- else {
- k1.mant = 0;
- k1.exp = 0;
- }
-
- if (var1.exp > 1 || (var1.exp == 1 && var1.mant > 0x20000000)) {
- k2 = av_mul_sf(cor1, flt16_even(av_div_sf(a, var1)));
- }
- else {
- k2.mant = 0;
- k2.exp = 0;
- }
-
- tmp = av_mul_sf(k1, r0);
- pv = flt16_round(av_add_sf(tmp, av_mul_sf(k2, r1)));
- if (output_enable) {
- int shift = 28 - pv.exp;
-
- if (shift < 31) {
- if (shift > 0) {
- *coef += (unsigned)((pv.mant + (1 << (shift - 1))) >> shift);
- } else
- *coef += (unsigned)pv.mant << -shift;
- }
- }
-
- e0 = av_int2sf(*coef, 2);
- e1 = av_sub_sf(e0, tmp);
-
- ps->cor1 = flt16_trunc(av_add_sf(av_mul_sf(alpha, cor1), av_mul_sf(r1, e1)));
- tmp = av_add_sf(av_mul_sf(r1, r1), av_mul_sf(e1, e1));
- tmp.exp--;
- ps->var1 = flt16_trunc(av_add_sf(av_mul_sf(alpha, var1), tmp));
- ps->cor0 = flt16_trunc(av_add_sf(av_mul_sf(alpha, cor0), av_mul_sf(r0, e0)));
- tmp = av_add_sf(av_mul_sf(r0, r0), av_mul_sf(e0, e0));
- tmp.exp--;
- ps->var0 = flt16_trunc(av_add_sf(av_mul_sf(alpha, var0), tmp));
-
- ps->r1 = flt16_trunc(av_mul_sf(a, av_sub_sf(r0, av_mul_sf(k1, e0))));
- ps->r0 = flt16_trunc(av_mul_sf(a, e0));
-}
-
#include "aacdec_template.c"
const FFCodec ff_aac_fixed_decoder = {