Merge commit 'f9204ec56a4cf73843d1e5b8563d3584c2c05b47' into release/2.2
authorMichael Niedermayer <michaelni@gmx.at>
Wed, 30 Jul 2014 17:59:38 +0000 (19:59 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Wed, 30 Jul 2014 17:59:38 +0000 (19:59 +0200)
* commit 'f9204ec56a4cf73843d1e5b8563d3584c2c05b47':
  eamad: use the bytestream2 API instead of AV_RL

Conflicts:
libavcodec/eamad.c

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

@@@ -244,33 -237,28 +245,35 @@@ static int decode_frame(AVCodecContext 
      int chunk_type;
      int inter, ret;
  
-     if (buf_size < 26) {
-         av_log(avctx, AV_LOG_ERROR, "Input buffer too small\n");
-         *got_frame = 0;
-         return AVERROR_INVALIDDATA;
-     }
+     bytestream2_init(&gb, buf, buf_size);
  
-     chunk_type = AV_RL32(&buf[0]);
+     chunk_type = bytestream2_get_le32(&gb);
      inter = (chunk_type == MADm_TAG || chunk_type == MADe_TAG);
-     buf += 8;
+     bytestream2_skip(&gb, 10);
  
      av_reduce(&avctx->time_base.num, &avctx->time_base.den,
-               AV_RL16(&buf[6]), 1000, 1<<30);
+               bytestream2_get_le16(&gb), 1000, 1<<30);
+     width  = bytestream2_get_le16(&gb);
+     height = bytestream2_get_le16(&gb);
+     bytestream2_skip(&gb, 1);
+     calc_quant_matrix(s, bytestream2_get_byte(&gb));
+     bytestream2_skip(&gb, 2);
  
-     width  = AV_RL16(&buf[8]);
-     height = AV_RL16(&buf[10]);
-     calc_quant_matrix(s, buf[13]);
-     buf += 16;
+     if (bytestream2_get_bytes_left(&gb) < 2) {
+         av_log(avctx, AV_LOG_ERROR, "Input data too small\n");
+         return AVERROR_INVALIDDATA;
+     }
  
 +    if (width < 16 || height < 16) {
 +        av_log(avctx, AV_LOG_ERROR, "Dimensions too small\n");
 +        return AVERROR_INVALIDDATA;
 +    }
 +
      if (avctx->width != width || avctx->height != height) {
          av_frame_unref(s->last_frame);
-         if((width * height)/2048*7 > buf_end-buf)
++        if((width * height)/2048*7 > bytestream2_get_bytes_left(&gb))
 +            return AVERROR_INVALIDDATA;
          if ((ret = ff_set_dimensions(avctx, width, height)) < 0)
              return ret;
      }
      }
  
      av_fast_padded_malloc(&s->bitstream_buf, &s->bitstream_buf_size,
-                           buf_end - buf);
+                           bytestream2_get_bytes_left(&gb));
      if (!s->bitstream_buf)
          return AVERROR(ENOMEM);
-     s->dsp.bswap16_buf(s->bitstream_buf, (const uint16_t*)buf, (buf_end-buf)/2);
-     memset((uint8_t*)s->bitstream_buf + (buf_end-buf), 0, FF_INPUT_BUFFER_PADDING_SIZE);
-     init_get_bits(&s->gb, s->bitstream_buf, 8*(buf_end-buf));
+     s->dsp.bswap16_buf(s->bitstream_buf, (const uint16_t *)(buf + bytestream2_tell(&gb)),
+                          bytestream2_get_bytes_left(&gb) / 2);
++    memset((uint8_t*)s->bitstream_buf + bytestream2_get_bytes_left(&gb), 0, FF_INPUT_BUFFER_PADDING_SIZE);
+     init_get_bits(&s->gb, s->bitstream_buf, 8*(bytestream2_get_bytes_left(&gb)));
 +
      for (s->mb_y=0; s->mb_y < (avctx->height+15)/16; s->mb_y++)
          for (s->mb_x=0; s->mb_x < (avctx->width +15)/16; s->mb_x++)
 -            decode_mb(s, frame, inter);
 +            if(decode_mb(s, frame, inter) < 0)
 +                return AVERROR_INVALIDDATA;
  
      *got_frame = 1;