AVFrame:
1)存儲解碼后的音頻數據或視頻數據.
2)AVFrame必須由av_frame_alloc() 來創建(Note:這只是用來創建AVFrame自身的內存空間,AVFrame結構體中的數據緩沖區,必須由其他方法來管理)
3)AVFrame必須由av_frame_free來釋放
4)AVFrame通常只申請一次空間,然后多次復用來保存不同的數據(例如:一個AVFrame存放從解碼器接收到的幀),在這種情況下,使用av_frame_unref(),引用計數-1,當引用計數為0時,釋放data空間,並且在復用該數據前,會重置該結構體數據,還原成最原始的狀態
注:In such a case, av_frame_unref() will free any references held by the frame and reset it to its original clean state before it is reused again. (這尼瑪 翻譯過來不是釋放所有引用?是指引用計數直接變成0,然后釋放data內存空間?而不是減一?)
5)后面還有,不翻譯了。。。。。。
uint8_t *data[AV_NUM_DATA_POINTERS]:
1)指向平面圖片或平面音頻頻道的指針
2)有可能與第一個分配的的字節不同(尼瑪 啥意思???)
3)一些解碼器在訪問到超過圖片 (0,0) - (寬,高)的范圍,具體看avcodec_align_dimensions2()。一些過濾器和swscale可以讀取到超出平台的16個字節數據,如果這些過濾器要被使用,16個額外的字節必須被申請(what are you 說啥嘞?)
int linesize[AV_NUM_DATA_POINTERS]:
1)對於視頻而言,代表着每個圖像行的大小(字節單位)
2)對於音頻而言,代表着每個平面的大小(字節單位)
3)對於音頻而言只能設置linesize[0],對於平台音頻而言,每個平面通道都必須一樣大小
4)對於視頻而言linesizes應該是cpu字節對齊的倍數,對於現代桌面CPU而言基本是16或32
5)有些代碼需要這樣的對齊,有些代碼在沒有對齊的情況下會變得很慢,而有些代碼則沒有區別
6)注:linesize可能大於可用數據的大小——出於性能考慮,可能會有額外的填充
int width, height:
1)僅對視頻幀,該幀圖像的寬高。
int nb_samples:
1)該幀描述的音頻樣本(每個通道)的數量
int format:
1)幀的格式,-1代表未知或未設置
2)值對應的是視頻的像素格式 enum AVPixelFormat,音頻的樣本格式 enum AVSampleFormat
int key_frame:
1)是否為關鍵幀(1:是 0:不是)
int64_t pts:
1)描述事件戳,以 time_base 時間基礎為單位(應該顯示給用戶 該幀的時間)
int sample_rate:
1)音頻的采樣率
uint64_t channel_layout:
1)音頻數據的通道布局(啥叫通道布局?)
int channels:
1)音頻通道數,只用於音頻
2)編碼:未使用
3)解碼:由用戶來讀取
備注:剩下一籮筐的參數,不一一列舉,自個看頭文件去吧。。。。。。