[FFmpeg-devel] [PATCH 5/7] avcodec/ac3enc: Factor common end of float/fixed encode_frame out
Andreas Rheinhardt
andreas.rheinhardt at gmail.com
Sat Dec 5 22:33:37 EET 2020
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>
---
libavcodec/ac3enc.c | 42 ++++++++++++++++++++++++++++++------
libavcodec/ac3enc.h | 14 ++----------
libavcodec/ac3enc_template.c | 24 +--------------------
3 files changed, 39 insertions(+), 41 deletions(-)
diff --git a/libavcodec/ac3enc.c b/libavcodec/ac3enc.c
index 30f6ca9dce..8079b98b68 100644
--- a/libavcodec/ac3enc.c
+++ b/libavcodec/ac3enc.c
@@ -270,7 +270,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;
@@ -574,7 +574,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;
@@ -632,7 +632,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);
@@ -1141,7 +1141,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);
@@ -1295,7 +1295,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;
@@ -1656,7 +1656,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;
@@ -1670,6 +1670,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 974a3f9f74..f3274cf9eb 100644
--- a/libavcodec/ac3enc_template.c
+++ b/libavcodec/ac3enc_template.c
@@ -406,27 +406,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);
}
--
2.25.1
More information about the ffmpeg-devel
mailing list