@ -176,6 +176,8 @@ static const int8_t ac3_coupling_start_tab[6][3][19] = {
/**
* Adjust the frame size to make the average bit rate match the target bit rate .
* This is only needed for 11025 , 22050 , and 44100 sample rates or any E - AC - 3.
*
* @ param s AC - 3 encoder private context
*/
void ff_ac3_adjust_frame_size ( AC3EncodeContext * s )
{
@ -190,6 +192,11 @@ void ff_ac3_adjust_frame_size(AC3EncodeContext *s)
}
/**
* Set the initial coupling strategy parameters prior to coupling analysis .
*
* @ param s AC - 3 encoder private context
*/
void ff_ac3_compute_coupling_strategy ( AC3EncodeContext * s )
{
int blk , ch ;
@ -258,6 +265,8 @@ void ff_ac3_compute_coupling_strategy(AC3EncodeContext *s)
/**
* Apply stereo rematrixing to coefficients based on rematrixing flags .
*
* @ param s AC - 3 encoder private context
*/
void ff_ac3_apply_rematrixing ( AC3EncodeContext * s )
{
@ -290,7 +299,7 @@ void ff_ac3_apply_rematrixing(AC3EncodeContext *s)
}
/**
/*
* Initialize exponent tables .
*/
static av_cold void exponent_init ( AC3EncodeContext * s )
@ -312,7 +321,7 @@ static av_cold void exponent_init(AC3EncodeContext *s)
}
/**
/*
* Extract exponents from the MDCT coefficients .
*/
static void extract_exponents ( AC3EncodeContext * s )
@ -341,7 +350,7 @@ static const uint8_t exp_strategy_reuse_tab[4][6] = {
{ EXP_D45 , EXP_D25 , EXP_D25 , EXP_D15 , EXP_D15 , EXP_D15 }
} ;
/**
/*
* Calculate exponent strategies for all channels .
* Array arrangement is reversed to simplify the per - channel calculation .
*/
@ -405,6 +414,11 @@ static void compute_exp_strategy(AC3EncodeContext *s)
/**
* Update the exponents so that they are the ones the decoder will decode .
*
* @ param [ in , out ] exp array of exponents for 1 block in 1 channel
* @ param nb_exps number of exponents in active bandwidth
* @ param exp_strategy exponent strategy for the block
* @ param cpl indicates if the block is in the coupling channel
*/
static void encode_exponents_blk_ch ( uint8_t * exp , int nb_exps , int exp_strategy ,
int cpl )
@ -473,7 +487,7 @@ static void encode_exponents_blk_ch(uint8_t *exp, int nb_exps, int exp_strategy,
}
/**
/*
* Encode exponents from original extracted form to what the decoder will see .
* This copies and groups exponents based on exponent strategy and reduces
* deltas between adjacent exponent groups so that they can be differentially
@ -526,7 +540,7 @@ static void encode_exponents(AC3EncodeContext *s)
}
/**
/*
* Count exponent bits based on bandwidth , coupling , and exponent strategies .
*/
static int count_exponent_bits ( AC3EncodeContext * s )
@ -558,6 +572,8 @@ static int count_exponent_bits(AC3EncodeContext *s)
* Group exponents .
* 3 delta - encoded exponents are in each 7 - bit group . The number of groups
* varies depending on exponent strategy and bandwidth .
*
* @ param s AC - 3 encoder private context
*/
void ff_ac3_group_exponents ( AC3EncodeContext * s )
{
@ -614,6 +630,8 @@ void ff_ac3_group_exponents(AC3EncodeContext *s)
* Calculate final exponents from the supplied MDCT coefficients and exponent shift .
* Extract exponents from MDCT coefficients , calculate exponent strategies ,
* and encode final exponents .
*
* @ param s AC - 3 encoder private context
*/
void ff_ac3_process_exponents ( AC3EncodeContext * s )
{
@ -627,7 +645,7 @@ void ff_ac3_process_exponents(AC3EncodeContext *s)
}
/**
/*
* Count frame bits that are based solely on fixed parameters .
* This only has to be run once when the encoder is initialized .
*/
@ -733,7 +751,7 @@ static void count_frame_bits_fixed(AC3EncodeContext *s)
}
/**
/*
* Initialize bit allocation .
* Set default parameter codes and calculate parameter values .
*/
@ -768,7 +786,7 @@ static void bit_alloc_init(AC3EncodeContext *s)
}
/**
/*
* Count the bits used to encode the frame , minus exponents and mantissas .
* Bits based on fixed parameters have already been counted , so now we just
* have to add the bits based on parameters that change during encoding .
@ -915,7 +933,7 @@ static void count_frame_bits(AC3EncodeContext *s)
}
/**
/*
* Calculate masking curve based on the final exponents .
* Also calculate the power spectral densities to use in future calculations .
*/
@ -945,7 +963,7 @@ static void bit_alloc_masking(AC3EncodeContext *s)
}
/**
/*
* Ensure that bap for each block and channel point to the current bap_buffer .
* They may have been switched during the bit allocation search .
*/
@ -971,6 +989,8 @@ static void reset_block_bap(AC3EncodeContext *s)
* Initialize mantissa counts .
* These are set so that they are padded to the next whole group size when bits
* are counted in compute_mantissa_size .
*
* @ param [ in , out ] mant_cnt running counts for each bap value for each block
*/
static void count_mantissa_bits_init ( uint16_t mant_cnt [ AC3_MAX_BLOCKS ] [ 16 ] )
{
@ -987,6 +1007,12 @@ static void count_mantissa_bits_init(uint16_t mant_cnt[AC3_MAX_BLOCKS][16])
/**
* Update mantissa bit counts for all blocks in 1 channel in a given bandwidth
* range .
*
* @ param s AC - 3 encoder private context
* @ param ch channel index
* @ param [ in , out ] mant_cnt running counts for each bap value for each block
* @ param start starting coefficient bin
* @ param end ending coefficient bin
*/
static void count_mantissa_bits_update_ch ( AC3EncodeContext * s , int ch ,
uint16_t mant_cnt [ AC3_MAX_BLOCKS ] [ 16 ] ,
@ -1005,7 +1031,7 @@ static void count_mantissa_bits_update_ch(AC3EncodeContext *s, int ch,
}
/**
/*
* Count the number of mantissa bits in the frame based on the bap values .
*/
static int count_mantissa_bits ( AC3EncodeContext * s )
@ -1028,6 +1054,9 @@ static int count_mantissa_bits(AC3EncodeContext *s)
* Run the bit allocation with a given SNR offset .
* This calculates the bit allocation pointers that will be used to determine
* the quantization of each mantissa .
*
* @ param s AC - 3 encoder private context
* @ param snr_offset SNR offset , 0 to 1023
* @ return the number of bits needed for mantissas if the given SNR offset is
* is used .
*/
@ -1058,7 +1087,7 @@ static int bit_alloc(AC3EncodeContext *s, int snr_offset)
}
/**
/*
* Constant bitrate bit allocation search .
* Find the largest SNR offset that will allow data to fit in the frame .
*/
@ -1107,7 +1136,7 @@ static int cbr_bit_allocation(AC3EncodeContext *s)
}
/**
/*
* Perform bit allocation search .
* Finds the SNR offset value that maximizes quality and fits in the specified
* frame size . Output is the SNR offset and a set of bit allocation pointers
@ -1127,6 +1156,11 @@ int ff_ac3_compute_bit_allocation(AC3EncodeContext *s)
/**
* Symmetric quantization on ' levels ' levels .
*
* @ param c unquantized coefficient
* @ param e exponent
* @ param levels number of quantization levels
* @ return quantized coefficient
*/
static inline int sym_quant ( int c , int e , int levels )
{
@ -1138,6 +1172,11 @@ static inline int sym_quant(int c, int e, int levels)
/**
* Asymmetric quantization on 2 ^ qbits levels .
*
* @ param c unquantized coefficient
* @ param e exponent
* @ param qbits number of quantization bits
* @ return quantized coefficient
*/
static inline int asym_quant ( int c , int e , int qbits )
{
@ -1154,6 +1193,14 @@ static inline int asym_quant(int c, int e, int qbits)
/**
* Quantize a set of mantissas for a single channel in a single block .
*
* @ param s Mantissa count context
* @ param fixed_coef unquantized fixed - point coefficients
* @ param exp exponents
* @ param bap bit allocation pointer indices
* @ param [ out ] qmant quantized coefficients
* @ param start_freq starting coefficient bin
* @ param end_freq ending coefficient bin
*/
static void quantize_mantissas_blk_ch ( AC3Mant * s , int32_t * fixed_coef ,
uint8_t * exp , uint8_t * bap ,
@ -1249,6 +1296,8 @@ static void quantize_mantissas_blk_ch(AC3Mant *s, int32_t *fixed_coef,
/**
* Quantize mantissas using coefficients , exponents , and bit allocation pointers .
*
* @ param s AC - 3 encoder private context
*/
void ff_ac3_quantize_mantissas ( AC3EncodeContext * s )
{
@ -1276,7 +1325,7 @@ void ff_ac3_quantize_mantissas(AC3EncodeContext *s)
}
/**
/*
* Write the AC - 3 frame header to the output bitstream .
*/
static void ac3_output_frame_header ( AC3EncodeContext * s )
@ -1332,7 +1381,7 @@ static void ac3_output_frame_header(AC3EncodeContext *s)
}
/**
/*
* Write one audio block to the output bitstream .
*/
static void output_audio_block ( AC3EncodeContext * s , int blk )
@ -1560,7 +1609,7 @@ static unsigned int pow_poly(unsigned int a, unsigned int n, unsigned int poly)
}
/**
/*
* Fill the end of the frame with 0 ' s and compute the two CRCs .
*/
static void output_frame_end ( AC3EncodeContext * s )
@ -1608,6 +1657,9 @@ static void output_frame_end(AC3EncodeContext *s)
/**
* Write the frame to the output bitstream .
*
* @ param s AC - 3 encoder private context
* @ param frame output data buffer
*/
void ff_ac3_output_frame ( AC3EncodeContext * s , unsigned char * frame )
{
@ -1778,6 +1830,8 @@ static void validate_mix_level(void *log_ctx, const char *opt_name,
/**
* Validate metadata options as set by AVOption system .
* These values can optionally be changed per - frame .
*
* @ param s AC - 3 encoder private context
*/
int ff_ac3_validate_metadata ( AC3EncodeContext * s )
{
@ -1960,6 +2014,8 @@ int ff_ac3_validate_metadata(AC3EncodeContext *s)
/**
* Finalize encoding and free any memory allocated by the encoder .
*
* @ param avctx Codec context
*/
av_cold int ff_ac3_encode_close ( AVCodecContext * avctx )
{
@ -2003,7 +2059,7 @@ av_cold int ff_ac3_encode_close(AVCodecContext *avctx)
}
/**
/*
* Set channel information during initialization .
*/
static av_cold int set_channel_info ( AC3EncodeContext * s , int channels ,
@ -2173,7 +2229,7 @@ static av_cold int validate_options(AC3EncodeContext *s)
}
/**
/*
* Set bandwidth for all channels .
* The user can optionally supply a cutoff frequency . Otherwise an appropriate
* default value will be used .
@ -2351,9 +2407,6 @@ alloc_fail:
}
/**
* Initialize the encoder .
*/
av_cold int ff_ac3_encode_init ( AVCodecContext * avctx )
{
AC3EncodeContext * s = avctx - > priv_data ;