diff options
Diffstat (limited to 'apps/codecs/demac/libdemac')
-rw-r--r-- | apps/codecs/demac/libdemac/decoder.c | 21 | ||||
-rw-r--r-- | apps/codecs/demac/libdemac/entropy.c | 7 | ||||
-rw-r--r-- | apps/codecs/demac/libdemac/parser.h | 4 |
3 files changed, 21 insertions, 11 deletions
diff --git a/apps/codecs/demac/libdemac/decoder.c b/apps/codecs/demac/libdemac/decoder.c index 2200faf187..0763c11037 100644 --- a/apps/codecs/demac/libdemac/decoder.c +++ b/apps/codecs/demac/libdemac/decoder.c | |||
@@ -89,14 +89,17 @@ int ICODE_ATTR_DEMAC decode_chunk(struct ape_ctx_t* ape_ctx, | |||
89 | #else | 89 | #else |
90 | #define SCALE(x) (x) | 90 | #define SCALE(x) (x) |
91 | #endif | 91 | #endif |
92 | |||
93 | if ((ape_ctx->channels==1) || ((ape_ctx->frameflags | ||
94 | & (APE_FRAMECODE_PSEUDO_STEREO|APE_FRAMECODE_STEREO_SILENCE)) | ||
95 | == APE_FRAMECODE_PSEUDO_STEREO)) { | ||
92 | 96 | ||
93 | if ((ape_ctx->channels==1) || (ape_ctx->frameflags & APE_FRAMECODE_PSEUDO_STEREO)) { | 97 | entropy_decode(ape_ctx, inbuffer, firstbyte, bytesconsumed, |
94 | if (ape_ctx->frameflags & APE_FRAMECODE_STEREO_SILENCE) { | 98 | decoded0, NULL, count); |
95 | entropy_decode(ape_ctx, inbuffer, firstbyte, bytesconsumed, decoded0, decoded1, count); | 99 | |
100 | if (ape_ctx->frameflags & APE_FRAMECODE_MONO_SILENCE) { | ||
96 | /* We are pure silence, so we're done. */ | 101 | /* We are pure silence, so we're done. */ |
97 | return 0; | 102 | return 0; |
98 | } else { | ||
99 | entropy_decode(ape_ctx, inbuffer, firstbyte, bytesconsumed, decoded0, NULL, count); | ||
100 | } | 103 | } |
101 | 104 | ||
102 | switch (ape_ctx->compressiontype) | 105 | switch (ape_ctx->compressiontype) |
@@ -142,12 +145,14 @@ int ICODE_ATTR_DEMAC decode_chunk(struct ape_ctx_t* ape_ctx, | |||
142 | } | 145 | } |
143 | #endif | 146 | #endif |
144 | } else { /* Stereo */ | 147 | } else { /* Stereo */ |
145 | if (ape_ctx->frameflags & APE_FRAMECODE_STEREO_SILENCE) { | 148 | entropy_decode(ape_ctx, inbuffer, firstbyte, bytesconsumed, |
149 | decoded0, decoded1, count); | ||
150 | |||
151 | if ((ape_ctx->frameflags & APE_FRAMECODE_STEREO_SILENCE) | ||
152 | == APE_FRAMECODE_STEREO_SILENCE) { | ||
146 | /* We are pure silence, so we're done. */ | 153 | /* We are pure silence, so we're done. */ |
147 | return 0; | 154 | return 0; |
148 | } | 155 | } |
149 | |||
150 | entropy_decode(ape_ctx, inbuffer, firstbyte, bytesconsumed, decoded0, decoded1, count); | ||
151 | 156 | ||
152 | /* Apply filters - compression type 1000 doesn't have any */ | 157 | /* Apply filters - compression type 1000 doesn't have any */ |
153 | switch (ape_ctx->compressiontype) | 158 | switch (ape_ctx->compressiontype) |
diff --git a/apps/codecs/demac/libdemac/entropy.c b/apps/codecs/demac/libdemac/entropy.c index 54b5cc57b6..24f5932de6 100644 --- a/apps/codecs/demac/libdemac/entropy.c +++ b/apps/codecs/demac/libdemac/entropy.c | |||
@@ -430,10 +430,13 @@ void ICODE_ATTR_DEMAC entropy_decode(struct ape_ctx_t* ape_ctx, | |||
430 | 430 | ||
431 | ape_ctx->blocksdecoded += blockstodecode; | 431 | ape_ctx->blocksdecoded += blockstodecode; |
432 | 432 | ||
433 | if (ape_ctx->frameflags & APE_FRAMECODE_STEREO_SILENCE) { | 433 | if ((ape_ctx->frameflags & APE_FRAMECODE_LEFT_SILENCE) |
434 | && ((ape_ctx->frameflags & APE_FRAMECODE_RIGHT_SILENCE) | ||
435 | || (decoded1 == NULL))) { | ||
434 | /* We are pure silence, just memset the output buffer. */ | 436 | /* We are pure silence, just memset the output buffer. */ |
435 | memset(decoded0, 0, blockstodecode * sizeof(int32_t)); | 437 | memset(decoded0, 0, blockstodecode * sizeof(int32_t)); |
436 | memset(decoded1, 0, blockstodecode * sizeof(int32_t)); | 438 | if (decoded1 != NULL) |
439 | memset(decoded1, 0, blockstodecode * sizeof(int32_t)); | ||
437 | } else { | 440 | } else { |
438 | if (ape_ctx->fileversion > 3970) { | 441 | if (ape_ctx->fileversion > 3970) { |
439 | while (LIKELY(blockstodecode--)) { | 442 | while (LIKELY(blockstodecode--)) { |
diff --git a/apps/codecs/demac/libdemac/parser.h b/apps/codecs/demac/libdemac/parser.h index 53157f7681..6f07deac12 100644 --- a/apps/codecs/demac/libdemac/parser.h +++ b/apps/codecs/demac/libdemac/parser.h | |||
@@ -50,7 +50,9 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA | |||
50 | */ | 50 | */ |
51 | 51 | ||
52 | #define APE_FRAMECODE_MONO_SILENCE 1 | 52 | #define APE_FRAMECODE_MONO_SILENCE 1 |
53 | #define APE_FRAMECODE_STEREO_SILENCE 3 | 53 | #define APE_FRAMECODE_LEFT_SILENCE 1 /* same as mono */ |
54 | #define APE_FRAMECODE_RIGHT_SILENCE 2 | ||
55 | #define APE_FRAMECODE_STEREO_SILENCE 3 /* combined */ | ||
54 | #define APE_FRAMECODE_PSEUDO_STEREO 4 | 56 | #define APE_FRAMECODE_PSEUDO_STEREO 4 |
55 | 57 | ||
56 | #define PREDICTOR_ORDER 8 | 58 | #define PREDICTOR_ORDER 8 |