日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

x264源代码分析1。fread()

發布時間:2023/12/18 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 x264源代码分析1。fread() 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

?

?

相關說明:
1. 使用版本: x264-cvs-2004-05-11

2. 這次的分析基本上已經將代碼中最難理解的部分做了闡釋,對代碼的主線也做了剖析,如果這個主線理解了,就容易設置幾個區間,進行分工閱讀,將各個區間擊破了.

3. 需要學習的知識:
a) 編碼器的工作流程.
b) H.264的碼流結構,像x264_sps_t,x264_pps_t等參數的定義基本上都完全符合標準文檔中參數集的定義,抓住主要參數,次要參數也應該有所了解.
c) 數學知識,對dct變換等與數學相關的知識的編程實現要有較好理解.
d) C語言的知識.涉及到c語言的較多不經常用的特性,如函數指針數組,移位運算,結構體的嵌套定義等.
e) 耐心,對h.264的復雜性要有清醒的認識.

1. 進入x264.c中的main函數.

剛開始是讀取默認參數,如果你設置了參數的話會修改param的.

i_ret = Encode( &param, fin, fout );

這條語句使過程進入x264.c中的Encode函數.

2. X.264的encode函數.

A. i_frame_total = 0;

if( !fseek( fyuv, 0, SEEK_END ) )

???? {

??????? int64_t i_size = ftell( fyuv );

??????? fseek( fyuv, 0, SEEK_SET );

??????? i_frame_total = i_size / ( param->i_width * param->i_height * 3 / 2 )

}上面這段計算出輸入文件的總幀數.

B.????? h = x264_encoder_open( param )這個函數是對不正確的參數進行修改,并對各結構體參數和cabac編碼,預測等需要的參數進行初始化.

C.???? pic = x264_picture_new( h );

該函數定義在/CORE/common.c.首先分給能容納sizeof(x264_picture_t)字節數的空間,然后進行初始化.

????? 這里看一下x264_picture_tx264_frame_t的區別.前者是說明一個視頻序列中每幀的特點.后者存放每幀實際的象素值.注意區分.

D.???? for( i_frame = 0, i_file = 0; i_ctrl_c == 0 ; i_frame++ )

??? {

??????? int???????? i_nal;

??????? x264_nal_t *nal;

int ????????i;

/* read a frame */

??????? if( fread( pic->plane[0], 1, param->i_width * param->i_height, fyuv ) <= 0 ||

??????????? fread( pic->plane[1], 1, param->i_width * param->i_height / 4, fyuv ) <= 0 ||

??????????? fread( pic->plane[2], 1, param->i_width * param->i_height / 4, fyuv ) <= 0 )

??????? {

??????????? break;

??????? }

??? //文件位置指示器自己變化了.

??????? if( x264_encoder_encode( h, &nal, &i_nal, pic ) < 0 )

??????? {

??????????? fprintf( stderr, "x264_encoder_encode failed/n" );

??????? }

??????? ……

}

凡是出現for循環的地方都應該認真對待,這是我的一個體會,也是進入分層結構認真分析的好方法.

fread()函數一次讀入一幀,分亮度和色度分別讀取.這里要看到c語言中的File文件有一個文件位置指示器,調用fread()函數會使文件指示器自動移位,這就是一幀一幀讀取的實現過程.

總結

以上是生活随笔為你收集整理的x264源代码分析1。fread()的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。