Merge commit '2d2a92f72199823a92e4e226c32e42a27ec801c0'
authorMichael Niedermayer <michaelni@gmx.at>
Sun, 17 Nov 2013 00:07:37 +0000 (01:07 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 17 Nov 2013 00:07:37 +0000 (01:07 +0100)
* commit '2d2a92f72199823a92e4e226c32e42a27ec801c0':
  dxa: use the AVFrame API properly.
  qpeg: use the AVFrame API properly.
  cin video: use the AVFrame API properly.
  msvideo1: use the AVFrame API properly.

Conflicts:
libavcodec/dsicinav.c
libavcodec/dxa.c
libavcodec/msvideo1.c
libavcodec/qpeg.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/dsicinav.c
libavcodec/dxa.c
libavcodec/msvideo1.c
libavcodec/qpeg.c

@@@ -118,11 -96,16 +118,13 @@@ static av_cold int cinvideo_decode_init
      cin->avctx = avctx;
      avctx->pix_fmt = AV_PIX_FMT_PAL8;
  
-     avcodec_get_frame_defaults(&cin->frame);
+     cin->frame = av_frame_alloc();
+     if (!cin->frame)
+         return AVERROR(ENOMEM);
  
      cin->bitmap_size = avctx->width * avctx->height;
 -    for (i = 0; i < 3; ++i) {
 -        cin->bitmap_table[i] = av_mallocz(cin->bitmap_size);
 -        if (!cin->bitmap_table[i])
 -            av_log(avctx, AV_LOG_ERROR, "Can't allocate bitmap buffers.\n");
 -    }
 +    if (allocate_buffers(cin))
 +        return AVERROR(ENOMEM);
  
      return 0;
  }
@@@ -315,13 -297,16 +317,13 @@@ static int cinvideo_decode_frame(AVCode
          break;
      }
  
-     if ((res = ff_reget_buffer(avctx, &cin->frame)) < 0)
 -    if ((res = ff_reget_buffer(avctx, cin->frame)) < 0) {
 -        av_log(cin->avctx, AV_LOG_ERROR,
 -               "delphinecinvideo: reget_buffer() failed to allocate a frame\n");
++    if ((res = ff_reget_buffer(avctx, cin->frame)) < 0)
          return res;
 -    }
  
-     memcpy(cin->frame.data[1], cin->palette, sizeof(cin->palette));
-     cin->frame.palette_has_changed = 1;
+     memcpy(cin->frame->data[1], cin->palette, sizeof(cin->palette));
+     cin->frame->palette_has_changed = 1;
      for (y = 0; y < cin->avctx->height; ++y)
