@ -40,6 +40,7 @@
# define DRC_DEFAULT_MOBILE_DRC_BOOST 1.0 /* maximum compression of dynamic range for mobile conf */
# define DRC_DEFAULT_MOBILE_DRC_HEAVY C2Config::DRC_COMPRESSION_HEAVY /* switch for heavy compression for mobile conf */
# define DRC_DEFAULT_MOBILE_DRC_EFFECT 3 /* MPEG-D DRC effect type; 3 => Limited playback range */
# define DRC_DEFAULT_MOBILE_DRC_ALBUM 0 /* MPEG-D DRC album mode; 0 => album mode is disabled, 1 => album mode is enabled */
# define DRC_DEFAULT_MOBILE_OUTPUT_LOUDNESS (0.25) /* decoder output loudness; -1 => the value is unknown, otherwise dB step value (e.g. 64 for -16 dB) */
# define DRC_DEFAULT_MOBILE_ENC_LEVEL (0.25) /* encoder target level; -1 => the value is unknown, otherwise dB step value (e.g. 64 for -16 dB) */
# define MAX_CHANNEL_COUNT 8 /* maximum number of audio channels that can be decoded */
@ -192,6 +193,17 @@ public:
. withSetter ( Setter < decltype ( * mDrcEffectType ) > : : StrictValueWithNoDeps )
. build ( ) ) ;
addParameter (
DefineParam ( mDrcAlbumMode , C2_PARAMKEY_DRC_ALBUM_MODE )
. withDefault ( new C2StreamDrcAlbumModeTuning : : input ( 0u , C2Config : : DRC_ALBUM_MODE_OFF ) )
. withFields ( {
C2F ( mDrcAlbumMode , value ) . oneOf ( {
C2Config : : DRC_ALBUM_MODE_OFF ,
C2Config : : DRC_ALBUM_MODE_ON } )
} )
. withSetter ( Setter < decltype ( * mDrcAlbumMode ) > : : StrictValueWithNoDeps )
. build ( ) ) ;
addParameter (
DefineParam ( mDrcOutputLoudness , C2_PARAMKEY_DRC_OUTPUT_LOUDNESS )
. withDefault ( new C2StreamDrcOutputLoudnessTuning : : output ( 0u , DRC_DEFAULT_MOBILE_OUTPUT_LOUDNESS ) )
@ -212,6 +224,7 @@ public:
int32_t getDrcBoostFactor ( ) const { return mDrcBoostFactor - > value * 127. + 0.5 ; }
int32_t getDrcAttenuationFactor ( ) const { return mDrcAttenuationFactor - > value * 127. + 0.5 ; }
int32_t getDrcEffectType ( ) const { return mDrcEffectType - > value ; }
int32_t getDrcAlbumMode ( ) const { return mDrcAlbumMode - > value ; }
int32_t getDrcOutputLoudness ( ) const { return ( mDrcOutputLoudness - > value < = 0 ? - mDrcOutputLoudness - > value * 4. + 0.5 : - 1 ) ; }
private :
@ -227,6 +240,7 @@ private:
std : : shared_ptr < C2StreamDrcBoostFactorTuning : : input > mDrcBoostFactor ;
std : : shared_ptr < C2StreamDrcAttenuationFactorTuning : : input > mDrcAttenuationFactor ;
std : : shared_ptr < C2StreamDrcEffectTypeTuning : : input > mDrcEffectType ;
std : : shared_ptr < C2StreamDrcAlbumModeTuning : : input > mDrcAlbumMode ;
std : : shared_ptr < C2StreamDrcOutputLoudnessTuning : : output > mDrcOutputLoudness ;
// TODO Add : C2StreamAacSbrModeTuning
} ;
@ -347,6 +361,11 @@ status_t C2SoftAacDec::initDecoder() {
ALOGV ( " AAC decoder using MPEG-D DRC effect type %d " , effectType ) ;
aacDecoder_SetParam ( mAACDecoder , AAC_UNIDRC_SET_EFFECT , effectType ) ;
// AAC_UNIDRC_ALBUM_MODE
int32_t albumMode = mIntf - > getDrcAlbumMode ( ) ;
ALOGV ( " AAC decoder using MPEG-D DRC album mode %d " , albumMode ) ;
aacDecoder_SetParam ( mAACDecoder , AAC_UNIDRC_ALBUM_MODE , albumMode ) ;
// By default, the decoder creates a 5.1 channel downmix signal.
// For seven and eight channel input streams, enable 6.1 and 7.1 channel output
aacDecoder_SetParam ( mAACDecoder , AAC_PCM_MAX_OUTPUT_CHANNELS , - 1 ) ;
@ -683,6 +702,11 @@ void C2SoftAacDec::process(
ALOGV ( " AAC decoder using MPEG-D DRC effect type %d " , effectType ) ;
aacDecoder_SetParam ( mAACDecoder , AAC_UNIDRC_SET_EFFECT , effectType ) ;
// AAC_UNIDRC_ALBUM_MODE
int32_t albumMode = mIntf - > getDrcAlbumMode ( ) ;
ALOGV ( " AAC decoder using MPEG-D DRC album mode %d " , albumMode ) ;
aacDecoder_SetParam ( mAACDecoder , AAC_UNIDRC_ALBUM_MODE , albumMode ) ;
mDrcWrap . update ( ) ;
UINT inBufferUsedLength = inBufferLength [ 0 ] - bytesValid [ 0 ] ;