255 decltype(&::gst_init_check) init_check{};
256 decltype(&::gst_parse_launch) parse_launch{};
257 decltype(&::gst_element_set_state) element_set_state{};
258 decltype(&::gst_element_get_state) element_get_state{};
259 decltype(&::gst_element_get_bus) element_get_bus{};
260 decltype(&::gst_bin_get_by_name) bin_get_by_name{};
261 decltype(&::gst_element_get_static_pad) element_get_static_pad{};
262 decltype(&::gst_element_get_name) element_get_name{};
265 decltype(&::gst_pad_get_peer) pad_get_peer{};
266 decltype(&::gst_pad_get_allowed_caps) pad_get_allowed_caps{};
267 decltype(&::gst_pad_get_parent_element) pad_get_parent_element{};
270 decltype(&::gst_pad_get_current_caps) pad_get_current_caps{};
271 decltype(&::gst_caps_new_simple) caps_new_simple{};
272 decltype(&::gst_caps_from_string) caps_from_string{};
273 decltype(&::gst_caps_unref) caps_unref{};
274 decltype(&::gst_caps_get_structure) caps_get_structure{};
275 decltype(&::gst_structure_get_name) structure_get_name{};
276 decltype(&::gst_structure_get_int) structure_get_int{};
277 decltype(&::gst_structure_get_string) structure_get_string{};
280 decltype(&::gst_bus_timed_pop_filtered) bus_timed_pop_filtered{};
283 decltype(&::gst_object_unref) object_unref{};
284 decltype(&::gst_message_unref) message_unref{};
285 decltype(&::gst_mini_object_unref) mini_object_unref{};
286 decltype(&::g_free) g_free{};
287 decltype(&::g_error_free) g_error_free{};
290 decltype(&::gst_app_sink_try_pull_sample) app_sink_try_pull_sample{};
291 decltype(&::gst_app_sink_is_eos) app_sink_is_eos{};
294 decltype(&::gst_app_src_push_buffer) app_src_push_buffer{};
295 decltype(&::gst_app_src_end_of_stream) app_src_end_of_stream{};
296 decltype(&::gst_app_src_set_caps) app_src_set_caps{};
299 decltype(&::gst_sample_get_buffer) sample_get_buffer{};
300 decltype(&::gst_sample_get_caps) sample_get_caps{};
301 decltype(&::gst_buffer_new_allocate) buffer_new_allocate{};
302 decltype(&::gst_buffer_new_wrapped_full) buffer_new_wrapped_full{};
303 decltype(&::gst_buffer_map) buffer_map{};
304 decltype(&::gst_buffer_unmap) buffer_unmap{};
307 decltype(&::g_object_class_list_properties) object_class_list_properties{};
308 decltype(&::g_type_class_ref) type_class_ref{};
309 decltype(&::g_type_class_unref) type_class_unref{};
310 decltype(&::g_type_is_a) type_is_a{};
311 decltype(&::g_object_set_property) object_set_property{};
312 decltype(&::g_object_get_property) object_get_property{};
313 decltype(&::g_value_init) value_init{};
314 decltype(&::g_value_unset) value_unset{};
315 decltype(&::g_value_get_int) value_get_int{};
316 decltype(&::g_value_get_uint) value_get_uint{};
317 decltype(&::g_value_get_float) value_get_float{};
318 decltype(&::g_value_get_double) value_get_double{};
319 decltype(&::g_value_get_boolean) value_get_boolean{};
320 decltype(&::g_value_get_string) value_get_string{};
321 decltype(&::g_value_get_int64) value_get_int64{};
322 decltype(&::g_value_get_uint64) value_get_uint64{};
323 decltype(&::g_value_get_long) value_get_long{};
324 decltype(&::g_value_get_ulong) value_get_ulong{};
325 decltype(&::g_value_get_enum) value_get_enum{};
326 decltype(&::g_value_set_int) value_set_int{};
327 decltype(&::g_value_set_uint) value_set_uint{};
328 decltype(&::g_value_set_float) value_set_float{};
329 decltype(&::g_value_set_double) value_set_double{};
330 decltype(&::g_value_set_boolean) value_set_boolean{};
331 decltype(&::g_value_set_string) value_set_string{};
332 decltype(&::g_value_set_int64) value_set_int64{};
333 decltype(&::g_value_set_uint64) value_set_uint64{};
334 decltype(&::g_value_set_long) value_set_long{};
335 decltype(&::g_value_set_ulong) value_set_ulong{};
336 decltype(&::g_value_set_enum) value_set_enum{};
347 static ossia::dylib_loader load_core_library()
350 return ossia::dylib_loader{
351 std::vector<std::string_view>{
"gstreamer-1.0-0.dll"}};
352#elif defined(__APPLE__)
353 return ossia::dylib_loader{std::vector<std::string_view>{
354 "libgstreamer-1.0.0.dylib",
"libgstreamer-1.0.dylib"}};
356 return ossia::dylib_loader{std::vector<std::string_view>{
357 "libgstreamer-1.0.so.0",
"libgstreamer-1.0.so"}};
361 static ossia::dylib_loader load_app_library()
364 return ossia::dylib_loader{
365 std::vector<std::string_view>{
"gstapp-1.0-0.dll"}};
366#elif defined(__APPLE__)
367 return ossia::dylib_loader{std::vector<std::string_view>{
368 "libgstapp-1.0.0.dylib",
"libgstapp-1.0.dylib"}};
370 return ossia::dylib_loader{std::vector<std::string_view>{
371 "libgstapp-1.0.so.0",
"libgstapp-1.0.so"}};
375 static ossia::dylib_loader load_gobject_library()
378 return ossia::dylib_loader{
379 std::vector<std::string_view>{
"gobject-2.0-0.dll",
"libgobject-2.0-0.dll"}};
380#elif defined(__APPLE__)
381 return ossia::dylib_loader{std::vector<std::string_view>{
382 "libgobject-2.0.0.dylib",
"libgobject-2.0.dylib"}};
384 return ossia::dylib_loader{std::vector<std::string_view>{
385 "libgobject-2.0.so.0",
"libgobject-2.0.so"}};
389 static ossia::dylib_loader load_glib_library()
392 return ossia::dylib_loader{
393 std::vector<std::string_view>{
"glib-2.0-0.dll",
"libglib-2.0-0.dll"}};
394#elif defined(__APPLE__)
395 return ossia::dylib_loader{std::vector<std::string_view>{
396 "libglib-2.0.0.dylib",
"libglib-2.0.dylib"}};
398 return ossia::dylib_loader{std::vector<std::string_view>{
399 "libglib-2.0.so.0",
"libglib-2.0.so"}};
403#define GST_LOAD(lib, name) \
404 name = lib.symbol<decltype(&::gst_##name)>("gst_" #name)
407 try : m_core{load_core_library()}
408 , m_app{load_app_library()}
409 , m_gobject{load_gobject_library()}
410 , m_glib{load_glib_library()}
414 GST_LOAD(m_core, init_check);
415 GST_LOAD(m_core, parse_launch);
416 GST_LOAD(m_core, element_set_state);
417 GST_LOAD(m_core, element_get_state);
418 GST_LOAD(m_core, element_get_bus);
419 GST_LOAD(m_core, bin_get_by_name);
420 GST_LOAD(m_core, element_get_static_pad);
421 GST_LOAD(m_core, element_get_name);
424 GST_LOAD(m_core, pad_get_peer);
425 GST_LOAD(m_core, pad_get_allowed_caps);
426 GST_LOAD(m_core, pad_get_parent_element);
429 GST_LOAD(m_core, pad_get_current_caps);
430 GST_LOAD(m_core, caps_new_simple);
431 GST_LOAD(m_core, caps_from_string);
432 GST_LOAD(m_core, caps_unref);
433 GST_LOAD(m_core, caps_get_structure);
434 GST_LOAD(m_core, structure_get_name);
435 GST_LOAD(m_core, structure_get_int);
436 GST_LOAD(m_core, structure_get_string);
439 GST_LOAD(m_core, bus_timed_pop_filtered);
442 GST_LOAD(m_core, object_unref);
443 GST_LOAD(m_core, message_unref);
444 GST_LOAD(m_core, mini_object_unref);
445 g_free = m_glib.symbol<
decltype(&::g_free)>(
"g_free");
446 g_error_free = m_glib.symbol<
decltype(&::g_error_free)>(
"g_error_free");
449 GST_LOAD(m_app, app_sink_try_pull_sample);
450 GST_LOAD(m_app, app_sink_is_eos);
453 GST_LOAD(m_app, app_src_push_buffer);
454 GST_LOAD(m_app, app_src_end_of_stream);
455 GST_LOAD(m_app, app_src_set_caps);
458 GST_LOAD(m_core, sample_get_buffer);
459 GST_LOAD(m_core, sample_get_caps);
460 GST_LOAD(m_core, buffer_new_allocate);
461 GST_LOAD(m_core, buffer_new_wrapped_full);
462 GST_LOAD(m_core, buffer_map);
463 GST_LOAD(m_core, buffer_unmap);
466#define GOBJ_LOAD(name) \
467 name = m_gobject.symbol<decltype(&::g_##name)>("g_" #name)
469 GOBJ_LOAD(object_class_list_properties);
470 GOBJ_LOAD(type_class_ref);
471 GOBJ_LOAD(type_class_unref);
472 GOBJ_LOAD(type_is_a);
473 GOBJ_LOAD(object_set_property);
474 GOBJ_LOAD(object_get_property);
475 GOBJ_LOAD(value_init);
476 GOBJ_LOAD(value_unset);
477 GOBJ_LOAD(value_get_int);
478 GOBJ_LOAD(value_get_uint);
479 GOBJ_LOAD(value_get_float);
480 GOBJ_LOAD(value_get_double);
481 GOBJ_LOAD(value_get_boolean);
482 GOBJ_LOAD(value_get_string);
483 GOBJ_LOAD(value_get_int64);
484 GOBJ_LOAD(value_get_uint64);
485 GOBJ_LOAD(value_get_long);
486 GOBJ_LOAD(value_get_ulong);
487 GOBJ_LOAD(value_get_enum);
488 GOBJ_LOAD(value_set_int);
489 GOBJ_LOAD(value_set_uint);
490 GOBJ_LOAD(value_set_float);
491 GOBJ_LOAD(value_set_double);
492 GOBJ_LOAD(value_set_boolean);
493 GOBJ_LOAD(value_set_string);
494 GOBJ_LOAD(value_set_int64);
495 GOBJ_LOAD(value_set_uint64);
496 GOBJ_LOAD(value_set_long);
497 GOBJ_LOAD(value_set_ulong);
498 GOBJ_LOAD(value_set_enum);
503 if(!init_check || !parse_launch || !element_set_state
504 || !element_get_state || !bin_get_by_name || !object_unref
505 || !buffer_map || !buffer_unmap)
516 ossia::dylib_loader m_core;
517 ossia::dylib_loader m_app;
518 ossia::dylib_loader m_gobject;
519 ossia::dylib_loader m_glib;