Unverified Commit 2502e13b authored by Lynne's avatar Lynne

opusenc: add apply_phase_inv option

By popular request.
Does the same as in libopusenc.
parent c0344cbf
...@@ -627,7 +627,7 @@ static av_always_inline uint32_t quant_band_template(CeltPVQ *pvq, CeltFrame *f, ...@@ -627,7 +627,7 @@ static av_always_inline uint32_t quant_band_template(CeltPVQ *pvq, CeltFrame *f,
} }
} else if (stereo) { } else if (stereo) {
if (quant) { if (quant) {
inv = itheta > 8192; inv = f->apply_phase_inv ? itheta > 8192 : 0;
if (inv) { if (inv) {
for (i = 0; i < N; i++) for (i = 0; i < N; i++)
Y[i] *= -1; Y[i] *= -1;
......
...@@ -691,7 +691,7 @@ static av_cold int opus_encode_init(AVCodecContext *avctx) ...@@ -691,7 +691,7 @@ static av_cold int opus_encode_init(AVCodecContext *avctx)
s->frame[i].avctx = s->avctx; s->frame[i].avctx = s->avctx;
s->frame[i].seed = 0; s->frame[i].seed = 0;
s->frame[i].pvq = s->pvq; 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; 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) ...@@ -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 #define OPUSENC_FLAGS AV_OPT_FLAG_ENCODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM
static const AVOption opusenc_options[] = { 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" }, { "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 }, { NULL },
}; };
......
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
typedef struct OpusEncOptions { typedef struct OpusEncOptions {
float max_delay_ms; float max_delay_ms;
int apply_phase_inv;
} OpusEncOptions; } OpusEncOptions;
typedef struct OpusPacketInfo { typedef struct OpusPacketInfo {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment