我正在通过集成在FFMPEG中的HEVC解码器。我真的在试着理解它的流程和工作原理。
所谓流,我指的是在代码中读取输入.bin文件的各种参数的部分。就像它在哪里读取分辨率,在哪里它决定它需要播放的fps,输出显示格式,即yuv420p等等。
最初,我怀疑的是位于/libavformat/hevcdec.c文件中的hevc的演示器执行输入文件读取工作。有一个探测函数,用于检测在解码输入bin流时选择哪个解码器。更进一步,我们有一个FF_DEF_RAWVIDEO_DEMUXER。是否在此函数中从输入文件中读取分辨率和其他参数?
其次,我怀疑的是位于:/libavcodec/hevc_parser.c的hevc解析器,但在这里,我认为它只是解析框架数据,即找到框架的结尾。那么,我的假设是对的吗?
任何建议或预测都会对我很有帮助。请提供你的宝贵建议。提前谢谢。
发布于 2015-03-07 21:14:35
为了更具体地了解解码器中发生的事情,最好从HEVC/H.265标准(http://www.itu.int/rec/T-REC-H.265)开始。它包含了您需要知道的所有信息,以找到分辨率、fps等的位置。
如果您想从FFMPEG获得更多细节,以下是一些提示:
/libavcodec/hevc_parser.c包含H.265附件B解析器,它将字节流转换为一系列NAL单元。每个NAL单元都有自己的格式,应该根据其NAL单元类型进行解析。ff_hevc_decode_nal_sps中有一个函数/libavcodec/hevc_ps.c,它从比特流中提取SPS参数。注意:我说的是FFMPEG版本2.5.3。其他版本的代码结构可能不同。
https://stackoverflow.com/questions/21249833
复制相似问题