x265源碼的入口函數是main(),本文分析main()的主要功能。首先給出main()函數的功能及其代碼結構;其次給出main()函數源碼以及分析;最後給出main()函數中的主要功能函數的具體功能。
main()函數的主要功能是解析參數并進行編碼的一些準備工作,調用了如下幾個重要的函數:
(1)cliopt.parse()函數:解析參數
(2)api->encoder_open()函數:打開編碼器配置
(3)api->encoder_headers()函數:設定nal相關資訊
(4)api->encoder_encode()函數:進入編碼函數
(5)api->encoder_close()函數:結束編碼并進行總結
注:encoder_open()函數、encoder_headers()函數、encoder_encode()函數與encoder_close()函數均位于api.app中。
對應的函數關系圖如下圖所示:
main()函數的源碼分析如下代碼中的注釋,代碼如下:
cliopt.parse(argc, argv)的主要功能是分析參數,直接調用x265.cpp中的bool clioptions::parse(int argc, char **argv)函數,該函數會列印輸入視訊的分辨率、幀率、視訊格式、所要編碼的幀數目以及輸出檔案名稱等,如下圖所示:
對應的代碼如下:
encoder_open(param)的主要功能是列印編碼器的配置資訊,直接調用api.cpp中的x265_encoder *x265_encoder_open(x265_param *p),該函數中調用了x265_print_params(param)用以列印編碼器配置資訊,如下圖所示:
對應的代碼如下:
到這兒,main()函數的主要功能就分析完畢了。