Search code examples
c++gstreamersongbird

How do I diagnose problems in loading a gstreamer plugin?


I have created a gstreamer plugin with an element inside that would generate some data when put in a pipeline (by following the GStreamer Plugin Writer's Guide).

My problem is that I cannot load my plugin in a test application. When I call gst_element_factory_make("myextractor", NULL) the result is always NULL.

More data (I'm not sure this is related):

When I run gst-inspect on my dll I get incomplete output (output generated using cygwin):

beq11049@beqleuleu1nb028 /cygdrive/c/work
$ /cygdrive/c/OSSBuild/GStreamer/v0.10.6/bin/gst-inspect.exe MyProject/Release/gstxyzlibrary.dll
Plugin Details:
  Name:                 myextractor
  Description:          XYZ Library
  Filename:             MyProject/Release/gstxyzlibrary.dll
  Version:              1.0
  License:              LGPL
  Source module:        myextractor
  Binary package:       MyProject
  Origin URL:           http://www.example.com/

  myextractor: XYZExtractor

  1 features:
  +-- 1 elements

If I compare this with the avisubtitle addon (from the GStreamer Good Plug-ins package) I get a lot less information for mine.

For example, my plugin says:

  1 features:
  +-- 1 elements

The avisubtitle plugin says (generated using $ /cygdrive/c/OSSBuild/GStreamer/v0.10.6/bin/gst-inspect.exe avisubtitle):

GObject
 +----GstObject
       +----GstElement
             +----GstAviSubtitle

My question: I need advice on how to debug this / determine what I am missing (enabling debugging output, settings and paths to check and so on). My test code (the call to gst_element_factory_make) is written in a Songbird adon, but I get the same results if I put my code in a separate executable.


Solution

  • It might be because the loader can't find your plugin, you should check that your plugin is in the shared library path:

    Make sure you've set the LD_LIBRARY_PATH environment variable to the directory containing your compiled plugin.

    In cygwin, add this to your .profile, or run it before you run your program:

    export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/cygdrive/c/path/to/your/plugin/"

    You could also use the -L linker option to specify a search path at compile time.