FFmpeg的IO分析
FFmpeg在使用之前,必須先呼叫av_register_all。
void av_register_all(void)
{
static AVOnce control = AV_ONCE_INIT;
ff_thread_once(&control, register_all);
}
這個函式又通過ff_thread_once呼叫了register_all,ff_thread_once的作用是保證register_all只會被呼叫一次。static void register_all(void)
{
avcodec_register_all();
/* (de)muxers */
REGISTER_MUXER (A64, a64);
REGISTER_DEMUXER (AA, aa);
...
}
avcode_register_all首先呼叫av_codec_register_all註冊編解碼器,然後是一系列REGISTER_MUXER和REGISTER_DEMUXER巨集呼叫,這些巨集是註冊複用/解服用器。這些巨集其實最後就是呼叫的av_register_input_format或者av_register_output_format
#define REGISTER_MUXER(X, x) \
{ \
extern AVOutputFormat ff_##x##_muxer; \
if (CONFIG_##X##_MUXER) \
av_register_output_format(&ff_##x##_muxer); \
}
#define REGISTER_DEMUXER(X, x) \
{ \
extern AVInputFormat ff_##x##_demuxer; \
if (CONFIG_##X##_DEMUXER) \
av_register_input_format(&ff_##x##_demuxer); \
}
從上面的巨集定義可以看到,程式碼中預先定義了很多ff_xxx_muxer和ff_xxx_demuxer。這些都定義在libavformat目錄下面相應的檔案中,以a64為例
在a64.c檔案的末尾定義如下
另外以上的註冊的複用/解服用器儲存在連結串列中,連結串列的表頭表尾是全域性變數,後續可以通過表頭表尾指標查詢相應的input/output format。
/** head of registered input format linked list */
static AVInputFormat *first_iformat = NULL;
/** head of registered output format linked list */
static AVOutputFormat *first_oformat = NULL;
static AVInputFormat **last_iformat = &first_iformat;
static AVOutputFormat **last_oformat = &first_oformat;
相關文章
- IO分析
- IO效能探索分析
- FFmpeg架構之I/O模組分析架構
- ffmpeg分析系列之一(註冊該註冊的)
- ffmpeg分析系列之四(探測輸入的格式)
- ffmpeg分析系列之七(開啟輸入的流)
- 故障分析 | 是誰偷走了我的 IO
- FFMpeg對MPEG2 TS流解碼的流程分析
- ffmpeg分析系列之五(開啟輸入的檔案)
- ffmpeg分析系列之二(檔案協議)協議
- IO虛擬化的優勢與需求分析
- InnoDB IO路徑原始碼分析原始碼
- FFMpeg對MPEG2 TS流解碼的流程分析[2]
- ffmpeg分析系列之三(輸入輸出格式)
- 從設計模式分析Java.IO設計模式Java
- 透過addm分析io問題
- 通過addm分析io問題
- android IO Prefetch原始碼分析Android原始碼
- 【FFmpeg】Windows下FFmpeg編譯Windows編譯
- 【FFmpeg】Windows下FFmpeg除錯Windows除錯
- 【FFmpeg】FFmpeg常用基本命令
- FFmpeg libswscale原始碼分析1-API介紹原始碼API
- FFmpeg轉碼音影片時間戳設定分析時間戳
- ffmpeg
- Java IO原始碼分析(三)——PipedOutputStream和PipedInputStreamJava原始碼
- systemtap分析軟raid io拆分問題AI
- 通過blktrace, debugfs分析磁碟IO
- 【轉】JAVA IO 設計模式徹底分析Java設計模式
- 轉:linux io排程深入分析Linux
- Java IO 之 FileInputStream & FileOutputStream 原始碼分析Java原始碼
- CVE-2016-1897/8 - FFMpeg漏洞分析
- FFmpeg筆記2——2.2結構體分析之AVFormatContext筆記結構體ORMContext
- FFmpeg開發筆記(五):ffmpeg解碼的基本流程詳解(ffmpeg3新解碼api)筆記API
- ffmpeg入門到實戰-ffmpeg是怎麼轉碼的?
- 【FFmpeg】Windows下64位ffmpeg編譯Windows編譯
- 安裝ffmpeg和crontab執行ffmpeg
- FFmpeg 使用
- 四、FFmpeg零基礎(1)-FFmpeg程式的使用(ffmpeg.exe, ffplay.exx, ffprobe.exe)