Merge "Snap for 10214594 from aa9650bdc46f27b7dc86804b19e671822f34c6d4 to sdk-release" into sdk-release
diff --git a/libAACdec/src/aacdec_drc.cpp b/libAACdec/src/aacdec_drc.cpp
index 760a9ba..abb9af7 100644
--- a/libAACdec/src/aacdec_drc.cpp
+++ b/libAACdec/src/aacdec_drc.cpp
@@ -1,7 +1,7 @@
 /* -----------------------------------------------------------------------------
 Software License for The Fraunhofer FDK AAC Codec Library for Android
 
-© Copyright  1995 - 2020 Fraunhofer-Gesellschaft zur Förderung der angewandten
+© Copyright  1995 - 2023 Fraunhofer-Gesellschaft zur Förderung der angewandten
 Forschung e.V. All rights reserved.
 
  1.    INTRODUCTION
@@ -217,7 +217,6 @@
   self->progRefLevel = pParams->targetRefLevel;
   self->progRefLevelPresent = 0;
   self->presMode = -1;
-  self->uniDrcPrecedence = 0;
 
   aacDecoder_drcReset(self);
 }
@@ -353,12 +352,6 @@
       self->numOutChannels = (INT)value;
       self->update = 1;
       break;
-    case UNIDRC_PRECEDENCE:
-      if (self == NULL) {
-        return AAC_DEC_INVALID_HANDLE;
-      }
-      self->uniDrcPrecedence = (UCHAR)value;
-      break;
     default:
       return AAC_DEC_SET_PARAM_FAIL;
   } /* switch(param) */
@@ -1258,7 +1251,6 @@
   /* switch on/off processing */
   self->enable = ((p->boost > (FIXP_DBL)0) || (p->cut > (FIXP_DBL)0) ||
                   (p->applyHeavyCompression == ON) || (p->targetRefLevel >= 0));
-  self->enable = (self->enable && !self->uniDrcPrecedence);
 
   self->prevAacNumChannels = aacNumChannels;
   self->update = 0;
diff --git a/libAACdec/src/aacdec_drc.h b/libAACdec/src/aacdec_drc.h
index 2bb945d..f2c1390 100644
--- a/libAACdec/src/aacdec_drc.h
+++ b/libAACdec/src/aacdec_drc.h
@@ -1,7 +1,7 @@
 /* -----------------------------------------------------------------------------
 Software License for The Fraunhofer FDK AAC Codec Library for Android
 
-© Copyright  1995 - 2020 Fraunhofer-Gesellschaft zur Förderung der angewandten
+© Copyright  1995 - 2023 Fraunhofer-Gesellschaft zur Förderung der angewandten
 Forschung e.V. All rights reserved.
 
  1.    INTRODUCTION
@@ -133,8 +133,7 @@
   APPLY_HEAVY_COMPRESSION,
   DEFAULT_PRESENTATION_MODE,
   ENCODER_TARGET_LEVEL,
-  MAX_OUTPUT_CHANNELS,
-  UNIDRC_PRECEDENCE
+  MAX_OUTPUT_CHANNELS
 } AACDEC_DRC_PARAM;
 
 /**
diff --git a/libAACdec/src/aacdec_drc_types.h b/libAACdec/src/aacdec_drc_types.h
index d4393f7..c4c0794 100644
--- a/libAACdec/src/aacdec_drc_types.h
+++ b/libAACdec/src/aacdec_drc_types.h
@@ -1,7 +1,7 @@
 /* -----------------------------------------------------------------------------
 Software License for The Fraunhofer FDK AAC Codec Library for Android
 
-© Copyright  1995 - 2019 Fraunhofer-Gesellschaft zur Förderung der angewandten
+© Copyright  1995 - 2023 Fraunhofer-Gesellschaft zur Förderung der angewandten
 Forschung e.V. All rights reserved.
 
  1.    INTRODUCTION
@@ -207,11 +207,6 @@
                                 position in the bitstream (only one per frame) */
   UINT drcPayloadPosition[MAX_DRC_THREADS]; /* Used to store the DRC payload
                                                positions in the bitstream */
