2012-12-19 32 views
3

我正準備抓住我的樹莓派的視頻輸出,將它傳遞給adalight環境閃電系統。 XBMC的播放器爲PI,omxplayer,用戶使用OpenMAX API進行解碼等功能。編寫一個OpenMAX IL組件,從哪裏開始

尋找到代碼給出如下:
m_omx_tunnel_sched.Initialize(&m_omx_sched, m_omx_sched.GetOutputPort(), &m_omx_render, m_omx_render.GetInputPort());

據我明白,這臺視頻調度器和渲染器之間的管道[S] - > [R]。

現在我的想法是寫一個抓取器組件,並插入它很難進入管道[S] - > [G] - > [R]。抓取器將從幀緩衝區中提取像素並將其傳遞給驅動LED的deamon。

現在我正要深入研究OpenMAX API,這似乎很奇怪。我應該從哪裏開始?這是一種可行的方法嗎?

問候

+0

覆盆子pi真的很好吃。 –

+0

據我現在瞭解,一個不能註冊OpenMAX組件,只有Broadcom可以做到這一點 – Stasik

回答

2

如果你想解碼的數據,那麼就是不發送到渲染器。不要渲染,取得數據並做任何你想做的事情。解碼後的數據應該從OpenGL IL組件的輸出端口獲取。我想你還需要設置正確的輸出像素格式,因此請將組件輸出端口設置爲您需要的正確格式,以便轉換由GPU完成(YUV或RGB565可用)。

+0

是否有一些事件處理程序,我可以在幀解碼完成後調用? – Stasik

+0

我如何從解碼器中讀取數據?只需調用GetOutputBuffer()? – Stasik

+0

當輸出端口未被隧道傳輸時,FillBufferDone回調將接收緩衝區。閱讀OpenMAX文檔以獲取更多信息。 –

0

起初我認爲你應該給攝像頭組件的輸出附加一個緩衝區,用CPU中的這個幀做所有你想要的,並且通過附加到渲染輸入端口的緩衝區發送一幀,它不會去這是一項微不足道的任務,因爲在樹莓上幾乎沒有關於OpenMax的文檔。

最好的地方,開始:有手部 https://jan.newmarch.name/RPi/

最好的地方: http://home.nouwen.name/RaspberryPi/documentation/ilcomponents/index.html

下一個最好的地方:在互聯網上分發源代碼。

祝你好運。