Apply sbrDecoder_Parse() function for all explict SBR elements

Test: atest DecoderTestXheAac ; atest DecoderTestAacDrc

Change-Id: I97471c4db309307a21100f1d5d88d3c4e24d2670
diff --git a/libAACdec/src/aacdecoder.cpp b/libAACdec/src/aacdecoder.cpp
index c2ddc48..a529389 100644
--- a/libAACdec/src/aacdecoder.cpp
+++ b/libAACdec/src/aacdecoder.cpp
@@ -1111,12 +1111,13 @@
   /* 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 @@
 
     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 @@
                       : 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:
diff --git a/libSBRdec/src/sbrdecoder.cpp b/libSBRdec/src/sbrdecoder.cpp
index f40639b..4bc6f69 100644
--- a/libSBRdec/src/sbrdecoder.cpp
+++ b/libSBRdec/src/sbrdecoder.cpp
@@ -1150,6 +1150,11 @@
 
   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;