Merge commit '901f9c0a32985f48672fd68594111dc55d88a57a'
authorHendrik Leppkes <h.leppkes@gmail.com>
Wed, 14 Oct 2015 12:56:16 +0000 (14:56 +0200)
committerHendrik Leppkes <h.leppkes@gmail.com>
Wed, 14 Oct 2015 12:56:16 +0000 (14:56 +0200)
* commit '901f9c0a32985f48672fd68594111dc55d88a57a':
  qtrle: Properly use AVFrame API

Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
1  2 
libavcodec/qtrleenc.c

@@@ -37,9 -37,8 +37,9 @@@
  typedef struct QtrleEncContext {
      AVCodecContext *avctx;
      int pixel_size;
-     AVPicture previous_frame;
+     AVFrame *previous_frame;
      unsigned int max_buf_size;
 +    int logical_width;
      /**
       * This array will contain at ith position the value of the best RLE code
       * if the line started at pixel i
@@@ -77,23 -76,13 +77,22 @@@ static av_cold int qtrle_encode_end(AVC
  static av_cold int qtrle_encode_init(AVCodecContext *avctx)
  {
      QtrleEncContext *s = avctx->priv_data;
-     int ret;
  
      if (av_image_check_size(avctx->width, avctx->height, 0, avctx) < 0) {
 -        return -1;
 +        return AVERROR(EINVAL);
      }
      s->avctx=avctx;
 +    s->logical_width=avctx->width;
  
      switch (avctx->pix_fmt) {
 +    case AV_PIX_FMT_GRAY8:
 +        if (avctx->width % 4) {
 +            av_log(avctx, AV_LOG_ERROR, "Width not being a multiple of 4 is not supported\n");
 +            return AVERROR(EINVAL);
 +        }
 +        s->logical_width = avctx->width / 4;
 +        s->pixel_size = 4;
 +        break;
      case AV_PIX_FMT_RGB555BE:
          s->pixel_size = 2;
          break;
          av_log(avctx, AV_LOG_ERROR, "Unsupported colorspace.\n");
          break;
      }
 -    avctx->bits_per_coded_sample = s->pixel_size*8;
 +    avctx->bits_per_coded_sample = avctx->pix_fmt == AV_PIX_FMT_GRAY8 ? 40 : s->pixel_size*8;
  
 -    s->rlecode_table = av_mallocz(s->avctx->width);
 -    s->skip_table    = av_mallocz(s->avctx->width);
 -    s->length_table  = av_mallocz((s->avctx->width + 1)*sizeof(int));
 +    s->rlecode_table = av_mallocz(s->logical_width);
 +    s->skip_table    = av_mallocz(s->logical_width);
 +    s->length_table  = av_mallocz_array(s->logical_width + 1, sizeof(int));
      if (!s->skip_table || !s->length_table || !s->rlecode_table) {
          av_log(avctx, AV_LOG_ERROR, "Error allocating memory.\n");
 -        return -1;
 +        return AVERROR(ENOMEM);
      }
-     if ((ret = avpicture_alloc(&s->previous_frame, avctx->pix_fmt, avctx->width, avctx->height)) < 0) {
+     s->previous_frame = av_frame_alloc();
+     if (!s->previous_frame) {
          av_log(avctx, AV_LOG_ERROR, "Error allocating picture\n");
-         return ret;
 -        return -1;
++        return AVERROR(ENOMEM);
      }
  
 -    s->max_buf_size = s->avctx->width*s->avctx->height*s->pixel_size*2 /* image base material */
 -                      + 15                                           /* header + footer */
 -                      + s->avctx->height*2                           /* skip code+rle end */
 -                      + s->avctx->width/MAX_RLE_BULK + 1             /* rle codes */;
 +    s->max_buf_size = s->logical_width*s->avctx->height*s->pixel_size*2 /* image base material */
 +                      + 15                                            /* header + footer */
 +                      + s->avctx->height*2                            /* skip code+rle end */
 +                      + s->logical_width/MAX_RLE_BULK + 1             /* rle codes */;
  
      return 0;
  }
@@@ -326,10 -260,10 +326,10 @@@ static int encode_frame(QtrleEncContex
      uint8_t *orig_buf = buf;
  
      if (!s->key_frame) {
 -        unsigned line_size = s->avctx->width * s->pixel_size;
 +        unsigned line_size = s->logical_width * s->pixel_size;
          for (start_line = 0; start_line < s->avctx->height; start_line++)
              if (memcmp(p->data[0] + start_line*p->linesize[0],
-                        s->previous_frame.data[0] + start_line*s->previous_frame.linesize[0],
+                        s->previous_frame->data[0] + start_line * s->previous_frame->linesize[0],
                         line_size))
                  break;