X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fopusenc.c;h=ac8a5d651cd18f23f619b4d2f39dc280b4efac99;hb=1c7f252783aec37e4ff8049476386f63afe91756;hp=578785f4b417b563ced9b9522abcea4fefaa3afb;hpb=2d62e06ff6a9f3dbd78136c1dc4a315a727c6f00;p=ffmpeg diff --git a/libavcodec/opusenc.c b/libavcodec/opusenc.c index 578785f4b41..ac8a5d651cd 100644 --- a/libavcodec/opusenc.c +++ b/libavcodec/opusenc.c @@ -25,6 +25,7 @@ #include "opustab.h" #include "libavutil/float_dsp.h" +#include "libavutil/mem_internal.h" #include "libavutil/opt.h" #include "internal.h" #include "bytestream.h" @@ -543,7 +544,7 @@ static int opus_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, ff_bufqueue_add(avctx, &s->bufqueue, av_frame_clone(frame)); } else { ff_opus_psy_signal_eof(&s->psyctx); - if (!s->afq.remaining_samples) + if (!s->afq.remaining_samples || !avctx->frame_number) return 0; /* We've been flushed and there's nothing left to encode */ } @@ -613,7 +614,6 @@ static av_cold int opus_encode_end(AVCodecContext *avctx) ff_af_queue_close(&s->afq); ff_opus_psy_end(&s->psyctx); ff_bufqueue_discard_all(&s->bufqueue); - av_freep(&avctx->extradata); return 0; } @@ -691,7 +691,7 @@ static av_cold int opus_encode_init(AVCodecContext *avctx) s->frame[i].avctx = s->avctx; s->frame[i].seed = 0; s->frame[i].pvq = s->pvq; - s->frame[i].apply_phase_inv = 1; + s->frame[i].apply_phase_inv = s->options.apply_phase_inv; s->frame[i].block[0].emph_coeff = s->frame[i].block[1].emph_coeff = 0.0f; } @@ -701,6 +701,7 @@ static av_cold int opus_encode_init(AVCodecContext *avctx) #define OPUSENC_FLAGS AV_OPT_FLAG_ENCODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM static const AVOption opusenc_options[] = { { "opus_delay", "Maximum delay in milliseconds", offsetof(OpusEncContext, options.max_delay_ms), AV_OPT_TYPE_FLOAT, { .dbl = OPUS_MAX_LOOKAHEAD }, 2.5f, OPUS_MAX_LOOKAHEAD, OPUSENC_FLAGS, "max_delay_ms" }, + { "apply_phase_inv", "Apply intensity stereo phase inversion", offsetof(OpusEncContext, options.apply_phase_inv), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, OPUSENC_FLAGS, "apply_phase_inv" }, { NULL }, }; @@ -717,7 +718,7 @@ static const AVCodecDefault opusenc_defaults[] = { { NULL }, }; -AVCodec ff_opus_encoder = { +const AVCodec ff_opus_encoder = { .name = "opus", .long_name = NULL_IF_CONFIG_SMALL("Opus"), .type = AVMEDIA_TYPE_AUDIO,