Merge commit '57e7b3a89f5a0879ad039e8f04273b48649799a8'
authorMichael Niedermayer <michaelni@gmx.at>
Sun, 17 Nov 2013 11:17:05 +0000 (12:17 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 17 Nov 2013 11:19:55 +0000 (12:19 +0100)
* commit '57e7b3a89f5a0879ad039e8f04273b48649799a8':
  dnxhdenc: use the AVFrame API properly.
  libx264: use the AVFrame API properly.
  svq1enc: use the AVFrame API properly.
  gif: use the AVFrame API properly.

Conflicts:
libavcodec/gif.c
libavcodec/svq1enc.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/dnxhdenc.c
libavcodec/dnxhdenc.h
libavcodec/gif.c
libavcodec/libx264.c
libavcodec/svq1enc.c

Simple merge
Simple merge
@@@ -211,59 -130,38 +211,62 @@@ static av_cold int gif_encode_init(AVCo
  {
      GIFContext *s = avctx->priv_data;
  
 +    if (avctx->width > 65535 || avctx->height > 65535) {
 +        av_log(avctx, AV_LOG_ERROR, "GIF does not support resolutions above 65535x65535\n");
 +        return AVERROR(EINVAL);
 +    }
 +
+     avctx->coded_frame = av_frame_alloc();
+     if (!avctx->coded_frame)
+         return AVERROR(ENOMEM);
+     avctx->coded_frame->pict_type = AV_PICTURE_TYPE_I;
+     avctx->coded_frame->key_frame = 1;
      s->lzw = av_mallocz(ff_lzw_encode_state_size);
 -    if (!s->lzw)
 -        return AVERROR(ENOMEM);
      s->buf = av_malloc(avctx->width*avctx->height*2);
 -    if (!s->buf)
 -         return AVERROR(ENOMEM);
 +    s->tmpl = av_malloc(avctx->width);
 +    if (!s->tmpl || !s->buf || !s->lzw)
 +        return AVERROR(ENOMEM);
 +
 +    if (avpriv_set_systematic_pal2(s->palette, avctx->pix_fmt) < 0)
 +        av_assert0(avctx->pix_fmt == AV_PIX_FMT_PAL8);
 +
      return 0;
  }
  
  static int gif_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
                              const AVFrame *pict, int *got_packet)
  {
-     AVFrame *const p = (AVFrame *)pict;
 +    GIFContext *s = avctx->priv_data;
      uint8_t *outbuf_ptr, *end;
 +    const uint32_t *palette = NULL;
      int ret;
  
 -    if ((ret = ff_alloc_packet(pkt, avctx->width*avctx->height*7/5 + FF_MIN_BUFFER_SIZE)) < 0) {
 -        av_log(avctx, AV_LOG_ERROR, "Error getting output packet.\n");
 +    if ((ret = ff_alloc_packet2(avctx, pkt, avctx->width*avctx->height*7/5 + FF_MIN_BUFFER_SIZE)) < 0)
          return ret;
 -    }
      outbuf_ptr = pkt->data;
      end        = pkt->data + pkt->size;
  
-     p->pict_type = AV_PICTURE_TYPE_I;
-     p->key_frame = 1;
 -    gif_image_write_header(avctx, &outbuf_ptr, (uint32_t *)pict->data[1]);
 -    gif_image_write_image(avctx, &outbuf_ptr, end, pict->data[0], pict->linesize[0]);
 +    if (avctx->pix_fmt == AV_PIX_FMT_PAL8) {
 +        uint8_t *pal_exdata = av_packet_new_side_data(pkt, AV_PKT_DATA_PALETTE, AVPALETTE_SIZE);
 +        if (!pal_exdata)
 +            return AVERROR(ENOMEM);
-         memcpy(pal_exdata, p->data[1], AVPALETTE_SIZE);
-         palette = (uint32_t*)p->data[1];
++        memcpy(pal_exdata, pict->data[1], AVPALETTE_SIZE);
++        palette = (uint32_t*)pict->data[1];
 +    }
 +
 +    gif_image_write_image(avctx, &outbuf_ptr, end, palette,
 +                          pict->data[0], pict->linesize[0], pkt);
 +    if (!s->last_frame) {
 +        s->last_frame = av_frame_alloc();
 +        if (!s->last_frame)
 +            return AVERROR(ENOMEM);
 +    }
 +    av_frame_unref(s->last_frame);
 +    ret = av_frame_ref(s->last_frame, (AVFrame*)pict);
 +    if (ret < 0)
 +        return ret;
  
      pkt->size   = outbuf_ptr - pkt->data;
      pkt->flags |= AV_PKT_FLAG_KEY;
@@@ -276,10 -174,10 +279,12 @@@ static int gif_encode_close(AVCodecCont
  {
      GIFContext *s = avctx->priv_data;
  
+     av_frame_free(&avctx->coded_frame);
      av_freep(&s->lzw);
      av_freep(&s->buf);
 +    av_frame_free(&s->last_frame);
 +    av_freep(&s->tmpl);
      return 0;
  }
  
Simple merge
@@@ -536,30 -572,28 +571,27 @@@ static int svq1_encode_frame(AVCodecCon
                               const AVFrame *pict, int *got_packet)
  {
      SVQ1Context *const s = avctx->priv_data;
-     AVFrame *const p     = &s->picture;
-     AVFrame temp;
+     AVFrame *const p     = avctx->coded_frame;
      int i, ret;
  
 -    if (!pkt->data &&
 -        (ret = av_new_packet(pkt, s->y_block_width * s->y_block_height *
 -                             MAX_MB_BYTES * 3 + FF_MIN_BUFFER_SIZE)) < 0) {
 -        av_log(avctx, AV_LOG_ERROR, "Error getting output packet.\n");
 +    if ((ret = ff_alloc_packet2(avctx, pkt, s->y_block_width * s->y_block_height *
 +                             MAX_MB_BYTES*3 + FF_MIN_BUFFER_SIZE)) < 0)
          return ret;
 -    }
  
      if (avctx->pix_fmt != AV_PIX_FMT_YUV410P) {
          av_log(avctx, AV_LOG_ERROR, "unsupported pixel format\n");
          return -1;
      }
  
-     if (!s->current_picture.data[0]) {
-         if ((ret = ff_get_buffer(avctx, &s->current_picture, 0))< 0 ||
-             (ret = ff_get_buffer(avctx, &s->last_picture, 0))   < 0) {
+     if (!s->current_picture->data[0]) {
 -        ff_get_buffer(avctx, s->current_picture, 0);
 -        ff_get_buffer(avctx, s->last_picture, 0);
++        if ((ret = ff_get_buffer(avctx, s->current_picture, 0))< 0 ||
++            (ret = ff_get_buffer(avctx, s->last_picture, 0))   < 0) {
 +            return ret;
 +        }
-         s->scratchbuf = av_malloc(s->current_picture.linesize[0] * 16 * 2);
+         s->scratchbuf = av_malloc(s->current_picture->linesize[0] * 16 * 2);
      }
  
-     av_frame_move_ref(&temp, &s->current_picture);
-     av_frame_move_ref(&s->current_picture, &s->last_picture);
-     av_frame_move_ref(&s->last_picture, &temp);
+     FFSWAP(AVFrame*, s->current_picture, s->last_picture);
  
      init_put_bits(&s->pb, pkt->data, pkt->size);