Adding GStreamer plugins

Michael Berry mjrb5 at kent.ac.uk
Tue Mar 25 13:21:15 UTC 2014


Hi Kirill,

Many thanks for the detailed response, that's incredibly helpful. I had
noted already that you were using gstreamer 0.10.35 from downloading the
gstreamer modifications for JFX8 from Oracle's site, so was using the
appropriate version of the plugin already to try to ensure no compatibility
issues arose.

It seems the issue that I was having was indeed to do with the step you
outlined; I was getting unresolved external linker issues because it
couldn't find the functions I hadn't added. However, while the linker
errors associated with all the glib functions have now been resolved
through adding the methods (to both glib-lite.def and glib-liteD.def),
adding the relevant functions to gstreamer-lite.def complains about an
unresolved external symbol in the def file:

gstreamer-lite.def : error LNK2001: unresolved external symbol
gst_byte_writer_free
gstreamer-lite.def : error LNK2001: unresolved external symbol
gst_byte_writer_free_and_get_buffer
gstreamer-lite.def : error LNK2001: unresolved external symbol
gst_byte_writer_new_with_size

When they're not in the def file, I get the following linker errors instead:

libgstplugins.lib(ebml-write.obj) : error LNK2019: unresolved external
symbol _gst_byte_writer_free referenced in function _gst_ebml_write_finalize
libgstplugins.lib(ebml-write.obj) : error LNK2019: unresolved external
symbol _gst_byte_writer_new_with_size referenced in function
_gst_ebml_start_streamheader
libgstplugins.lib(ebml-write.obj) : error LNK2019: unresolved external
symbol _gst_byte_writer_free_and_get_bufferreferenced in function
_gst_ebml_stop_streamheader

I've added these to the gstreamer-lite.def file in exactly the same way as
I added the glib functions to the glib files - any idea what I might have
missed?

gst_byte_writer_free_and_get_buffer @184 NONAME
gst_byte_writer_free @185 NONAME
gst_byte_writer_new_with_size @186 NONAME

