Приложение плагина зависает при вызове функциональности из другой DLL - PullRequest
0 голосов
/ 09 января 2010

Я пытаюсь визуализировать конвейер GStreamer, работающий поверх окна XUL.

Для этого я написал плагин XPCOM. Плагин XPCOM - это в основном файл dll, который загружается движком Gecko. Мой плагин связан с GStreamer и, как следствие, зависит от многих других плагинов GStreamer (также DLL-файлов).

Вызов кода GStreamer (например, простая функция, такая как gst_pipeline_new) вызывает сбой приложения. В частности, он зависает и зависает в glib, потребляя все ядро ​​ЦП (50% от общего ЦП):

alt text

Кто-нибудь хотел бы помочь мне выяснить, что происходит не так?

Редактировать

Несколько замечаний:

  • Автономные проекты 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;
}

Редактировать
Проблема исправлена. Смотрите мой собственный ответ на этот пост.

Ответы [ 2 ]

0 голосов
/ 09 января 2010

Хорошо, я смущен ... Я забыл выполнить функцию инициализации GStreamer:

gst_init(NULL, NULL);

Проблема исправлена.

0 голосов
/ 09 января 2010

Исправьте ваши символы, чтобы вы могли читать функции gstreamer и glib - для этого может потребоваться компиляция этих двух библиотек из исходного кода. Как только вы увидите реальный стек, решение проблемы будет намного проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...