summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/codecs/libmusepack/mpc_decoder.c79
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