| 
																	
																	
																		
																	
																	
																 | 
																@@ -323,6 +323,39 @@ static int h264_init_context(AVCodecContext *avctx, H264Context *h) | 
															
														
														
													
														
															
																 | 
																 | 
																    return 0; | 
																 | 
																 | 
																    return 0; | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																static av_cold int h264_decode_end(AVCodecContext *avctx) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																{ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    H264Context *h = avctx->priv_data; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    int i; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    ff_h264_free_tables(h); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    for (i = 0; i < H264_MAX_PICTURE_COUNT; i++) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        ff_h264_unref_picture(h, &h->DPB[i]); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        av_frame_free(&h->DPB[i].f); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    } | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    h->cur_pic_ptr = NULL; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    for (i = 0; i < h->nb_slice_ctx; i++) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        av_freep(&h->slice_ctx[i].rbsp_buffer); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    av_freep(&h->slice_ctx); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    h->nb_slice_ctx = 0; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    for (i = 0; i < MAX_SPS_COUNT; i++) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        av_buffer_unref(&h->ps.sps_list[i]); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    for (i = 0; i < MAX_PPS_COUNT; i++) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        av_buffer_unref(&h->ps.pps_list[i]); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    ff_h2645_packet_uninit(&h->pkt); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    ff_h264_unref_picture(h, &h->cur_pic); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    av_frame_free(&h->cur_pic.f); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    return 0; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																static AVOnce h264_vlc_init = AV_ONCE_INIT; | 
																 | 
																 | 
																static AVOnce h264_vlc_init = AV_ONCE_INIT; | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																av_cold int ff_h264_decode_init(AVCodecContext *avctx) | 
																 | 
																 | 
																av_cold int ff_h264_decode_init(AVCodecContext *avctx) | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																		
																	
																	
																 | 
																@@ -351,7 +384,7 @@ av_cold int ff_h264_decode_init(AVCodecContext *avctx) | 
															
														
														
													
														
															
																 | 
																 | 
																                                      &h->ps, &h->is_avc, &h->nal_length_size, | 
																 | 
																 | 
																                                      &h->ps, &h->is_avc, &h->nal_length_size, | 
															
														
														
													
														
															
																 | 
																 | 
																                                      avctx->err_recognition, avctx); | 
																 | 
																 | 
																                                      avctx->err_recognition, avctx); | 
															
														
														
													
														
															
																 | 
																 | 
																       if (ret < 0) { | 
																 | 
																 | 
																       if (ret < 0) { | 
															
														
														
													
														
															
																 | 
																 | 
																           ff_h264_free_context(h); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																           h264_decode_end(avctx); | 
															
														
														
													
														
															
																 | 
																 | 
																           return ret; | 
																 | 
																 | 
																           return ret; | 
															
														
														
													
														
															
																 | 
																 | 
																       } | 
																 | 
																 | 
																       } | 
															
														
														
													
														
															
																 | 
																 | 
																    } | 
																 | 
																 | 
																    } | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																		
																	
																	
																 | 
																@@ -1064,45 +1097,6 @@ out: | 
															
														
														
													
														
															
																 | 
																 | 
																    return get_consumed_bytes(buf_index, buf_size); | 
																 | 
																 | 
																    return get_consumed_bytes(buf_index, buf_size); | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																av_cold void ff_h264_free_context(H264Context *h) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																{ | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    int i; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    ff_h264_free_tables(h); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    for (i = 0; i < H264_MAX_PICTURE_COUNT; i++) { | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        ff_h264_unref_picture(h, &h->DPB[i]); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        av_frame_free(&h->DPB[i].f); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    } | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    h->cur_pic_ptr = NULL; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    for (i = 0; i < h->nb_slice_ctx; i++) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        av_freep(&h->slice_ctx[i].rbsp_buffer); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    av_freep(&h->slice_ctx); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    h->nb_slice_ctx = 0; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    for (i = 0; i < MAX_SPS_COUNT; i++) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        av_buffer_unref(&h->ps.sps_list[i]); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    for (i = 0; i < MAX_PPS_COUNT; i++) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        av_buffer_unref(&h->ps.pps_list[i]); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    ff_h2645_packet_uninit(&h->pkt); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																static av_cold int h264_decode_end(AVCodecContext *avctx) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																{ | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    H264Context *h = avctx->priv_data; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    ff_h264_free_context(h); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    ff_h264_unref_picture(h, &h->cur_pic); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    av_frame_free(&h->cur_pic.f); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    return 0; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																#define OFFSET(x) offsetof(H264Context, x) | 
																 | 
																 | 
																#define OFFSET(x) offsetof(H264Context, x) | 
															
														
														
													
														
															
																 | 
																 | 
																#define VD AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM | 
																 | 
																 | 
																#define VD AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM | 
															
														
														
													
														
															
																 | 
																 | 
																static const AVOption h264_options[] = { | 
																 | 
																 | 
																static const AVOption h264_options[] = { | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																	
																 | 
																
  |