我正在尝试呈现在XUL窗口顶部运行的gstreamer管道。
为此,我编写了一个xpcom插件。xpcom插件基本上是一个由gecko引擎加载的dll文件。我的插件与gstreamer链接,因此它依赖于许多其他gstreamer插件(也是dll文件)。
调用gstreamer代码(例如
gst_pipeline_new
)导致应用程序崩溃。更具体地说,它冻结并挂在glib中,消耗整个CPU核心(占总CPU的50%):
alt text http://img36.imageshack.us/img36/4354/tracep.png
有人愿意帮我弄清楚出了什么问题吗?
编辑
几句话:
-
Windows上的独立gstreamer项目工作正常。
-
XUL插件也可以正常工作(只要我不进行任何gstreamer调用)。
-
在XUL插件中,我可以调用一个简单的glib函数,比如g_Strndup,没有任何问题。
-
从插件中调用gstreamer函数会使应用程序崩溃。
此代码可以重现问题。(但我不确定这是否有帮助…)
plugin.idl文件定义了属性
videoWindow
:
#include "nsISupports.idl"
interface nsIDOMXULElement;
[scriptable, uuid(BFE3F1BF-1C7B-4da2-8EAB-12F7683FAF71)]
interface IVideo : nsISupports
{
attribute nsIDOMXULElement videoWindow;
};
它的实现可以重现这个问题:
NS_IMETHODIMP Video::SetVideoWindow(nsIDOMXULElement * inXULVideoWindow)
{
GstElement * pipeline = gst_pipeline_new("test"); // freezes here
return NS_OK;
}
编辑
问题已解决。看看我自己对这篇文章的回答。