diff --git a/components/squeezelite/helix-aac.c b/components/squeezelite/helix-aac.c index 81f5216d..2c9957c8 100644 --- a/components/squeezelite/helix-aac.c +++ b/components/squeezelite/helix-aac.c @@ -30,7 +30,7 @@ #if BYTES_PER_FRAME == 4 #define ALIGN(n) (n) #else -#define ALIGN(n) (n << 8) +#define ALIGN(n) (n << 16) #endif #define WRAPBUF_LEN 2048 @@ -332,7 +332,7 @@ static decode_state helixaac_decode(void) { size_t bytes_total, bytes_wrap; int res, bytes; static AACFrameInfo info; - ISAMPLE_T *iptr; + s16_t *iptr; u8_t *sptr; bool endstream; frames_t frames; @@ -372,7 +372,7 @@ static decode_state helixaac_decode(void) { u8_t *p = streambuf->readp + n; int bytes = bytes_wrap - n; - if (!HAAC(a, Decode, a->hAac, &p, &bytes, (short*) a->write_buf)) { + if (!HAAC(a, Decode, a->hAac, &p, &bytes, (s16_t*) a->write_buf)) { HAAC(a, GetLastFrameInfo, a->hAac, &info); channels = info.nChans; samplerate = info.sampRateOut; @@ -443,13 +443,13 @@ static decode_state helixaac_decode(void) { } // decode function changes iptr, so can't use streambuf->readp (same for bytes) - res = HAAC(a, Decode, a->hAac, &sptr, &bytes, (short*) a->write_buf); + res = HAAC(a, Decode, a->hAac, &sptr, &bytes, (s16_t*) a->write_buf); if (res < 0) { LOG_WARN("AAC decode error %d", res); } HAAC(a, GetLastFrameInfo, a->hAac, &info); - iptr = (ISAMPLE_T *) a->write_buf; + iptr = (s16_t*) a->write_buf; bytes = bytes_wrap - bytes; endstream = false; @@ -543,8 +543,8 @@ static decode_state helixaac_decode(void) { iptr += count * 2; #else while (count--) { - *optr++ = *iptr++ << 8; - *optr++ = *iptr++ << 8; + *optr++ = ALIGN(*iptr++); + *optr++ = ALIGN(*iptr++); } #endif } else if (info.nChans == 1) { @@ -597,7 +597,7 @@ static void helixaac_open(u8_t size, u8_t rate, u8_t chan, u8_t endianness) { // always free decoder as flush only works when no parameter has changed HAAC(a, FreeDecoder, a->hAac); } else { - a->write_buf = malloc(FRAME_BUF * BYTES_PER_FRAME); + a->write_buf = malloc(FRAME_BUF * 4); a->wrap_buf = malloc(WRAPBUF_LEN); }