我正在尝试渲染在XUL窗口上运行的GStreamer管道。
为此,我写了一个XPCOM插件。 XPCOM插件基本上是一个由Gecko引擎加载的dll文件。我的插件与GStreamer链接,因此它依赖于许多其他GStreamer插件(也是dll文件)。
调用GStreamer代码(例如像gst_pipeline_new
这样的简单函数)会导致应用程序崩溃。更具体地说,它会冻结并挂起消耗整个CPU内核(占总CPU的50%)的glib:
有人愿意帮我弄清楚出了什么问题吗?
修改的
一些评论:
此代码可以重现该问题。 (我不确定它是否有用......)
插件.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;
}
修改的
问题是固定的。看看我自己对这篇文章的回答。
答案 0 :(得分:0)
修复符号以便您可以阅读gstreamer和glib函数 - 这可能需要从源代码编译这两个库。一旦你看到真正的堆栈,解决问题将更容易 。
答案 1 :(得分:0)
好的,我很尴尬......我忘了执行GStreamer初始化函数:
gst_init(NULL, NULL);
问题现已解决。