diff options
Diffstat (limited to 'apps/codecs/libmusepack')
-rw-r--r-- | apps/codecs/libmusepack/mpc_decoder.c | 79 |
1 files changed, 60 insertions, 19 deletions
diff --git a/apps/codecs/libmusepack/mpc_decoder.c b/apps/codecs/libmusepack/mpc_decoder.c index 9e4ef634bf..f403673818 100644 --- a/apps/codecs/libmusepack/mpc_decoder.c +++ b/apps/codecs/libmusepack/mpc_decoder.c | |||
@@ -125,54 +125,95 @@ void mpc_decoder_read_bitstream_sv8(mpc_decoder * d, mpc_bits_reader * r, | |||
125 | //------------------------------------------------------------------------------ | 125 | //------------------------------------------------------------------------------ |
126 | // macros | 126 | // macros |
127 | //------------------------------------------------------------------------------ | 127 | //------------------------------------------------------------------------------ |
128 | #define REQUANT_M1_S1_SAMPLES(IDX) \ | ||
129 | *(YL+=IDX) = (templ = MPC_MULTIPLY_FLOAT_INT(facL,*L++))+(tempr = MPC_MULTIPLY_FLOAT_INT(facR,*R++)); \ | ||
130 | *(YR+=IDX) = templ - tempr; | ||
131 | |||
128 | #define REQUANT_M1_S1(SUBFRAME) \ | 132 | #define REQUANT_M1_S1(SUBFRAME) \ |
129 | facL = MPC_MULTIPLY_SCF( Cc[d->Res_L[Band]] , d->SCF_Index_L[Band][SUBFRAME] & 0xFF); \ | 133 | facL = MPC_MULTIPLY_SCF( Cc[d->Res_L[Band]] , d->SCF_Index_L[Band][SUBFRAME] & 0xFF); \ |
130 | facR = MPC_MULTIPLY_SCF( Cc[d->Res_R[Band]] , d->SCF_Index_R[Band][SUBFRAME] & 0xFF); \ | 134 | facR = MPC_MULTIPLY_SCF( Cc[d->Res_R[Band]] , d->SCF_Index_R[Band][SUBFRAME] & 0xFF); \ |
131 | for (n = 0; n < 12; n++, YL += 32, YR += 32) { \ | 135 | for (n = 0; n < 12; n+=4, YL += 32, YR += 32) { \ |
132 | *YL = (templ = MPC_MULTIPLY_FLOAT_INT(facL,*L++))+(tempr = MPC_MULTIPLY_FLOAT_INT(facR,*R++)); \ | 136 | REQUANT_M1_S1_SAMPLES( 0); \ |
133 | *YR = templ - tempr; \ | 137 | REQUANT_M1_S1_SAMPLES(32); \ |
138 | REQUANT_M1_S1_SAMPLES(32); \ | ||
139 | REQUANT_M1_S1_SAMPLES(32); \ | ||
134 | } | 140 | } |
135 | 141 | ||
142 | #define REQUANT_M1_S0_SAMPLES(IDX) \ | ||
143 | *(YR+=IDX) = *(YL+=IDX) = MPC_MULTIPLY_FLOAT_INT(facL,*L++); | ||
144 | |||
136 | #define REQUANT_M1_S0(SUBFRAME) \ | 145 | #define REQUANT_M1_S0(SUBFRAME) \ |
137 | facL = MPC_MULTIPLY_SCF( Cc[d->Res_L[Band]] , d->SCF_Index_L[Band][SUBFRAME] & 0xFF); \ | 146 | facL = MPC_MULTIPLY_SCF( Cc[d->Res_L[Band]] , d->SCF_Index_L[Band][SUBFRAME] & 0xFF); \ |
138 | for (n = 0; n < 12; n++, YL += 32, YR += 32) { \ | 147 | for (n = 0; n < 12; n+=4, YL += 32, YR += 32) { \ |
139 | *YR = *YL = MPC_MULTIPLY_FLOAT_INT(facL,*L++); \ | 148 | REQUANT_M1_S0_SAMPLES( 0); \ |
149 | REQUANT_M1_S0_SAMPLES(32); \ | ||
150 | REQUANT_M1_S0_SAMPLES(32); \ | ||
151 | REQUANT_M1_S0_SAMPLES(32); \ | ||
140 | } | 152 | } |
141 | 153 | ||
154 | #define REQUANT_M0_S1_SAMPLES(IDX) \ | ||
155 | *(YR+=IDX) = -(*(YL+=IDX) = MPC_MULTIPLY_FLOAT_INT(facR,*R++)); | ||
156 | |||
142 | #define REQUANT_M0_S1(SUBFRAME) \ | 157 | #define REQUANT_M0_S1(SUBFRAME) \ |
143 | facR = MPC_MULTIPLY_SCF( Cc[d->Res_R[Band]] , d->SCF_Index_R[Band][SUBFRAME] & 0xFF); \ | 158 | facR = MPC_MULTIPLY_SCF( Cc[d->Res_R[Band]] , d->SCF_Index_R[Band][SUBFRAME] & 0xFF); \ |
144 | for (n = 0; n < 12; n++, YL += 32, YR += 32) { \ | 159 | for (n = 0; n < 12; n+=4, YL += 32, YR += 32) { \ |
145 | *YR = - (*YL = MPC_MULTIPLY_FLOAT_INT(facR,*R++)); \ | 160 | REQUANT_M0_S1_SAMPLES( 0); \ |
161 | REQUANT_M0_S1_SAMPLES(32); \ | ||
162 | REQUANT_M0_S1_SAMPLES(32); \ | ||
163 | REQUANT_M0_S1_SAMPLES(32); \ | ||
146 | } | 164 | } |
147 | 165 | ||
166 | #define REQUANT_L1_R1_SAMPLES(IDX) \ | ||
167 | *(YL+=IDX) = MPC_MULTIPLY_FLOAT_INT(facL,*L++); \ | ||
168 | *(YR+=IDX) = MPC_MULTIPLY_FLOAT_INT(facR,*R++); | ||
169 | |||
148 | #define REQUANT_L1_R1(SUBFRAME) \ | 170 | #define REQUANT_L1_R1(SUBFRAME) \ |
149 | facL = MPC_MULTIPLY_SCF( Cc[d->Res_L[Band]] , d->SCF_Index_L[Band][SUBFRAME] & 0xFF); \ | 171 | facL = MPC_MULTIPLY_SCF( Cc[d->Res_L[Band]] , d->SCF_Index_L[Band][SUBFRAME] & 0xFF); \ |
150 | facR = MPC_MULTIPLY_SCF( Cc[d->Res_R[Band]] , d->SCF_Index_R[Band][SUBFRAME] & 0xFF); \ | 172 | facR = MPC_MULTIPLY_SCF( Cc[d->Res_R[Band]] , d->SCF_Index_R[Band][SUBFRAME] & 0xFF); \ |
151 | for (n = 0; n < 12; n++, YL += 32, YR += 32) { \ | 173 | for (n = 0; n < 12; n+=4, YL += 32, YR += 32) { \ |
152 | *YL = MPC_MULTIPLY_FLOAT_INT(facL,*L++); \ | 174 | REQUANT_L1_R1_SAMPLES( 0); \ |
153 | *YR = MPC_MULTIPLY_FLOAT_INT(facR,*R++); \ | 175 | REQUANT_L1_R1_SAMPLES(32); \ |
176 | REQUANT_L1_R1_SAMPLES(32); \ | ||
177 | REQUANT_L1_R1_SAMPLES(32); \ | ||
154 | } | 178 | } |
155 | 179 | ||
180 | #define REQUANT_L1_R0_SAMPLES(IDX) \ | ||
181 | *(YL+=IDX) = MPC_MULTIPLY_FLOAT_INT(facL,*L++); \ | ||
182 | *(YR+=IDX) = 0; | ||
183 | |||
156 | #define REQUANT_L1_R0(SUBFRAME) \ | 184 | #define REQUANT_L1_R0(SUBFRAME) \ |
157 | facL = MPC_MULTIPLY_SCF( Cc[d->Res_L[Band]] , d->SCF_Index_L[Band][SUBFRAME] & 0xFF); \ | 185 | facL = MPC_MULTIPLY_SCF( Cc[d->Res_L[Band]] , d->SCF_Index_L[Band][SUBFRAME] & 0xFF); \ |
158 | for (n = 0; n < 12; n++, YL += 32, YR += 32) { \ | 186 | for (n = 0; n < 12; n+=4, YL += 32, YR += 32) { \ |
159 | *YL = MPC_MULTIPLY_FLOAT_INT(facL,*L++); \ | 187 | REQUANT_L1_R0_SAMPLES( 0); \ |
160 | *YR = 0; \ | 188 | REQUANT_L1_R0_SAMPLES(32); \ |
189 | REQUANT_L1_R0_SAMPLES(32); \ | ||
190 | REQUANT_L1_R0_SAMPLES(32); \ | ||
161 | } | 191 | } |
162 | 192 | ||
193 | #define REQUANT_L0_R1_SAMPLES(IDX) \ | ||
194 | *(YL+=IDX) = 0; \ | ||
195 | *(YR+=IDX) = MPC_MULTIPLY_FLOAT_INT(facR,*R++); | ||
196 | |||
163 | #define REQUANT_L0_R1(SUBFRAME) \ | 197 | #define REQUANT_L0_R1(SUBFRAME) \ |
164 | facR = MPC_MULTIPLY_SCF( Cc[d->Res_R[Band]] , d->SCF_Index_R[Band][SUBFRAME] & 0xFF); \ | 198 | facR = MPC_MULTIPLY_SCF( Cc[d->Res_R[Band]] , d->SCF_Index_R[Band][SUBFRAME] & 0xFF); \ |
165 | for (n = 0; n < 12; n++, YL += 32, YR += 32) { \ | 199 | for (n = 0; n < 12; n+=4, YL += 32, YR += 32) { \ |
166 | *YL = 0; \ | 200 | REQUANT_L0_R1_SAMPLES( 0); \ |
167 | *YR = MPC_MULTIPLY_FLOAT_INT(facR,*R++); \ | 201 | REQUANT_L0_R1_SAMPLES(32); \ |
202 | REQUANT_L0_R1_SAMPLES(32); \ | ||
203 | REQUANT_L0_R1_SAMPLES(32); \ | ||
168 | } | 204 | } |
169 | 205 | ||
206 | #define REQUANT_SILENCE_SAMPLES(IDX) \ | ||
207 | *(YR+=IDX) = *(YL+=IDX) = 0; | ||
208 | |||
170 | #define REQUANT_SILENCE \ | 209 | #define REQUANT_SILENCE \ |
171 | for (n = 0; n < 36; n++, YL += 32, YR += 32) { \ | 210 | for (n = 0; n < 12; n+=4, YL += 32, YR += 32) { \ |
172 | *YR = *YL = 0; \ | 211 | REQUANT_SILENCE_SAMPLES( 0); \ |
212 | REQUANT_SILENCE_SAMPLES(32); \ | ||
213 | REQUANT_SILENCE_SAMPLES(32); \ | ||
214 | REQUANT_SILENCE_SAMPLES(32); \ | ||
173 | } | 215 | } |
174 | 216 | ||
175 | |||
176 | /** | 217 | /** |
177 | * set the scf indexes for seeking use | 218 | * set the scf indexes for seeking use |
178 | * needed only for sv7 seeking | 219 | * needed only for sv7 seeking |