GNOME Bugzilla – Bug 728443
Duplicated symbols in several plugins
Last modified: 2014-07-04 12:57:16 UTC
The package steps reports several duplicated symbols (https://jenkins.arracacha.collabora.co.uk/job/cerbero-ios-universal-7.1/28/console) _color_set /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideoconvert_a_armv7_-libgstvideoconvert_la-gstcms.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideomixer_a_armv7_-libgstvideomixer_la-gstcms.o: _color_matrix_YCbCr_to_RGB /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideoconvert_a_armv7_-libgstvideoconvert_la-gstcms.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideomixer_a_armv7_-libgstvideomixer_la-gstcms.o: _iconv_locale_charset /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libcharset_a_armv7_-localcharset.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libiconv_a_armv7_-localcharset.o: _color_matrix_copy /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideoconvert_a_armv7_-libgstvideoconvert_la-gstcms.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideomixer_a_armv7_-libgstvideomixer_la-gstcms.o: _color_matrix_invert /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideoconvert_a_armv7_-libgstvideoconvert_la-gstcms.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideomixer_a_armv7_-libgstvideomixer_la-gstcms.o: _color_matrix_build_bt709_to_bt601 /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideoconvert_a_armv7_-libgstvideoconvert_la-gstcms.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideomixer_a_armv7_-libgstvideomixer_la-gstcms.o: _gst_download_rate_get_max_length /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstdashdemux_a_armv7_-libgstdashdemux_la-gstdownloadrate.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstsmoothstreaming_a_armv7_-libgstsmoothstreaming_la-gstdownloadrate.o: _strverscmp /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgnutls-openssl_a_armv7_-strverscmp.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libtasn1_a_armv7_-strverscmp.o: _color_transfer_function_apply /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideoconvert_a_armv7_-libgstvideoconvert_la-gstcms.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideomixer_a_armv7_-libgstvideomixer_la-gstcms.o: _gst_audio_visualizer_get_type /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstaudiovisualizers_a_armv7_-libgstaudiovisualizers_la-gstaudiovisualizer.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstlibvisual_a_armv7_-libgstlibvisual_la-gstaudiovisualizer.o: _color_matrix_build_yuv_to_rgb_601 /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideoconvert_a_armv7_-libgstvideoconvert_la-gstcms.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideomixer_a_armv7_-libgstvideomixer_la-gstcms.o: _color_matrix_offset_components /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideoconvert_a_armv7_-libgstvideoconvert_la-gstcms.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideomixer_a_armv7_-libgstvideomixer_la-gstcms.o: _color_XYZ_to_xyY /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideoconvert_a_armv7_-libgstvideoconvert_la-gstcms.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideomixer_a_armv7_-libgstvideomixer_la-gstcms.o: _gst_download_rate_add_rate /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstdashdemux_a_armv7_-libgstdashdemux_la-gstdownloadrate.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstsmoothstreaming_a_armv7_-libgstsmoothstreaming_la-gstdownloadrate.o: _gst_download_rate_init /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstdashdemux_a_armv7_-libgstdashdemux_la-gstdownloadrate.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstsmoothstreaming_a_armv7_-libgstsmoothstreaming_la-gstdownloadrate.o: _gst_download_rate_deinit /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstdashdemux_a_armv7_-libgstdashdemux_la-gstdownloadrate.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstsmoothstreaming_a_armv7_-libgstsmoothstreaming_la-gstdownloadrate.o: _gst_download_rate_clear /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstdashdemux_a_armv7_-libgstdashdemux_la-gstdownloadrate.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstsmoothstreaming_a_armv7_-libgstsmoothstreaming_la-gstdownloadrate.o: _color_matrix_build_XYZ /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideoconvert_a_armv7_-libgstvideoconvert_la-gstcms.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideomixer_a_armv7_-libgstvideomixer_la-gstcms.o: _color_transfer_function_unapply /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideoconvert_a_armv7_-libgstvideoconvert_la-gstcms.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideomixer_a_armv7_-libgstvideomixer_la-gstcms.o: _color_matrix_build_rgb_to_XYZ_601 /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideoconvert_a_armv7_-libgstvideoconvert_la-gstcms.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideomixer_a_armv7_-libgstvideomixer_la-gstcms.o: _color_matrix_build_XYZ_to_rgb_709 /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideoconvert_a_armv7_-libgstvideoconvert_la-gstcms.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideomixer_a_armv7_-libgstvideomixer_la-gstcms.o: _color_matrix_apply /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideoconvert_a_armv7_-libgstvideoconvert_la-gstcms.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideomixer_a_armv7_-libgstvideomixer_la-gstcms.o: _color_matrix_transpose /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideoconvert_a_armv7_-libgstvideoconvert_la-gstcms.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideomixer_a_armv7_-libgstvideomixer_la-gstcms.o: _gst_download_rate_get_current_rate /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstdashdemux_a_armv7_-libgstdashdemux_la-gstdownloadrate.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstsmoothstreaming_a_armv7_-libgstsmoothstreaming_la-gstdownloadrate.o: _color_matrix_scale_components /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideoconvert_a_armv7_-libgstvideoconvert_la-gstcms.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideomixer_a_armv7_-libgstvideomixer_la-gstcms.o: _color_gamut_clamp /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideoconvert_a_armv7_-libgstvideoconvert_la-gstcms.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideomixer_a_armv7_-libgstvideomixer_la-gstcms.o: _color_xyY_to_XYZ /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideoconvert_a_armv7_-libgstvideoconvert_la-gstcms.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideomixer_a_armv7_-libgstvideomixer_la-gstcms.o: _color_matrix_dump /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideoconvert_a_armv7_-libgstvideoconvert_la-gstcms.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideomixer_a_armv7_-libgstvideomixer_la-gstcms.o: _gst_download_rate_set_max_length /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstdashdemux_a_armv7_-libgstdashdemux_la-gstdownloadrate.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstsmoothstreaming_a_armv7_-libgstsmoothstreaming_la-gstdownloadrate.o: _color_matrix_build_rgb_to_yuv_601 /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideoconvert_a_armv7_-libgstvideoconvert_la-gstcms.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideomixer_a_armv7_-libgstvideomixer_la-gstcms.o: _color_matrix_set_identity /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideoconvert_a_armv7_-libgstvideoconvert_la-gstcms.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideomixer_a_armv7_-libgstvideomixer_la-gstcms.o: _color_matrix_RGB_to_YCbCr /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideoconvert_a_armv7_-libgstvideoconvert_la-gstcms.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideomixer_a_armv7_-libgstvideomixer_la-gstcms.o: _color_matrix_build_XYZ_to_rgb_dell /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideoconvert_a_armv7_-libgstvideoconvert_la-gstcms.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideomixer_a_armv7_-libgstvideomixer_la-gstcms.o: _color_matrix_multiply /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideoconvert_a_armv7_-libgstvideoconvert_la-gstcms.o: /var/folders/8m/ghzrk8x509n66px4t2p0ybgr0000gv/T/tmpIGNFDy/armv7/GStreamer:libgstvideomixer_a_armv7_-libgstvideomixer_la-gstcms.o:
As a side note, shouldn't we make that step fail in cerbero ?
Would using the hidden attribute (via G_GNUC_INTERNAL) fix this ?
(In reply to comment #2) > Would using the hidden attribute (via G_GNUC_INTERNAL) fix this ? No, as we link it all into a single file on iOS and Android. G_GNUC_INTERNAL only makes sure that the symbol is not visible outside a single DSO, but inside the DSO you would still have the conflicts
Created attachment 278002 [details] [review] add cms and colorspace to libgstvideo At least some of these were a couple external files that were copied in two elements. Seemed useful to have as a lib. I had to rename videoconvert to colorspace to avoid collision with the videoconvert element once I added the Gst/gst prefixes.
Created attachment 278003 [details] [review] videoconvert: use the new lib
Created attachment 278004 [details] [review] videomixer: use the new lib
How do I update the ORC dist files ? I found an orc-update target in common/orc.mak but no top level target.
Review of attachment 278002 [details] [review]: ::: gst-libs/gst/video/Makefile.am @@ +71,3 @@ + video-overlay-composition.h \ + colorspaceconvert.h \ + gstcms.h They should all be included by video.h ::: gst-libs/gst/video/colorspaceconvert.h @@ +26,3 @@ +G_BEGIN_DECLS + +typedef struct _GstColorSpaceConvert GstColorSpaceConvert; Maybe all this should be called GstVideoConvert or GstVideoConverter or something like that? It's not (only) about colorspace conversion @@ +32,3 @@ + DITHER_VERTERR, + DITHER_HALFTONE +} GstColorSpaceDitherMethod; Namespace pollution. GST_COLOR_SPACE_DITHER_METHOD_NONE, etc @@ +62,3 @@ + void (*convert) (GstColorSpaceConvert *convert, GstVideoFrame *dest, const GstVideoFrame *src); + void (*matrix) (GstColorSpaceConvert *convert, gpointer pixels); + void (*dither16) (GstColorSpaceConvert *convert, guint16 * pixels, int j); No padding and not sure if we want all these fields public, or even any of them. Probably not and it should just go to the .c file ::: gst-libs/gst/video/gstcms.h @@ +70,3 @@ +void gst_cms_color_transfer_function_unapply (GstCMSColor * dest, + GstCMSColor * src); +void gst_cms_color_gamut_clamp (GstCMSColor * dest, GstCMSColor * src); Should this be public API at all? Or just internally used by the colorspace convert functions? Maybe don't install the header until someone actually needs this :)
GstVideoConvert is the element name and type (collision). Converter is possible, but that sounded confusing, so this was name cms... Converter seem fine if closeness to convert is not an issue. About public stuff, fair enough. I just moved the code away and renamed for collisions. I'll move the implementation to private.
Created attachment 278128 [details] [review] add cms/converter to video
Created attachment 278129 [details] [review] videoconvert: use moved libs
Created attachment 278130 [details] [review] videmixer: use moved libs
Comments applied, except for reserved space, since the structure is now private.
The whole reason why this was added to videomixer internally is that we wanted to delay adding public API for this to libgstvideo until after the upcoming release...
It seems the .*download.* ones may be fixed/different in a recent tree. I can't find some of the symbols and a downoader element was added after the core commit which is built in your log. Can you post a more recent one if it still is there for some symbols ?
Tim, fair enough. Is the patch along the lines of what you'd intended to do eventually at that release ?
I don't know, I haven't look at the patch in detail yet, I still think it should wait until after the release.
Created attachment 278134 [details] [review] videomixer: use moved libs
Aside the *download* one, the remaining ones seem to be either audio visualizer (a private base class too, I guess it's private till deemed publicizable too), and system libs.
(In reply to comment #14) > The whole reason why this was added to videomixer internally is that we wanted > to delay adding public API for this to libgstvideo until after the upcoming > release... Note that "after the upcoming release" back then meant 1.2.0 :) But I agree that this should wait
Vincent, do you want to provide a patch that just prefixes the symbols in the other plugins?
Note that, for kicks, there's now a videoconvert and cms in gst-plugins-bad/gst-libs/gst/video
I think all in our code are done now, what's left is libcharset/iconv and gnutls/libtasn1. We'll see after the next build. Vincent, can you open another bug for moving the video conversion foo into libgstvideo so we can do that for 1.6? The API should probably be cleaned up a bit though (hide struct members, fix namespace pollution with the dither enum, etc). Also gstcms.[ch] should probably be internal and hidden.
(In reply to comment #21) > Vincent, do you want to provide a patch that just prefixes the symbols in the > other plugins? What do you mean ? Not leaving gstcms etc in each plugin, but add, eg, "Plugin1", "Plugin2", etc, in front of each copy ? :S