2010-01-08 69 views
0

我試圖渲染運行在XUL窗口頂部的GStreamer管道。當從另一個DLL調用功能時,插件應用程序掛起

爲此我寫了一個XPCOM插件。 XPCOM插件基本上是一個由Gecko引擎加載的dll文件。我的插件與GStreamer鏈接,因此它依賴於許多其他GStreamer插件(也是dll文件)。

調用GStreamer代碼(例如一個簡單的函數,如gst_pipeline_new)會導致應用程序崩潰。更具體地說,它凍結和油腔滑調掛起消耗整個CPU核心(CPU總數的50%):

alt text http://img36.imageshack.us/img36/4354/tracep.png

會有人願意幫助我弄清楚發生了什麼問題呢?

編輯

一個幾句話:在Windows

  • 單機的GStreamer項目做工精細。
  • XUL插件也可以正常工作(只要我不進行任何GStreamer調用)。
  • 從XUL插件中,我可以調用一個簡單的glib函數,像g_strndup沒有任何問題。
  • 從插件中調用GStreamer函數會崩潰應用程序。

此代碼可以重現該問題。 (我不知道,如果它是有幫助的,但..)

插件.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

這可能是由於許多原因造成的 - 返回遞歸,堆棧損壞,競態條件 - 嘗試縮小問題的範圍,或者至少向我們展示一些代碼。 – 2010-01-08 21:57:02

回答

0

好吧,我不會讓人......我忘了執行GStreamer的初始化函數:現在

gst_init(NULL, NULL); 

問題是固定的。

0

修復您的符號,以便您可以讀取gstreamer和glib函數 - 這可能需要從源代碼編譯這兩個庫。一旦你看到真正的堆棧,解決問題將更容易

相關問題