2012-03-28 47 views
3

我得到框架在循環中,並使用ffmpeg解碼它得到AVFrame作爲其結果。ffmpeg AVFrame獲取完整的解碼數據到字符*

所以我必須得到幀的像素數據到char *並給出一個回調函數的參數。那麼我怎樣才能生成這樣的char *數組呢?在網上我看到一些例子,如:

for(y=0; y<height; y++) { fwrite(pFrame->data[0]+y*pFrame->linesize[0], 1, width*3, pFile);}

或類似這樣的東西。這是真的嗎?和哪個大小將是我的char *?正如我看到我們寫寬* 3 *高度字節?

+0

取決於您的框架的格式。它的格式是什麼? – mattjgalloway 2012-03-28 19:05:39

回答

2
for(y=0; y<height; y++) { 
    fwrite(pFrame->data[0]+y*pFrame->linesize[0], 1, width*3, pFile); 
} 

是的,這是正確的。
這是從AVFrame->數據指針寫入一行3byte /像素(推測爲RGB)。

ps。這樣做的原因是每行數據的開始都是在一個新的4字節內存邊界上開始的 - 計算機在以32位(4字節)的倍數訪問內存時效率更高。 因此,如果你的像素大小(3字節)和寬度不是4的倍數,那麼你需要這樣做,而不是簡單地複製width*height*3字節的數據。

+0

據我瞭解,它是一種PPM格式的像素數據。如何在bmp中保存全像素數據,例如...? – mmmaaak 2012-04-02 14:42:56

+0

@mmmaaak - PPM是直接編寫的最簡單的格式。 BMP基本上是相同的,但有一個更復雜的標題,如果你是在Windows下的lib中已經包含代碼來寫的BMP,只是搜索MSDN – 2012-04-02 15:47:44

+0

相關答案:http://stackoverflow.com/questions/1047200/extract-rgb-values -from-A-avframe-ffmpeg的式-C – Nav 2012-11-02 11:01:09