X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fac3enc.c;h=3657ece1e04083117f36fc258990f6f296db571e;hb=988f585fcb1cfb40fe4b706c32b31594b536bba0;hp=44c16073a20f8ef9e69dcc83dc29dbd4b2aaf4d7;hpb=7cb5def1f38d2d1d801c5425a6c79be425e40196;p=ffmpeg diff --git a/libavcodec/ac3enc.c b/libavcodec/ac3enc.c index 44c16073a20..3657ece1e04 100644 --- a/libavcodec/ac3enc.c +++ b/libavcodec/ac3enc.c @@ -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, @@ -1163,14 +1210,11 @@ static void quantize_mantissas_blk_ch(AC3Mant *s, int32_t *fixed_coef, int i; for (i = start_freq; i < end_freq; i++) { - int v; int c = fixed_coef[i]; int e = exp[i]; - int b = bap[i]; - switch (b) { - case 0: - v = 0; - break; + int v = bap[i]; + if (v) + switch (v) { case 1: v = sym_quant(c, e, 3); switch (s->mant1_cnt) { @@ -1239,7 +1283,7 @@ static void quantize_mantissas_blk_ch(AC3Mant *s, int32_t *fixed_coef, v = asym_quant(c, e, 16); break; default: - v = asym_quant(c, e, b - 1); + v = asym_quant(c, e, v - 1); break; } qmant[i] = v; @@ -1249,6 +1293,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 +1322,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 +1378,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 +1606,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 +1654,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 +1827,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 +2011,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 +2056,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 +2226,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 +2404,6 @@ alloc_fail: } -/** - * Initialize the encoder. - */ av_cold int ff_ac3_encode_init(AVCodecContext *avctx) { AC3EncodeContext *s = avctx->priv_data;