Merge commit '939b388383db8d0db5b2ff483e3a197c27b79791'
authorDerek Buitenhuis <derek.buitenhuis@gmail.com>
Tue, 3 May 2016 09:23:23 +0000 (10:23 +0100)
committerDerek Buitenhuis <derek.buitenhuis@gmail.com>
Tue, 3 May 2016 09:23:23 +0000 (10:23 +0100)
* commit '939b388383db8d0db5b2ff483e3a197c27b79791':
  svq3: eliminate remaining H264SliceContext usage

Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
1  2 
libavcodec/svq3.c

@@@ -1158,11 -1148,7 +1159,8 @@@ static av_cold int svq3_decode_init(AVC
      ff_hpeldsp_init(&s->hdsp, avctx->flags);
      ff_tpeldsp_init(&s->tdsp);
  
-     sl = h->slice_ctx;
      h->flags           = avctx->flags;
-     sl->is_complex     = 1;
 +    h->sps.chroma_format_idc = 1;
      h->picture_structure = PICT_FRAME;
      avctx->pix_fmt     = AV_PIX_FMT_YUVJ420P;
      avctx->color_range = AVCOL_RANGE_JPEG;
@@@ -1412,12 -1373,10 +1404,11 @@@ fail
  static int svq3_decode_frame(AVCodecContext *avctx, void *data,
                               int *got_frame, AVPacket *avpkt)
  {
 -    const uint8_t *buf = avpkt->data;
      SVQ3Context *s     = avctx->priv_data;
      H264Context *h     = &s->h;
-     H264SliceContext *sl = &h->slice_ctx[0];
      int buf_size       = avpkt->size;
 +    int left;
 +    uint8_t *buf;
      int ret, m, i;
  
      /* special case for last picture */
          return 0;
      }
  
-     sl->mb_x = sl->mb_y = sl->mb_xy = 0;
++    s->mb_x = s->mb_y = s->mb_xy = 0;
 +
 +    if (s->watermark_key) {
 +        av_fast_padded_malloc(&s->buf, &s->buf_size, buf_size);
 +        if (!s->buf)
 +            return AVERROR(ENOMEM);
 +        memcpy(s->buf, avpkt->data, buf_size);
 +        buf = s->buf;
 +    } else {
 +        buf = avpkt->data;
 +    }
 +
      ret = init_get_bits(&s->gb, buf, 8 * buf_size);
      if (ret < 0)
          return ret;
                  return -1;
              }
  
-             if (mb_type != 0 || sl->cbp)
-                 hl_decode_mb(s, h, &h->slice_ctx[0]);
 -            if (mb_type != 0)
++            if (mb_type != 0 || s->cbp)
+                 hl_decode_mb(s, h);
  
              if (s->pict_type != AV_PICTURE_TYPE_B && !h->low_delay)
                  h->cur_pic.mb_type[s->mb_x + s->mb_y * s->mb_stride] =
                             h->low_delay);
      }
  
-     if (sl->mb_y != h->mb_height || sl->mb_x != h->mb_width) {
-         av_log(avctx, AV_LOG_INFO, "frame num %d incomplete pic x %d y %d left %d\n", avctx->frame_number, sl->mb_y, sl->mb_x, left);
 +    left = buf_size*8 - get_bits_count(&h->gb);
 +
++    if (s->mb_y != h->mb_height || s->mb_x != h->mb_width) {
++        av_log(avctx, AV_LOG_INFO, "frame num %d incomplete pic x %d y %d left %d\n", avctx->frame_number, s->mb_y, s->mb_x, left);
 +        //av_hex_dump(stderr, buf+buf_size-8, 8);
 +    }
 +
 +    if (left < 0) {
 +        av_log(avctx, AV_LOG_ERROR, "frame num %d left %d\n", avctx->frame_number, left);
 +        return -1;
 +    }
 +
      if (s->pict_type == AV_PICTURE_TYPE_B || h->low_delay)
          ret = av_frame_ref(data, s->cur_pic->f);
      else if (s->last_pic->f->data[0])