Fix aacDecoder_drcExtractAndMap()
Parse DVB DRC data only when numThreads is below
MAX_DRC_THREADS. The post-increment is necessary as
it is used in fill element DRC data section.
This solution parses as many DRC payloads as allowed by
MAX_DRC_THREADS and skips all remaining DRC elements in the stream.
Bug 27792766
Bug 26751339
Change-Id: Ie1641888bac1757c4d1491119f977fc5d436eaea
diff --git a/libAACdec/src/aacdec_drc.cpp b/libAACdec/src/aacdec_drc.cpp
index 9cfc5d5..eb8e410 100644
--- a/libAACdec/src/aacdec_drc.cpp
+++ b/libAACdec/src/aacdec_drc.cpp
@@ -705,11 +705,7 @@
}
self->numPayloads = 0;
- if (self->numThreads >= MAX_DRC_THREADS) {
- self->numThreads = MAX_DRC_THREADS - 1;
- }
-
- if (self->dvbAncDataAvailable)
+ if (self->dvbAncDataAvailable && self->numThreads < MAX_DRC_THREADS)
{ /* Append a DVB heavy compression payload thread if available. */
int bitsParsed;
@@ -735,10 +731,6 @@
/* coupling channels not supported */
- if (self->numThreads >= MAX_DRC_THREADS) {
- self->numThreads = MAX_DRC_THREADS - 1;
- }
-
/* check for valid threads */
for (thread = 0; thread < self->numThreads; thread++) {
CDrcPayload *pThreadBs = &threadBs[thread];