-
-  UCHAR
-  uniDrcPrecedence; /* Flag for signalling that uniDrc is active and takes
-                       precedence over legacy DRC */
-
   UCHAR applyExtGain; /* Flag is 1 if extGain has to be applied, otherwise 0. */
 
   FIXP_DBL additionalGainPrev; /* Gain of previous frame to be applied to the
diff --git a/libAACdec/src/aacdecoder.cpp b/libAACdec/src/aacdecoder.cpp
index d5f0cea..ad8ce0d 100644
--- a/libAACdec/src/aacdecoder.cpp
+++ b/libAACdec/src/aacdecoder.cpp
@@ -1,7 +1,7 @@
 /* -----------------------------------------------------------------------------
 Software License for The Fraunhofer FDK AAC Codec Library for Android
 
-© Copyright  1995 - 2021 Fraunhofer-Gesellschaft zur Förderung der angewandten
+© Copyright  1995 - 2023 Fraunhofer-Gesellschaft zur Förderung der angewandten
 Forschung e.V. All rights reserved.
 
  1.    INTRODUCTION
@@ -912,43 +912,6 @@
       }
       *count -= readBits;
     } break;
-    case EXT_UNI_DRC: {
-      DRC_DEC_ERROR drcErr = DRC_DEC_OK;
-      DRC_DEC_CODEC_MODE drcDecCodecMode = DRC_DEC_CODEC_MODE_UNDEFINED;
-      INT nBitsRemaining = FDKgetValidBits(hBs);
-      INT readBits;
-
-      switch (self->streamInfo.aot) {
-        case AOT_AAC_LC:
-        case AOT_SBR:
-        case AOT_PS:
-          drcDecCodecMode = DRC_DEC_MPEG_4_AAC;
-          break;
-        default:
-          error = AAC_DEC_PARSE_ERROR;
-          goto bail;
-      }
-
-      drcErr = FDK_drcDec_SetCodecMode(self->hUniDrcDecoder, drcDecCodecMode);
-      if (drcErr) {
-        error = AAC_DEC_PARSE_ERROR;
-        goto bail;
-      }
-
-      drcErr = FDK_drcDec_ReadUniDrc(self->hUniDrcDecoder, hBs);
-      if (drcErr) {
-        error = AAC_DEC_PARSE_ERROR;
-        goto bail;
-      }
-      readBits = (INT)nBitsRemaining - (INT)FDKgetValidBits(hBs);
-      if (readBits > *count) { /* Read too much. Something went wrong! */
-        error = AAC_DEC_PARSE_ERROR;
-      }
-      *count -= readBits;
-      /* Skip any trailing bits */
-      FDKpushFor(hBs, *count);
-      *count = 0;
-    } break;
     case EXT_LDSAC_DATA:
     case EXT_SAC_DATA:
       /* Read MPEG Surround Extension payload */
@@ -3310,12 +3273,6 @@
       FDKmemcpy(drcChMap, self->chMapping, (8) * sizeof(UCHAR));
     }
 
