diff options
author | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2024-05-17 19:21:34 +0200 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2024-05-20 14:11:25 +0200 |
commit | 59b1838e0955bb092ebc9d6e9f8aa7d8753d4d33 (patch) | |
tree | 1f59f74e09ae436ff40a8f9dbe2168aab7ed3987 /libavcodec/eac3enc.c | |
parent | e863cbceaeb88082e716dd3b770ed9dfc35ad9e3 (diff) | |
download | ffmpeg-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.c | 123 |
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) |