原创 ffmpeg配置選項
常用的一些ffmpeg配置選項,以及如何引入外部庫 用下面例子說明: ./configure --enable-opencl --enable-openssl --enable-libx264 --enable-gpl --enabl
原创 在ffmpeg中添加一個src濾鏡
上一篇博客介紹瞭如何添加一個自定義的處理濾鏡。 src濾鏡和處理濾鏡的區別就是src濾鏡沒有輸入,通過接口直接獲取AVFrame 然後輸出ff_filter_frame 具體看一個實現 AVFilter ff_avsrc_lottie =
原创 日誌輸出格式化簡單實現
在增加日誌輸出的過程中,經常需要用到snprintf,sprintf,等格式化串的函數,各種類型都需要顯示的標記在格式化串中。 有些不方便,有沒有什麼辦法能統一呢? template<typename T> std::string ToS
原创 x264源碼,運動補償get_ref函數
get_ref函數,用於構建當前宏塊參考宏塊的半像素數據, 首先看調用的地方很多, 例如: x264_mb_analyse_inter_b8x8_mixed_ref-> { src[0] = h->mc.get_ref(
原创 C++11 深度理解右值引用
對比一段代碼: int main() { int dd= 0x123456; int cd = 0x654321; dd = cd; return 0; } 彙編: int dd= 0x
原创 數據結構:AVL樹如何平衡
二叉樹每個節點的子節點不允許超過兩個。通過將子節點的個數限定爲2,可以寫出高效的程序在樹中插入、查找和刪除數據。 二叉查找樹是一種特殊的二叉樹,相對較小的值保存在左節點中,較大的值保存在右節點中。 AVL樹是一種平衡二叉查找樹。平衡指的是
原创 libevent寫異常死循環
前面一篇博客,寫到了libevent寫數據的流程 if (evbuffer_get_length(bufev->output)) { // 獲取buffer大小 evbuffer_unfreeze(bufev->
原创 libevent 寫事件處理
bufferevent_writecb(evutil_socket_t fd, short event, void *arg) { struct bufferevent *bufev = arg; struct buffe
原创 C++實現defer
上一個博客,瞭解到瞭解決菱形繼承告警的noncopyable問題。 defer是幹什麼用的?do{}while(0);這種代碼是不是很常見? 當一個函數中間需要申請一些對象,或者打開文件等操作。 函數結尾的時候需要回收這些資源,而且中間任
原创 C++ noncopyable 避開菱形繼承編譯器warning
template<unsigned value> class Noncopyable_{ protected: Noncopyable_() = default;// 使用C++ 缺省函數實現 ~Noncopyable_() = defa
原创 C++11 std::future std::promise
std::future 將阻塞當前線程,等待std::promise設置future的值。 這裏由於std::future 是阻塞的,因此肯定無法在當前線程中,給std::promise設置值了,肯定需要在創建的新線程中來設置 std::
原创 使用libevent創建服務
libevent的使用過程比較簡單,就是創建一個監聽事件,包含fd,事件回調等參數,然後添加到libevent事件裏面,調用libevent 事件調度函數loop起來。看下面的例子 using namespce std; #define
原创 圖像處理:高斯和雙邊濾波
一 高斯函數:是通過周圍周圍的點按距離權重計算當前點的值。 sigma是方差 假設sigma=1.5(這裏爲什麼假設一個sigma,而不是直接使用實際的sigma,因爲計算出來的方差也包含了圖像的細節,如果 直接用圖像的方差來計算高斯模
原创 x264 slicetype選擇
x264 如何判斷當前幀要不要編碼出IDR x264_slicetype_analyse()->scenecut() 判斷場景是否切換了,這種是opengop的方式, 還有一種是固定gop的方式,gop之間的幀數是固定的,不是由scen
原创 x264碼率控制(二)lookahead
x264 碼率控制,前面一中講到,是通過rcc->last_satd計算當前幀qp值的。那麼last_satd如何得到的呢? last_satd = int x264_rc_analyse_slice( x264_t *h ); 函數中把