ffmpeg 中 h264 解码器 slice层 以上 解码框架

void decode_nal_units( H264Context *h, const uint8_t *buf, int buf_size )
{ 
	int buf_index = 0;
	int context_count = 0; 
	int next_avc = buf_size; 

	while ( 1 ) 
	{ 
		if( buf_index >= next_avc ) 
			break; 
		
		// start code prefix search
		for( ; buf_index + 3 < next_avc; buf_index++)
		{
			if(buf[buf_index] == 0 && buf[buf_index+1] == 0 && buf[buf_index+2] == 1)
				break;
		} 

		buf_index += 3; 
		ff_h264_decode_nal( h ); 
		
		switch ( h->nal_unit_type ) 
		{ 
		case NAL_IDR_SLICE:
			idr( h ); 
		case NAL_SLICE: 
			decode_slice_header( h ); 
			context_count++; 
			break; 
		case NAL_DPA: 
			decode_slice_header( h ); 
			break; 
		case NAL_DPB: 
			//..... 
			break; 
		case NAL_DPC: 
			context_count++; 
			break; 
		case NAL_SEI: 
			h264_decode_sei(h); 
			break; 
		case NAL_SPS: 
			h264_decode_seq_parameter_set( h ); 
			break; 
		case NAL_PPS:
			h264_decode_picture_parameter_set( h ); 
			break; 

		default: av_log("Unknown NAL code"); 
		} 

		if(context_count == h->max_contexts)
		{
			execute_decode_slices(h, context_count);context_count = 0;
		} 
	} 
	
	if( context_count )
		execute_decode_slices( h, context_count ); 
} 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值