1
0
mirror of https://github.com/mstorsjo/fdk-aac.git synced 2025-02-28 00:17:38 +01:00

Fix SBR encoder element mapping for channel configurations with more than one layer

Bug: 149489652
Test: atest android.media.cts.EncoderTest#testAACEncoders
Change-Id: I8cd9e7f9aaeb62629f916f8d0dba7422d9a5e878
This commit is contained in:
Fraunhofer IIS FDK 2019-12-19 17:23:56 +01:00 committed by Jean-Michel Trivi
parent 7b5389e63f
commit 6b0aab087d

View File

@ -446,6 +446,24 @@ static SBR_PS_SIGNALING getSbrSignalingMode(
return sbrSignaling;
}
static inline INT getAssociatedChElement(SBR_ELEMENT_INFO *elInfoSbr,
CHANNEL_MAPPING *channelMapping) {
ELEMENT_INFO *elInfo = channelMapping->elInfo;
INT nElements = channelMapping->nElements;
INT associatedChElement = -1;
int i;
for (i = 0; i < nElements; i++) {
if (elInfoSbr->elType == elInfo[i].elType &&
elInfoSbr->instanceTag == elInfo[i].instanceTag) {
associatedChElement = i;
break;
}
}
return associatedChElement;
}
/****************************************************************************
Allocate Encoder
****************************************************************************/
@ -1921,7 +1939,15 @@ AACENC_ERROR aacEncEncode(const HANDLE_AACENCODER hAacEncoder,
{
hAacEncoder->extPayload[nExtensions].dataSize =
hAacEncoder->pSbrPayload->dataSize[nPayload][i];
hAacEncoder->extPayload[nExtensions].associatedChElement = i;
hAacEncoder->extPayload[nExtensions].associatedChElement =
getAssociatedChElement(
&hAacEncoder->hEnvEnc->sbrElement[i]->elInfo,
&hAacEncoder->hAacEnc->channelMapping);
if (hAacEncoder->extPayload[nExtensions].associatedChElement ==
-1) {
err = AACENC_ENCODE_ERROR;
goto bail;
}
}
hAacEncoder->extPayload[nExtensions].dataType =
EXT_SBR_DATA; /* Once SBR Encoder supports SBR CRC set