原创 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 ); 函數中把