H264
格式介绍
avcc:前四个字节表示nalu的size(大端)
Annex B:0x000001或者0x00000001开始码,nalu针对0x000000,0x000001,0x000002和0x000003插入0x03防竞争字节
原理简析
宏块固定16x16
源码介绍
H264Context
struct H264Context {
const AVClass* class;
AVCodecContext* avctx;
H2645Packet pkt; // 存放多个nal,ff_h2645_packet_split
int is_avc; // 判断是否是avc1
int nal_length_size; // nal单元长度表示,(1, 2 or 4)字节
......
}
avcodec_send_packet
* decode_receive_frame_internal -> decode_simple_receive_frame -> decode_simple_internal -> h264_decode_frame
decode_nal_units(先判断是否为avcc格式)
-
ff_h2645_packet_split(根据is_avc的值,是按avc1或h264格式解析获取nal的长度)
- ff_h264_sei_decode
- ff_h264_decode_seq_parameter_set
- ff_h264_decode_picture_parameter_set
- ff_h264_queue_decode_slice
其中ff_h2645_packet_split
- get_nalsize或find_next_start_code
- ff_h2645_extract_rbsp
- h264_parse_nal_header
avcodec_receive_frame