Я пытаюсь визуализировать конвейер GStreamer, работающий поверх окна XUL.
Для этого я написал плагин XPCOM. Плагин XPCOM - это в основном файл dll, который загружается движком Gecko. Мой плагин связан с GStreamer и, как следствие, зависит от многих других плагинов GStreamer (также DLL-файлов).
Вызов кода GStreamer (например, простая функция, такая как gst_pipeline_new
) вызывает сбой приложения. В частности, он зависает и зависает в glib, потребляя все ядро ЦП (50% от общего ЦП):
Кто-нибудь хотел бы помочь мне выяснить, что происходит не так?
Редактировать
Несколько замечаний:
- Автономные проекты GStreamer в Windows работают нормально.
- Плагин 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;
}
Редактировать
Проблема исправлена. Смотрите мой собственный ответ на этот пост.