Merge commit 'ebc29519d1634bfeb386c20a5d8a52837aae2436'
authorMichael Niedermayer <michaelni@gmx.at>
Sun, 11 May 2014 22:06:35 +0000 (00:06 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 11 May 2014 22:06:35 +0000 (00:06 +0200)
* commit 'ebc29519d1634bfeb386c20a5d8a52837aae2436':
  hwaccel: Support specific frame allocators

Conflicts:
libavcodec/utils.c

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

Simple merge
@@@ -845,11 -575,36 +845,12 @@@ FF_ENABLE_DEPRECATION_WARNING
  
  int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame)
  {
 -    AVPacket *pkt = avctx->internal->pkt;
 -    uint8_t *packet_sd;
 -    int size;
 -    AVFrameSideData *frame_sd;
 -
 -
 -    frame->reordered_opaque = avctx->reordered_opaque;
 -    if (!pkt) {
 -        frame->pkt_pts = AV_NOPTS_VALUE;
 -        return 0;
 -    }
 -
 -    frame->pkt_pts = pkt->pts;
 -
 -    /* copy the replaygain data to the output frame */
 -    packet_sd = av_packet_get_side_data(pkt, AV_PKT_DATA_REPLAYGAIN, &size);
 -    if (packet_sd) {
 -        frame_sd = av_frame_new_side_data(frame, AV_FRAME_DATA_REPLAYGAIN, size);
 -        if (!frame_sd)
 -            return AVERROR(ENOMEM);
 -
 -        memcpy(frame_sd->data, packet_sd, size);
 -    }
 -
 -    return 0;
 +    return ff_init_buffer_info(avctx, frame);
  }
  
 -int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
 +static int get_buffer_internal(AVCodecContext *avctx, AVFrame *frame, int flags)
  {
+     const AVHWAccel *hwaccel = avctx->hwaccel;
      int override_dimensions = 1;
      int ret;
  
      ret = ff_decode_frame_props(avctx, frame);
      if (ret < 0)
          return ret;
 +    if ((ret = ff_init_buffer_info(avctx, frame)) < 0)
 +        return ret;
  
+     if (hwaccel && hwaccel->alloc_frame) {
+         ret = hwaccel->alloc_frame(avctx, frame);
+         goto end;
+     }
  #if FF_API_GET_BUFFER
  FF_DISABLE_DEPRECATION_WARNINGS
      /*
           * avcodec_default_get_buffer
           */
          if (frame->buf[0])
-             goto end;
 -            return 0;
++            goto end0;
  
          priv = av_mallocz(sizeof(*priv));
          if (!priv) {
@@@ -974,7 -765,6 +980,7 @@@ do 
  
          av_buffer_unref(&dummy_buf);
  
- end:
++end0:
          frame->width  = avctx->width;
          frame->height = avctx->height;