On 25.03.2014 17:21, Michael Berry wrote:
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@184NONAME
gst_byte_writer_free@185NONAME
gst_byte_writer_new_with_size@186NONAME
This is not necessary that you should add all methods to the def file. Here first you should look for where the symbols are implemented and you possibly miss this file from from makefile. Take all symbols that linker shows to you, strip leading underscore character, and find them in the vanilla glib. It's possible that we did not include the file where they are implemented to the sources. In short: look where gst_byte_writer_free, gst_byte_writer_new_with_size and gst_byte_writer_free_and_get_bufferreferenced are implemented and make sure this file is compiled.

(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.)
NONAME is always there and the number is sequential. Also make sure use TABS between the columns. As far as I remember TABS are used, but do double check it.


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!
OK.


Many thanks,

Michael


On 25 March 2014 11:00, Kirill Kirichenko <kirill.kiriche...@oracle.com
<mailto:kirill.kiriche...@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
        <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
        <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
                <berry...@gmail.com <mailto:berry...@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/
                    <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


Reply via email to