下面是来自FFMPEG库的两段代码,具体位于这里:libavcodec/h263data.h(http://ffmpeg.org/doxygen/0.6/h263data_8h-source.html)。这两部分libavcodec/h263data.h究竟做了什么?
我想知道更多关于这两个段如何在编解码器库的更大范围内运行。下面,通过这些例子,我描述了迄今为止的理解,并提供了两个我希望得到答案的更清晰的问题。
谢谢任何帮助!
例1
00035 /* intra MCBPC, mb_type = (intra), then (intraq) */
00036 const uint8_t ff_h263_intra_MCBPC_code[9] = { 1, 1, 2, 3, 1, 1, 2, 3, 1 };
00037 const uint8_t ff_h263_intra_MCBPC_bits[9] = { 1, 3, 3, 3, 4, 6, 6, 6, 9 };
和示例2
00039 /* inter MCBPC, mb_type = (inter), (intra), (interq), (intraq), (inter4v) */
00040 /* Changed the tables for interq and inter4v+q, following the standard ** Juanjo ** */
00041 const uint8_t ff_h263_inter_MCBPC_code[28] = {
00042 1, 3, 2, 5,
00043 3, 4, 3, 3,
00044 3, 7, 6, 5,
00045 4, 4, 3, 2,
00046 2, 5, 4, 5,
00047 1, 0, 0, 0, /* Stuffing */
00048 2, 12, 14, 15,
00049 };
据我所知,我们正在寻找影响正交方案的压缩算法的大库的一小部分,其预测“正确的”或更恰当地放置“原始”的运动间或运动内矢量,其在名称“ff_h263” _inter_MCBPC_code“,”ff_h263_intra_MCBPC_code“和”ff_h263_intra_MCBPC_bits“。
我知道,在这些代码两个街区的名字划分如下:
常量指的阅读声明唯一的变量可还在外面等中使用的范围任何其他变量。另一种说法是,这个数组中的值不能被任何外部调用的方法改变。
uint8_t是无符号整数具有8个比特的长度是一个C99的标准,这就是所谓的部分“固定宽度整数类型”。这种特定类型,即“精确宽度整数”,计算最小值为0且最大值为8的带符号或无符号位的范围(即8x8宏块),这保证跨平台的这个位数,比方说,32位或64位操作系统。 (我研究这个位在这里:“固定宽度整数类型” http://en.wikipedia.org/wiki/Stdint.h#stdint.h)
MCBPC指宏块类型&色度块编码模式,但我并不完全了解这些特定阵列的确切作用是该文件的方案和libavcodec。我从概念上理解更多,比我在这些例子中定义的细节/数字值更重要。
因此,考虑这一点,这是我想多了解一下:
我的理解是,迄今为止,关以任何方式?
有人可以帮助分解每个代码段做什么? 更具体地说,这些数值在每种情况下表示/做什么?
“馅”是什么意思?
再次感谢您对此事的任何帮助!
我从来没有真正看的H.263编解码器,但我认为,关键是寻找那些标识符('ff_h263_intra_MCBPC_code'等)在源代码中的其他地方怎么看/他们在哪里实际使用......从他们的定义来确定是相当困难的... – twalberg