| @@ -584,36 +584,31 @@ int ff_h264_decode_extradata(H264Context *h) | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| 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 i; | ||||
| int ret; | |||||
| h->avctx = avctx; | |||||
| h->dequant_coeff_pps = -1; | |||||
| h->avctx = avctx; | |||||
| h->dequant_coeff_pps = -1; | |||||
| h->cur_chroma_format_idc = -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->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; | avctx->chroma_sample_location = AVCHROMA_LOC_LEFT; | ||||
| ff_h264_decode_init_vlc(); | |||||
| ff_init_cabac_states(); | |||||
| h->nb_slice_ctx = (avctx->active_thread_type & FF_THREAD_SLICE) ? H264_MAX_THREADS : 1; | h->nb_slice_ctx = (avctx->active_thread_type & FF_THREAD_SLICE) ? H264_MAX_THREADS : 1; | ||||
| h->slice_ctx = av_mallocz_array(h->nb_slice_ctx, sizeof(*h->slice_ctx)); | h->slice_ctx = av_mallocz_array(h->nb_slice_ctx, sizeof(*h->slice_ctx)); | ||||
| if (!h->slice_ctx) { | if (!h->slice_ctx) { | ||||
| @@ -624,14 +619,30 @@ av_cold int ff_h264_decode_init(AVCodecContext *avctx) | |||||
| for (i = 0; i < h->nb_slice_ctx; i++) | for (i = 0; i < h->nb_slice_ctx; i++) | ||||
| h->slice_ctx[i].h264 = h; | 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->x264_build = -1; | |||||
| ff_h264_reset_sei(h); | |||||
| h->recovery_frame = -1; | |||||
| h->frame_recovered = 0; | |||||
| 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->codec_id == AV_CODEC_ID_H264) { | ||||
| if (avctx->ticks_per_frame == 1) | if (avctx->ticks_per_frame == 1) | ||||
| h->avctx->framerate.num *= 2; | h->avctx->framerate.num *= 2; | ||||
| @@ -666,24 +677,17 @@ av_cold int ff_h264_decode_init(AVCodecContext *avctx) | |||||
| static int decode_init_thread_copy(AVCodecContext *avctx) | static int decode_init_thread_copy(AVCodecContext *avctx) | ||||
| { | { | ||||
| H264Context *h = avctx->priv_data; | H264Context *h = avctx->priv_data; | ||||
| int i; | |||||
| int ret; | |||||
| if (!avctx->internal->is_copy) | if (!avctx->internal->is_copy) | ||||
| return 0; | return 0; | ||||
| memset(h->sps_buffers, 0, sizeof(h->sps_buffers)); | memset(h->sps_buffers, 0, sizeof(h->sps_buffers)); | ||||
| memset(h->pps_buffers, 0, sizeof(h->pps_buffers)); | memset(h->pps_buffers, 0, sizeof(h->pps_buffers)); | ||||
| h->nb_slice_ctx = (avctx->active_thread_type & FF_THREAD_SLICE) ? H264_MAX_THREADS : 1; | |||||
| h->slice_ctx = av_mallocz_array(h->nb_slice_ctx, sizeof(*h->slice_ctx)); | |||||
| if (!h->slice_ctx) { | |||||
| h->nb_slice_ctx = 0; | |||||
| return AVERROR(ENOMEM); | |||||
| } | |||||
| for (i = 0; i < h->nb_slice_ctx; i++) | |||||
| h->slice_ctx[i].h264 = h; | |||||
| ret = h264_init_context(avctx, h); | |||||
| if (ret < 0) | |||||
| return ret; | |||||
| h->avctx = avctx; | |||||
| h->context_initialized = 0; | h->context_initialized = 0; | ||||
| return 0; | return 0; | ||||