X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=audio_encoder.cpp;h=4ba56ad49905024150f44731cd9d93965eea95f7;hb=319b807ceede52e45cf07f712259b1a42ec3cc54;hp=2b735e4d44f5ff27b95588032fd3e73459ff7e64;hpb=2804eb55c7d4f9f6d70203d106d0f1e69b19c2ee;p=nageru diff --git a/audio_encoder.cpp b/audio_encoder.cpp index 2b735e4..4ba56ad 100644 --- a/audio_encoder.cpp +++ b/audio_encoder.cpp @@ -21,7 +21,7 @@ extern "C" { using namespace std; -AudioEncoder::AudioEncoder(const string &codec_name, int bit_rate) +AudioEncoder::AudioEncoder(const string &codec_name, int bit_rate, const AVOutputFormat *oformat) { AVCodec *codec = avcodec_find_encoder_by_name(codec_name.c_str()); if (codec == nullptr) { @@ -36,7 +36,9 @@ AudioEncoder::AudioEncoder(const string &codec_name, int bit_rate) ctx->channels = 2; ctx->channel_layout = AV_CH_LAYOUT_STEREO; ctx->time_base = AVRational{1, TIMEBASE}; - ctx->flags |= CODEC_FLAG_GLOBAL_HEADER; + if (oformat->flags & AVFMT_GLOBALHEADER) { + ctx->flags |= CODEC_FLAG_GLOBAL_HEADER; + } if (avcodec_open2(ctx, codec, NULL) < 0) { fprintf(stderr, "Could not open codec '%s'\n", codec_name.c_str()); exit(1); @@ -165,3 +167,10 @@ void AudioEncoder::encode_last_audio() } } } + +AVCodecParametersWithDeleter AudioEncoder::get_codec_parameters() +{ + AVCodecParameters *codecpar = avcodec_parameters_alloc(); + avcodec_parameters_from_context(codecpar, ctx); + return AVCodecParametersWithDeleter(codecpar, avcodec_parameters_free_unique); +}