摘要:
这里主要有一下几个过程:1. 初始化h->stat.frame,即全部清零。2. 写条带头:x264_slice_header_write,即把刚才x264_slice_header_init设置的一些参数写入。3. 如果是CABAC编码,则初始化CABAC。有关CABAC在后续相关章节讨论。4. 遍历一帧中的所有宏块,这是编码的主要部分:for( mb_xy = h->sh.i_first_mb, i_skip = 0; mb_xy < h->sh.i_last_mb; )其中sh.i_first_mb和sh.i_last_mb在x264_slice_header_i 阅读全文
摘要:
H.264标准写得比较繁复,所以考虑在浏览完Whitepaper之后就开始研读X264代码。X264代码风格还是比较清晰简洁的。根据对标准的理解,Picture Order Count在Slice解码的一开始就被提及:I0 B1 B2 P3 B4 B5 P6I0 P3 B1 B2 P6 B4 B5于是I0的POC是0,P3的POC是3,B1是1……为了支持H264复杂的帧存机制,X264以专门的一个模块frame.c进行处理。common/frame.c中包括一组帧缓冲操作函数。包括对帧进行FILO和FIFO存取,空闲帧队列的相应操作等。以下逐个函数分析encoder.c中编码一帧的函数x26 阅读全文
摘要:
在图形学坐标变换中,绕轴旋转是非常重要和常见的,例如在生成Camera和World的变换关系时广泛使用。以前曾得到过这个变换公式,但已经忘了是如何导出的,甚或是直接抄来的。现在索性重新推导一遍。设轴的矢量为[x, y, z]为构成右手系A系,需要补充两个正交向量:[e, f, g][u, v, w]根据右手系,有以下关系:u = y*g-z*fv = z*e-x*gw = x*f-y*ee = v*z-w*yf = w*x-u*zg = u*y-v*xx = f*w-g*vy = g*u-e*wz = e*v-f*u由A系到原坐标系的坐标变换矩阵是:A = [e, u, x; f, v, y; 阅读全文