From edd26bca609303edada20ea1b1be7fdfbe6f1711 Mon Sep 17 00:00:00 2001 From: James Almer Date: Sun, 20 Mar 2022 15:21:29 -0300 Subject: [PATCH] avformat/dfpwmdec: add support to set channel layout Signed-off-by: James Almer --- libavformat/dfpwmdec.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/libavformat/dfpwmdec.c b/libavformat/dfpwmdec.c index 9f935a422a..685b95148c 100644 --- a/libavformat/dfpwmdec.c +++ b/libavformat/dfpwmdec.c @@ -31,7 +31,10 @@ typedef struct DFPWMAudioDemuxerContext { AVClass *class; int sample_rate; +#if FF_API_OLD_CHANNEL_LAYOUT int channels; +#endif + AVChannelLayout ch_layout; } DFPWMAudioDemuxerContext; static int dfpwm_read_header(AVFormatContext *s) @@ -39,6 +42,7 @@ static int dfpwm_read_header(AVFormatContext *s) DFPWMAudioDemuxerContext *s1 = s->priv_data; AVCodecParameters *par; AVStream *st; + int ret; st = avformat_new_stream(s, NULL); if (!st) @@ -48,7 +52,16 @@ static int dfpwm_read_header(AVFormatContext *s) par->codec_type = AVMEDIA_TYPE_AUDIO; par->codec_id = s->iformat->raw_codec_id; par->sample_rate = s1->sample_rate; - par->ch_layout.nb_channels = s1->channels; +#if FF_API_OLD_CHANNEL_LAYOUT + if (s1->ch_layout.nb_channels) { +#endif + ret = av_channel_layout_copy(&par->ch_layout, &s1->ch_layout); + if (ret < 0) + return ret; +#if FF_API_OLD_CHANNEL_LAYOUT + } else + par->ch_layout.nb_channels = s1->channels; +#endif par->bits_per_coded_sample = 1; par->block_align = 1; @@ -58,7 +71,12 @@ static int dfpwm_read_header(AVFormatContext *s) static const AVOption dfpwm_options[] = { { "sample_rate", "", offsetof(DFPWMAudioDemuxerContext, sample_rate), AV_OPT_TYPE_INT, {.i64 = 48000}, 0, INT_MAX, AV_OPT_FLAG_DECODING_PARAM }, - { "channels", "", offsetof(DFPWMAudioDemuxerContext, channels), AV_OPT_TYPE_INT, {.i64 = 1}, 0, INT_MAX, AV_OPT_FLAG_DECODING_PARAM }, +#if FF_API_OLD_CHANNEL_LAYOUT + { "channels", "", offsetof(DFPWMAudioDemuxerContext, channels), AV_OPT_TYPE_INT, {.i64 = 1}, 0, INT_MAX, AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_DEPRECATED }, + { "ch_layout", "", offsetof(DFPWMAudioDemuxerContext, ch_layout), AV_OPT_TYPE_CHLAYOUT, {.str = NULL}, 0, 0, AV_OPT_FLAG_DECODING_PARAM }, +#else + { "ch_layout", "", offsetof(DFPWMAudioDemuxerContext, ch_layout), AV_OPT_TYPE_CHLAYOUT, {.str = "mono"}, 0, 0, AV_OPT_FLAG_DECODING_PARAM }, +#endif { NULL }, }; static const AVClass dfpwm_demuxer_class = {