aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/eac3enc.c
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2024-05-17 19:21:34 +0200
committerAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2024-05-20 14:11:25 +0200
commit59b1838e0955bb092ebc9d6e9f8aa7d8753d4d33 (patch)
tree1f59f74e09ae436ff40a8f9dbe2168aab7ed3987 /libavcodec/eac3enc.c
parente863cbceaeb88082e716dd3b770ed9dfc35ad9e3 (diff)
downloadffmpeg-59b1838e0955bb092ebc9d6e9f8aa7d8753d4d33.tar.gz
avcodec/ac3enc: Move transient PutBitContext to stack
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Diffstat (limited to 'libavcodec/eac3enc.c')
-rw-r--r--libavcodec/eac3enc.c123
1 files changed, 62 insertions, 61 deletions
diff --git a/libavcodec/eac3enc.c b/libavcodec/eac3enc.c
index c957174a70..8ef3e7e773 100644
--- a/libavcodec/eac3enc.c
+++ b/libavcodec/eac3enc.c
@@ -32,6 +32,7 @@
#include "codec_internal.h"
#include "eac3enc.h"
#include "eac3_data.h"
+#include "put_bits.h"
static const AVClass eac3enc_class = {
@@ -129,124 +130,124 @@ void ff_eac3_set_cpl_states(AC3EncodeContext *s)
/**
* Write the E-AC-3 frame header to the output bitstream.
*/
-static void eac3_output_frame_header(AC3EncodeContext *s)
+static void eac3_output_frame_header(AC3EncodeContext *s, PutBitContext *pb)
{
int blk, ch;
AC3EncOptions *opt = &s->options;
- put_bits(&s->pb, 16, 0x0b77); /* sync word */
+ put_bits(pb, 16, 0x0b77); /* sync word */
/* BSI header */
- put_bits(&s->pb, 2, 0); /* stream type = independent */
- put_bits(&s->pb, 3, 0); /* substream id = 0 */
- put_bits(&s->pb, 11, (s->frame_size / 2) - 1); /* frame size */
- put_bits(&s->pb, 2, s->bit_alloc.sr_code); /* sample rate code */
- put_bits(&s->pb, 2, s->num_blks_code); /* number of blocks */
- put_bits(&s->pb, 3, s->channel_mode); /* audio coding mode */
- put_bits(&s->pb, 1, s->lfe_on); /* LFE channel indicator */
- put_bits(&s->pb, 5, s->bitstream_id); /* bitstream id (EAC3=16) */
- put_bits(&s->pb, 5, -opt->dialogue_level); /* dialogue normalization level */
- put_bits(&s->pb, 1, 0); /* no compression gain */
+ put_bits(pb, 2, 0); /* stream type = independent */
+ put_bits(pb, 3, 0); /* substream id = 0 */
+ put_bits(pb, 11, (s->frame_size / 2) - 1); /* frame size */
+ put_bits(pb, 2, s->bit_alloc.sr_code); /* sample rate code */
+ put_bits(pb, 2, s->num_blks_code); /* number of blocks */
+ put_bits(pb, 3, s->channel_mode); /* audio coding mode */
+ put_bits(pb, 1, s->lfe_on); /* LFE channel indicator */
+ put_bits(pb, 5, s->bitstream_id); /* bitstream id (EAC3=16) */
+ put_bits(pb, 5, -opt->dialogue_level); /* dialogue normalization level */
+ put_bits(pb, 1, 0); /* no compression gain */
/* mixing metadata*/
- put_bits(&s->pb, 1, opt->eac3_mixing_metadata);
+ put_bits(pb, 1, opt->eac3_mixing_metadata);
if (opt->eac3_mixing_metadata) {
if (s->channel_mode > AC3_CHMODE_STEREO)
- put_bits(&s->pb, 2, opt->preferred_stereo_downmix);
+ put_bits(pb, 2, opt->preferred_stereo_downmix);
if (s->has_center) {
- put_bits(&s->pb, 3, s->ltrt_center_mix_level);
- put_bits(&s->pb, 3, s->loro_center_mix_level);
+ put_bits(pb, 3, s->ltrt_center_mix_level);
+ put_bits(pb, 3, s->loro_center_mix_level);
}
if (s->has_surround) {
- put_bits(&s->pb, 3, s->ltrt_surround_mix_level);
- put_bits(&s->pb, 3, s->loro_surround_mix_level);
+ put_bits(pb, 3, s->ltrt_surround_mix_level);
+ put_bits(pb, 3, s->loro_surround_mix_level);
}
if (s->lfe_on)
- put_bits(&s->pb, 1, 0);
- put_bits(&s->pb, 1, 0); /* no program scale */
- put_bits(&s->pb, 1, 0); /* no ext program scale */
- put_bits(&s->pb, 2, 0); /* no mixing parameters */
+ put_bits(pb, 1, 0);
+ put_bits(pb, 1, 0); /* no program scale */
+ put_bits(pb, 1, 0); /* no ext program scale */
+ put_bits(pb, 2, 0); /* no mixing parameters */
if (s->channel_mode < AC3_CHMODE_STEREO)
- put_bits(&s->pb, 1, 0); /* no pan info */
- put_bits(&s->pb, 1, 0); /* no frame mix config info */
+ put_bits(pb, 1, 0); /* no pan info */
+ put_bits(pb, 1, 0); /* no frame mix config info */
}
/* info metadata*/
- put_bits(&s->pb, 1, opt->eac3_info_metadata);
+ put_bits(pb, 1, opt->eac3_info_metadata);
if (opt->eac3_info_metadata) {
- put_bits(&s->pb, 3, s->bitstream_mode);
- put_bits(&s->pb, 1, opt->copyright);
- put_bits(&s->pb, 1, opt->original);
+ put_bits(pb, 3, s->bitstream_mode);
+ put_bits(pb, 1, opt->copyright);
+ put_bits(pb, 1, opt->original);
if (s->channel_mode == AC3_CHMODE_STEREO) {
- put_bits(&s->pb, 2, opt->dolby_surround_mode);
- put_bits(&s->pb, 2, opt->dolby_headphone_mode);
+ put_bits(pb, 2, opt->dolby_surround_mode);
+ put_bits(pb, 2, opt->dolby_headphone_mode);
}
if (s->channel_mode >= AC3_CHMODE_2F2R)
- put_bits(&s->pb, 2, opt->dolby_surround_ex_mode);
- put_bits(&s->pb, 1, opt->audio_production_info);
+ put_bits(pb, 2, opt->dolby_surround_ex_mode);
+ put_bits(pb, 1, opt->audio_production_info);
if (opt->audio_production_info) {
- put_bits(&s->pb, 5, opt->mixing_level - 80);
- put_bits(&s->pb, 2, opt->room_type);
- put_bits(&s->pb, 1, opt->ad_converter_type);
+ put_bits(pb, 5, opt->mixing_level - 80);
+ put_bits(pb, 2, opt->room_type);
+ put_bits(pb, 1, opt->ad_converter_type);
}
- put_bits(&s->pb, 1, 0);
+ put_bits(pb, 1, 0);
}
if (s->num_blocks != 6)
- put_bits(&s->pb, 1, !(s->avctx->frame_num % 6)); /* converter sync flag */
- put_bits(&s->pb, 1, 0); /* no additional bit stream info */
+ put_bits(pb, 1, !(s->avctx->frame_num % 6)); /* converter sync flag */
+ put_bits(pb, 1, 0); /* no additional bit stream info */
/* frame header */
if (s->num_blocks == 6) {
- put_bits(&s->pb, 1, !s->use_frame_exp_strategy); /* exponent strategy syntax */
- put_bits(&s->pb, 1, 0); /* aht enabled = no */
+ put_bits(pb, 1, !s->use_frame_exp_strategy); /* exponent strategy syntax */
+ put_bits(pb, 1, 0); /* aht enabled = no */
}
- put_bits(&s->pb, 2, 0); /* snr offset strategy = 1 */
- put_bits(&s->pb, 1, 0); /* transient pre-noise processing enabled = no */
- put_bits(&s->pb, 1, 0); /* block switch syntax enabled = no */
- put_bits(&s->pb, 1, 0); /* dither flag syntax enabled = no */
- put_bits(&s->pb, 1, 0); /* bit allocation model syntax enabled = no */
- put_bits(&s->pb, 1, 0); /* fast gain codes enabled = no */
- put_bits(&s->pb, 1, 0); /* dba syntax enabled = no */
- put_bits(&s->pb, 1, 0); /* skip field syntax enabled = no */
- put_bits(&s->pb, 1, 0); /* spx enabled = no */
+ put_bits(pb, 2, 0); /* snr offset strategy = 1 */
+ put_bits(pb, 1, 0); /* transient pre-noise processing enabled = no */
+ put_bits(pb, 1, 0); /* block switch syntax enabled = no */
+ put_bits(pb, 1, 0); /* dither flag syntax enabled = no */
+ put_bits(pb, 1, 0); /* bit allocation model syntax enabled = no */
+ put_bits(pb, 1, 0); /* fast gain codes enabled = no */
+ put_bits(pb, 1, 0); /* dba syntax enabled = no */
+ put_bits(pb, 1, 0); /* skip field syntax enabled = no */
+ put_bits(pb, 1, 0); /* spx enabled = no */
/* coupling strategy use flags */
if (s->channel_mode > AC3_CHMODE_MONO) {
- put_bits(&s->pb, 1, s->blocks[0].cpl_in_use);
+ put_bits(pb, 1, s->blocks[0].cpl_in_use);
for (blk = 1; blk < s->num_blocks; blk++) {
AC3Block *block = &s->blocks[blk];
- put_bits(&s->pb, 1, block->new_cpl_strategy);
+ put_bits(pb, 1, block->new_cpl_strategy);
if (block->new_cpl_strategy)
- put_bits(&s->pb, 1, block->cpl_in_use);
+ put_bits(pb, 1, block->cpl_in_use);
}
}
/* exponent strategy */
if (s->use_frame_exp_strategy) {
for (ch = !s->cpl_on; ch <= s->fbw_channels; ch++)
- put_bits(&s->pb, 5, s->frame_exp_strategy[ch]);
+ put_bits(pb, 5, s->frame_exp_strategy[ch]);
} else {
for (blk = 0; blk < s->num_blocks; blk++)
for (ch = !s->blocks[blk].cpl_in_use; ch <= s->fbw_channels; ch++)
- put_bits(&s->pb, 2, s->exp_strategy[ch][blk]);
+ put_bits(pb, 2, s->exp_strategy[ch][blk]);
}
if (s->lfe_on) {
for (blk = 0; blk < s->num_blocks; blk++)
- put_bits(&s->pb, 1, s->exp_strategy[s->lfe_channel][blk]);
+ put_bits(pb, 1, s->exp_strategy[s->lfe_channel][blk]);
}
/* E-AC-3 to AC-3 converter exponent strategy (not optional when num blocks == 6) */
if (s->num_blocks != 6) {
- put_bits(&s->pb, 1, 0);
+ put_bits(pb, 1, 0);
} else {
for (ch = 1; ch <= s->fbw_channels; ch++) {
if (s->use_frame_exp_strategy)
- put_bits(&s->pb, 5, s->frame_exp_strategy[ch]);
+ put_bits(pb, 5, s->frame_exp_strategy[ch]);
else
- put_bits(&s->pb, 5, 0);
+ put_bits(pb, 5, 0);
}
}
/* snr offsets */
- put_bits(&s->pb, 6, s->coarse_snr_offset);
- put_bits(&s->pb, 4, s->fine_snr_offset[1]);
+ put_bits(pb, 6, s->coarse_snr_offset);
+ put_bits(pb, 4, s->fine_snr_offset[1]);
/* block start info */
if (s->num_blocks > 1)
- put_bits(&s->pb, 1, 0);
+ put_bits(pb, 1, 0);
}
static av_cold int eac3_encode_init(AVCodecContext *avctx)