diff options
author | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2020-12-03 15:28:35 +0100 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2021-01-09 04:06:32 +0100 |
commit | 277281ac8eb7337a8d6dbddc9ffcfffabe44b40c (patch) | |
tree | 8e4a964eb424e8496988d19521c3193331d52648 | |
parent | 49a12ac4af32f82643b840c40d2af2f9e2623729 (diff) | |
download | ffmpeg-277281ac8eb7337a8d6dbddc9ffcfffabe44b40c.tar.gz |
avcodec/ac3enc: Factor common end of float/fixed encode_frame out
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
-rw-r--r-- | libavcodec/ac3enc.c | 42 | ||||
-rw-r--r-- | libavcodec/ac3enc.h | 14 | ||||
-rw-r--r-- | libavcodec/ac3enc_template.c | 24 |
3 files changed, 39 insertions, 41 deletions
diff --git a/libavcodec/ac3enc.c b/libavcodec/ac3enc.c index 7e9e0b16ff..b2e3b2bb4b 100644 --- a/libavcodec/ac3enc.c +++ b/libavcodec/ac3enc.c @@ -271,7 +271,7 @@ void ff_ac3_compute_coupling_strategy(AC3EncodeContext *s) * * @param s AC-3 encoder private context */ -void ff_ac3_apply_rematrixing(AC3EncodeContext *s) +static void ac3_apply_rematrixing(AC3EncodeContext *s) { int nb_coefs; int blk, bnd, i; @@ -575,7 +575,7 @@ static int count_exponent_bits(AC3EncodeContext *s) * * @param s AC-3 encoder private context */ -void ff_ac3_group_exponents(AC3EncodeContext *s) +static void ac3_group_exponents(AC3EncodeContext *s) { int blk, ch, i, cpl; int group_size, nb_groups; @@ -633,7 +633,7 @@ void ff_ac3_group_exponents(AC3EncodeContext *s) * * @param s AC-3 encoder private context */ -void ff_ac3_process_exponents(AC3EncodeContext *s) +static void ac3_process_exponents(AC3EncodeContext *s) { extract_exponents(s); @@ -1142,7 +1142,7 @@ static int cbr_bit_allocation(AC3EncodeContext *s) * frame size. Output is the SNR offset and a set of bit allocation pointers * used to quantize the mantissas. */ -int ff_ac3_compute_bit_allocation(AC3EncodeContext *s) +static int ac3_compute_bit_allocation(AC3EncodeContext *s) { count_frame_bits(s); @@ -1296,7 +1296,7 @@ static void quantize_mantissas_blk_ch(AC3Mant *s, int32_t *fixed_coef, * * @param s AC-3 encoder private context */ -void ff_ac3_quantize_mantissas(AC3EncodeContext *s) +static void ac3_quantize_mantissas(AC3EncodeContext *s) { int blk, ch, ch0=0, got_cpl; @@ -1657,7 +1657,7 @@ static void output_frame_end(AC3EncodeContext *s) * @param s AC-3 encoder private context * @param frame output data buffer */ -void ff_ac3_output_frame(AC3EncodeContext *s, unsigned char *frame) +static void ac3_output_frame(AC3EncodeContext *s, unsigned char *frame) { int blk; @@ -1671,6 +1671,36 @@ void ff_ac3_output_frame(AC3EncodeContext *s, unsigned char *frame) output_frame_end(s); } +int ff_ac3_encode_frame_common_end(AVCodecContext *avctx, AVPacket *avpkt, + const AVFrame *frame, int *got_packet_ptr) +{ + AC3EncodeContext *const s = avctx->priv_data; + int ret; + + ac3_apply_rematrixing(s); + + ac3_process_exponents(s); + + ret = ac3_compute_bit_allocation(s); + if (ret) { + av_log(avctx, AV_LOG_ERROR, "Bit allocation failed. Try increasing the bitrate.\n"); + return ret; + } + + ac3_group_exponents(s); + + ac3_quantize_mantissas(s); + + if ((ret = ff_alloc_packet2(avctx, avpkt, s->frame_size, 0)) < 0) + return ret; + ac3_output_frame(s, avpkt->data); + + if (frame->pts != AV_NOPTS_VALUE) + avpkt->pts = frame->pts - ff_samples_to_time_base(avctx, avctx->initial_padding); + + *got_packet_ptr = 1; + return 0; +} static void dprint_options(AC3EncodeContext *s) { diff --git a/libavcodec/ac3enc.h b/libavcodec/ac3enc.h index 6d8f186a1a..044564ecb4 100644 --- a/libavcodec/ac3enc.h +++ b/libavcodec/ac3enc.h @@ -282,18 +282,8 @@ void ff_ac3_adjust_frame_size(AC3EncodeContext *s); void ff_ac3_compute_coupling_strategy(AC3EncodeContext *s); -void ff_ac3_apply_rematrixing(AC3EncodeContext *s); - -void ff_ac3_process_exponents(AC3EncodeContext *s); - -int ff_ac3_compute_bit_allocation(AC3EncodeContext *s); - -void ff_ac3_group_exponents(AC3EncodeContext *s); - -void ff_ac3_quantize_mantissas(AC3EncodeContext *s); - -void ff_ac3_output_frame(AC3EncodeContext *s, unsigned char *frame); - +int ff_ac3_encode_frame_common_end(AVCodecContext *avctx, AVPacket *avpkt, + const AVFrame *frame, int *got_packet_ptr); /* prototypes for functions in ac3enc_template.c */ diff --git a/libavcodec/ac3enc_template.c b/libavcodec/ac3enc_template.c index a486c95c8e..0fdc95b968 100644 --- a/libavcodec/ac3enc_template.c +++ b/libavcodec/ac3enc_template.c @@ -407,27 +407,5 @@ int AC3_NAME(encode_frame)(AVCodecContext *avctx, AVPacket *avpkt, if (AC3ENC_FLOAT) scale_coefficients(s); - ff_ac3_apply_rematrixing(s); - - ff_ac3_process_exponents(s); - - ret = ff_ac3_compute_bit_allocation(s); - if (ret) { - av_log(avctx, AV_LOG_ERROR, "Bit allocation failed. Try increasing the bitrate.\n"); - return ret; - } - - ff_ac3_group_exponents(s); - - ff_ac3_quantize_mantissas(s); - - if ((ret = ff_alloc_packet2(avctx, avpkt, s->frame_size, 0)) < 0) - return ret; - ff_ac3_output_frame(s, avpkt->data); - - if (frame->pts != AV_NOPTS_VALUE) - avpkt->pts = frame->pts - ff_samples_to_time_base(avctx, avctx->initial_padding); - - *got_packet_ptr = 1; - return 0; + return ff_ac3_encode_frame_common_end(avctx, avpkt, frame, got_packet_ptr); } |