mirror of https://github.com/mstorsjo/fdk-aac.git
Apply sbrDecoder_Parse() function for all explict SBR elements
Test: atest DecoderTestXheAac ; atest DecoderTestAacDrc Change-Id: I97471c4db309307a21100f1d5d88d3c4e24d2670
This commit is contained in:
parent
0271d6a6f3
commit
0cebd077b6
|
@ -1111,12 +1111,13 @@ static AAC_DECODER_ERROR aacDecoder_ParseExplicitMpsAndSbr(
|
|||
/* get the remaining bits of this frame */
|
||||
bitCnt = transportDec_GetAuBitsRemaining(self->hInput, 0);
|
||||
|
||||
if ((bitCnt > 0) && (self->flags[0] & AC_SBR_PRESENT) &&
|
||||
if ((self->flags[0] & AC_SBR_PRESENT) &&
|
||||
(self->flags[0] & (AC_USAC | AC_RSVD50 | AC_ELD | AC_DRM))) {
|
||||
SBR_ERROR err = SBRDEC_OK;
|
||||
int chElIdx, numChElements = el_cnt[ID_SCE] + el_cnt[ID_CPE] +
|
||||
el_cnt[ID_LFE] + el_cnt[ID_USAC_SCE] +
|
||||
el_cnt[ID_USAC_CPE] + el_cnt[ID_USAC_LFE];
|
||||
INT bitCntTmp = bitCnt;
|
||||
|
||||
if (self->flags[0] & AC_USAC) {
|
||||
chElIdx = numChElements - 1;
|
||||
|
@ -1126,6 +1127,7 @@ static AAC_DECODER_ERROR aacDecoder_ParseExplicitMpsAndSbr(
|
|||
|
||||
for (; chElIdx < numChElements; chElIdx += 1) {
|
||||
MP4_ELEMENT_ID sbrType;
|
||||
SBR_ERROR errTmp;
|
||||
if (self->flags[0] & (AC_USAC)) {
|
||||
FDK_ASSERT((self->elements[element_index] == ID_USAC_SCE) ||
|
||||
(self->elements[element_index] == ID_USAC_CPE));
|
||||
|
@ -1135,19 +1137,21 @@ static AAC_DECODER_ERROR aacDecoder_ParseExplicitMpsAndSbr(
|
|||
: ID_SCE;
|
||||
} else
|
||||
sbrType = self->elements[chElIdx];
|
||||
err = sbrDecoder_Parse(self->hSbrDecoder, bs, self->pDrmBsBuffer,
|
||||
self->drmBsBufferSize, &bitCnt, -1,
|
||||
self->flags[0] & AC_SBRCRC, sbrType, chElIdx,
|
||||
self->flags[0], self->elFlags);
|
||||
if (err != SBRDEC_OK) {
|
||||
break;
|
||||
errTmp = sbrDecoder_Parse(self->hSbrDecoder, bs, self->pDrmBsBuffer,
|
||||
self->drmBsBufferSize, &bitCnt, -1,
|
||||
self->flags[0] & AC_SBRCRC, sbrType, chElIdx,
|
||||
self->flags[0], self->elFlags);
|
||||
if (errTmp != SBRDEC_OK) {
|
||||
err = errTmp;
|
||||
bitCntTmp = bitCnt;
|
||||
bitCnt = 0;
|
||||
}
|
||||
}
|
||||
switch (err) {
|
||||
case SBRDEC_PARSE_ERROR:
|
||||
/* Can not go on parsing because we do not
|
||||
know the length of the SBR extension data. */
|
||||
FDKpushFor(bs, bitCnt);
|
||||
FDKpushFor(bs, bitCntTmp);
|
||||
bitCnt = 0;
|
||||
break;
|
||||
case SBRDEC_OK:
|
||||
|
|
|
@ -1150,6 +1150,11 @@ SBR_ERROR sbrDecoder_Parse(HANDLE_SBRDECODER self, HANDLE_FDK_BITSTREAM hBs,
|
|||
|
||||
int lastSlot, lastHdrSlot = 0, thisHdrSlot = 0;
|
||||
|
||||
if (*count <= 0) {
|
||||
setFrameErrorFlag(self->pSbrElement[elementIndex], FRAME_ERROR);
|
||||
return SBRDEC_OK;
|
||||
}
|
||||
|
||||
/* SBR sanity checks */
|
||||
if (self == NULL) {
|
||||
errorStatus = SBRDEC_NOT_INITIALIZED;
|
||||
|
|
Loading…
Reference in New Issue