[FFmpeg-devel] [PATCH 007/281] lavf: add a temporary compat layer for the channel layout API change
James Almer
jamrial at gmail.com
Thu Jan 13 03:49:29 EET 2022
From: Anton Khirnov <anton at khirnov.net>
Mediates between old-style (de)muxers and new-style callers. Will be
removed once all the (de)muxers are converted to the new API.
Signed-off-by: James Almer <jamrial at gmail.com>
---
libavformat/demux.c | 12 ++++++++++++
libavformat/mux.c | 10 ++++++++++
2 files changed, 22 insertions(+)
diff --git a/libavformat/demux.c b/libavformat/demux.c
index f895f0ba85..c78c6c16a2 100644
--- a/libavformat/demux.c
+++ b/libavformat/demux.c
@@ -194,6 +194,18 @@ static int update_stream_avctx(AVFormatContext *s)
sti->parser = NULL;
}
+ /* if the demuxer exports old channel layouts, convert it to new */
+ if (!st->codecpar->ch_layout.nb_channels &&
+ st->codecpar->channels) {
+ if (st->codecpar->channel_layout) {
+ av_channel_layout_from_mask(&st->codecpar->ch_layout,
+ st->codecpar->channel_layout);
+ } else {
+ st->codecpar->ch_layout.order = AV_CHANNEL_ORDER_UNSPEC;
+ st->codecpar->ch_layout.nb_channels = st->codecpar->channels;
+ }
+ }
+
/* update internal codec context, for the parser */
ret = avcodec_parameters_to_context(sti->avctx, st->codecpar);
if (ret < 0)
diff --git a/libavformat/mux.c b/libavformat/mux.c
index c387f8ec6e..775e3e0d76 100644
--- a/libavformat/mux.c
+++ b/libavformat/mux.c
@@ -272,6 +272,16 @@ static int init_muxer(AVFormatContext *s, AVDictionary **options)
ret = AVERROR(EINVAL);
goto fail;
}
+
+ /* if the new-style channel layout is set, convert it to old one
+ * for old-style muxers */
+ if (par->ch_layout.nb_channels &&
+ !par->channels) {
+ par->channels = par->ch_layout.nb_channels;
+ par->channel_layout = par->ch_layout.order == AV_CHANNEL_ORDER_NATIVE ?
+ par->ch_layout.u.mask : 0;
+ }
+
if (!par->block_align)
par->block_align = par->channels *
av_get_bits_per_sample(par->codec_id) >> 3;
--
2.34.1
More information about the ffmpeg-devel
mailing list