天天看點

FFMPeg代碼分析:AVFrame結構體及其相關的函數

AVFrame結構體儲存的是解碼後和原始的音視訊資訊。AVFrame通過函數av_frame_alloc()初始化,該函數僅僅配置設定AVFrame執行個體本身,而沒有配置設定其内部的緩存。AVFrame執行個體由av_frame_free()釋放;AVFrame執行個體通常配置設定一次,重複使用,如配置設定一個AVFrame執行個體來保留解碼器中輸出的視訊幀(此時應在恰當的時候使用av_frame_unref()清理參考幀并将AVFrame歸零)。該類所描述的資料通常由AVBuffer的API來儲存一個引用計數,并儲存于AVFrame.buf

/AVFrame.extended_buf,在至少存在一個參考的時候(如AVFrame.buf[0] != NULL),則該對象被标記為“被引用”。在此情況下,AVFrame所包含的每一組資料必須包含于AVFrame的緩存中。

AVFrame的定義如下:

通過對其内部的成員變量的研究可以看出,除了基本的儲存像素的緩存之外,其成員大多還是與編解碼相關的一些參數,如分辨率、幀類型、量化參數表、參考幀清單等。是以從大體上看,AVFrame就是一個容器類,同AVPacket不同的是所容納的是原始的像素資料,相同點是都有很多編解碼相關的參數作為補充資料。

繼續閱讀