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;
}
편집
문제가 해결되었습니다. 이 게시물에 대한 내 자신의 답변을 참조하십시오.
이것은 재귀, 스택 손상, 경쟁 조건 - 문제의 범위를 좁히거나 적어도 일부 코드를 표시하는 등 여러 가지 이유가있을 수 있습니다. –