Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 是否可以使用stagefright创建多个OMXCodec实例_Android_Stagefright_Openmax - Fatal编程技术网

Android 是否可以使用stagefright创建多个OMXCodec实例

Android 是否可以使用stagefright创建多个OMXCodec实例,android,stagefright,openmax,Android,Stagefright,Openmax,我想在android手机中使用libstagefright.so进行媒体操作。我已经探讨了第页给出的示例。我一直在努力实现同样的目标。在对多个OMXCodec实例测试此实现时,它的输出缓冲区彼此冲突 我在eclipse中开发了一个android项目,并在JNI下链接了libstagefright。我添加了两个类CustomDataSource(派生MediaSource)和customxdecoderCustomDataSource类实现了MediaSource的所有虚拟方法。在customxd

我想在android手机中使用
libstagefright.so
进行媒体操作。我已经探讨了第页给出的示例。我一直在努力实现同样的目标。在对多个
OMXCodec
实例测试此实现时,它的输出缓冲区彼此冲突

我在eclipse中开发了一个android项目,并在JNI下链接了
libstagefright
。我添加了两个类
CustomDataSource
(派生
MediaSource
)和
customxdecoder
CustomDataSource
类实现了
MediaSource
的所有虚拟方法。在
customxdecoder
类中,我调用
OMXCodec::Create
方法。然后我创建了两个线程,它们分别有
customxdecoder
的实例。使用这个实例,我调用了一个方法
ProcessNextFrame
,在这个方法中,我调用了main,
videoDecoder->read()
方法。这就是我的设置

现在,当我使用上述设置运行应用程序时
OMXCodec
对两个源的帧进行解码,但当我在表面上渲染它时,它会显示冲突的输出。这两个源的解码缓冲区似乎在某种程度上被内部啮合。我正在同时创建两个h264解码器。这里有什么问题?它是否与MediaBufferGroup相关?调用
videoDecoder->read()
调用后,我在
CustomDataSource
中获取缓冲区,并在
CustomOmxDecoder
ProcessNextFrame
中释放缓冲区

任何建议都很好。
谢谢。

我已经测试并解决了我的问题,怀疑OMXCodec的多个实例是否可行。问题在我的代码中。在安装过程中,我可以看到OMXCodec的多个实例稳定平稳地运行。所以,是的,OMXCodec的多个实例是可能的


谢谢大家。

如果您使用的是从nativeWindow分配输出缓冲区,则需要检查传递给解码器创建的
nativeWindow
surface
。从您的评论中,我感觉您正在向解码器的两个实例传递相同的
曲面
,因此您可能观察到了错误的图像。您能检查一下您的逻辑是否只对一个解码器实例运行良好吗?实际上,在创建omxcodec实例时,我并没有将surface作为参数传递。我查了一下地面地址。他们是不同的。甚至我还做了一个测试,在customomxdecoder类中,我在解码显示方法中添加了一个条件,这样对于线程1,解码缓冲区在给定的表面上呈现,对于线程2,帧将被解码,但表面将只呈现黑色。在这种情况下,图片在第一个表面和第二个表面显示黑色时也会发生冲突。您认为在自动锁定/互斥之间需要覆盖videosource->read(&buffer,&option)方法吗?Ganesh,您的猜测是正确的。不是表面,但在我的代码中有另一个参数,这两个线程都是相同的。因此证明了omxcodec的多实例是可能的。我为我的帖子道歉。并将在一段时间内删除此线程,因为它可能会浪费一些人的时间。谢谢,山姆。。我很高兴你找到了你的错误。我在几个用例中尝试了多实例编解码器。然而,我并没有在Java级别编写太多程序。你打算删除这篇文章吗?