summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndree Buschmann <AndreeBuschmann@t-online.de>2010-05-07 19:58:34 +0000
committerAndree Buschmann <AndreeBuschmann@t-online.de>2010-05-07 19:58:34 +0000
commitf2b1f8d768b8edce775cd280b9f24d1998941432 (patch)
tree837265bf08ef877a29de58c0c74f8428a4ed70b2
parente4f1bfe1c46e3421961952738294902dddbbe426 (diff)
downloadrockbox-f2b1f8d768b8edce775cd280b9f24d1998941432.tar.gz
rockbox-f2b1f8d768b8edce775cd280b9f24d1998941432.zip
Refactor mpc's requantization to use identical macros for each subframe.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25887 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/codecs/libmusepack/mpc_decoder.c177
1 files changed, 76 insertions, 101 deletions
diff --git a/apps/codecs/libmusepack/mpc_decoder.c b/apps/codecs/libmusepack/mpc_decoder.c
index bbc916db8b..9e4ef634bf 100644
--- a/apps/codecs/libmusepack/mpc_decoder.c
+++ b/apps/codecs/libmusepack/mpc_decoder.c
@@ -122,6 +122,57 @@ void mpc_decoder_read_bitstream_sv7(mpc_decoder * d, mpc_bits_reader * r)
122void mpc_decoder_read_bitstream_sv8(mpc_decoder * d, mpc_bits_reader * r, 122void mpc_decoder_read_bitstream_sv8(mpc_decoder * d, mpc_bits_reader * r,
123 mpc_bool_t is_key_frame); 123 mpc_bool_t is_key_frame);
124 124
125//------------------------------------------------------------------------------
126// macros
127//------------------------------------------------------------------------------
128#define REQUANT_M1_S1(SUBFRAME) \
129 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); \
131 for (n = 0; n < 12; n++, YL += 32, YR += 32) { \
132 *YL = (templ = MPC_MULTIPLY_FLOAT_INT(facL,*L++))+(tempr = MPC_MULTIPLY_FLOAT_INT(facR,*R++)); \
133 *YR = templ - tempr; \
134 }
135
136#define REQUANT_M1_S0(SUBFRAME) \
137 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) { \
139 *YR = *YL = MPC_MULTIPLY_FLOAT_INT(facL,*L++); \
140 }
141
142#define REQUANT_M0_S1(SUBFRAME) \
143 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) { \
145 *YR = - (*YL = MPC_MULTIPLY_FLOAT_INT(facR,*R++)); \
146 }
147
148#define REQUANT_L1_R1(SUBFRAME) \
149 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); \
151 for (n = 0; n < 12; n++, YL += 32, YR += 32) { \
152 *YL = MPC_MULTIPLY_FLOAT_INT(facL,*L++); \
153 *YR = MPC_MULTIPLY_FLOAT_INT(facR,*R++); \
154 }
155
156#define REQUANT_L1_R0(SUBFRAME) \
157 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) { \
159 *YL = MPC_MULTIPLY_FLOAT_INT(facL,*L++); \
160 *YR = 0; \
161 }
162
163#define REQUANT_L0_R1(SUBFRAME) \
164 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) { \
166 *YL = 0; \
167 *YR = MPC_MULTIPLY_FLOAT_INT(facR,*R++); \
168 }
169
170#define REQUANT_SILENCE \
171 for (n = 0; n < 36; n++, YL += 32, YR += 32) { \
172 *YR = *YL = 0; \
173 }
174
175
125/** 176/**
126 * set the scf indexes for seeking use 177 * set the scf indexes for seeking use
127 * needed only for sv7 seeking 178 * needed only for sv7 seeking
@@ -280,57 +331,22 @@ mpc_decoder_requantisierung(mpc_decoder *d)
280 if ( d->MS_Flag [Band] ) { 331 if ( d->MS_Flag [Band] ) {
281 if ( d->Res_L [Band] ) { 332 if ( d->Res_L [Band] ) {
282 if ( d->Res_R [Band] ) { // M!=0, S!=0 333 if ( d->Res_R [Band] ) { // M!=0, S!=0
283 facL = MPC_MULTIPLY_SCF( Cc[d->Res_L[Band]] , d->SCF_Index_L[Band][0] & 0xFF); 334 REQUANT_M1_S1(0);
284 facR = MPC_MULTIPLY_SCF( Cc[d->Res_R[Band]] , d->SCF_Index_R[Band][0] & 0xFF); 335 REQUANT_M1_S1(1);
285 for ( n = 0; n < 12; n++, YL += 32, YR += 32 ) { 336 REQUANT_M1_S1(2);
286 *YL = (templ = MPC_MULTIPLY_FLOAT_INT(facL,*L++))+(tempr = MPC_MULTIPLY_FLOAT_INT(facR,*R++)); 337 } else { // M!=0, S==0
287 *YR = templ - tempr; 338 REQUANT_M1_S0(0);
288 } 339 REQUANT_M1_S0(1);
289 facL = MPC_MULTIPLY_SCF( Cc[d->Res_L[Band]] , d->SCF_Index_L[Band][1] & 0xFF); 340 REQUANT_M1_S0(2);
290 facR = MPC_MULTIPLY_SCF( Cc[d->Res_R[Band]] , d->SCF_Index_R[Band][1] & 0xFF);
291 for ( ; n < 24; n++, YL += 32, YR += 32 ) {
292 *YL = (templ = MPC_MULTIPLY_FLOAT_INT(facL,*L++))+(tempr = MPC_MULTIPLY_FLOAT_INT(facR,*R++));
293 *YR = templ - tempr;
294 }
295 facL = MPC_MULTIPLY_SCF( Cc[d->Res_L[Band]] , d->SCF_Index_L[Band][2] & 0xFF);
296 facR = MPC_MULTIPLY_SCF( Cc[d->Res_R[Band]] , d->SCF_Index_R[Band][2] & 0xFF);
297 for ( ; n < 36; n++, YL += 32, YR += 32 ) {
298 *YL = (templ = MPC_MULTIPLY_FLOAT_INT(facL,*L++))+(tempr = MPC_MULTIPLY_FLOAT_INT(facR,*R++));
299 *YR = templ - tempr;
300 }
301 } else { // M!=0, S==0
302 facL = MPC_MULTIPLY_SCF( Cc[d->Res_L[Band]] , d->SCF_Index_L[Band][0] & 0xFF);
303 for ( n = 0; n < 12; n++, YL += 32, YR += 32 ) {
304 *YR = *YL = MPC_MULTIPLY_FLOAT_INT(facL,*L++);
305 }
306 facL = MPC_MULTIPLY_SCF( Cc[d->Res_L[Band]] , d->SCF_Index_L[Band][1] & 0xFF);
307 for ( ; n < 24; n++, YL += 32, YR += 32 ) {
308 *YR = *YL = MPC_MULTIPLY_FLOAT_INT(facL,*L++);
309 }
310 facL = MPC_MULTIPLY_SCF( Cc[d->Res_L[Band]] , d->SCF_Index_L[Band][2] & 0xFF);
311 for ( ; n < 36; n++, YL += 32, YR += 32 ) {
312 *YR = *YL = MPC_MULTIPLY_FLOAT_INT(facL,*L++);
313 }
314 } 341 }
315 } else { 342 } else {
316 if (d->Res_R[Band]) // M==0, S!=0 343 if ( d->Res_R[Band] ) // M==0, S!=0
317 { 344 {
318 facR = MPC_MULTIPLY_SCF( Cc[d->Res_R[Band]] , d->SCF_Index_R[Band][0] & 0xFF); 345 REQUANT_M0_S1(0);
319 for ( n = 0; n < 12; n++, YL += 32, YR += 32 ) { 346 REQUANT_M0_S1(1);
320 *YR = - (*YL = MPC_MULTIPLY_FLOAT_INT(facR,*(R++))); 347 REQUANT_M0_S1(2);
321 } 348 } else { // M==0, S==0
322 facR = MPC_MULTIPLY_SCF( Cc[d->Res_R[Band]] , d->SCF_Index_R[Band][1] & 0xFF); 349 REQUANT_SILENCE;
323 for ( ; n < 24; n++, YL += 32, YR += 32 ) {
324 *YR = - (*YL = MPC_MULTIPLY_FLOAT_INT(facR,*(R++)));
325 }
326 facR = MPC_MULTIPLY_SCF( Cc[d->Res_R[Band]] , d->SCF_Index_R[Band][2] & 0xFF);
327 for ( ; n < 36; n++, YL += 32, YR += 32 ) {
328 *YR = - (*YL = MPC_MULTIPLY_FLOAT_INT(facR,*(R++)));
329 }
330 } else { // M==0, S==0
331 for ( n = 0; n < 36; n++, YL += 32, YR += 32 ) {
332 *YR = *YL = 0;
333 }
334 } 350 }
335 } 351 }
336 } 352 }
@@ -338,63 +354,22 @@ mpc_decoder_requantisierung(mpc_decoder *d)
338 else { 354 else {
339 if ( d->Res_L [Band] ) { 355 if ( d->Res_L [Band] ) {
340 if ( d->Res_R [Band] ) { // L!=0, R!=0 356 if ( d->Res_R [Band] ) { // L!=0, R!=0
341 facL = MPC_MULTIPLY_SCF( Cc[d->Res_L[Band]] , d->SCF_Index_L[Band][0] & 0xFF); 357 REQUANT_L1_R1(0);
342 facR = MPC_MULTIPLY_SCF( Cc[d->Res_R[Band]] , d->SCF_Index_R[Band][0] & 0xFF); 358 REQUANT_L1_R1(1);
343 for (n = 0; n < 12; n++, YL += 32, YR += 32 ) { 359 REQUANT_L1_R1(2);
344 *YL = MPC_MULTIPLY_FLOAT_INT(facL,*L++); 360 } else { // L!=0, R==0
345 *YR = MPC_MULTIPLY_FLOAT_INT(facR,*R++); 361 REQUANT_L1_R0(0);
346 } 362 REQUANT_L1_R0(1);
347 facL = MPC_MULTIPLY_SCF( Cc[d->Res_L[Band]] , d->SCF_Index_L[Band][1] & 0xFF); 363 REQUANT_L1_R0(2);
348 facR = MPC_MULTIPLY_SCF( Cc[d->Res_R[Band]] , d->SCF_Index_R[Band][1] & 0xFF);
349 for (; n < 24; n++, YL += 32, YR += 32 ) {
350 *YL = MPC_MULTIPLY_FLOAT_INT(facL,*L++);
351 *YR = MPC_MULTIPLY_FLOAT_INT(facR,*R++);
352 }
353 facL = MPC_MULTIPLY_SCF( Cc[d->Res_L[Band]] , d->SCF_Index_L[Band][2] & 0xFF);
354 facR = MPC_MULTIPLY_SCF( Cc[d->Res_R[Band]] , d->SCF_Index_R[Band][2] & 0xFF);
355 for (; n < 36; n++, YL += 32, YR += 32 ) {
356 *YL = MPC_MULTIPLY_FLOAT_INT(facL,*L++);
357 *YR = MPC_MULTIPLY_FLOAT_INT(facR,*R++);
358 }
359 } else { // L!=0, R==0
360 facL = MPC_MULTIPLY_SCF( Cc[d->Res_L[Band]] , d->SCF_Index_L[Band][0] & 0xFF);
361 for ( n = 0; n < 12; n++, YL += 32, YR += 32 ) {
362 *YL = MPC_MULTIPLY_FLOAT_INT(facL,*L++);
363 *YR = 0;
364 }
365 facL = MPC_MULTIPLY_SCF( Cc[d->Res_L[Band]] , d->SCF_Index_L[Band][1] & 0xFF);
366 for ( ; n < 24; n++, YL += 32, YR += 32 ) {
367 *YL = MPC_MULTIPLY_FLOAT_INT(facL,*L++);
368 *YR = 0;
369 }
370 facL = MPC_MULTIPLY_SCF( Cc[d->Res_L[Band]] , d->SCF_Index_L[Band][2] & 0xFF);
371 for ( ; n < 36; n++, YL += 32, YR += 32 ) {
372 *YL = MPC_MULTIPLY_FLOAT_INT(facL,*L++);
373 *YR = 0;
374 }
375 } 364 }
376 } 365 }
377 else { 366 else {
378 if ( d->Res_R [Band] ) { // L==0, R!=0 367 if ( d->Res_R [Band] ) { // L==0, R!=0
379 facR = MPC_MULTIPLY_SCF( Cc[d->Res_R[Band]] , d->SCF_Index_R[Band][0] & 0xFF); 368 REQUANT_L0_R1(0);
380 for ( n = 0; n < 12; n++, YL += 32, YR += 32 ) { 369 REQUANT_L0_R1(1);
381 *YL = 0; 370 REQUANT_L0_R1(2);
382 *YR = MPC_MULTIPLY_FLOAT_INT(facR,*R++); 371 } else { // L==0, R==0
383 } 372 REQUANT_SILENCE;
384 facR = MPC_MULTIPLY_SCF( Cc[d->Res_R[Band]] , d->SCF_Index_R[Band][1] & 0xFF);
385 for ( ; n < 24; n++, YL += 32, YR += 32 ) {
386 *YL = 0;
387 *YR = MPC_MULTIPLY_FLOAT_INT(facR,*R++);
388 }
389 facR = MPC_MULTIPLY_SCF( Cc[d->Res_R[Band]] , d->SCF_Index_R[Band][2] & 0xFF);
390 for ( ; n < 36; n++, YL += 32, YR += 32 ) {
391 *YL = 0;
392 *YR = MPC_MULTIPLY_FLOAT_INT(facR,*R++);
393 }
394 } else { // L==0, R==0
395 for ( n = 0; n < 36; n++, YL += 32, YR += 32 ) {
396 *YR = *YL = 0;
397 }
398 } 373 }
399 } 374 }
400 } 375 }