下面是來自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