2010-01-08 2 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

누군가가 나에게 잘못 무슨 일이 일어나고 있는지 알아내는 데 도움시겠습니까를?

편집

몇 가지 발언 :

  • 독립형있는 GStreamer 프로젝트 윈도우에서 잘 작동합니다.
  • XUL 플러그인은 잘 작동합니다 (GStreamer 호출을하지 않는 한).
  • XUL 플러그인에서 문제없이 g_strndup와 같은 간단한 glib 함수를 호출 할 수 있습니다.
  • 플러그인 내에서 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

이것은 재귀, 스택 손상, 경쟁 조건 - 문제의 범위를 좁히거나 적어도 일부 코드를 표시하는 등 여러 가지 이유가있을 수 있습니다. –

답변

0

좋아, 내가 당황하고있어 ... 내가있는 GStreamer 초기화 기능을 수행하는 것을 잊었다.

0

gstreamer 및 glib 기능을 읽을 수 있도록 심볼을 수정하십시오. 소스에서이 두 라이브러리를 컴파일해야 할 수도 있습니다. 실제 스택을 확인한 후에는 훨씬 쉽게 문제를 해결할 수 있습니다.

gst_init(NULL, NULL); 

문제가 수정되었습니다 :

관련 문제