例如:在文件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的机制了。这个可以作为另外一个问题深入了解。:)