aboutsummaryrefslogtreecommitdiffstats
path: root/libSBRdec/src/sbrdecoder.cpp
diff options
context:
space:
mode:
authorJean-Michel Trivi <jmtrivi@google.com>2018-12-27 22:18:54 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2018-12-27 22:18:54 +0000
commitecc96969d7db139242dbba9930857ed5ce955b29 (patch)
treee78e88638c742d3dcd5f704d6ad50758d256a945 /libSBRdec/src/sbrdecoder.cpp
parentf828d3e16adfb4cb428b4f3a2c155f89853cebbe (diff)
parent0cebd077b61cc0946ea4062bf816defdffaef72b (diff)
downloadfdk-aac-ecc96969d7db139242dbba9930857ed5ce955b29.tar.gz
fdk-aac-ecc96969d7db139242dbba9930857ed5ce955b29.tar.bz2
fdk-aac-ecc96969d7db139242dbba9930857ed5ce955b29.zip
Merge changes I97471c4d,I8a8626a8,I1f176740,I10da23ee,I9f9064fb
* changes: Apply sbrDecoder_Parse() function for all explict SBR elements Call QMF transposer initialization only with successful SBR processing Add error path to generateFixFixOnly() Add missing break in order to avoid a fallthrough in setConcealMethod() Add FDK_FALLTHROUGH macro to prevent implicit-fallthrough compiler warnings
Diffstat (limited to 'libSBRdec/src/sbrdecoder.cpp')
-rw-r--r--libSBRdec/src/sbrdecoder.cpp12
1 files changed, 11 insertions, 1 deletions
diff --git a/libSBRdec/src/sbrdecoder.cpp b/libSBRdec/src/sbrdecoder.cpp
index e2455da..4bc6f69 100644
--- a/libSBRdec/src/sbrdecoder.cpp
+++ b/libSBRdec/src/sbrdecoder.cpp
@@ -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;
@@ -1677,6 +1682,9 @@ static SBR_ERROR sbrDecoder_DecodeElement(
/* reset */
if (hSbrHeader->status & SBRDEC_HDR_STAT_RESET) {
int ch;
+ int applySbrProc = (hSbrHeader->syncState == SBR_ACTIVE ||
+ (hSbrHeader->frameErrorFlag == 0 &&
+ hSbrHeader->syncState == SBR_HEADER));
for (ch = 0; ch < numElementChannels; ch++) {
SBR_ERROR errorStatusTmp = SBRDEC_OK;
@@ -1688,7 +1696,9 @@ static SBR_ERROR sbrDecoder_DecodeElement(
hSbrHeader->syncState = UPSAMPLING;
}
}
- hSbrHeader->status &= ~SBRDEC_HDR_STAT_RESET;
+ if (applySbrProc) {
+ hSbrHeader->status &= ~SBRDEC_HDR_STAT_RESET;
+ }
}
/* decoding */