From: Menno <[email protected]>
Signed-off-by: Menno <[email protected]>
---
doc/encoders.texi | 5 +++++
libavcodec/libopusenc.c | 14 ++++++++++++++
2 files changed, 19 insertions(+)
diff --git a/doc/encoders.texi b/doc/encoders.texi
index 6a410a8cb6..5cd8b1a064 100644
--- a/doc/encoders.texi
+++ b/doc/encoders.texi
@@ -981,6 +981,11 @@ Other values include 0 for mono and stereo, 1 for surround
sound with masking
and LFE bandwidth optimizations, and 255 for independent streams with an
unspecified channel layout.
+@item disable_phase_inversion (N.A.) (requires libopus >= 1.2)
+If set to 1, disables the use of phase inversion for intensity stereo,
+improving the quality of mono downmixes, but slightly reducing normal stereo
+quality. The default is 0 (phase inversion enabled).
+
@end table
@anchor{libshine}
diff --git a/libavcodec/libopusenc.c b/libavcodec/libopusenc.c
index b449497d15..3ad10502fc 100644
--- a/libavcodec/libopusenc.c
+++ b/libavcodec/libopusenc.c
@@ -39,6 +39,9 @@ typedef struct LibopusEncOpts {
int packet_size;
int max_bandwidth;
int mapping_family;
+#ifdef OPUS_SET_PHASE_INVERSION_DISABLED_REQUEST
+ int disable_phase_inversion;
+#endif
} LibopusEncOpts;
typedef struct LibopusEncContext {
@@ -154,6 +157,14 @@ static int libopus_configure_encoder(AVCodecContext
*avctx, OpusMSEncoder *enc,
"Unable to set maximum bandwidth: %s\n",
opus_strerror(ret));
}
+#ifdef OPUS_SET_PHASE_INVERSION_DISABLED_REQUEST
+ ret = opus_multistream_encoder_ctl(enc,
+
OPUS_SET_PHASE_INVERSION_DISABLED(opts->disable_phase_inversion));
+ if (ret != OPUS_OK)
+ av_log(avctx, AV_LOG_WARNING,
+ "Unable to disable phase inversion: %s\n",
+ opus_strerror(ret));
+#endif
return OPUS_OK;
}
@@ -530,6 +541,9 @@ static const AVOption libopus_options[] = {
{ "on", "Use variable bit rate", 0, AV_OPT_TYPE_CONST, {
.i64 = 1 }, 0, 0, FLAGS, "vbr" },
{ "constrained", "Use constrained VBR", 0, AV_OPT_TYPE_CONST, {
.i64 = 2 }, 0, 0, FLAGS, "vbr" },
{ "mapping_family", "Channel Mapping Family",
OFFSET(mapping_family), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 255, FLAGS,
"mapping_family" },
+#ifdef OPUS_SET_PHASE_INVERSION_DISABLED_REQUEST
+ { "disable_phase_inversion", "Disable phase inversion",
OFFSET(disable_phase_inversion), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1,
FLAGS },
+#endif
{ NULL },
};
--
2.14.1
_______________________________________________
ffmpeg-devel mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel