先上**:
static inline int x264_median( int a, int b, int c )
該函式實現的功能其實看函式名就能夠知道了,就是求a,b,c三個整型值的中位數。但是呢,函式的實現確並非令人一目了然,需要仔細分析計算才能夠看明白這裡面到底為什麼就能夠求出這三個整型值的中位數,乙個我們預期的比較語句都沒有出現。下面就來逐一進行分析。
首先假定讀者都對計算機中數的表示(位數,補碼等)有著一定了解,這裡不會細講這方面的知識,只是使用當中的一些結論,如有不明之處,可自行查詢資料補缺。
先看第一句
t = (a-b)&((a-b)>>31); //!< 對於(a-b) >> 31,如果a大於或者等於b,則結果為0;如果a小於b,則結果為0xffffffff(此處注意右移計算機採用的是算術右 //!< 移,即保留最高符號位)。因此,t的值實際上即為a+[b],其中[b]表示b的補碼
再看下兩句
a -= t; //!< 當t=0時,a的值不變;否則 a + [t] = a + [a + [b]] = a + [a] + b = b,即a的值變成b的值
b += t; //!< 當t=0時,b的值不變;否則 b + [t] = b + a + [b] = a,即b的值變成a的值
以上兩句實際上實現了 min(a, b)的功能。
類似的,第4、第5句分別實現了max(b, c)、min(a, b)的功能。
讀者可在此基礎上分析出最終b儲存的就是三個值當中的中位數。
x264 main函式走讀
可以看到,x264的main函式較為簡單,主要由x264 param default parse encode和x264 param cleanup三個函式。首先x264 param default函式對引數進行預設設定,通過parse解析命令列,然後呼叫encode進行編碼,編碼結束後,呼叫x26...
x264程式框架流程分析
1 x264程式框架流程分析 1 進入x264.c 的int main int argc,char argv 函式 main 函式中主要有以下三個主要的步驟,分別呼叫了3個函式。第一步 對編碼器進行引數設定。函式實現如下 x264 param default x264 param t param 此...
x264原始碼分析 overscan
引數解析 opt overscan b error parse enum value,x264 overscan names,p vui.i overscan 引數含義 影象在放大的時候邊緣容易變形,overscan,可以將變形的邊界顯示到視窗外面,讓 的人看起來是畫面放大後是正常的。sps vui...