@ -51,6 +51,7 @@ typedef struct FDKAACDecContext {
int drc_level ;
int drc_boost ;
int drc_heavy ;
int drc_effect ;
int drc_cut ;
int level_limit ;
} FDKAACDecContext ;
@ -77,6 +78,10 @@ static const AVOption fdk_aac_dec_options[] = {
OFFSET ( drc_heavy ) , AV_OPT_TYPE_INT , { . i64 = - 1 } , - 1 , 1 , AD , NULL } ,
# if FDKDEC_VER_AT_LEAST(2, 5) // 2.5.10
{ " level_limit " , " Signal level limiting " , OFFSET ( level_limit ) , AV_OPT_TYPE_INT , { . i64 = 0 } , - 1 , 1 , AD } ,
# endif
# if FDKDEC_VER_AT_LEAST(3, 0) // 3.0.0
{ " drc_effect " , " Dynamic Range Control: effect type, where e.g. [0] is none and [6] is general " ,
OFFSET ( drc_effect ) , AV_OPT_TYPE_INT , { . i64 = - 1 } , - 1 , 8 , AD , NULL } ,
# endif
{ NULL }
} ;
@ -306,6 +311,15 @@ static av_cold int fdk_aac_decode_init(AVCodecContext *avctx)
}
# endif
# if FDKDEC_VER_AT_LEAST(3, 0) // 3.0.0
if ( s - > drc_effect ! = - 1 ) {
if ( aacDecoder_SetParam ( s - > handle , AAC_UNIDRC_SET_EFFECT , s - > drc_effect ) ! = AAC_DEC_OK ) {
av_log ( avctx , AV_LOG_ERROR , " Unable to set DRC effect type in the decoder \n " ) ;
return AVERROR_UNKNOWN ;
}
}
# endif
avctx - > sample_fmt = AV_SAMPLE_FMT_S16 ;
s - > decoder_buffer_size = DECODER_BUFFSIZE * DECODER_MAX_CHANNELS ;