Linking new metadata lib

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Linking new metadata lib

jpoet
I have created new metadata type in:

gst-plugins-bad/gst-libs/gst/vanc/gstvancmeta.[ch]

Which creates:

/opt/gst/lib/libgstvancmeta-1.0.so.0.0.0

I have run into trouble trying to link against it, though.  I have modified
gst-plugins-bad/sys/decklink/Makefile.am to have:

libgstdecklink_la_LIBADD = \
    $(GST_PLUGINS_BASE_LIBS) \
    -lgstaudio-@GST_API_VERSION@ \
    -lgstvideo-@GST_API_VERSION@ \
    -lgstvancmeta-@GST_API_VERSION@ \
    ...

But it is not finding it while trying to build gst-plugins-bad.  If I install libgstvancmeta first, then build decklink, it finds it.  Does this mean that I need to add a 'local' path for the gstvanmeta lib, or should gstvanmeta lib be move to gst-plugins-base?

Also, when the gstvanmeta lib is installed (/opt/gst/lib), I have also run into trouble trying to use it with avenc_mpeg2video, I get:
/opt/gst/lib/gstreamer-1.0/libgstlibav.so: undefined symbol: vanc_meta_get_info

To fix that, I tried changing gst-libav/ext/libav/Makefile.am to have:
libgstlibav_la_LIBADD = $(LIBAV_LIBS) $(GST_PLUGINS_BASE_LIBS) \
    -lgstaudio-$(GST_API_VERSION) -lgstvideo-$(GST_API_VERSION) \
    -lgstpbutils-$(GST_API_VERSION) -lgstvancmeta-$(GST_API_VERSION) \
   ...

But that did not seem to help.  It looks like libgstlibav.so is being installed in /opt/gst/lib/gstreamer-1.0, but libgstvancmeta.so is being installed in /opt/gst/lib.  Does libgstvancmeta.so belong in /opt/gst/lib/gstreamer-1.0?  If so, how do I get it there?

Thanks,

John

_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: Linking new metadata lib

Sebastian Dröge-3
On Fri, 2016-10-07 at 00:00 +0000, John P Poet wrote:

> I have created new metadata type in:
>
> gst-plugins-bad/gst-libs/gst/vanc/gstvancmeta.[ch]
>
> Which creates:
>
> /opt/gst/lib/libgstvancmeta-1.0.so.0.0.0
>
> I have run into trouble trying to link against it, though.  I have
> modified
> gst-plugins-bad/sys/decklink/Makefile.am to have:
>
> libgstdecklink_la_LIBADD = \
>     $(GST_PLUGINS_BASE_LIBS) \
>     -lgstaudio-@GST_API_VERSION@ \
>     -lgstvideo-@GST_API_VERSION@ \
>     -lgstvancmeta-@GST_API_VERSION@ \
>     ...
>
> But it is not finding it while trying to build gst-plugins-bad.  If I
> install libgstvancmeta first, then build decklink, it finds it.  Does
> this mean that I need to add a 'local' path for the gstvanmeta lib,
> or should gstvanmeta lib be move to gst-plugins-base?
As plugin and library are in the same module, you have to link to the
library .la file, i.e.

  $(top_builddir)/gst-libs/gst/vanc/libgstvancmeta-@GST_API_VERSION@.la

I would also suggest to call the library libgstvanc (i.e. without the
meta part).


Are you planning to submit the code of the library and the changes to
the decklink plugin upstream at some point?

> Also, when the gstvanmeta lib is installed (/opt/gst/lib), I have
> also run into trouble trying to use it with avenc_mpeg2video, I get:
> /opt/gst/lib/gstreamer-1.0/libgstlibav.so: undefined symbol:
> vanc_meta_get_info
>
> To fix that, I tried changing gst-libav/ext/libav/Makefile.am to
> have:
> libgstlibav_la_LIBADD = $(LIBAV_LIBS) $(GST_PLUGINS_BASE_LIBS) \
>     -lgstaudio-$(GST_API_VERSION) -lgstvideo-$(GST_API_VERSION) \
>     -lgstpbutils-$(GST_API_VERSION) -lgstvancmeta-$(GST_API_VERSION)
> \
>    ...
>
> But that did not seem to help.  It looks like libgstlibav.so is being
> installed in /opt/gst/lib/gstreamer-1.0, but libgstvancmeta.so is
> being installed in /opt/gst/lib.  Does libgstvancmeta.so belong in
> /opt/gst/lib/gstreamer-1.0?  If so, how do I get it there?
It does belong there, yes. If you put it into lib_LTLIBRARIES in the
Makefile.am, it should go to the normal library directory and not the
plugin directory.

Compare your Makefile.am with the ones of other libraries in gst-libs.

--
Sebastian Dröge, Centricular Ltd · http://www.centricular.com
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

