Merge commit 'e1f907711a91e5ce19402a1831cfbe8f709b67f7'
authorMichael Niedermayer <michaelni@gmx.at>
Sun, 5 Apr 2015 19:56:50 +0000 (21:56 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 5 Apr 2015 19:56:50 +0000 (21:56 +0200)
* commit 'e1f907711a91e5ce19402a1831cfbe8f709b67f7':
  h264: factor out common code from init() and init_thread_copy()

Conflicts:
libavcodec/h264.c

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

@@@ -605,33 -581,31 +605,34 @@@ int ff_h264_decode_extradata(H264Contex
          if (ret < 0)
              return ret;
      }
 -    return 0;
 +    return size;
  }
  
av_cold int ff_h264_decode_init(AVCodecContext *avctx)
static int h264_init_context(AVCodecContext *avctx, H264Context *h)
  {
-     H264Context *h = avctx->priv_data;
      int i;
-     int ret;
-     h->avctx = avctx;
  
-     h->dequant_coeff_pps = -1;
-     h->current_sps_id = -1;
+     h->avctx                 = avctx;
+     h->dequant_coeff_pps     = -1;
++    h->current_sps_id        = -1;
      h->cur_chroma_format_idc = -1;
  
-     memset(h->pps.scaling_matrix4, 16, 6 * 16 * sizeof(uint8_t));
-     memset(h->pps.scaling_matrix8, 16, 2 * 64 * sizeof(uint8_t));
+     h->picture_structure     = PICT_FRAME;
+     h->slice_context_count   = 1;
+     h->workaround_bugs       = avctx->workaround_bugs;
+     h->flags                 = avctx->flags;
+     h->prev_poc_msb          = 1 << 16;
+     h->x264_build            = -1;
+     h->recovery_frame        = -1;
+     h->frame_recovered       = 0;
++    h->prev_frame_num        = -1;
++    h->sei_fpa.frame_packing_arrangement_cancel_flag = -1;
  
-     h->picture_structure   = PICT_FRAME;
-     h->slice_context_count = 1;
-     h->workaround_bugs     = avctx->workaround_bugs;
-     h->flags               = avctx->flags;
+     h->outputed_poc = h->next_outputed_poc = INT_MIN;
+     for (i = 0; i < MAX_DELAYED_PIC_COUNT; i++)
+         h->last_pocs[i] = INT_MIN;
  
-     /* set defaults */
-     // s->decode_mb = ff_h263_decode_mb;
-     if (!avctx->has_b_frames)
-         h->low_delay = 1;
+     ff_h264_reset_sei(h);
  
      avctx->chroma_sample_location = AVCHROMA_LOC_LEFT;
  
      for (i = 0; i < h->nb_slice_ctx; i++)
          h->slice_ctx[i].h264 = h;
  
-     h->outputed_poc      = h->next_outputed_poc = INT_MIN;
-     for (i = 0; i < MAX_DELAYED_PIC_COUNT; i++)
-         h->last_pocs[i] = INT_MIN;
-     h->prev_poc_msb = 1 << 16;
-     h->prev_frame_num = -1;
-     h->x264_build   = -1;
-     h->sei_fpa.frame_packing_arrangement_cancel_flag = -1;
-     ff_h264_reset_sei(h);
+     return 0;
+ }
+ av_cold int ff_h264_decode_init(AVCodecContext *avctx)
+ {
+     H264Context *h = avctx->priv_data;
+     int ret;
+     ret = h264_init_context(avctx, h);
+     if (ret < 0)
+         return ret;
+     memset(h->pps.scaling_matrix4, 16, 6 * 16 * sizeof(uint8_t));
+     memset(h->pps.scaling_matrix8, 16, 2 * 64 * sizeof(uint8_t));
+     /* set defaults */
+     // s->decode_mb = ff_h263_decode_mb;
+     if (!avctx->has_b_frames)
+         h->low_delay = 1;
+     ff_h264_decode_init_vlc();
+     ff_init_cabac_states();
      if (avctx->codec_id == AV_CODEC_ID_H264) {
 -        if (avctx->ticks_per_frame == 1)
 -            h->avctx->framerate.num *= 2;
 +        if (avctx->ticks_per_frame == 1) {
 +            if(h->avctx->time_base.den < INT_MAX/2) {
 +                h->avctx->time_base.den *= 2;
 +            } else
 +                h->avctx->time_base.num /= 2;
 +        }
          avctx->ticks_per_frame = 2;
      }