通过patch更好理解x264代码的小技巧

最近在看x264代码,比较痛苦的是有些魔数不知道是什么意思。或者不知道某些语句的含义。

例如:在文件common/common.h中

#define QP_MAX_SPEC (51+QP_BD_OFFSET)
#define QP_MAX (QP_MAX_SPEC+18)
#define QP_MAX_MAX (51+2*6+18)

QP_BD_OFFSET 好理解,是由于引进了highbit(就是yuv444,yuv422)而导致的QP的增加

但是+18是那里来的呢?

查找google,也很难得到准确的信息。那我们是不是可以看一下这个宏是什么时候引入的呢?那么同时提交的修改是不是可以帮助说明这个疑点呢?

那就让我们在x264提交的patch中搜索一下把。

1. 从网络中git clone x264的库

2. 在库的跟目录下执行 git format-patch --root origin

3. 把所有的patch拷贝到一个目录下。

4. grep QP_MAX_MAX 发现两次修改

   1666-Support-for-9-and-10-bit-encoding.patch:+#define QP_MAX_MAX (51+2*6)

    ......

   1881-VBV-emergency-mode.patch:-#define QP_MAX_MAX (51+2*6)
   1881-VBV-emergency-mode.patch:+#define QP_MAX_MAX (51+2*6+18)

   第一次的是没有18的,在patch1881中才增加了18。

5. 察看patch 1181.发现有个commit log

Subject: [PATCH 1881/2377] VBV emergency mode Allow ratecontrol to select
 "quantizers" above the maximum. These "quantizers" progressively decimate the
 source to avoid VBV underflow. x264 is now VBV compliant even with input as
 evil as /dev/random.

为了避免VBV下溢而引入的超过最大量化值的一些量化数值。

如果要完全高清楚作者+18的机制,好比为什么+18,而不是12,17,为什么不加就会VBV下溢。

这就需要后续在去了解VBV的机制了。这个可以作为另外一个问题深入了解。:)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值