Vlc部分功能流程图
block_FifoGet 获取编码的block |
DecoderProcess |
Decoder thread
|
DecoderProcessVideo |
packetizer_Packetize将接受到的block进行packet组装为一个完整的NAL |
DecoderDecodeVideo 使用ffmpeg解码 |
DecodeVideo |
判断当前packet是否过期需要丢弃,无需解码 |
填充AVPacket,解码avcodec_decode_video2 |
Compute the PTS,Stream pts转换为system pts,并加上缓冲延时时间。判断当前帧是否已经滞后,并记统计滞后数目。解码下一帧时根据滞后标记,决定解码还是直接丢弃。更新p_pic->date =i_pts |
DecoderPlayVideo stream pts到system pts的转换,加上缓冲时间延迟。display thread会用于判断显示 |
Display thread |
ThreadDisplayPicture |
ThreadDisplayPreparePicture |
ThreadDisplayRenderPicture |
picture_fifo_Pop获取解码过的picture |
根据decoded->date与当前系统时间相减,若超过20ms直接丢弃,若不到则显示并打印提示滞后时间。 |
将decoded的picture赋值vout->p->displayed.decoded = picture_Hold(decoded); |
若current为空则直接赋值 |