Snap for 10447354 from 00016a46eeda9398c074603ee4ae69dcda31572d to mainline-tethering-release

Change-Id: I9fe945691c43960379a079cf0accc0a3920e02f2
diff --git a/Android.bp b/Android.bp
index b5ebb72..6060256 100644
--- a/Android.bp
+++ b/Android.bp
@@ -94,7 +94,7 @@
 
     apex_available: [
         "//apex_available:platform",
-        "com.android.bluetooth",
+        "com.android.btservices",
         "com.android.media.swcodec",
     ],
     min_sdk_version: "29",
diff --git a/libAACdec/include/aacdecoder_lib.h b/libAACdec/include/aacdecoder_lib.h
index d7928c0..02596b2 100644
--- a/libAACdec/include/aacdecoder_lib.h
+++ b/libAACdec/include/aacdecoder_lib.h
@@ -431,6 +431,10 @@
 #include "machine_type.h"
 #include "FDK_audio.h"
 
+#define AACDECODER_LIB_VL0 3
+#define AACDECODER_LIB_VL1 2
+#define AACDECODER_LIB_VL2 0
+
 #include "genericStds.h"
 /**
  * \brief  AAC decoder error codes.
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(
diff --git a/libAACenc/include/aacenc_lib.h b/libAACenc/include/aacenc_lib.h
index f0f23b4..4f8f223 100644
--- a/libAACenc/include/aacenc_lib.h
+++ b/libAACenc/include/aacenc_lib.h
@@ -1005,6 +1005,10 @@
 #include "machine_type.h"
 #include "FDK_audio.h"
 
+#define AACENCODER_LIB_VL0 4
+#define AACENCODER_LIB_VL1 0
+#define AACENCODER_LIB_VL2 1
+
 /**
  *  AAC encoder error codes.
  */
@@ -1086,7 +1090,7 @@
                       write edit lists for gapless playback. The decoder may not
                       know how much delay is introdcued by SBR, since it may not
                       know if SBR is active at all (implicit signaling),
-                      therefore the deocder must take into account any delay
+                      therefore the decoder must take into account any delay
                       caused by the SBR module. */
 
   UCHAR confBuf[64]; /*!< Configuration buffer in binary format as an
diff --git a/libFDK/include/FDK_archdef.h b/libFDK/include/FDK_archdef.h
index 95601bb..3d0cddf 100644
--- a/libFDK/include/FDK_archdef.h
+++ b/libFDK/include/FDK_archdef.h
@@ -219,6 +219,13 @@
 #define POW2COEFF_16BIT
 #define LDCOEFF_16BIT
 
+#elif defined(__riscv)
+#define ARCH_PREFER_MULT_32x16
+#define SINETABLE_16BIT
+#define POW2COEFF_16BIT
+#define LDCOEFF_16BIT
+#define WINDOWTABLE_16BIT
+
 #else
 #warning >>>> Please set architecture characterization defines for your platform (FDK_HIGH_PERFORMANCE)! <<<<
 
diff --git a/libSBRdec/src/lpp_tran.h b/libSBRdec/src/lpp_tran.h
index 51b4395..21c4101 100644
--- a/libSBRdec/src/lpp_tran.h
+++ b/libSBRdec/src/lpp_tran.h
@@ -1,7 +1,7 @@
 /* -----------------------------------------------------------------------------
 Software License for The Fraunhofer FDK AAC Codec Library for Android
 
-© Copyright  1995 - 2018 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,7 +207,7 @@
                                             inverse filtering levels */
 
   PATCH_PARAM
-  patchParam[MAX_NUM_PATCHES]; /*!< new parameter set for patching */
+  patchParam[MAX_NUM_PATCHES + 1]; /*!< new parameter set for patching */
   WHITENING_FACTORS
   whFactors;     /*!< the pole moving factors for certain
                     whitening levels as indicated     in the bitstream