Quoting Vittorio Giovara (2017-06-29 00:10:48)
> From: Anton Khirnov <[email protected]>
>
> Signed-off-by: Vittorio Giovara <[email protected]>
> ---
> libavcodec/decode.c | 67 ++++++++++++++++++++++++++++------------
> libavcodec/encode.c | 9 ++++++
> libavutil/frame.c | 88
> +++++++++++++++++++++++++++++++++++++++++++++++------
> libavutil/frame.h | 12 +++++++-
> 4 files changed, 146 insertions(+), 30 deletions(-)
>
> diff --git a/libavcodec/decode.c b/libavcodec/decode.c
> index a49cd77e51..b0d6b9fb33 100644
> --- a/libavcodec/decode.c
> +++ b/libavcodec/decode.c
> @@ -132,7 +132,7 @@ static int unrefcount_frame(AVCodecInternal *avci,
> AVFrame *frame)
> memcpy(frame->data, avci->to_free->data, sizeof(frame->data));
> memcpy(frame->linesize, avci->to_free->linesize,
> sizeof(frame->linesize));
> if (avci->to_free->extended_data != avci->to_free->data) {
> - int planes =
> av_get_channel_layout_nb_channels(avci->to_free->channel_layout);
> + int planes = avci->to_free->ch_layout.nb_channels;
> int size = planes * sizeof(*frame->extended_data);
>
> if (!size) {
> @@ -153,9 +153,19 @@ static int unrefcount_frame(AVCodecInternal *avci,
> AVFrame *frame)
> frame->format = avci->to_free->format;
> frame->width = avci->to_free->width;
> frame->height = avci->to_free->height;
> +#if FF_API_OLD_CHANNEL_LAYOUT
> +FF_DISABLE_DEPRECATION_WARNINGS
> frame->channel_layout = avci->to_free->channel_layout;
> +FF_ENABLE_DEPRECATION_WARNINGS
> +#endif
> frame->nb_samples = avci->to_free->nb_samples;
>
> + ret = av_channel_layout_copy(&frame->ch_layout,
> &avci->to_free->ch_layout);
> + if (ret < 0) {
> + av_frame_unref(frame);
> + return ret;
> + }
> +
> return 0;
> }
>
> @@ -887,10 +897,20 @@ static int update_frame_pool(AVCodecContext *avctx,
> AVFrame *frame)
> break;
> }
> case AVMEDIA_TYPE_AUDIO: {
> - int ch =
> av_get_channel_layout_nb_channels(frame->channel_layout);
> + int ch = frame->ch_layout.nb_channels;
> int planar = av_sample_fmt_is_planar(frame->format);
> int planes = planar ? ch : 1;
>
> +#if FF_API_OLD_CHANNEL_LAYOUT
> +FF_DISABLE_DEPRECATION_WARNINGS
> + if (!ch && frame->channel_layout) {
> + av_channel_layout_from_mask(&frame->ch_layout,
> frame->channel_layout);
> + ch = frame->ch_layout.nb_channels;
> + planes = planar ? ch : 1;
> + }
> +FF_ENABLE_DEPRECATION_WARNINGS
> +#endif
What is this for? This code is the internal get_buffer2()
implementation, so the new channel layout API should always be used.
> +
> if (pool->format == frame->format && pool->planes == planes &&
> pool->channels == ch && frame->nb_samples == pool->samples)
> return 0;
> @@ -1111,28 +1131,35 @@ int ff_get_buffer(AVCodecContext *avctx, AVFrame
> *frame, int flags)
> frame->sample_rate = avctx->sample_rate;
> if (frame->format < 0)
> frame->format = avctx->sample_fmt;
> + if (!frame->ch_layout.nb_channels) {
> + if (avctx->channel_layout)
> + av_channel_layout_from_mask(&frame->ch_layout,
> avctx->channel_layout);
> + else
> + av_channel_layout_default(&frame->ch_layout,
> avctx->channels);
> + }
Same, why the deprecated API use.
--
Anton Khirnov
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel