Merge commit 'a2816230c5c0a8fc72bc0163b7d21a96b194d87a'
authorMichael Niedermayer <michaelni@gmx.at>
Wed, 13 Mar 2013 12:45:50 +0000 (13:45 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Wed, 13 Mar 2013 12:45:50 +0000 (13:45 +0100)
* commit 'a2816230c5c0a8fc72bc0163b7d21a96b194d87a':
  avframe: call release_buffer only if it is set

Conflicts:
libavcodec/utils.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/utils.c

@@@ -647,51 -588,16 +647,52 @@@ int ff_init_buffer_info(AVCodecContext 
                  }
  
                  frame->channel_layout = av_get_default_channel_layout(avctx->channels);
 -                if (!frame->channel_layout)
 -                    frame->channel_layout = (1ULL << avctx->channels) - 1;
              }
          }
 +        av_frame_set_channels(frame, avctx->channels);
          break;
 -    default: return AVERROR(EINVAL);
      }
 +    return 0;
 +}
  
 -    frame->pkt_pts = avctx->pkt ? avctx->pkt->pts : AV_NOPTS_VALUE;
 -    frame->reordered_opaque = avctx->reordered_opaque;
 +#if FF_API_GET_BUFFER
 +int avcodec_default_get_buffer(AVCodecContext *avctx, AVFrame *frame)
 +{
 +    return avcodec_default_get_buffer2(avctx, frame, 0);
 +}
 +
 +typedef struct CompatReleaseBufPriv {
 +    AVCodecContext avctx;
 +    AVFrame frame;
 +} CompatReleaseBufPriv;
 +
 +static void compat_free_buffer(void *opaque, uint8_t *data)
 +{
 +    CompatReleaseBufPriv *priv = opaque;
-     priv->avctx.release_buffer(&priv->avctx, &priv->frame);
++    if (priv->avctx.release_buffer)
++        priv->avctx.release_buffer(&priv->avctx, &priv->frame);
 +    av_freep(&priv);
 +}
 +
 +static void compat_release_buffer(void *opaque, uint8_t *data)
 +{
 +    AVBufferRef *buf = opaque;
 +    av_buffer_unref(&buf);
 +}
 +#endif
 +
 +int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
 +{
 +    int ret;
 +
 +    if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) {
 +        if ((ret = av_image_check_size(avctx->width, avctx->height, 0, avctx)) < 0 || avctx->pix_fmt<0) {
 +            av_log(avctx, AV_LOG_ERROR, "video_get_buffer: image parameters invalid\n");
 +            return AVERROR(EINVAL);
 +        }
 +    }
 +    if ((ret = ff_init_buffer_info(avctx, frame)) < 0)
 +        return ret;
  
  #if FF_API_GET_BUFFER
      /*