织梦CMS - 轻松建站从此开始!

罗索

x264中不同帧类型的编码顺序

落鹤生 发布于 2012-12-19 09:54 点击:次 
先确立第一个帧的类型, 然后进行编码. 然后是2个B帧, 把它放进缓冲区数组. 然后是P帧, 可以判定它的类型并进行编码. 同时, 将缓冲区的B帧放进h->bframe_current[i], 不过这时P帧前的两个B帧并没有编码.
TAG:

在h中同时定义了下面几个帧数组用以实现帧的管理.

  1. /* store the sequence of b frame being encoded */  
  2. x264_frame_t *bframe_current[X264_BFRAME_MAX];  
  3.  
  4. /* store the next sequence of frames to be encoded */ 
  5. x264_frame_t *frame_next[X264_BFRAME_MAX+1]; //下一个帧, 不一定是B帧.  
  6.  
  7. /* store unused frames */  
  8. x264_frame_t *frame_unused[X264_BFRAME_MAX+1]; 

同时还有下面4个函数(定义在\ENCODER\encoder.c中). 

  1. x264_encoder_frame_put_from_picture();  
  2. x264_encoder_frame_put();  
  3. x264_encoder_frame_get();  
  4. x264_frame_copy_picture();  

这3个数组和4个函数可以说完成了整个帧的类型的判定问题.但此处代码里if, else语句较多,容易使人迷惑.需要把握下面一个实质: 在不对P帧进行编码之前, 不对B帧进行编码, 只是把B帧放进缓冲区(就是前面提到的数组).

      比如视频序列: I  B  B  P  B  B  P
      
先确立第一个帧的类型, 然后进行编码. 然后是2个B帧, 把它放进缓冲区数组. 然后是P帧, 可以判定它的类型并进行编码. 同时, 将缓冲区的B帧放进h->bframe_current[i], 不过这时P帧前的两个B帧并没有编码. 当读到P帧后面的第一个B帧时, 实际上才将h->bframe_current数组中的第一个B帧编码, 也就是将在I帧后面的第一个B帧(说成P帧前面的第一个B帧容易误解)编码.

(vblittleboy)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201212/16431.html]
本文出处:CSDN博客 作者:vblittleboy 原文
顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容