-         memcpy(cin->frame.data[0] + (cin->avctx->height - 1 - y) * cin->frame.linesize[0],
+         memcpy(cin->frame->data[0] + (cin->avctx->height - 1 - y) * cin->frame->linesize[0],
                 cin->bitmap_table[CIN_CUR_BMP] + y * cin->avctx->width,
                 cin->avctx->width);
  
  static av_cold int cinvideo_decode_end(AVCodecContext *avctx)
  {
      CinVideoContext *cin = avctx->priv_data;
 -    int i;
  
-     av_frame_unref(&cin->frame);
+     av_frame_free(&cin->frame);
  
 -    for (i = 0; i < 3; ++i)
 -        av_free(cin->bitmap_table[i]);
 +    destroy_buffers(cin);
  
      return 0;
  }
@@@ -327,10 -306,10 +325,12 @@@ static av_cold int decode_init(AVCodecC
      if (!c->prev)
          return AVERROR(ENOMEM);
  
+     avctx->pix_fmt = AV_PIX_FMT_PAL8;
      c->dsize = avctx->width * avctx->height * 2;
 -    if((c->decomp_buf = av_malloc(c->dsize)) == NULL) {
 +    c->decomp_buf = av_malloc(c->dsize);
 +    if (!c->decomp_buf) {
 +        av_frame_free(&c->prev);
          av_log(avctx, AV_LOG_ERROR, "Can't allocate decompression buffer.\n");
          return AVERROR(ENOMEM);
      }
@@@ -298,8 -300,10 +300,8 @@@ static int msvideo1_decode_frame(AVCode
      s->buf = buf;
      s->size = buf_size;
  
-     if ((ret = ff_reget_buffer(avctx, &s->frame)) < 0)
 -    if ((ret = ff_reget_buffer(avctx, s->frame)) < 0) {
 -        av_log(s->avctx, AV_LOG_ERROR, "reget_buffer() failed\n");
++    if ((ret = ff_reget_buffer(avctx, s->frame)) < 0)
          return ret;
 -    }
  
      if (s->mode_8bit) {
          const uint8_t *pal = av_packet_get_side_data(avpkt, AV_PKT_DATA_PALETTE, NULL);
@@@ -30,7 -30,8 +30,7 @@@
  
  typedef struct QpegContext{
      AVCodecContext *avctx;
-     AVFrame pic, ref;
 -    AVFrame *pic;
 -    uint8_t *refdata;
++    AVFrame *pic, *ref;
      uint32_t pal[256];
      GetByteContext buffer;
  } QpegContext;
@@@ -255,8 -250,7 +255,8 @@@ static int decode_frame(AVCodecContext 
  {
      uint8_t ctable[128];
      QpegContext * const a = avctx->priv_data;
-     AVFrame *  p = &a->pic;
-     AVFrame * ref= &a->ref;
+     AVFrame * const p = a->pic;
++    AVFrame * const ref = a->ref;
      uint8_t* outdata;
      int delta, ret;
      const uint8_t *pal = av_packet_get_side_data(avpkt, AV_PKT_DATA_PALETTE, NULL);
      }
  
      bytestream2_init(&a->buffer, avpkt->data, avpkt->size);
 -    if ((ret = ff_reget_buffer(avctx, p)) < 0) {
 -        av_log(avctx, AV_LOG_ERROR, "reget_buffer() failed\n");
 +
 +    av_frame_unref(ref);
 +    av_frame_move_ref(ref, p);
 +
 +    if ((ret = ff_get_buffer(avctx, p, AV_GET_BUFFER_FLAG_REF)) < 0)
          return ret;
-     outdata = a->pic.data[0];
 -    }
+     outdata = p->data[0];
      bytestream2_skip(&a->buffer, 4);
      bytestream2_get_buffer(&a->buffer, ctable, 128);
      bytestream2_skip(&a->buffer, 1);
  
      delta = bytestream2_get_byte(&a->buffer);
      if(delta == 0x10) {
-         qpeg_decode_intra(a, outdata, a->pic.linesize[0], avctx->width, avctx->height);
+         qpeg_decode_intra(a, outdata, p->linesize[0], avctx->width, avctx->height);
      } else {
-         qpeg_decode_inter(a, outdata, a->pic.linesize[0], avctx->width, avctx->height, delta, ctable, a->ref.data[0]);
 -        qpeg_decode_inter(a, outdata, p->linesize[0], avctx->width, avctx->height, delta, ctable, a->refdata);
++        qpeg_decode_inter(a, outdata, p->linesize[0], avctx->width, avctx->height, delta, ctable, ref->data[0]);
      }
  
      /* make the palette available on the way out */
      return avpkt->size;
  }
  
 -    av_free(a->refdata);
 +static void decode_flush(AVCodecContext *avctx){
 +    QpegContext * const a = avctx->priv_data;
 +    int i, pal_size;
 +    const uint8_t *pal_src;
 +
 +    pal_size = FFMIN(1024U, avctx->extradata_size);
 +    pal_src = avctx->extradata + avctx->extradata_size - pal_size;
 +
 +    for (i=0; i<pal_size/4; i++)
 +        a->pal[i] = 0xFFU<<24 | AV_RL32(pal_src+4*i);
 +}
 +
+ static av_cold int decode_end(AVCodecContext *avctx)
+ {
+     QpegContext * const a = avctx->priv_data;
+     av_frame_free(&a->pic);
++    av_frame_free(&a->ref);
+     return 0;
+ }
  static av_cold int decode_init(AVCodecContext *avctx){
      QpegContext * const a = avctx->priv_data;
  
 +    avcodec_get_frame_defaults(&a->pic);
 +    avcodec_get_frame_defaults(&a->ref);
      a->avctx = avctx;
      avctx->pix_fmt= AV_PIX_FMT_PAL8;
 -    a->refdata = av_malloc(avctx->width * avctx->height);
 +
 +    decode_flush(avctx);
  
-     avcodec_get_frame_defaults(&a->pic);
-     return 0;
- }
- static av_cold int decode_end(AVCodecContext *avctx){
-     QpegContext * const a = avctx->priv_data;
-     AVFrame * const p = &a->pic;
-     AVFrame * const ref= &a->ref;
-     av_frame_unref(p);
-     av_frame_unref(ref);
+     a->pic = av_frame_alloc();
 -    if (!a->pic) {
++    a->ref = av_frame_alloc();
++    if (!a->pic || !a->ref) {
+         decode_end(avctx);
+         return AVERROR(ENOMEM);
+     }
  
      return 0;
  }