(I'm assuming NONAME is always there, and the number is sequential.) The
functions are in gstbytewriter.h which is there, though perhaps I need to
make the linker aware of that file specifically if it's not used anywhere
else? (I'm just guessing here though.)

Happy to look at upgrading gstreamer to the latest version as a next task,
so I'd be more than willing to give that a go. Though I would quite like to
get the matroska plugin working first - just so I've got some experience at
building in a working plugin, and have some end result from what I'm trying
to achieve here!

Many thanks,

Michael


On 25 March 2014 11:00, Kirill Kirichenko <kirill.kirichenko at oracle.com>wrote:

> Hi Michael.
> See my comments inline.
>
>
> On 24.03.2014 04:31, Michael Berry wrote:
>
>> I'm now a bit further along with this, though struggling to get the
>> matroska plugin to compile (getting a bunch of unresolved external symbol
>> errors for functions it uses in glib - not entirely sure why at the
>> moment,
>> as I said C is not my strong point.) I've also noticed the plugins
>> currently bundled have quite a few changes to the gstreamer version, and I
>> can't quite work out the logic behind why things have been changed the way
>> they have - so even after the compilation issue is resolved I'm now less
>> confident that it will just drop in and work! Again, if someone
>> knowledgeable in this area that's lurking in the shadows could shed any
>> light on any of this, it would be hugely appreciated.
>>
> We did some changes in existing GStreamer code because it had errors and
> because we needed to expand some functionality. The changes are not very
> extensive.
>
>
>  However, putting the current problems aside for a bit, the snags I hit up
>> until this point could I think be relatively easily addressed in the
>> documentation. With that in mind could I suggest a few additional points
>> for the wiki? These may be obvious to the majority reading here, but as
>> someone completely new to building JFX they had me stumped for a while!
>>
> I can give you some directions. There is no wiki. I'd appreciate if you
> created one.
>
>
>    - It turns out that the Gstreamer stuff doesn't compile at all by
>> default,
>> which is why I wasn't seeing any changes on the native level. To ensure
>> GStreamer is actually compiled, you need to copy the
>> gradle.properties.template file to gradle.properties, and uncomment the
>> "#COMPILE_MEDIA = true" line. (A similar scenario would appear to exist
>> for
>> any webkit alterations as per the line above.)
>>
> You don't need to comment/uncomment anything. Just add
> -PCOMPILE_MEDIA=true to the gradle command line. You can however change the
> properties file too.
>
>
>    - As well as the requirements listed, I needed the Windows SDK (
>> http://www.microsoft.com/en-gb/download/details.aspx?id=8279) installed
>> for
>> GStreamer to compile successfully under Windows (7) - without it cygpath
>> just threw a rather confusing error.
>>
> You need windows 7.1a SDK and speaking precisely you need only samples
> from it because samples have BaseClasses at Samples/multimedia/directshow/baseclasses.
> BaseClasses are used for Oracle direchshowwrapper plugin.
>
>
>    - The developer workflow page (
>> https://wiki.openjdk.java.net/display/OpenJFX/Developer+Work+Flow) refers
>> to  "-Djavafx.ext.dirs" - I think this should be "-Djava.ext.dirs"
>> instead?
>>
> What are you gonna use it for ?
>
>
>  I'm happy to make the above changes myself but unsure of if / where you
>> can
>> sign up for an account, so I'm just throwing them here for now - if anyone
>> could point me to the right place then that'd be great!
>>
> Steve. Can you give an advice ?
>
>
>  If I do ever manage to get this working (ha-ha) I'd also like to throw up
>> a
>> wiki page just detailing how to grab a gstreamer plugin and make the
>> necessary changes to it to compile it into openjfx as a stop gap to then
>> perhaps working on one or both of the above JIRA issues and seeing where I
>> get - does this sound reasonable?
>>
> It does.
>
>
>  On Mar 22, 2014, at 9:26 PM, Michael Berry <berry120 at gmail.com> wrote:
>>>>
>>>>> However, I'm not sure if I'm going about including the matroska plugin
>>>>>
>>>> in
>>>>
>>>>> the right way - I've currently done the following:
>>>>>
>>>>> - Downloaded the latest version of the plugins from here (
>>>>> http://gstreamer.freedesktop.org/src/gst-plugins-good/), then added
>>>>> the
>>>>> matroska one to the modules/media/src/main/native/gstreamer/plugins/
>>>>> folder, as well as the
>>>>>
>>>>>  modules/media/src/main/native/gstreamer/gstreamer-lite/gst-
>>>> plugins-good/gst/
>>>>
>>>>> folder (I'm unsure of this - should I add it to both these folders?).
>>>>>
>>>> Well you see. If you download the latest matroska plugin it potentially
> can have dependencies on the latest GStreamer platform. We don't have/use
> the latest gstreamer. The version we use is 0.10.35. And the latest
> available is 1.x. They are incompatible in some methods.
>
>
>  - Added all the C files from the first folder mentioned above to the
>>>>> plugins.vcxproj file
>>>>>
>>>>> - Added the relevant files and directory to Makefile.gstplugins
>>>>>
>>>>> - Called the additional relevant plugin_init() function in
>>>>> gstplugins-lite.c
>>>>>
>>>> There is one more thing you need to do here for Windows only apart from
> running gradle with -PCOMPILE_MEDIA=true. Windows build system has files
> that export symbols
> 1) from glib-lite.dll ${jfxroot}/rt/modules/media/
> src/main/native/gstreamer/3rd_party/glib/glib-2.28.8/build/
> win32/vs100/{glib-lite.def|glib-liteD.def}
> Here the version with "D" is used for debug build and may contain more
> symbols for export.
> 2) from gstreamer-lite.dll ${jfxroot}/rt/modules/media/
> src/main/native/gstreamer/projects/win/gstreamer-lite.def - used for both
> Release and Debug.
>
> If your plugin uses some methods of gstreamer/glib libraries not mentioned
> in the files you should add the methods to the files. Syntax is pretty
> simple. If you don't add depending methods to these files you will get
> linker errors. C/C++ compiler will not generate errors.
>
> Actually I think the best way to start developing/improving the Media
> component is to upgrade GStreamer to 1.x from 0.10.35. It would be a very
> good starting point and you would get less or no problems using the latest
> available plugins. If someone wanna take over this I can explain in details
> how to do it.
>
> K
>


More information about the openjfx-dev mailing list