History

aacdec: move spectrum decode and dequantization to a new file

Lynne committed 2 years ago

Commit 41ae2b01 parent 5c026e610 files · +626 −531Browse files

Showing the changes to libavcodec/aac/aacdec_float.c (1 of 10 files). Show all

Unified · Split

libavcodec/aac/aacdec_float.c+74−0
@@ -38,6 +38,7 @@ · 37 unmodified lines
38#include "libavcodec/aactab.h"38#include "libavcodec/aactab.h"
39#include "libavcodec/sinewin.h"39#include "libavcodec/sinewin.h"
40#include "libavcodec/kbdwin.h"40#include "libavcodec/kbdwin.h"
41#include "libavcodec/cbrt_data.h"
41 42
42DECLARE_ALIGNED(32, static float, sine_120)[120];43DECLARE_ALIGNED(32, static float, sine_120)[120];
43DECLARE_ALIGNED(32, static float, sine_960)[960];44DECLARE_ALIGNED(32, static float, sine_960)[960];
@@ -63,4 +64,77 @@ static void init_tables(void) · 19 unmodified lines
63 ff_thread_once(&init_float_once, init_tables_float_fn);64 ff_thread_once(&init_float_once, init_tables_float_fn);
64}65}
65 66
67/** Dequantization-related **/
68#include "aacdec_tab.h"
69#include "libavutil/intfloat.h"
70
71#ifndef VMUL2
72static inline float *VMUL2(float *dst, const float *v, unsigned idx,
73 const float *scale)
74{
75 float s = *scale;
76 *dst++ = v[idx & 15] * s;
77 *dst++ = v[idx>>4 & 15] * s;
78 return dst;
79}
80#endif
81
82#ifndef VMUL4
83static inline float *VMUL4(float *dst, const float *v, unsigned idx,
84 const float *scale)
85{
86 float s = *scale;
87 *dst++ = v[idx & 3] * s;
88 *dst++ = v[idx>>2 & 3] * s;
89 *dst++ = v[idx>>4 & 3] * s;
90 *dst++ = v[idx>>6 & 3] * s;
91 return dst;
92}
93#endif
94
95#ifndef VMUL2S
96static inline float *VMUL2S(float *dst, const float *v, unsigned idx,
97 unsigned sign, const float *scale)
98{
99 union av_intfloat32 s0, s1;
100
101 s0.f = s1.f = *scale;
102 s0.i ^= sign >> 1 << 31;
103 s1.i ^= sign << 31;
104
105 *dst++ = v[idx & 15] * s0.f;
106 *dst++ = v[idx>>4 & 15] * s1.f;
107
108 return dst;
109}
110#endif
111
112#ifndef VMUL4S
113static inline float *VMUL4S(float *dst, const float *v, unsigned idx,
114 unsigned sign, const float *scale)
115{
116 unsigned nz = idx >> 12;
117 union av_intfloat32 s = { .f = *scale };
118 union av_intfloat32 t;
119
120 t.i = s.i ^ (sign & 1U<<31);
121 *dst++ = v[idx & 3] * t.f;
122
123 sign <<= nz & 1; nz >>= 1;
124 t.i = s.i ^ (sign & 1U<<31);
125 *dst++ = v[idx>>2 & 3] * t.f;
126
127 sign <<= nz & 1; nz >>= 1;
128 t.i = s.i ^ (sign & 1U<<31);
129 *dst++ = v[idx>>4 & 3] * t.f;
130
131 sign <<= nz & 1;
132 t.i = s.i ^ (sign & 1U<<31);
133 *dst++ = v[idx>>6 & 3] * t.f;
134
135 return dst;
136}
137#endif
138
66#include "aacdec_dsp_template.c"139#include "aacdec_dsp_template.c"
140#include "aacdec_proc_template.c"

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t