2013-12-12 250 views
4

之前,我想辦法來捕獲從樹莓派相機接口的視頻,通過書面和OpenGL着色器的過濾器運行它,然後將其發送到硬件編碼器。捕捉視頻編碼

This blog post有關使用raspistill時施加的OpenGL着色器過濾到照相機的輸出會談。這是相應的source code。然而,這種情況下的輸出不會傳送到視頻編碼器,並且這不會在視頻上運行,只能在靜止畫面上運行。另外(不完全確定)我認爲這與預覽有關,請參閱以下位:raspitex_state A pointer to the GL preview statestate->ops.redraw = sobel_redraw

博客中還談到了「快速路徑」,可有人explan什麼,在這種情況下意味着什麼?

回答

5

紋理轉換將工作在任何MMAL不透明緩衝器即相機預覽,靜止(高達2000×2000分辨率),視頻。但是,示例代碼僅用於GL預覽靜態圖像。我認爲有人在RPI論壇上發佈了一個補丁,以使其與RaspiVid協同工作,因此您可以使用它。

Fastpath基本上意味着不將緩衝區數據複製到ARM內存並進行軟件轉換。因此,對於GL渲染而言,它意味着只需將句柄傳遞給GL,以便GPU驅動程序可以直接執行此操作。

目前,在車手餵養渲染緩存到視頻編碼器的OpenGL不支持/快速路徑。相反,緩慢且可能不切實際的路徑是調用glReadPixels,將緩衝區轉換爲YUV並將轉換後的緩衝區傳遞給編碼器。

一個快速路徑當然是可能的,我已經做了一些工作,這個移植到RPI驅動程序,但還有需要一些其他的框架,我不會得到機會看,直​​到新年。

+0

謝謝,這是很好的信息。如果我可以總結,MMAL緩衝區 - > GL紋理存在,但目前僅在RaspiStill中使用,並且GL紋理 - >編碼器不存在?什麼是編碼器輸入,一個MMAL緩衝器?內存中的YUV如何工作?你能指出一些關於MMAL,VCHIQ或編碼器的文檔嗎?謝謝!! –

+0

另外,你可能會發現我的另一個問題很有趣,在這裏:http://stackoverflow.com/questions/19149441/decode-video-in-raspberry-pi-without-using-openmax再次感謝! –

+0

哦,還有一個問題:RPi是否具有統一的或獨立的GPU和CPU內存?是從一個複製到另一個(如glReadPixels),就像在同一個內存的兩個區域之間的memcpy()一樣,還是比這更多的開銷? –