Hi experts:
I created a dynamic lib to use gst, and the lib is loaded by dlopen. then there is exception to load the lib for a second playback. 1. if I call gst_deinit() before dlclose the lib. I fail to create any gst element next time after calling gst_init() again. gst_init_check() said gst has already been inited. 0:00:08.140795000 5131 0xffff98003e90 DEBUG GST_INIT gst.c:417:gst_init_check: already initialized gst 0:00:08.140939875 5131 0xffff98003e90 WARN GST_ELEMENT_FACTORY gstelementfactory.c:456:gst_element_factory_make: no such element factory "appsrc"! 2. if I skip call gst_deinit() before dlclose the lib, some exception comes for g_type_check (gdb) bt #0 0x0000ffffbeb67dd8 in strcmp () from /usr/lib64/libc.so.6 #1 0x0000ffffbf16ba5c in g_str_equal () from /usr/lib64/libglib-2.0.so #2 0x0000ffffbf16af08 in g_hash_table_lookup () from /usr/lib64/libglib-2.0.so #3 0x0000ffffbf18d648 in g_intern_static_string () from /usr/lib64/libglib-2.0.so #4 0x0000ffffb70548dc in gst_audio_clock_get_type () from /usr/lib64/libgstaudio-1.0.so.0 #5 0x0000ffffb705494c in gst_audio_clock_new () from /usr/lib64/libgstaudio-1.0.so.0 _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
我把gst_init/gst_deinit移到了动态库的外部,也就是进程仅做一次gst_init/gst_deinit. 然后出现创想GstAudioClock的时候失败: (cowplayer_test:5466): GLib-GObject-WARNING **: cannot register existing type 'GstAudioClock' (cowplayer_test:5466): GLib-CRITICAL **: g_once_init_leave: assertion 'result != 0' failed (cowplayer_test:5466): GLib-GObject-CRITICAL **: g_object_new: assertion 'G_TYPE_IS_OBJECT (object_type)' failed Halley Zhao <[hidden email]> 于2019年6月20日周四 下午6:05写道:
_______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
In reply to this post by Halley Zhao
Le jeu. 20 juin 2019 06 h 10, Halley Zhao <[hidden email]> a écrit :
GStreamer (and glib) cannot be loaded twice.
gst_deinit() is only there for debugging.
_______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
In reply to this post by Halley Zhao
translate it: I tried to move gst_init/gst_deinit outside of the dynamic lib, it means gst_init/gst_deinit is done once in the process. then, there is error to create GstAudioClock for the second run. I guess there are some static data for g_type/gstreamer which isn't de-inited after dlclose(). (cowplayer_test:5466): GLib-GObject-WARNING **: cannot register existing type 'GstAudioClock' (cowplayer_test:5466): GLib-CRITICAL **: g_once_init_leave: assertion 'result != 0' failed (cowplayer_test:5466): GLib-GObject-CRITICAL **: g_object_new: assertion 'G_TYPE_IS_OBJECT (object_type)' failed Halley Zhao <[hidden email]> 于2019年6月20日周四 下午6:29写道:
_______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
Le jeu. 20 juin 2019 08 h 40, Halley Zhao <[hidden email]> a écrit :
GStreamer or Glib DLL/so cannot be loaded twice (didn't I say that already?). Just load and leak it to avoid these errors.
_______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
Free forum by Nabble | Edit this page |