diff options
author | Anton Khirnov <anton@khirnov.net> | 2019-05-15 09:36:26 +0200 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2022-03-15 09:42:29 -0300 |
commit | ac10e3c47cc2d252822ff5ca70fce2ef40df4277 (patch) | |
tree | 2c4462f19924c570a9d9c3172626ea4e718ab4ab | |
parent | c30e22c9fb1a3d1c3b62c6bc1ff9f8b6a0f41dcc (diff) | |
download | ffmpeg-ac10e3c47cc2d252822ff5ca70fce2ef40df4277.tar.gz |
lavf: convert the generic layer to the new channel layout
Signed-off-by: James Almer <jamrial@gmail.com>
-rw-r--r-- | libavformat/demux.c | 16 | ||||
-rw-r--r-- | libavformat/mux.c | 18 | ||||
-rw-r--r-- | libavformat/utils.c | 4 |
3 files changed, 35 insertions, 3 deletions
diff --git a/libavformat/demux.c b/libavformat/demux.c index 0d99fdb508..e43140c855 100644 --- a/libavformat/demux.c +++ b/libavformat/demux.c @@ -206,6 +206,18 @@ static int update_stream_avctx(AVFormatContext *s) } } +#if FF_API_OLD_CHANNEL_LAYOUT +FF_DISABLE_DEPRECATION_WARNINGS + if (st->codecpar->ch_layout.nb_channels && + !st->codecpar->channels) { + st->codecpar->channels = st->codecpar->ch_layout.nb_channels; + st->codecpar->channel_layout = st->codecpar->ch_layout.order == AV_CHANNEL_ORDER_NATIVE ? + st->codecpar->ch_layout.u.mask : 0; + + } +FF_ENABLE_DEPRECATION_WARNINGS +#endif + /* update internal codec context, for the parser */ ret = avcodec_parameters_to_context(sti->avctx, st->codecpar); if (ret < 0) @@ -1333,8 +1345,12 @@ static int read_frame_internal(AVFormatContext *s, AVPacket *pkt) return ret; st->codecpar->sample_rate = sti->avctx->sample_rate; st->codecpar->bit_rate = sti->avctx->bit_rate; +#if FF_API_OLD_CHANNEL_LAYOUT +FF_DISABLE_DEPRECATION_WARNINGS st->codecpar->channels = sti->avctx->channels; st->codecpar->channel_layout = sti->avctx->channel_layout; +FF_ENABLE_DEPRECATION_WARNINGS +#endif st->codecpar->codec_id = sti->avctx->codec_id; } else { /* free packet */ diff --git a/libavformat/mux.c b/libavformat/mux.c index f1b5beea0a..53be37d3c4 100644 --- a/libavformat/mux.c +++ b/libavformat/mux.c @@ -282,8 +282,24 @@ static int init_muxer(AVFormatContext *s, AVDictionary **options) par->ch_layout.u.mask : 0; } +#if FF_API_OLD_CHANNEL_LAYOUT +FF_DISABLE_DEPRECATION_WARNINGS + /* if the caller is using the deprecated channel layout API, + * convert it to the new style */ + if (!par->ch_layout.nb_channels && + par->channels) { + if (par->channel_layout) { + av_channel_layout_from_mask(&par->ch_layout, par->channel_layout); + } else { + par->ch_layout.order = AV_CHANNEL_ORDER_UNSPEC; + par->ch_layout.nb_channels = par->channels; + } + } +FF_ENABLE_DEPRECATION_WARNINGS +#endif + if (!par->block_align) - par->block_align = par->channels * + par->block_align = par->ch_layout.nb_channels * av_get_bits_per_sample(par->codec_id) >> 3; break; case AVMEDIA_TYPE_VIDEO: diff --git a/libavformat/utils.c b/libavformat/utils.c index 3c775cf6c6..91c8a15a89 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -525,7 +525,7 @@ int av_find_best_stream(AVFormatContext *ic, enum AVMediaType type, continue; if (wanted_stream_nb >= 0 && real_stream_index != wanted_stream_nb) continue; - if (type == AVMEDIA_TYPE_AUDIO && !(par->channels && par->sample_rate)) + if (type == AVMEDIA_TYPE_AUDIO && !(par->ch_layout.nb_channels && par->sample_rate)) continue; if (decoder_ret) { decoder = ff_find_decoder(ic, st, par->codec_id); @@ -1523,7 +1523,7 @@ static int match_stream_specifier(const AVFormatContext *s, const AVStream *st, int val; switch (par->codec_type) { case AVMEDIA_TYPE_AUDIO: - val = par->sample_rate && par->channels; + val = par->sample_rate && par->ch_layout.nb_channels; if (par->format == AV_SAMPLE_FMT_NONE) return 0; break; |