From: Clément Bœsch Date: Mon, 20 Jun 2016 10:35:32 +0000 (+0200) Subject: Merge commit '370ddc7b38d6b27b54fc2f5ee5f3dd9506f8c7c8' X-Git-Tag: android-x86-7.1-r1~4819 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=c8f7a23319e54059c6a355746845c4e4e0215509;p=android-x86%2Fexternal-ffmpeg.git Merge commit '370ddc7b38d6b27b54fc2f5ee5f3dd9506f8c7c8' * commit '370ddc7b38d6b27b54fc2f5ee5f3dd9506f8c7c8': h264: remove H264Context.pict_type Merged-by: Clément Bœsch --- c8f7a23319e54059c6a355746845c4e4e0215509 diff --cc libavcodec/h264.c index 812e7c0027,c024d7e03a..f2dc47338c --- a/libavcodec/h264.c +++ b/libavcodec/h264.c @@@ -490,9 -436,8 +490,7 @@@ static void decode_postinit(H264Contex H264Picture *out = h->cur_pic_ptr; H264Picture *cur = h->cur_pic_ptr; int i, pics, out_of_order, out_idx; - int invalid = 0, cnt = 0; - h->cur_pic_ptr->f->pict_type = h->pict_type; - if (h->next_output_pic) return; diff --cc libavcodec/h264_slice.c index 0365e9b4c5,9e08c0b64e..0e13fd9956 --- a/libavcodec/h264_slice.c +++ b/libavcodec/h264_slice.c @@@ -496,37 -466,11 +496,39 @@@ static int h264_frame_start(H264Contex pic->f->key_frame = 0; pic->mmco_reset = 0; pic->recovered = 0; + pic->invalid_gap = 0; + pic->sei_recovery_frame_cnt = h->sei.recovery_point.recovery_frame_cnt; + pic->f->pict_type = h->slice_ctx[0].slice_type; + - if (CONFIG_ERROR_RESILIENCE && h->enable_er) + if ((ret = alloc_picture(h, pic)) < 0) + return ret; + if(!h->frame_recovered && !h->avctx->hwaccel +#if FF_API_CAP_VDPAU + && !(h->avctx->codec->capabilities & AV_CODEC_CAP_HWACCEL_VDPAU) +#endif + ) + ff_color_frame(pic->f, c); + + h->cur_pic_ptr = pic; + ff_h264_unref_picture(h, &h->cur_pic); + if (CONFIG_ERROR_RESILIENCE) { + ff_h264_set_erpic(&h->slice_ctx[0].er.cur_pic, NULL); + } + + if ((ret = ff_h264_ref_picture(h, &h->cur_pic, h->cur_pic_ptr)) < 0) + return ret; + + for (i = 0; i < h->nb_slice_ctx; i++) { + h->slice_ctx[i].linesize = h->cur_pic_ptr->f->linesize[0]; + h->slice_ctx[i].uvlinesize = h->cur_pic_ptr->f->linesize[1]; + } + + if (CONFIG_ERROR_RESILIENCE && h->enable_er) { ff_er_frame_start(&h->slice_ctx[0].er); + ff_h264_set_erpic(&h->slice_ctx[0].er.last_pic, NULL); + ff_h264_set_erpic(&h->slice_ctx[0].er.next_pic, NULL); + } for (i = 0; i < 16; i++) { h->block_offset[i] = (4 * ((scan8[i] - scan8[0]) & 7) << pixel_shift) + 4 * pic->f->linesize[0] * ((scan8[i] - scan8[0]) >> 3); @@@ -1129,21 -976,6 +1131,17 @@@ int ff_h264_decode_slice_header(H264Con return AVERROR_INVALIDDATA; } + if (h->current_slice == 0 && !h->first_field) { + if ( + (h->avctx->skip_frame >= AVDISCARD_NONREF && !h->nal_ref_idc) || + (h->avctx->skip_frame >= AVDISCARD_BIDIR && sl->slice_type_nos == AV_PICTURE_TYPE_B) || + (h->avctx->skip_frame >= AVDISCARD_NONINTRA && sl->slice_type_nos != AV_PICTURE_TYPE_I) || + (h->avctx->skip_frame >= AVDISCARD_NONKEY && h->nal_unit_type != NAL_IDR_SLICE && h->sei.recovery_point.recovery_frame_cnt < 0) || + h->avctx->skip_frame >= AVDISCARD_ALL) { + return SLICE_SKIPED; + } + } + - // to make a few old functions happy, it's wrong though - if (!h->setup_finished) - h->pict_type = sl->slice_type; - pps_id = get_ue_golomb(&sl->gb); if (pps_id >= MAX_PPS_COUNT) { av_log(h->avctx, AV_LOG_ERROR, "pps_id %u out of range\n", pps_id);