ffmpeg h264 动态分辨率解码流程

一、背景

实测ffmpeg init 264 decode的时候,配置的是1080p的分辨率,直接来360p的数据,可以正常解析,反之init配置360p分辨率,实际来1080p数据,也可以正常解析。

二、分析

分析源码是每次解码器收到SPS数据的时候,都会重新更新初始化一次解码器参数。

h264_decode_frame  
->ff_h264_decode_extradata
->decode_nal_units
->ff_h264_decode_seq_parameter_set 
获取SPS里面的编码参数,例如分辨率等。

h264_decode_frame  
->decode_nal_units 
->ff_h264_decode_slice_header(按照SPS参数,更新新的编码参数,如分辨率) 
->h264_slice_header_init 
->ff_h264_alloc_tables 按照新的分辨率申请宏块内存

ff_h264_decode_slice_header(按照SPS参数,更新新的编码参数,如分辨率) 

ff_h264_alloc_tables 按照新的分辨率申请宏块内存

三、结论

解码器在每次收到IDR帧的SPS可以重新初始化解码器,可以自适应解码不同分辨率的数据。

猜你喜欢

转载自blog.csdn.net/CrystalShaw/article/details/129619305
今日推荐