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

Reply via email to