-    /* deactivate legacy DRC in case uniDrc is active, i.e. uniDrc payload is
-     * present and one of DRC or Loudness Normalization is switched on */
-    aacDecoder_drcSetParam(
-        self->hDrcInfo, UNIDRC_PRECEDENCE,
-        FDK_drcDec_GetParam(self->hUniDrcDecoder, DRC_DEC_IS_ACTIVE));
-
     /* Extract DRC control data and map it to channels (without bitstream delay)
      */
     mapped = aacDecoder_drcProlog(
diff --git a/libAACdec/src/aacdecoder_lib.cpp b/libAACdec/src/aacdecoder_lib.cpp
index 0c83191..ef0515c 100644
--- a/libAACdec/src/aacdecoder_lib.cpp
+++ b/libAACdec/src/aacdecoder_lib.cpp
@@ -1,7 +1,7 @@
 /* -----------------------------------------------------------------------------
 Software License for The Fraunhofer FDK AAC Codec Library for Android
 
-© Copyright  1995 - 2021 Fraunhofer-Gesellschaft zur Förderung der angewandten
+© Copyright  1995 - 2023 Fraunhofer-Gesellschaft zur Förderung der angewandten
 Forschung e.V. All rights reserved.
 
  1.    INTRODUCTION
@@ -1681,7 +1681,7 @@
 
       {
         if ((FDK_drcDec_GetParam(self->hUniDrcDecoder, DRC_DEC_IS_ACTIVE)) &&
-            !(self->flags[0] & AC_RSV603DA)) {
+            (self->flags[0] & AC_USAC)) {
           /* Apply DRC gains*/
           int ch, drcDelay = 0;
           int needsDeinterleaving = 0;
@@ -1689,8 +1689,6 @@
           FIXP_DBL channelGain[(8)];
           int reverseInChannelMap[(8)];
           int reverseOutChannelMap[(8)];
-          int numDrcOutChannels = FDK_drcDec_GetParam(
-              self->hUniDrcDecoder, DRC_DEC_TARGET_CHANNEL_COUNT_SELECTED);
           FDKmemclear(channelGain, sizeof(channelGain));
           for (ch = 0; ch < (8); ch++) {
             reverseInChannelMap[ch] = ch;
@@ -1713,17 +1711,6 @@
           drcDelay += CConcealment_GetDelay(&self->concealCommonData) *
                       self->streamInfo.frameSize;
 
-          for (ch = 0; ch < self->streamInfo.numChannels; ch++) {
-            UCHAR mapValue = FDK_chMapDescr_getMapValue(
-                &self->mapDescr, (UCHAR)ch, self->chMapIndex);
-            if (mapValue < (8)) reverseInChannelMap[mapValue] = ch;
-          }
-          for (ch = 0; ch < (int)numDrcOutChannels; ch++) {
-            UCHAR mapValue = FDK_chMapDescr_getMapValue(
-                &self->mapDescr, (UCHAR)ch, numDrcOutChannels);
-            if (mapValue < (8)) reverseOutChannelMap[mapValue] = ch;
-          }
-
           /* The output of SBR and MPS is interleaved. Deinterleaving may be
            * necessary for FDK_drcDec_ProcessTime, which accepts deinterleaved
            * audio only. */
@@ -1758,11 +1745,9 @@
           FDK_drcDec_Preprocess(self->hUniDrcDecoder);
 
           /* apply DRC1 gain sequence */
-          for (ch = 0; ch < self->streamInfo.numChannels; ch++) {
-            FDK_drcDec_ProcessTime(self->hUniDrcDecoder, drcDelay, DRC_DEC_DRC1,
-                                   ch, reverseInChannelMap[ch] - ch, 1,
-                                   drcWorkBuffer, self->streamInfo.frameSize);
-          }
+          FDK_drcDec_ProcessTime(self->hUniDrcDecoder, drcDelay, DRC_DEC_DRC1,
+                                 0, 0, self->streamInfo.numChannels,
+                                 drcWorkBuffer, self->streamInfo.frameSize);
           /* apply downmix */
           FDK_drcDec_ApplyDownmix(
               self->hUniDrcDecoder, reverseInChannelMap, reverseOutChannelMap,
@@ -1770,12 +1755,10 @@
               &self->streamInfo.numChannels); /* self->streamInfo.numChannels
                                                  may change here */
           /* apply DRC2/3 gain sequence */
-          for (ch = 0; ch < self->streamInfo.numChannels; ch++) {
-            FDK_drcDec_ProcessTime(self->hUniDrcDecoder, drcDelay,
-                                   DRC_DEC_DRC2_DRC3, ch,
-                                   reverseOutChannelMap[ch] - ch, 1,
-                                   drcWorkBuffer, self->streamInfo.frameSize);
-          }
+          FDK_drcDec_ProcessTime(self->hUniDrcDecoder, drcDelay,
+                                 DRC_DEC_DRC2_DRC3, 0, 0,
+                                 self->streamInfo.numChannels, drcWorkBuffer,
+                                 self->streamInfo.frameSize);
 
           if (needsDeinterleaving) {
             FDK_interleave(