编写一个OpenMAX IL组件,从哪里开始?

4
我准备抓取我的树莓派视频输出,并将其传递给Kinda Adalight环境照明系统。PI的XBMC播放器 omxplayer 使用OpenMAX API进行解码和其他功能。 查看代码得到以下信息: 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的守护程序。 现在我正在深入研究OpenMAX API,它似乎非常奇怪。我应该从哪里开始?这是可行的方法吗? 此致 敬礼

树莓派真的很好吃。 - Mark Garcia
据我目前了解,一个人无法注册OpenMAX组件,只有Broadcom可以这样做。 - Stasik
2个回答

3
如果你想要解码数据,那么就不要发送到渲染器。取而代之的是,获取数据并进行你所需的操作。从video_decode OpenMAX IL组件的输出端口获取解码数据。我想你也需要设置正确的输出像素格式,所以将组件输出端口设置为所需的正确格式,这样转换就由GPU完成(可用YUV或RGB565)。

有没有一些事件处理程序,当框架解码完成时可以被调用? - Stasik
我该如何从解码器中读取数据?只需调用GetOutputBuffer()函数吗? - Stasik
当输出端口未被隧道化时,FillBufferDone回调将接收缓冲区。请阅读OpenMAX文档以获取更多信息。 - Luca Carlon
所以我也可以使用视频分割器来完成它。第二种方法是添加一个write_still(图像捕获器)元素,并将单个图像写入RAM驱动器。您认为这比在播放器内读取图像数据更浪费资源吗? - Stasik
你为什么要这样做?你更喜欢文件而不是缓冲区吗?这至少会增加一个缓冲区复制。然后这取决于设置。 - Luca Carlon
将数据写入/dev/shm将允许我将图像提取与图像分析解耦,后者可以以较小的速率/优先级轮询此文件。 - Stasik

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接