{
uint32_t chanmask = format->channel_mask;
- if (format->channels_per_frame > 6)
+ if (format->channels_per_frame > 8)
return 0;
if (!chanmask) {
- static uint32_t defaults[] = { 0x4, 0x3, 0x7, 0, 0x37, 0x3f };
+ static uint32_t defaults[] = { 0x4, 0x3, 0x7, 0, 0x37, 0x3f, 0, 0x63f };
chanmask = defaults[format->channels_per_frame - 1];
}
switch (chanmask) {
case 0x107: return MODE_1_2_1;
case 0x607: return MODE_1_2_2;
case 0x60f: return MODE_1_2_2_1;
+#if AACENCODER_LIB_VL0 > 3 || (AACENCODER_LIB_VL0==3 && AACENCODER_LIB_VL1>=4)
+ case 0xff: return MODE_1_2_2_2_1;
+ case 0x63f: return MODE_7_1_REAR_SURROUND;
+#endif
}
return 0;
}
int aac_encode_frame(HANDLE_AACENCODER encoder,
const pcm_sample_description_t *format,
const int16_t *input, unsigned iframes,
- aacenc_result_t *output)
+ aacenc_frame_t *output)
{
uint32_t ilen = iframes * format->channels_per_frame;
AACENC_BufDesc ibdesc = { 0 }, obdesc = { 0 };
channel_mode = aacEncoder_GetParam(encoder, AACENC_CHANNELMODE);
obytes = 6144 / 8 * channel_mode;
- if (!output->data || output->size < obytes) {
+ if (!output->data || output->capacity < obytes) {
uint8_t *p = realloc(output->data, obytes);
if (!p) return -1;
- output->size = obytes;
+ output->capacity = obytes;
output->data = p;
}
obufs[0] = output->data;
fprintf(stderr, "ERROR: aacEncEncode() failed\n");
return -1;
}
- output->len = oargs.numOutBytes;
+ output->size = oargs.numOutBytes;
return oargs.numInSamples / format->channels_per_frame;
}