summaryrefslogtreecommitdiff
path: root/apps/codecs/demac/libdemac
diff options
context:
space:
mode:
Diffstat (limited to 'apps/codecs/demac/libdemac')
-rw-r--r--apps/codecs/demac/libdemac/decoder.c35
-rw-r--r--apps/codecs/demac/libdemac/filter.c24
-rw-r--r--apps/codecs/demac/libdemac/filter.h20
3 files changed, 40 insertions, 39 deletions
diff --git a/apps/codecs/demac/libdemac/decoder.c b/apps/codecs/demac/libdemac/decoder.c
index 09563e0112..c415db774a 100644
--- a/apps/codecs/demac/libdemac/decoder.c
+++ b/apps/codecs/demac/libdemac/decoder.c
@@ -118,22 +118,22 @@ int ICODE_ATTR_DEMAC decode_chunk(struct ape_ctx_t* ape_ctx,
118 switch (ape_ctx->compressiontype) 118 switch (ape_ctx->compressiontype)
119 { 119 {
120 case 2000: 120 case 2000:
121 apply_filter_16_11(ape_ctx->fileversion,decoded0,NULL,count); 121 apply_filter_16_11(ape_ctx->fileversion,0,decoded0,count);
122 break; 122 break;
123 123
124 case 3000: 124 case 3000:
125 apply_filter_64_11(ape_ctx->fileversion,decoded0,NULL,count); 125 apply_filter_64_11(ape_ctx->fileversion,0,decoded0,count);
126 break; 126 break;
127 127
128 case 4000: 128 case 4000:
129 apply_filter_32_10(ape_ctx->fileversion,decoded0,NULL,count); 129 apply_filter_32_10(ape_ctx->fileversion,0,decoded0,count);
130 apply_filter_256_13(ape_ctx->fileversion,decoded0,NULL,count); 130 apply_filter_256_13(ape_ctx->fileversion,0,decoded0,count);
131 break; 131 break;
132 132
133 case 5000: 133 case 5000:
134 apply_filter_16_11(ape_ctx->fileversion,decoded0,NULL,count); 134 apply_filter_16_11(ape_ctx->fileversion,0,decoded0,count);
135 apply_filter_256_13(ape_ctx->fileversion,decoded0,NULL,count); 135 apply_filter_256_13(ape_ctx->fileversion,0,decoded0,count);
136 apply_filter_1280_15(ape_ctx->fileversion,decoded0,NULL,count); 136 apply_filter_1280_15(ape_ctx->fileversion,0,decoded0,count);
137 } 137 }
138 138
139 /* Now apply the predictor decoding */ 139 /* Now apply the predictor decoding */
@@ -171,22 +171,29 @@ int ICODE_ATTR_DEMAC decode_chunk(struct ape_ctx_t* ape_ctx,
171 switch (ape_ctx->compressiontype) 171 switch (ape_ctx->compressiontype)
172 { 172 {
173 case 2000: 173 case 2000:
174 apply_filter_16_11(ape_ctx->fileversion,decoded0,decoded1,count); 174 apply_filter_16_11(ape_ctx->fileversion,0,decoded0,count);
175 apply_filter_16_11(ape_ctx->fileversion,1,decoded1,count);
175 break; 176 break;
176 177
177 case 3000: 178 case 3000:
178 apply_filter_64_11(ape_ctx->fileversion,decoded0,decoded1,count); 179 apply_filter_64_11(ape_ctx->fileversion,0,decoded0,count);
180 apply_filter_64_11(ape_ctx->fileversion,1,decoded1,count);
179 break; 181 break;
180 182
181 case 4000: 183 case 4000:
182 apply_filter_32_10(ape_ctx->fileversion,decoded0,decoded1,count); 184 apply_filter_32_10(ape_ctx->fileversion,0,decoded0,count);
183 apply_filter_256_13(ape_ctx->fileversion,decoded0,decoded1,count); 185 apply_filter_32_10(ape_ctx->fileversion,1,decoded1,count);
186 apply_filter_256_13(ape_ctx->fileversion,0,decoded0,count);
187 apply_filter_256_13(ape_ctx->fileversion,1,decoded1,count);
184 break; 188 break;
185 189
186 case 5000: 190 case 5000:
187 apply_filter_16_11(ape_ctx->fileversion,decoded0,decoded1,count); 191 apply_filter_16_11(ape_ctx->fileversion,0,decoded0,count);
188 apply_filter_256_13(ape_ctx->fileversion,decoded0,decoded1,count); 192 apply_filter_16_11(ape_ctx->fileversion,1,decoded1,count);
189 apply_filter_1280_15(ape_ctx->fileversion,decoded0,decoded1,count); 193 apply_filter_256_13(ape_ctx->fileversion,0,decoded0,count);
194 apply_filter_256_13(ape_ctx->fileversion,1,decoded1,count);
195 apply_filter_1280_15(ape_ctx->fileversion,0,decoded0,count);
196 apply_filter_1280_15(ape_ctx->fileversion,1,decoded1,count);
190 } 197 }
191 198
192 /* Now apply the predictor decoding */ 199 /* Now apply the predictor decoding */
diff --git a/apps/codecs/demac/libdemac/filter.c b/apps/codecs/demac/libdemac/filter.c
index 275f12f6ae..47a0aeb28e 100644
--- a/apps/codecs/demac/libdemac/filter.c
+++ b/apps/codecs/demac/libdemac/filter.c
@@ -260,8 +260,7 @@ static void ICODE_ATTR_DEMAC do_apply_filter_3970(struct filter_t* f,
260 } 260 }
261} 261}
262 262
263static struct filter_t filter0 IBSS_ATTR; 263static struct filter_t filter[2] IBSS_ATTR;
264static struct filter_t filter1 IBSS_ATTR;
265 264
266static void do_init_filter(struct filter_t* f, filter_int* buf) 265static void do_init_filter(struct filter_t* f, filter_int* buf)
267{ 266{
@@ -281,20 +280,15 @@ static void do_init_filter(struct filter_t* f, filter_int* buf)
281 280
282void INIT_FILTER(filter_int* buf) 281void INIT_FILTER(filter_int* buf)
283{ 282{
284 do_init_filter(&filter0, buf); 283 do_init_filter(&filter[0], buf);
285 do_init_filter(&filter1, buf + ORDER*3 + FILTER_HISTORY_SIZE); 284 do_init_filter(&filter[1], buf + ORDER*3 + FILTER_HISTORY_SIZE);
286} 285}
287 286
288void ICODE_ATTR_DEMAC APPLY_FILTER(int fileversion, int32_t* data0, 287void ICODE_ATTR_DEMAC APPLY_FILTER(int fileversion, int channel,
289 int32_t* data1, int count) 288 int32_t* data, int count)
290{ 289{
291 if (fileversion >= 3980) { 290 if (fileversion >= 3980)
292 do_apply_filter_3980(&filter0, data0, count); 291 do_apply_filter_3980(&filter[channel], data, count);
293 if (data1 != NULL) 292 else
294 do_apply_filter_3980(&filter1, data1, count); 293 do_apply_filter_3970(&filter[channel], data, count);
295 } else {
296 do_apply_filter_3970(&filter0, data0, count);
297 if (data1 != NULL)
298 do_apply_filter_3970(&filter1, data1, count);
299 }
300} 294}
diff --git a/apps/codecs/demac/libdemac/filter.h b/apps/codecs/demac/libdemac/filter.h
index bfd0c552a6..609ea12496 100644
--- a/apps/codecs/demac/libdemac/filter.h
+++ b/apps/codecs/demac/libdemac/filter.h
@@ -28,23 +28,23 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
28#include "demac_config.h" 28#include "demac_config.h"
29 29
30void init_filter_16_11(filter_int* buf); 30void init_filter_16_11(filter_int* buf);
31void apply_filter_16_11(int fileversion, int32_t* decoded0, 31void apply_filter_16_11(int fileversion, int channel,
32 int32_t* decoded1, int count); 32 int32_t* decoded, int count);
33 33
34void init_filter_64_11(filter_int* buf); 34void init_filter_64_11(filter_int* buf);
35void apply_filter_64_11(int fileversion, int32_t* decoded0, 35void apply_filter_64_11(int fileversion, int channel,
36 int32_t* decoded1, int count); 36 int32_t* decoded, int count);
37 37
38void init_filter_32_10(filter_int* buf); 38void init_filter_32_10(filter_int* buf);
39void apply_filter_32_10(int fileversion, int32_t* decoded0, 39void apply_filter_32_10(int fileversion, int channel,
40 int32_t* decoded1, int count); 40 int32_t* decoded, int count);
41 41
42void init_filter_256_13(filter_int* buf); 42void init_filter_256_13(filter_int* buf);
43void apply_filter_256_13(int fileversion, int32_t* decoded0, 43void apply_filter_256_13(int fileversion, int channel,
44 int32_t* decoded1, int count); 44 int32_t* decoded, int count);
45 45
46void init_filter_1280_15(filter_int* buf); 46void init_filter_1280_15(filter_int* buf);
47void apply_filter_1280_15(int fileversion, int32_t* decoded0, 47void apply_filter_1280_15(int fileversion, int channel,
48 int32_t* decoded1, int count); 48 int32_t* decoded, int count);
49 49
50#endif 50#endif