signature.asc (949 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Linking new metadata lib

jpoet
On Thu, Oct 6, 2016 at 7:38 PM Sebastian Dröge <[hidden email]> wrote:
As plugin and library are in the same module, you have to link to the
library .la file, i.e.

  $(top_builddir)/gst-libs/gst/vanc/libgstvancmeta-@GST_API_VERSION@.la

That fixed that issue.
 
I would also suggest to call the library libgstvanc (i.e. without the
meta part).

Done.
 
Are you planning to submit the code of the library and the changes to
the decklink plugin upstream at some point?

Yes, absolutely.  As a matter of fact, I will attach what I have done so far to this email, in the hope that you will have time to look at it and give me other suggestions.
 
> Also, when the gstvanmeta lib is installed (/opt/gst/lib), I have
> also run into trouble trying to use it with avenc_mpeg2video, I get:
> /opt/gst/lib/gstreamer-1.0/libgstlibav.so: undefined symbol:
> vanc_meta_get_info
>
> To fix that, I tried changing gst-libav/ext/libav/Makefile.am to
> have:
> libgstlibav_la_LIBADD = $(LIBAV_LIBS) $(GST_PLUGINS_BASE_LIBS) \
>     -lgstaudio-$(GST_API_VERSION) -lgstvideo-$(GST_API_VERSION) \
>     -lgstpbutils-$(GST_API_VERSION) -lgstvancmeta-$(GST_API_VERSION)
> \
>    ...
>
> But that did not seem to help.  It looks like libgstlibav.so is being
> installed in /opt/gst/lib/gstreamer-1.0, but libgstvancmeta.so is
> being installed in /opt/gst/lib.  Does libgstvancmeta.so belong in
> /opt/gst/lib/gstreamer-1.0?  If so, how do I get it there?

It does belong there, yes. If you put it into lib_LTLIBRARIES in the
Makefile.am, it should go to the normal library directory and not the
plugin directory.

Compare your Makefile.am with the ones of other libraries in gst-libs.

I am still having this problem.  When building, I am doing:
```
export PKG_CONFIG_PATH=/opt/gst/lib/pkgconfig
```
and
```
./autogen.sh --prefix=/opt/gst
make
sudo make install
```
In each directory.

In gst-plugins-bad/gst-libs/gst/vanc/Makefile.am, I have:
```
lib_LTLIBRARIES = libgstvanc-@GST_API_VERSION@.la
```
That should be correct, right?

In gst-libav/ext/libav/Makefile.am, I have:
```
libgstlibav_la_LIBADD = $(LIBAV_LIBS) $(GST_PLUGINS_BASE_LIBS) \
    -lgstaudio-$(GST_API_VERSION) -lgstvideo-$(GST_API_VERSION) \
    -lgstpbutils-$(GST_API_VERSION) -lgstvanc-$(GST_API_VERSION) \
    $(GST_BASE_LIBS) $(LIBM) $(WIN32_LIBS) -lz $(BZ2_LIBS) $(LZMA_LIBS)

```

When I inspect libav, I get:
```
gst-inspect-1.0 avenc_mpeg2video

(gst-plugin-scanner:21594): GStreamer-WARNING **: Failed to load plugin '/opt/gst/lib/gstreamer-1.0/libgstlibav.so': /opt/gst/lib/gstreamer-1.0/libgstlibav.so: undefined symbol: vanc_meta_get_info
No such element or plugin 'avenc_mpeg2video'

```

If I run ldd on /opt/gst/lib/gstreamer-1.0/libgstlibav.so, I get:
```
ldd /opt/gst/lib/gstreamer-1.0/libgstlibav.so
    linux-vdso.so.1 (0x00007fff815ba000)
    libgstaudio-1.0.so.0 => /opt/gst/lib/libgstaudio-1.0.so.0 (0x00007f9f871e7000)
    libgstvideo-1.0.so.0 => /opt/gst/lib/libgstvideo-1.0.so.0 (0x00007f9f86f70000)
    libgstpbutils-1.0.so.0 => /opt/gst/lib/libgstpbutils-1.0.so.0 (0x00007f9f86d3b000)
    libgstvanc-1.0.so.0 => /opt/gst/lib/libgstvanc-1.0.so.0 (0x00007f9f86b39000)
    libgstbase-1.0.so.0 => /opt/gst/lib/libgstbase-1.0.so.0 (0x00007f9f868d6000)
    libgstreamer-1.0.so.0 => /opt/gst/lib/libgstreamer-1.0.so.0 (0x00007f9f865a5000)
    libgobject-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 (0x00007f9f86352000)
    libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f9f86043000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f9f85d42000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f9f85b27000)
    libbz2.so.1.0 => /lib/x86_64-linux-gnu/libbz2.so.1.0 (0x00007f9f85917000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9f856fa000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9f8534f000)
    libgsttag-1.0.so.0 => /opt/gst/lib/libgsttag-1.0.so.0 (0x00007f9f85115000)
    libgmodule-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgmodule-2.0.so.0 (0x00007f9f84f11000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f9f84d09000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9f84b05000)
    libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6 (0x00007f9f848fd000)
    libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f9f8468f000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f9f88b58000)

```
So libgstlibav.so finds libgstvanc it okay.  This makes me think the problem is with gst-launch-1.0 and gst-inspect-1.0, but that doesn't really make sense.  Can you spot anything else I am doing wrong?

Thanks,

John



_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

gst-libav-vanc.patch (4K) Download Attachment
gst-plugins-bad-vanc.patch (36K) Download Attachment