OpenSL ES slCreateEngine导致错误

时间:2011-05-19 09:58:28

标签: android-ndk

我有一个OpenSL ES函数调用,它在一个应用程序中没有问题,但在另一个应用程序中导致问题,都在同一个设备上运行。

该行是:

result = slCreateEngine(&engineObject, 0, NULL, 0, NULL, NULL);

如果结果属于SLresult类型,则engineObject属于SLObjectItf

类型

我似乎得到的错误是:

05-19 11:56:27.007: ERROR/libOpenSLES(1425): slCreateEngine while another engine 0x299fa0 is active

似乎这不是从我的代码中记录的,但可能是由它引起的?那么什么可能导致这一行在一个应用程序中产生错误,而在另一个应用程序中却没有呢?

2 个答案:

答案 0 :(得分:1)

碰巧的是,部分Android的Activity生命周期引起了错误,但主要是我自己的错。它是由Android为活动提供的onCreate()和onResume()方法引起的。我从未想过在启动Activity时onResume()也会被调用的事实。因此,我从未意识到我第二次调用了slCreateEngine函数.....

答案 1 :(得分:0)

根据文档“OpenSL ES for Android支持每个应用程序的单个引擎”。我快速检查了OpenSL的来源,我可以看到这是由存储当前活动引擎的全局强制执行的。

因此,如果要调用slCreateEngine,则必须确保首先销毁所有其他引擎。这包括您正在链接的任何第三方代码的可能性(如果您正在链接其他正在创建OpenSL引擎对象的东西)。