- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
H.264一
2007-12-3017:05
H.264标准写得比较繁复,所以考虑在浏览完Whitepaper之后就开始研读X264
代码。X264代码风格还是比较清晰简洁的。
根据对标准得理解,PictureOrderCount在Slice解码的一开始就被提及:
I0B1B2P3B4B5P6I0P3B1B2P6B4B5
于是I0的POC是0,P3的POC是3,B1是1……
为了支持H264复杂的帧存机制,X264以专门的一个模块frame.c进行处理。
common/frame.c中包括一组帧缓冲操作函数。包括对帧进行FILO和FIFO存取,空闲帧队列的相应操作等。
以下逐个函数分析encoder.c中编码一帧的函数x264_encoder_encode中有关
frame的调用:
x264_reference_update
这个函数里最主要的工作的是将上一个参考帧放入参考帧队列,并从空闲帧队列中取出一帧作为当前的参考工作帧(即解码操作的目的帧),即h-fdec。
x264_t结构体维护着CODEC的诸多重要信息,其中成员frames是一个指示和控制帧编码过程的结构。其中current是已经准备就绪可以编码的帧,其类型已经确定;next是尚未确定类型的帧;unused用于回收不使用的frame结构体以备今后再次使用。frames结构体中i_input指示当前输入的帧的(播放顺序)序号。i_delay设置为由B帧个数(线程个数)确定的帧缓冲延迟,在多线程情况下为i_delay=i_bframe+i_threads-1。而判断B帧缓冲填充是否足够则通过条件判断:h-frames.i_input=h-frames.i_delay+1-
h-param.i_threads。
x264_encoder_encode每次会以参数送入一帧待编码的帧pic_in,函数首先会从空闲队列中取出一帧用于承载该新帧,而它的i_frame被设定为播放顺序计数,如:fenc-i_frame=h-frames.i_input++。
x264_encoder_encode在根据上述判据确定B帧缓冲充满的情况下才进行后续编码工作。
当当前队列(current队列)可用帧为0时,需要对next队列中的帧进行判决,需要进行如下过程:
调用x264_slicetype_decide
这个函数确定当前条带(帧)的类型
其中首先调用x264_ratecontrol_slice_type,依据码率控制逐个求出next列表中所有帧的类型(虽然在当前并不全部用到,见后)。
随后统计审查并调整next列表,保证IDR帧满足有关最大关键帧间隔的要求的正常出现:即针对frm-i_frame-h-frames.i_last_idr=
h-param.i_keyint_max作判断。审查按顺序针对所有被判定为B系或AUTO类型的帧进行(这些帧在审核过程中被确认为B帧),直到遇到第一个不是这样的帧。
如果某个帧被指定为IDR,则一个GOP在它之前结束。
而后,即将next列表中已经判定的一系列帧(先后是一些B帧和一个非B
帧)转移到current列表中。在这个过程中:
原始序列(播放顺序)B0,B1,B2,P,转移后的顺序为P,B0,B1,B2。在使用bframe_pyramid模式时,中间的B帧要前置,即上述顺序变为:P,B1,B0,B2。
此时,就可以从current队列中取出一帧,进行编码,现在记这帧叫h-fenc。首先做几项和帧有关的设置工作:
如果f_enc是IDR,则将最近IDR序号标记h-frames.i_last_idr设置为
i_frame。
根据f_enc的类型确定NAL和SLICE类型相关参数。
设置POC为2*(h-fenc-i_frame-h-frames.i_last_idr)。并使得h-fdec和h-fenc的主要帧参数一致。
随后进行以下一些过程:
x264_reference_build_list
在这个函数中,我们将遇到参考帧列表h-frames.reference和H.264很有特色的双列表(h-fref0、h-fref1)。前者中放置了所有可用于参考的参考帧。首先将所有reference列表中的帧按照POC和h-fenc的POC的大小关系不同复制到双列表中,其中h-fref0放置POC较小的那
您可能关注的文档
- FS1024S扫描流程分析和总结.docx
- FSK传输系统实验.docx
- FSMIT安装前的准备事项.docx
- FTP服务器和ABAP的连接.docx
- FunctionBoschSecurity博世报警分析和总结.docx
- FUSHENG系列柴油发电机组使用与维护.docx
- f多业务模式与矩阵式管理.docx
- G704分析和总结分析和总结.docx
- ganglia介绍与配置分析和总结.docx
- gaosu 施组文字说明.docx
- 2023年江苏省镇江市润州区中考生物二模试卷+答案解析.pdf
- 2023年江苏省徐州市邳州市运河中学中考生物二模试卷+答案解析.pdf
- 2023年江苏省苏州市吴中区中考冲刺数学模拟预测卷+答案解析.pdf
- 2023年江苏省南通市崇川区田家炳中学中考数学四模试卷+答案解析.pdf
- 2023年江西省吉安市中考物理模拟试卷(一)+答案解析.pdf
- 2023年江苏省泰州市海陵区九年级(下)中考三模数学试卷+答案解析.pdf
- 2023年江苏省苏州市高新二中中考数学二模试卷+答案解析.pdf
- 2023年江苏省南通市九年级数学中考复习模拟卷+答案解析.pdf
- 2023年江苏省南通市海安市九年级数学模拟卷+答案解析.pdf
- 2023年江苏省泰州市靖江外国语学校中考数学一调试卷+答案解析.pdf
最近下载
- 第三节 免疫分析仪器的维护_医疗设备维护概论_第四章 医用检验设备的维护.pptx
- 垃圾分类整治工作总结.pptx
- 2024年常见人力资源面试题库(通用7篇).pdf
- 《糟糕,身上长条纹了!》绘本故事PPT2套.pptx
- 25题规划发展岗位常见面试问题含HR问题考察点及参考回答.pdf
- 清华大学央企班组长远程培训自测题及答案(17门课合集).pptx
- 英语国家概况课后习题答案解析(完整版).doc
- 幼儿园 大班数学《美丽的对称图形》.pptx VIP
- 新视野大学英语(第三版)读写教程Section B-Too much of a good thing – A real addiction.ppt
- 2023年中小学教师职称考试试题含答案.docx
文档评论(0)