Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Trouble building on OS X / M1 Pro #58

Open
nzoschke opened this issue Nov 21, 2022 · 22 comments
Open

Trouble building on OS X / M1 Pro #58

nzoschke opened this issue Nov 21, 2022 · 22 comments

Comments

@nzoschke
Copy link

nzoschke commented Nov 21, 2022

Following the docs I'm having some trouble. Hopefully can get it sorted and contribute some docs improvements.

$ brew install cmake libpng glfw gstreamer gst-libav gst-plugins-bad gst-plugins-base gst-plugins-good gst-plugins-ugly icu4c
$ mkdir vimix-build
$ cd vimix-build
$ cmake -DCMAKE_BUILD_TYPE=Release ../vimix

First I get an error on icu stuff:

-- Checking for modules 'icu-i18n;icu-uc;icu-io'
--   No package 'icu-i18n' found
--   No package 'icu-uc' found
--   No package 'icu-io' found
CMake Error at /opt/homebrew/Cellar/cmake/3.25.0/share/cmake/Modules/FindPkgConfig.cmake:607 (message):
  A required package was not found
Call Stack (most recent call first):
  /opt/homebrew/Cellar/cmake/3.25.0/share/cmake/Modules/FindPkgConfig.cmake:829 (_pkg_check_modules_internal)
  CMakeLists.txt:154 (pkg_check_modules)
-- Configuring incomplete, errors occurred!

This goes away by following hints in the icu4c package:

$ brew info icu4c
$ export PKG_CONFIG_PATH="/opt/homebrew/opt/icu4c/lib/pkgconfig"

$ cmake -DCMAKE_BUILD_TYPE=Release ../vimix
...
-- Congratulations! All external packages have been found.
...
-- Build files have been written to: /Users/noah/src/vimix-build

Next I get an error at the end of build when linking, perhaps due to M1 mac?

$ cmake --build .
[100%] Linking CXX executable vimix.app/Contents/MacOS/vimix
ld: warning: ignoring file /opt/homebrew/Cellar/glfw/3.3.8/lib/libglfw.dylib, building for macOS-x86_64 but attempting to link with file built for macOS-arm64
...

Full error output:

...
[100%] Linking CXX executable vimix.app/Contents/MacOS/vimix
ld: warning: ignoring file /opt/homebrew/Cellar/glfw/3.3.8/lib/libglfw.dylib, building for macOS-x86_64 but attempting to link with file built for macOS-arm64
ld: warning: ignoring file /opt/homebrew/Cellar/icu4c/71.1/lib/libicuio.dylib, building for macOS-x86_64 but attempting to link with file built for macOS-arm64
ld: warning: ignoring file /opt/homebrew/Cellar/icu4c/71.1/lib/libicui18n.dylib, building for macOS-x86_64 but attempting to link with file built for macOS-arm64
ld: warning: ignoring file /opt/homebrew/Cellar/icu4c/71.1/lib/libicuuc.dylib, building for macOS-x86_64 but attempting to link with file built for macOS-arm64
ld: warning: ignoring file /opt/homebrew/Cellar/icu4c/71.1/lib/libicudata.dylib, building for macOS-x86_64 but attempting to link with file built for macOS-arm64
ld: warning: ignoring file /opt/homebrew/Cellar/glib/2.74.0/lib/libgobject-2.0.dylib, building for macOS-x86_64 but attempting to link with file built for macOS-arm64
ld: warning: ignoring file /opt/homebrew/Cellar/glib/2.74.0/lib/libgmodule-2.0.dylib, building for macOS-x86_64 but attempting to link with file built for macOS-arm64
ld: warning: ignoring file /opt/homebrew/Cellar/glib/2.74.0/lib/libglib-2.0.dylib, building for macOS-x86_64 but attempting to link with file built for macOS-arm64
ld: warning: ignoring file /opt/homebrew/Cellar/gstreamer/1.20.4/lib/libgstreamer-1.0.dylib, building for macOS-x86_64 but attempting to link with file built for macOS-arm64
ld: warning: ignoring file /opt/homebrew/Cellar/glib/2.74.0/lib/libgthread-2.0.dylib, building for macOS-x86_64 but attempting to link with file built for macOS-arm64
ld: warning: ignoring file /opt/homebrew/Cellar/gst-plugins-base/1.20.3/lib/libgstapp-1.0.dylib, building for macOS-x86_64 but attempting to link with file built for macOS-arm64
ld: warning: ignoring file /opt/homebrew/Cellar/gstreamer/1.20.4/lib/libgstbase-1.0.dylib, building for macOS-x86_64 but attempting to link with file built for macOS-arm64
ld: warning: ignoring file /opt/homebrew/Cellar/gst-plugins-base/1.20.3/lib/libgstaudio-1.0.dylib, building for macOS-x86_64 but attempting to link with file built for macOS-arm64
ld: warning: ignoring file /opt/homebrew/Cellar/gst-plugins-base/1.20.3/lib/libgstpbutils-1.0.dylib, building for macOS-x86_64 but attempting to link with file built for macOS-arm64
ld: warning: ignoring file /opt/homebrew/Cellar/gst-plugins-base/1.20.3/lib/libgstgl-1.0.dylib, building for macOS-x86_64 but attempting to link with file built for macOS-arm64
ld: warning: ignoring file /opt/homebrew/Cellar/gst-plugins-base/1.20.3/lib/libgstvideo-1.0.dylib, building for macOS-x86_64 but attempting to link with file built for macOS-arm64
Undefined symbols for architecture x86_64:
  "icu_71::UnicodeString::fromUTF8(icu_71::StringPiece)", referenced from:
      BaseToolkit::transliterate(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in BaseToolkit.cpp.o
  "icu_71::UnicodeString::UnicodeString(char const*)", referenced from:
      BaseToolkit::transliterate(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in BaseToolkit.cpp.o
  "icu_71::UnicodeString::~UnicodeString()", referenced from:
      BaseToolkit::transliterate(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in BaseToolkit.cpp.o
  "icu_71::Transliterator::createInstance(icu_71::UnicodeString const&, UTransDirection, UErrorCode&)", referenced from:
      BaseToolkit::transliterate(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in BaseToolkit.cpp.o
  "icu_71::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, icu_71::UnicodeString const&)", referenced from:
      BaseToolkit::transliterate(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in BaseToolkit.cpp.o
  "__gst_fraction_range_type", referenced from:
      Device::getDeviceConfigs(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in DeviceSource.cpp.o
  "__gst_fraction_type", referenced from:
      VideoRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoStreamer::init(_GstCaps*) in Streamer.cpp.o
      Device::getDeviceConfigs(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in DeviceSource.cpp.o
      VideoBroadcast::init(_GstCaps*) in VideoBroadcast.cpp.o
      MultiFileRecorder::start_record(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MultiFileRecorder.cpp.o
  "__gst_value_list_type", referenced from:
      Device::getDeviceConfigs(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in DeviceSource.cpp.o
  "_g_base64_decode", referenced from:
      tinyxml2::XMLElementDecodeArray(tinyxml2::XMLElement const*, void*, unsigned int) in tinyxml2Toolkit.cpp.o
  "_g_base64_encode", referenced from:
      tinyxml2::XMLElementEncodeArray(tinyxml2::XMLDocument*, void const*, unsigned int) in tinyxml2Toolkit.cpp.o
  "_g_clear_error", referenced from:
      PNGRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoStreamer::init(_GstCaps*) in Streamer.cpp.o
      Stream::execute_open() in Stream.cpp.o
      MediaPlayer::UriDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MediaPlayer.cpp.o
      MediaPlayer::execute_open() in MediaPlayer.cpp.o
      Device::getDeviceConfigs(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in DeviceSource.cpp.o
      ...
  "_g_free", referenced from:
      Stream::Stream() in Stream.cpp.o
      Stream::TimeCounter::~TimeCounter() in Stream.cpp.o
      Stream::~Stream() in Stream.cpp.o
      Stream::TimeCounter::~TimeCounter() in Stream.cpp.o
      MediaPlayer::MediaPlayer() in MediaPlayer.cpp.o
      MediaPlayer::TimeCounter::~TimeCounter() in MediaPlayer.cpp.o
      MediaPlayer::~MediaPlayer() in MediaPlayer.cpp.o
      ...
  "_g_list_free", referenced from:
      Device::launchMonitoring(Device*) in DeviceSource.cpp.o
  "_g_main_context_acquire", referenced from:
      Device::launchMonitoring(Device*) in DeviceSource.cpp.o
  "_g_main_context_new", referenced from:
      Device::launchMonitoring(Device*) in DeviceSource.cpp.o
  "_g_main_context_pop_thread_default", referenced from:
      Device::launchMonitoring(Device*) in DeviceSource.cpp.o
  "_g_main_context_push_thread_default", referenced from:
      Device::launchMonitoring(Device*) in DeviceSource.cpp.o
  "_g_main_loop_new", referenced from:
      Device::launchMonitoring(Device*) in DeviceSource.cpp.o
  "_g_main_loop_run", referenced from:
      Device::launchMonitoring(Device*) in DeviceSource.cpp.o
  "_g_malloc", referenced from:
      tinyxml2::XMLElementEncodeArray(tinyxml2::XMLDocument*, void const*, unsigned int) in tinyxml2Toolkit.cpp.o
      tinyxml2::XMLElementDecodeArray(tinyxml2::XMLElement const*, void*, unsigned int) in tinyxml2Toolkit.cpp.o
  "_g_object_get", referenced from:
      MultiFile::index() in MultiFileSource.cpp.o
      MultiFileSource::playtime() const in MultiFileSource.cpp.o
  "_g_object_set", referenced from:
      PNGRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoStreamer::init(_GstCaps*) in Streamer.cpp.o
      Stream::execute_open() in Stream.cpp.o
      MediaPlayer::execute_open() in MediaPlayer.cpp.o
      MultiFile::setIndex(int) in MultiFileSource.cpp.o
      MultiFile::setProperties(int, int, int) in MultiFileSource.cpp.o
      ...
  "_g_object_unref", referenced from:
      MediaPlayer::UriDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MediaPlayer.cpp.o
      Device::getDeviceConfigs(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in DeviceSource.cpp.o
  "_g_printerr", referenced from:
      Rendering::init() in RenderingManager.cpp.o
      glfw_error_callback(int, char const*) in RenderingManager.cpp.o
      Connection::terminate() in Connection.cpp.o
  "_g_setenv", referenced from:
      Rendering::init() in RenderingManager.cpp.o
  "_g_timer_destroy", referenced from:
      ImageFilteringShader::~ImageFilteringShader() in ImageFilter.cpp.o
  "_g_timer_elapsed", referenced from:
      Mixer::update() in Mixer.cpp.o
      Stream::fill_frame(_GstBuffer*, Stream::FrameStatus) in Stream.cpp.o
      Stream::TimeCounter::tic() in Stream.cpp.o
      MediaPlayer::fill_frame(_GstBuffer*, MediaPlayer::FrameStatus) in MediaPlayer.cpp.o
      MediaPlayer::TimeCounter::tic() in MediaPlayer.cpp.o
      ImageFilteringShader::use() in ImageFilter.cpp.o
      Rendering::draw() in RenderingManager.cpp.o
      ...
  "_g_timer_new", referenced from:
      Mixer::update() in Mixer.cpp.o
      Stream::Stream() in Stream.cpp.o
      Stream::TimeCounter::TimeCounter() in Stream.cpp.o
      Stream::TimeCounter::TimeCounter() in Stream.cpp.o
      MediaPlayer::MediaPlayer() in MediaPlayer.cpp.o
      MediaPlayer::TimeCounter::TimeCounter() in MediaPlayer.cpp.o
      MediaPlayer::TimeCounter::TimeCounter() in MediaPlayer.cpp.o
      ...
  "_g_timer_reset", referenced from:
      ImageFilteringShader::use() in ImageFilter.cpp.o
  "_g_timer_start", referenced from:
      Mixer::update() in Mixer.cpp.o
      Stream::fill_frame(_GstBuffer*, Stream::FrameStatus) in Stream.cpp.o
      Stream::TimeCounter::tic() in Stream.cpp.o
      MediaPlayer::fill_frame(_GstBuffer*, MediaPlayer::FrameStatus) in MediaPlayer.cpp.o
      MediaPlayer::TimeCounter::tic() in MediaPlayer.cpp.o
      Rendering::draw() in RenderingManager.cpp.o
  "_g_type_check_instance_cast", referenced from:
      FrameGrabber::addFrame(_GstBuffer*, _GstCaps*) in FrameGrabber.cpp.o
      PNGRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoStreamer::init(_GstCaps*) in Streamer.cpp.o
      StreamDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned int, unsigned int) in Stream.cpp.o
      Stream::execute_open() in Stream.cpp.o
      MediaPlayer::UriDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MediaPlayer.cpp.o
      ...
  "_g_type_check_instance_is_a", referenced from:
      MediaPlayer::UriDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MediaPlayer.cpp.o
  "_g_usleep", referenced from:
      Rendering::draw() in RenderingManager.cpp.o
  "_g_value_get_object", referenced from:
      Device::getDeviceConfigs(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in DeviceSource.cpp.o
  "_g_value_init", referenced from:
      VideoRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoStreamer::init(_GstCaps*) in Streamer.cpp.o
      VideoBroadcast::init(_GstCaps*) in VideoBroadcast.cpp.o
  "_g_value_peek_pointer", referenced from:
      GstToolkit::used_gpu_decoding_plugins(_GstElement*) in GstToolkit.cpp.o
      GstToolkit::used_decoding_plugins(_GstElement*) in GstToolkit.cpp.o
  "_g_value_unset", referenced from:
      VideoRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoStreamer::init(_GstCaps*) in Streamer.cpp.o
      GstToolkit::used_gpu_decoding_plugins(_GstElement*) in GstToolkit.cpp.o
      GstToolkit::used_decoding_plugins(_GstElement*) in GstToolkit.cpp.o
      VideoBroadcast::init(_GstCaps*) in VideoBroadcast.cpp.o
  "_glfwCreateStandardCursor", referenced from:
      ImGui_ImplGlfw_Init(GLFWwindow*, bool, GlfwClientApi) in libIMGUI.a(imgui_impl_glfw.cpp.o)
  "_glfwCreateWindow", referenced from:
      RenderingWindow::init(int, GLFWwindow*) in RenderingManager.cpp.o
  "_glfwDestroyCursor", referenced from:
      ImGui_ImplGlfw_Shutdown() in libIMGUI.a(imgui_impl_glfw.cpp.o)
  "_glfwDestroyWindow", referenced from:
      Rendering::terminate() in RenderingManager.cpp.o
  "_glfwGetClipboardString", referenced from:
      ImGui_ImplGlfw_GetClipboardText(void*) in libIMGUI.a(imgui_impl_glfw.cpp.o)
  "_glfwGetCursorPos", referenced from:
      ImGui_ImplGlfw_NewFrame() in libIMGUI.a(imgui_impl_glfw.cpp.o)
  "_glfwGetFramebufferSize", referenced from:
      RenderingWindow::init(int, GLFWwindow*) in RenderingManager.cpp.o
      Rendering::draw() in RenderingManager.cpp.o
      RenderingWindow::makeCurrent() in RenderingManager.cpp.o
      RenderingWindow::draw(FrameBuffer*) in RenderingManager.cpp.o
      ImGui_ImplGlfw_NewFrame() in libIMGUI.a(imgui_impl_glfw.cpp.o)
  "_glfwGetInputMode", referenced from:
      ImGui_ImplGlfw_NewFrame() in libIMGUI.a(imgui_impl_glfw.cpp.o)
  "_glfwGetJoystickAxes", referenced from:
      Control::update() in ControlManager.cpp.o
      ImGui_ImplGlfw_NewFrame() in libIMGUI.a(imgui_impl_glfw.cpp.o)
  "_glfwGetJoystickButtons", referenced from:
      Control::update() in ControlManager.cpp.o
      ImGui_ImplGlfw_NewFrame() in libIMGUI.a(imgui_impl_glfw.cpp.o)
  "_glfwGetMonitorName", referenced from:
      RenderingWindow::monitorNamed(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in RenderingManager.cpp.o
      RenderingWindow::setFullscreen_(GLFWmonitor*) in RenderingManager.cpp.o
  "_glfwGetMonitorPhysicalSize", referenced from:
      RenderingWindow::pixelsforRealHeight(float) in RenderingManager.cpp.o
  "_glfwGetMonitorWorkarea", referenced from:
      RenderingWindow::monitorAt(int, int) in RenderingManager.cpp.o
      RenderingWindow::monitor() in RenderingManager.cpp.o
  "_glfwGetMonitors", referenced from:
      RenderingWindow::monitorAt(int, int) in RenderingManager.cpp.o
      RenderingWindow::monitorNamed(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in RenderingManager.cpp.o
      RenderingWindow::monitor() in RenderingManager.cpp.o
  "_glfwGetMouseButton", referenced from:
      ImGui_ImplGlfw_NewFrame() in libIMGUI.a(imgui_impl_glfw.cpp.o)
  "_glfwGetPrimaryMonitor", referenced from:
      RenderingWindow::monitorAt(int, int) in RenderingManager.cpp.o
      RenderingWindow::monitorNamed(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in RenderingManager.cpp.o
      RenderingWindow::monitor() in RenderingManager.cpp.o
  "_glfwGetProcAddress", referenced from:
      RenderingWindow::init(int, GLFWwindow*) in RenderingManager.cpp.o
  "_glfwGetTime", referenced from:
      WindowToggleFullscreen(GLFWwindow*, int, int, int) in RenderingManager.cpp.o
      ImGui_ImplGlfw_NewFrame() in libIMGUI.a(imgui_impl_glfw.cpp.o)
  "_glfwGetVideoMode", referenced from:
      RenderingWindow::setFullscreen_(GLFWmonitor*) in RenderingManager.cpp.o
      RenderingWindow::pixelsforRealHeight(float) in RenderingManager.cpp.o
      ToolBox::Render() in UserInterfaceManager.cpp.o
  "_glfwGetWindowAttrib", referenced from:
      RenderingWindow::draw(FrameBuffer*) in RenderingManager.cpp.o
      ImGui_ImplGlfw_NewFrame() in libIMGUI.a(imgui_impl_glfw.cpp.o)
  "_glfwGetWindowMonitor", referenced from:
      RenderingWindow::toggleFullscreen_() in RenderingManager.cpp.o
  "_glfwGetWindowPos", referenced from:
      RenderingWindow::monitor() in RenderingManager.cpp.o
  "_glfwGetWindowSize", referenced from:
      ImGui_ImplGlfw_NewFrame() in libIMGUI.a(imgui_impl_glfw.cpp.o)
  "_glfwInit", referenced from:
      Rendering::init() in RenderingManager.cpp.o
  "_glfwMakeContextCurrent", referenced from:
      RenderingWindow::init(int, GLFWwindow*) in RenderingManager.cpp.o
      Rendering::draw() in RenderingManager.cpp.o
      RenderingWindow::makeCurrent() in RenderingManager.cpp.o
      RenderingWindow::draw(FrameBuffer*) in RenderingManager.cpp.o
  "_glfwPollEvents", referenced from:
      Rendering::draw() in RenderingManager.cpp.o
  "_glfwSetCharCallback", referenced from:
      ImGui_ImplGlfw_Init(GLFWwindow*, bool, GlfwClientApi) in libIMGUI.a(imgui_impl_glfw.cpp.o)
      ImGui_ImplGlfw_Shutdown() in libIMGUI.a(imgui_impl_glfw.cpp.o)
  "_glfwSetClipboardString", referenced from:
      ImGui_ImplGlfw_SetClipboardText(void*, char const*) in libIMGUI.a(imgui_impl_glfw.cpp.o)
  "_glfwSetCursor", referenced from:
      ImGui_ImplGlfw_NewFrame() in libIMGUI.a(imgui_impl_glfw.cpp.o)
  "_glfwSetCursorPos", referenced from:
      ImGui_ImplGlfw_NewFrame() in libIMGUI.a(imgui_impl_glfw.cpp.o)
  "_glfwSetDropCallback", referenced from:
      Rendering::init() in RenderingManager.cpp.o
  "_glfwSetErrorCallback", referenced from:
      Rendering::init() in RenderingManager.cpp.o
      ImGui_ImplGlfw_Init(GLFWwindow*, bool, GlfwClientApi) in libIMGUI.a(imgui_impl_glfw.cpp.o)
  "_glfwSetInputMode", referenced from:
      RenderingWindow::toggleFullscreen_() in RenderingManager.cpp.o
      RenderingWindow::setFullscreen_(GLFWmonitor*) in RenderingManager.cpp.o
      ImGui_ImplGlfw_NewFrame() in libIMGUI.a(imgui_impl_glfw.cpp.o)
  "_glfwSetKeyCallback", referenced from:
      Control::init() in ControlManager.cpp.o
      ImGui_ImplGlfw_Init(GLFWwindow*, bool, GlfwClientApi) in libIMGUI.a(imgui_impl_glfw.cpp.o)
      ImGui_ImplGlfw_Shutdown() in libIMGUI.a(imgui_impl_glfw.cpp.o)
  "_glfwSetMouseButtonCallback", referenced from:
      Rendering::init() in RenderingManager.cpp.o
      ImGui_ImplGlfw_Init(GLFWwindow*, bool, GlfwClientApi) in libIMGUI.a(imgui_impl_glfw.cpp.o)
      ImGui_ImplGlfw_Shutdown() in libIMGUI.a(imgui_impl_glfw.cpp.o)
  "_glfwSetScrollCallback", referenced from:
      ImGui_ImplGlfw_Init(GLFWwindow*, bool, GlfwClientApi) in libIMGUI.a(imgui_impl_glfw.cpp.o)
      ImGui_ImplGlfw_Shutdown() in libIMGUI.a(imgui_impl_glfw.cpp.o)
  "_glfwSetWindowCloseCallback", referenced from:
      Rendering::init() in RenderingManager.cpp.o
  "_glfwSetWindowIcon", referenced from:
      Rendering::init() in RenderingManager.cpp.o
      RenderingWindow::setIcon(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in RenderingManager.cpp.o
  "_glfwSetWindowMonitor", referenced from:
      RenderingWindow::toggleFullscreen_() in RenderingManager.cpp.o
      RenderingWindow::setFullscreen_(GLFWmonitor*) in RenderingManager.cpp.o
  "_glfwSetWindowPos", referenced from:
      RenderingWindow::init(int, GLFWwindow*) in RenderingManager.cpp.o
  "_glfwSetWindowPosCallback", referenced from:
      RenderingWindow::init(int, GLFWwindow*) in RenderingManager.cpp.o
  "_glfwSetWindowRefreshCallback", referenced from:
      Rendering::init() in RenderingManager.cpp.o
  "_glfwSetWindowShouldClose", referenced from:
      Rendering::close() in RenderingManager.cpp.o
      WindowCloseCallback(GLFWwindow*) in RenderingManager.cpp.o
  "_glfwSetWindowSizeCallback", referenced from:
      RenderingWindow::init(int, GLFWwindow*) in RenderingManager.cpp.o
  "_glfwSetWindowSizeLimits", referenced from:
      RenderingWindow::init(int, GLFWwindow*) in RenderingManager.cpp.o
  "_glfwSetWindowTitle", referenced from:
      RenderingWindow::setTitle(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in RenderingManager.cpp.o
  "_glfwShowWindow", referenced from:
      Rendering::FileDropped(GLFWwindow*, int, char const**) in RenderingManager.cpp.o
      Rendering::show() in RenderingManager.cpp.o
      RenderingWindow::show() in RenderingManager.cpp.o
  "_glfwSwapBuffers", referenced from:
      Rendering::draw() in RenderingManager.cpp.o
      RenderingWindow::draw(FrameBuffer*) in RenderingManager.cpp.o
  "_glfwSwapInterval", referenced from:
      RenderingWindow::init(int, GLFWwindow*) in RenderingManager.cpp.o
      RenderingWindow::toggleFullscreen_() in RenderingManager.cpp.o
      RenderingWindow::setFullscreen_(GLFWmonitor*) in RenderingManager.cpp.o
  "_glfwWindowHint", referenced from:
      Rendering::init() in RenderingManager.cpp.o
      RenderingWindow::init(int, GLFWwindow*) in RenderingManager.cpp.o
  "_glfwWindowShouldClose", referenced from:
      Rendering::isActive() in RenderingManager.cpp.o
  "_gst_app_sink_get_type", referenced from:
      StreamDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned int, unsigned int) in Stream.cpp.o
      Stream::execute_open() in Stream.cpp.o
      MediaPlayer::execute_open() in MediaPlayer.cpp.o
  "_gst_app_sink_is_eos", referenced from:
      Stream::callback_new_sample(_GstAppSink*, void*) in Stream.cpp.o
      MediaPlayer::callback_new_sample(_GstAppSink*, void*) in MediaPlayer.cpp.o
  "_gst_app_sink_pull_preroll", referenced from:
      callback_stream_discoverer(_GstAppSink*, void*) in Stream.cpp.o
      Stream::callback_new_preroll(_GstAppSink*, void*) in Stream.cpp.o
      MediaPlayer::callback_new_preroll(_GstAppSink*, void*) in MediaPlayer.cpp.o
  "_gst_app_sink_pull_sample", referenced from:
      Stream::callback_new_sample(_GstAppSink*, void*) in Stream.cpp.o
      MediaPlayer::callback_new_sample(_GstAppSink*, void*) in MediaPlayer.cpp.o
  "_gst_app_sink_set_callbacks", referenced from:
      StreamDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned int, unsigned int) in Stream.cpp.o
      Stream::execute_open() in Stream.cpp.o
      MediaPlayer::execute_open() in MediaPlayer.cpp.o
  "_gst_app_sink_set_caps", referenced from:
      Stream::execute_open() in Stream.cpp.o
      MediaPlayer::execute_open() in MediaPlayer.cpp.o
  "_gst_app_sink_set_drop", referenced from:
      Stream::execute_open() in Stream.cpp.o
      MediaPlayer::execute_open() in MediaPlayer.cpp.o
  "_gst_app_sink_set_emit_signals", referenced from:
      StreamDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned int, unsigned int) in Stream.cpp.o
      Stream::execute_open() in Stream.cpp.o
      MediaPlayer::execute_open() in MediaPlayer.cpp.o
  "_gst_app_sink_set_max_buffers", referenced from:
      Stream::execute_open() in Stream.cpp.o
      MediaPlayer::execute_open() in MediaPlayer.cpp.o
  "_gst_app_src_end_of_stream", referenced from:
      FrameGrabber::stop() in FrameGrabber.cpp.o
      VideoStreamer::terminate() in Streamer.cpp.o
      VideoBroadcast::terminate() in VideoBroadcast.cpp.o
      MultiFileRecorder::end_record() in MultiFileRecorder.cpp.o
  "_gst_app_src_get_current_level_bytes", referenced from:
      FrameGrabber::addFrame(_GstBuffer*, _GstCaps*) in FrameGrabber.cpp.o
  "_gst_app_src_get_type", referenced from:
      PNGRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoStreamer::init(_GstCaps*) in Streamer.cpp.o
      VideoBroadcast::init(_GstCaps*) in VideoBroadcast.cpp.o
      MultiFileRecorder::start_record(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MultiFileRecorder.cpp.o
  "_gst_app_src_push_buffer", referenced from:
      FrameGrabber::addFrame(_GstBuffer*, _GstCaps*) in FrameGrabber.cpp.o
      MultiFileRecorder::add_image(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MultiFileRecorder.cpp.o
  "_gst_app_src_set_callbacks", referenced from:
      PNGRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoStreamer::init(_GstCaps*) in Streamer.cpp.o
      VideoBroadcast::init(_GstCaps*) in VideoBroadcast.cpp.o
      MultiFileRecorder::start_record(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MultiFileRecorder.cpp.o
  "_gst_app_src_set_caps", referenced from:
      PNGRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoStreamer::init(_GstCaps*) in Streamer.cpp.o
      VideoBroadcast::init(_GstCaps*) in VideoBroadcast.cpp.o
      MultiFileRecorder::start_record(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MultiFileRecorder.cpp.o
  "_gst_app_src_set_duration", referenced from:
      MultiFileRecorder::end_record() in MultiFileRecorder.cpp.o
  "_gst_app_src_set_emit_signals", referenced from:
      MultiFileRecorder::start_record(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MultiFileRecorder.cpp.o
  "_gst_app_src_set_latency", referenced from:
      PNGRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoStreamer::init(_GstCaps*) in Streamer.cpp.o
      VideoBroadcast::init(_GstCaps*) in VideoBroadcast.cpp.o
      MultiFileRecorder::start_record(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MultiFileRecorder.cpp.o
  "_gst_app_src_set_max_bytes", referenced from:
      PNGRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoStreamer::init(_GstCaps*) in Streamer.cpp.o
      VideoBroadcast::init(_GstCaps*) in VideoBroadcast.cpp.o
      MultiFileRecorder::start_record(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MultiFileRecorder.cpp.o
  "_gst_app_src_set_stream_type", referenced from:
      PNGRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoStreamer::init(_GstCaps*) in Streamer.cpp.o
      VideoBroadcast::init(_GstCaps*) in VideoBroadcast.cpp.o
      MultiFileRecorder::start_record(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MultiFileRecorder.cpp.o
  "_gst_base_sink_get_type", referenced from:
      Stream::execute_open() in Stream.cpp.o
      MediaPlayer::execute_open() in MediaPlayer.cpp.o
  "_gst_base_sink_set_sync", referenced from:
      Stream::execute_open() in Stream.cpp.o
      MediaPlayer::execute_open() in MediaPlayer.cpp.o
  "_gst_bin_get_by_name", referenced from:
      FrameGrabber::addFrame(_GstBuffer*, _GstCaps*) in FrameGrabber.cpp.o
      PNGRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoStreamer::init(_GstCaps*) in Streamer.cpp.o
      StreamDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned int, unsigned int) in Stream.cpp.o
      Stream::execute_open() in Stream.cpp.o
      MediaPlayer::execute_open() in MediaPlayer.cpp.o
      ...
  "_gst_bin_get_type", referenced from:
      FrameGrabber::addFrame(_GstBuffer*, _GstCaps*) in FrameGrabber.cpp.o
      PNGRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoStreamer::init(_GstCaps*) in Streamer.cpp.o
      StreamDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned int, unsigned int) in Stream.cpp.o
      Stream::execute_open() in Stream.cpp.o
      MediaPlayer::execute_open() in MediaPlayer.cpp.o
      ...
  "_gst_bin_iterate_recurse", referenced from:
      GstToolkit::used_gpu_decoding_plugins(_GstElement*) in GstToolkit.cpp.o
      GstToolkit::used_decoding_plugins(_GstElement*) in GstToolkit.cpp.o
  "_gst_buffer_get_size", referenced from:
      FrameGrabbing::grabFrame(FrameBuffer*) in FrameGrabber.cpp.o
  "_gst_buffer_map", referenced from:
      FrameGrabbing::grabFrame(FrameBuffer*) in FrameGrabber.cpp.o
      MultiFileRecorder::add_image(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MultiFileRecorder.cpp.o
  "_gst_buffer_new_allocate", referenced from:
      FrameGrabbing::grabFrame(FrameBuffer*) in FrameGrabber.cpp.o
      MultiFileRecorder::add_image(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MultiFileRecorder.cpp.o
  "_gst_buffer_unmap", referenced from:
      FrameGrabbing::grabFrame(FrameBuffer*) in FrameGrabber.cpp.o
      MultiFileRecorder::add_image(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MultiFileRecorder.cpp.o
  "_gst_bus_add_watch", referenced from:
      Device::launchMonitoring(Device*) in DeviceSource.cpp.o
  "_gst_bus_timed_pop_filtered", referenced from:
      MultiFileRecorder::end_record() in MultiFileRecorder.cpp.o
  "_gst_caps_from_string", referenced from:
      Stream::execute_open() in Stream.cpp.o
      MediaPlayer::execute_open() in MediaPlayer.cpp.o
  "_gst_caps_get_size", referenced from:
      Device::getDeviceConfigs(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in DeviceSource.cpp.o
  "_gst_caps_get_structure", referenced from:
      VideoStreamer::init(_GstCaps*) in Streamer.cpp.o
      Device::getDeviceConfigs(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in DeviceSource.cpp.o
  "_gst_caps_is_subset", referenced from:
      FrameGrabber::addFrame(_GstBuffer*, _GstCaps*) in FrameGrabber.cpp.o
  "_gst_caps_new_empty_simple", referenced from:
      Device::launchMonitoring(Device*) in DeviceSource.cpp.o
  "_gst_caps_new_simple", referenced from:
      FrameGrabbing::grabFrame(FrameBuffer*) in FrameGrabber.cpp.o
      MultiFileRecorder::start_record(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MultiFileRecorder.cpp.o
  "_gst_caps_set_value", referenced from:
      VideoRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoStreamer::init(_GstCaps*) in Streamer.cpp.o
      VideoBroadcast::init(_GstCaps*) in VideoBroadcast.cpp.o
  "_gst_clock_get_time", referenced from:
      FrameGrabber::addFrame(_GstBuffer*, _GstCaps*) in FrameGrabber.cpp.o
  "_gst_debug_set_active", referenced from:
      _main in main.cpp.o
  "_gst_debug_set_default_threshold", referenced from:
      _main in main.cpp.o
  "_gst_device_get_display_name", referenced from:
      Device::add(_GstDevice*) in DeviceSource.cpp.o
      Device::remove(_GstDevice*) in DeviceSource.cpp.o
  "_gst_device_get_properties", referenced from:
      pipelineForDevice(_GstDevice*, unsigned int) in DeviceSource.cpp.o
  "_gst_device_monitor_add_filter", referenced from:
      Device::launchMonitoring(Device*) in DeviceSource.cpp.o
  "_gst_device_monitor_get_bus", referenced from:
      Device::launchMonitoring(Device*) in DeviceSource.cpp.o
  "_gst_device_monitor_get_devices", referenced from:
      Device::launchMonitoring(Device*) in DeviceSource.cpp.o
  "_gst_device_monitor_new", referenced from:
      Device::launchMonitoring(Device*) in DeviceSource.cpp.o
  "_gst_device_monitor_set_show_all_devices", referenced from:
      Device::launchMonitoring(Device*) in DeviceSource.cpp.o
  "_gst_device_monitor_start", referenced from:
      Device::launchMonitoring(Device*) in DeviceSource.cpp.o
  "_gst_discoverer_discover_uri", referenced from:
      MediaPlayer::UriDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MediaPlayer.cpp.o
  "_gst_discoverer_info_get_duration", referenced from:
      MediaPlayer::UriDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MediaPlayer.cpp.o
  "_gst_discoverer_info_get_misc", referenced from:
      MediaPlayer::UriDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MediaPlayer.cpp.o
  "_gst_discoverer_info_get_result", referenced from:
      MediaPlayer::UriDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MediaPlayer.cpp.o
  "_gst_discoverer_info_get_seekable", referenced from:
      MediaPlayer::UriDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MediaPlayer.cpp.o
  "_gst_discoverer_info_get_video_streams", referenced from:
      MediaPlayer::UriDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MediaPlayer.cpp.o
  "_gst_discoverer_new", referenced from:
      MediaPlayer::UriDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MediaPlayer.cpp.o
  "_gst_discoverer_stream_info_get_caps", referenced from:
      MediaPlayer::UriDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MediaPlayer.cpp.o
  "_gst_discoverer_stream_info_get_tags", referenced from:
      MediaPlayer::UriDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MediaPlayer.cpp.o
  "_gst_discoverer_stream_info_list_free", referenced from:
      MediaPlayer::UriDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MediaPlayer.cpp.o
  "_gst_discoverer_video_info_get_bitrate", referenced from:
      MediaPlayer::UriDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MediaPlayer.cpp.o
  "_gst_discoverer_video_info_get_framerate_denom", referenced from:
      MediaPlayer::UriDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MediaPlayer.cpp.o
  "_gst_discoverer_video_info_get_framerate_num", referenced from:
      MediaPlayer::UriDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MediaPlayer.cpp.o
  "_gst_discoverer_video_info_get_height", referenced from:
      MediaPlayer::UriDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MediaPlayer.cpp.o
  "_gst_discoverer_video_info_get_par_denom", referenced from:
      MediaPlayer::UriDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MediaPlayer.cpp.o
  "_gst_discoverer_video_info_get_par_num", referenced from:
      MediaPlayer::UriDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MediaPlayer.cpp.o
  "_gst_discoverer_video_info_get_type", referenced from:
      MediaPlayer::UriDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MediaPlayer.cpp.o
  "_gst_discoverer_video_info_get_width", referenced from:
      MediaPlayer::UriDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MediaPlayer.cpp.o
  "_gst_discoverer_video_info_is_image", referenced from:
      MediaPlayer::UriDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MediaPlayer.cpp.o
  "_gst_discoverer_video_info_is_interlaced", referenced from:
      MediaPlayer::UriDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MediaPlayer.cpp.o
  "_gst_element_factory_create", referenced from:
      GstToolkit::has_feature(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in GstToolkit.cpp.o
  "_gst_element_factory_find", referenced from:
      GstToolkit::enable_feature(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, bool) in GstToolkit.cpp.o
      GstToolkit::has_feature(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in GstToolkit.cpp.o
  "_gst_element_get_state", referenced from:
      FrameGrabber::~FrameGrabber() in FrameGrabber.cpp.o
      Stream::close() in Stream.cpp.o
      StreamDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned int, unsigned int) in Stream.cpp.o
      Stream::play(bool) in Stream.cpp.o
      Stream::isPlaying(bool) const in Stream.cpp.o
      MediaPlayer::close() in MediaPlayer.cpp.o
      MediaPlayer::execute_seek_command(unsigned long long, bool) in MediaPlayer.cpp.o
      ...
  "_gst_element_get_static_pad", referenced from:
      FrameGrabber::addFrame(_GstBuffer*, _GstCaps*) in FrameGrabber.cpp.o
  "_gst_element_get_type", referenced from:
      MultiFileRecorder::start_record(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MultiFileRecorder.cpp.o
  "_gst_element_iterate_src_pads", referenced from:
      Device::getDeviceConfigs(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in DeviceSource.cpp.o
  "_gst_element_query_duration", referenced from:
      MediaPlayer::execute_open() in MediaPlayer.cpp.o
  "_gst_element_query_position", referenced from:
      Stream::position() in Stream.cpp.o
      MediaPlayer::position() in MediaPlayer.cpp.o
  "_gst_element_send_event", referenced from:
      Stream::close() in Stream.cpp.o
      Stream::rewind() in Stream.cpp.o
      MediaPlayer::close() in MediaPlayer.cpp.o
      MediaPlayer::execute_seek_command(unsigned long long, bool) in MediaPlayer.cpp.o
      MediaPlayer::step() in MediaPlayer.cpp.o
      MediaPlayer::jump() in MediaPlayer.cpp.o
      std::__1::__function::__func<std::__1::__bind<MediaPlayer::step()::$_2, MediaPlayer*, _GstEvent*&>, std::__1::allocator<std::__1::__bind<MediaPlayer::step()::$_2, MediaPlayer*, _GstEvent*&> >, void ()>::operator()() in MediaPlayer.cpp.o
      ...
  "_gst_element_set_state", referenced from:
      FrameGrabber::~FrameGrabber() in FrameGrabber.cpp.o
      PNGRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoRecorder::terminate() in Recorder.cpp.o
      VideoStreamer::init(_GstCaps*) in Streamer.cpp.o
      Stream::close() in Stream.cpp.o
      StreamDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned int, unsigned int) in Stream.cpp.o
      ...
  "_gst_event_new_seek", referenced from:
      Stream::close() in Stream.cpp.o
      Stream::rewind() in Stream.cpp.o
      MediaPlayer::close() in MediaPlayer.cpp.o
      MediaPlayer::execute_seek_command(unsigned long long, bool) in MediaPlayer.cpp.o
  "_gst_event_new_step", referenced from:
      MediaPlayer::step() in MediaPlayer.cpp.o
      MediaPlayer::jump() in MediaPlayer.cpp.o
  "_gst_filename_to_uri", referenced from:
      GstToolkit::filename_to_uri(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in GstToolkit.cpp.o
  "_gst_init", referenced from:
      Rendering::init() in RenderingManager.cpp.o
  "_gst_iterator_free", referenced from:
      Device::getDeviceConfigs(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in DeviceSource.cpp.o
      GstToolkit::used_gpu_decoding_plugins(_GstElement*) in GstToolkit.cpp.o
      GstToolkit::used_decoding_plugins(_GstElement*) in GstToolkit.cpp.o
  "_gst_iterator_next", referenced from:
      Device::getDeviceConfigs(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in DeviceSource.cpp.o
      GstToolkit::used_gpu_decoding_plugins(_GstElement*) in GstToolkit.cpp.o
      GstToolkit::used_decoding_plugins(_GstElement*) in GstToolkit.cpp.o
  "_gst_message_parse_device_added", referenced from:
      Device::callback_device_monitor(_GstBus*, _GstMessage*, void*) in DeviceSource.cpp.o
  "_gst_message_parse_device_removed", referenced from:
      Device::callback_device_monitor(_GstBus*, _GstMessage*, void*) in DeviceSource.cpp.o
  "_gst_mini_object_copy", referenced from:
      PNGRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoStreamer::init(_GstCaps*) in Streamer.cpp.o
      VideoBroadcast::init(_GstCaps*) in VideoBroadcast.cpp.o
  "_gst_mini_object_ref", referenced from:
      FrameGrabber::addFrame(_GstBuffer*, _GstCaps*) in FrameGrabber.cpp.o
  "_gst_mini_object_unref", referenced from:
      FrameGrabbing::~FrameGrabbing() in FrameGrabber.cpp.o
      FrameGrabbing::grabFrame(FrameBuffer*) in FrameGrabber.cpp.o
      FrameGrabber::~FrameGrabber() in FrameGrabber.cpp.o
      VideoRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoStreamer::init(_GstCaps*) in Streamer.cpp.o
      callback_stream_discoverer(_GstAppSink*, void*) in Stream.cpp.o
      Stream::execute_open() in Stream.cpp.o
      ...
  "_gst_object_get_name", referenced from:
      GstToolkit::used_gpu_decoding_plugins(_GstElement*) in GstToolkit.cpp.o
      GstToolkit::used_decoding_plugins(_GstElement*) in GstToolkit.cpp.o
  "_gst_object_unref", referenced from:
      FrameGrabber::~FrameGrabber() in FrameGrabber.cpp.o
      FrameGrabber::addFrame(_GstBuffer*, _GstCaps*) in FrameGrabber.cpp.o
      Stream::close() in Stream.cpp.o
      StreamDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned int, unsigned int) in Stream.cpp.o
      Stream::execute_open() in Stream.cpp.o
      MediaPlayer::close() in MediaPlayer.cpp.o
      MediaPlayer::execute_open() in MediaPlayer.cpp.o
      ...
  "_gst_pad_add_probe", referenced from:
      FrameGrabber::addFrame(_GstBuffer*, _GstCaps*) in FrameGrabber.cpp.o
  "_gst_pad_get_type", referenced from:
      Device::getDeviceConfigs(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in DeviceSource.cpp.o
  "_gst_pad_query_caps", referenced from:
      Device::getDeviceConfigs(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in DeviceSource.cpp.o
  "_gst_parse_launch", referenced from:
      PNGRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoStreamer::init(_GstCaps*) in Streamer.cpp.o
      StreamDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned int, unsigned int) in Stream.cpp.o
      Stream::execute_open() in Stream.cpp.o
      MediaPlayer::execute_open() in MediaPlayer.cpp.o
      Device::getDeviceConfigs(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in DeviceSource.cpp.o
      ...
  "_gst_pb_utils_get_codec_description", referenced from:
      MediaPlayer::UriDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MediaPlayer.cpp.o
  "_gst_pipeline_get_bus", referenced from:
      MultiFileRecorder::end_record() in MultiFileRecorder.cpp.o
  "_gst_pipeline_get_clock", referenced from:
      FrameGrabber::addFrame(_GstBuffer*, _GstCaps*) in FrameGrabber.cpp.o
  "_gst_pipeline_get_type", referenced from:
      FrameGrabber::addFrame(_GstBuffer*, _GstCaps*) in FrameGrabber.cpp.o
      StreamDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned int, unsigned int) in Stream.cpp.o
      Stream::execute_open() in Stream.cpp.o
      MediaPlayer::execute_open() in MediaPlayer.cpp.o
      MultiFileRecorder::end_record() in MultiFileRecorder.cpp.o
  "_gst_pipeline_set_auto_flush_bus", referenced from:
      StreamDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned int, unsigned int) in Stream.cpp.o
      Stream::execute_open() in Stream.cpp.o
      MediaPlayer::execute_open() in MediaPlayer.cpp.o
  "_gst_plugin_feature_get_type", referenced from:
      GstToolkit::all_plugin_features(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in GstToolkit.cpp.o
      GstToolkit::enable_feature(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, bool) in GstToolkit.cpp.o
  "_gst_plugin_feature_list_free", referenced from:
      GstToolkit::all_plugin_features(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in GstToolkit.cpp.o
  "_gst_plugin_feature_set_rank", referenced from:
      GstToolkit::enable_feature(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, bool) in GstToolkit.cpp.o
      GstToolkit::enable_gpu_decoding_plugins(bool) in GstToolkit.cpp.o
  "_gst_plugin_get_name", referenced from:
      GstToolkit::all_plugins() in GstToolkit.cpp.o
  "_gst_plugin_get_type", referenced from:
      GstToolkit::all_plugins() in GstToolkit.cpp.o
  "_gst_plugin_list_free", referenced from:
      GstToolkit::all_plugins() in GstToolkit.cpp.o
  "_gst_registry_add_feature", referenced from:
      GstToolkit::enable_feature(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, bool) in GstToolkit.cpp.o
  "_gst_registry_get", referenced from:
      GstToolkit::all_plugins() in GstToolkit.cpp.o
      GstToolkit::all_plugin_features(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in GstToolkit.cpp.o
      GstToolkit::enable_feature(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, bool) in GstToolkit.cpp.o
      GstToolkit::has_feature(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in GstToolkit.cpp.o
      GstToolkit::enable_gpu_decoding_plugins(bool) in GstToolkit.cpp.o
  "_gst_registry_get_feature_list_by_plugin", referenced from:
      GstToolkit::all_plugin_features(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in GstToolkit.cpp.o
  "_gst_registry_get_plugin_list", referenced from:
      GstToolkit::all_plugins() in GstToolkit.cpp.o
  "_gst_registry_lookup_feature", referenced from:
      GstToolkit::enable_gpu_decoding_plugins(bool) in GstToolkit.cpp.o
  "_gst_sample_get_buffer", referenced from:
      Stream::callback_new_preroll(_GstAppSink*, void*) in Stream.cpp.o
      Stream::callback_new_sample(_GstAppSink*, void*) in Stream.cpp.o
      MediaPlayer::callback_new_preroll(_GstAppSink*, void*) in MediaPlayer.cpp.o
      MediaPlayer::callback_new_sample(_GstAppSink*, void*) in MediaPlayer.cpp.o
  "_gst_sample_get_caps", referenced from:
      callback_stream_discoverer(_GstAppSink*, void*) in Stream.cpp.o
  "_gst_structure_get_int", referenced from:
      VideoStreamer::init(_GstCaps*) in Streamer.cpp.o
      Device::getDeviceConfigs(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in DeviceSource.cpp.o
  "_gst_structure_get_name", referenced from:
      Device::getDeviceConfigs(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in DeviceSource.cpp.o
  "_gst_structure_get_string", referenced from:
      pipelineForDevice(_GstDevice*, unsigned int) in DeviceSource.cpp.o
  "_gst_structure_get_value", referenced from:
      Device::getDeviceConfigs(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in DeviceSource.cpp.o
  "_gst_structure_has_field", referenced from:
      VideoStreamer::init(_GstCaps*) in Streamer.cpp.o
      Device::getDeviceConfigs(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in DeviceSource.cpp.o
  "_gst_structure_to_string", referenced from:
      MediaPlayer::UriDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MediaPlayer.cpp.o
  "_gst_tag_list_get_string", referenced from:
      MediaPlayer::UriDiscoverer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MediaPlayer.cpp.o
  "_gst_util_fraction_to_double", referenced from:
      Device::getDeviceConfigs(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in DeviceSource.cpp.o
  "_gst_util_get_timestamp", referenced from:
      Session::Session(unsigned long long) in Session.cpp.o
      Session::runtime() const in Session.cpp.o
      UserInterface::UserInterface() in UserInterfaceManager.cpp.o
      UserInterface::Runtime() const in UserInterfaceManager.cpp.o
      TimerMetronome::Render() in UserInterfaceManager.cpp.o
      UserInterface::RenderMetrics(bool*, int*, int*) in UserInterfaceManager.cpp.o
      TimerMetronome::TimerMetronome() in UserInterfaceManager.cpp.o
      ...
  "_gst_util_uint64_scale_int", referenced from:
      FrameGrabber::FrameGrabber() in FrameGrabber.cpp.o
      VideoRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoStreamer::VideoStreamer(NetworkToolkit::StreamConfig const&) in Streamer.cpp.o
      Loopback::Loopback() in Loopback.cpp.o
      Loopback::Loopback() in Loopback.cpp.o
      VideoBroadcast::VideoBroadcast(int) in VideoBroadcast.cpp.o
      VideoBroadcast::VideoBroadcast(int) in VideoBroadcast.cpp.o
      ...
  "_gst_value_get_fraction_denominator", referenced from:
      Device::getDeviceConfigs(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in DeviceSource.cpp.o
  "_gst_value_get_fraction_numerator", referenced from:
      Device::getDeviceConfigs(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in DeviceSource.cpp.o
  "_gst_value_get_fraction_range_max", referenced from:
      Device::getDeviceConfigs(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in DeviceSource.cpp.o
  "_gst_value_list_get_size", referenced from:
      Device::getDeviceConfigs(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in DeviceSource.cpp.o
  "_gst_value_list_get_value", referenced from:
      Device::getDeviceConfigs(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in DeviceSource.cpp.o
  "_gst_value_serialize", referenced from:
      Device::getDeviceConfigs(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in DeviceSource.cpp.o
  "_gst_value_set_fraction", referenced from:
      VideoRecorder::init(_GstCaps*) in Recorder.cpp.o
      VideoStreamer::init(_GstCaps*) in Streamer.cpp.o
      VideoBroadcast::init(_GstCaps*) in VideoBroadcast.cpp.o
  "_gst_video_event_new_downstream_force_key_unit", referenced from:
      MultiFileRecorder::start_record(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in MultiFileRecorder.cpp.o
  "_gst_video_frame_map", referenced from:
      Stream::fill_frame(_GstBuffer*, Stream::FrameStatus) in Stream.cpp.o
      MediaPlayer::fill_frame(_GstBuffer*, MediaPlayer::FrameStatus) in MediaPlayer.cpp.o
  "_gst_video_frame_unmap", referenced from:
      Stream::close() in Stream.cpp.o
      Stream::Frame::unmap() in Stream.cpp.o
      Stream::update() in Stream.cpp.o
      Stream::fill_frame(_GstBuffer*, Stream::FrameStatus) in Stream.cpp.o
      MediaPlayer::close() in MediaPlayer.cpp.o
      MediaPlayer::Frame::unmap() in MediaPlayer.cpp.o
      MediaPlayer::update() in MediaPlayer.cpp.o
      ...
  "_gst_video_info_from_caps", referenced from:
      callback_stream_discoverer(_GstAppSink*, void*) in Stream.cpp.o
      Stream::execute_open() in Stream.cpp.o
      MediaPlayer::execute_open() in MediaPlayer.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [src/vimix.app/Contents/MacOS/vimix] Error 1
make[1]: *** [src/CMakeFiles/vimix.dir/all] Error 2
make: *** [all] Error 2
@nzoschke nzoschke changed the title Trouble building on OS X Trouble building on OS X / M1 Pro Nov 21, 2022
@nzoschke
Copy link
Author

Doing some googling, cmake looks up to date.

% cmake --version
cmake version 3.25.0

Setting this doesn't help:

https://cmake.org/cmake/help/latest/envvar/CMAKE_APPLE_SILICON_PROCESSOR.html#envvar:CMAKE_APPLE_SILICON_PROCESSOR

export CMAKE_APPLE_SILICON_PROCESSOR=arm64
cmake -DCMAKE_BUILD_TYPE=Release ../vimix
cmake --build .

@brunoherbelin
Copy link
Owner

Thanks for pointing these issues: I rarely have users compiling for OSX , and the cmake is a bit too much 'hardcoded'.

In this part of the CMakeList.txt you should be able to change the part causing problems:

if (APPLE)
        add_definitions(-DAPPLE)

        # the RPATH to be used when installing
        set(CMAKE_SKIP_RPATH TRUE)
        set(OpenGL_DIR /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/)
        set(CMAKE_OSX_ARCHITECTURES "x86_64")
        set(CMAKE_OSX_DEPLOYMENT_TARGET "10.14")

        # CPACK
        set(CPACK_SYSTEM_NAME  "OSX_${CMAKE_OSX_DEPLOYMENT_TARGET}_${CMAKE_OSX_ARCHITECTURES}")
        set(CPACK_GENERATOR DragNDrop)
        set(CPACK_BINARY_DRAGNDROP ON)
        set(APPLE_CODESIGN_ENTITLEMENTS "${CMAKE_CURRENT_SOURCE_DIR}/osx/entitlements.plist")

        # find icu4c in OSX (pretty well hidden...)
        set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:/usr/local/opt/icu4c/lib/pkgconfig")

    else()
...
  1. Change CMAKE_OSX_ARCHITECTURES to arm64
  2. Change path to icu4c in PKG_CONFIG_PATH

I would very much appreciate help for a more robust cmake for OSX (e.g. testing architecture) but only has one old MBP to work with... Thanks for your help!

@nzoschke
Copy link
Author

Thanks! It's building with

diff --git a/CMakeLists.txt b/CMakeLists.txt
index f200d85..0f1b873 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -59,7 +59,7 @@ if(UNIX)
         # the RPATH to be used when installing
         set(CMAKE_SKIP_RPATH TRUE)
         set(OpenGL_DIR /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/)
-        set(CMAKE_OSX_ARCHITECTURES "x86_64")
+        set(CMAKE_OSX_ARCHITECTURES "arm64")
         set(CMAKE_OSX_DEPLOYMENT_TARGET "10.14")
 
         # CPACK
@@ -69,7 +69,7 @@ if(UNIX)
         set(APPLE_CODESIGN_ENTITLEMENTS "${CMAKE_CURRENT_SOURCE_DIR}/osx/entitlements.plist")
 
         # find icu4c in OSX (pretty well hidden...)
-        set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:/usr/local/opt/icu4c/lib/pkgconfig")
+        set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:/usr/local/opt/icu4c/lib/pkgconfig:/opt/homebrew/opt/icu4c/lib/pkgconfig")
 
     else()
         add_definitions(-DLINUX)

@nzoschke
Copy link
Author

Reading your link and doing some googling but setting it to these doesn't work for me:

  • set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64")
  • set(CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD)")

@nzoschke
Copy link
Author

The build encounters a bug when using gstreamer sources

0010   Warning - DeviceSource Could not construct test pipeline avfvideosrc capture-screen=true name=devsrc ! fakesink name=sink:
no element "avfvideosrc"
0011   Warning - Stream 1313492662361541 Could not create stream: no element "videotestsrc".

@brunoherbelin shared one breadcrumb:

yes agreed: to avoid recompiling gst: it's a beast! BUT: afvideo from OSX is not included... So what I do is compile only gst plug-ins bad from the g streamer installed with brew.

I will poke at that more soon.

@nzoschke
Copy link
Author

nzoschke commented Nov 23, 2022

I see in the release vimix.app some gstreamer resources:

./Resources/gst-plugin-scanner
./Resources/gstreamer-1.0
./Resources/gstreamer-1.0/libgstdebug.dylib
./Resources/gstreamer-1.0/libgstipcpipeline.dylib

There is pretty much nothing in my bulit app

vimix-build/src/vimix.app(:|✔) % find Contents/Resources 
Contents/Resources
Contents/Resources/vimix.icns

EDIT:

% sudo cmake --install .
Password:
-- Install configuration: "Release"
-- Installing: /usr/local/./vimix.app
-- Installing: /usr/local/./vimix.app/Contents
-- Installing: /usr/local/./vimix.app/Contents/MacOS
-- Installing: /usr/local/./vimix.app/Contents/MacOS/vimix
-- Installing: /usr/local/./vimix.app/Contents/Resources
-- Installing: /usr/local/./vimix.app/Contents/Resources/vimix.icns
-- Installing: /usr/local/./vimix.app/Contents/Info.plist
-- Installing: /usr/local/vimix.app/Contents/Resources/gst-plugin-scanner
-- Installing: /usr/local/vimix.app/Contents/Resources//gstreamer-1.0
-- Installing: /usr/local/vimix.app/Contents/Resources//gstreamer-1.0/libgstcoreelements.dylib
-- Installing: /usr/local/vimix.app/Contents/Resources//gstreamer-1.0/libgstcoretracers.dylib
-- Up-to-date: /usr/local/vimix.app/Contents/Resources//gstreamer-1.0
-- Installing: /usr/local/vimix.app/Contents/Resources//gstreamer-1.0/libgstdebug.dylib
...
-- Installing: /usr/local/vimix.app/Contents/Resources//gstreamer-1.0/libgstproxy.dylib
CMake Error at src/cmake_install.cmake:63 (file):
  file INSTALL cannot find
  "/usr/local/Cellar/gst-plugins-good/1.18.4/lib/gstreamer-1.0": No such file
  or directory.
Call Stack (most recent call first):
  cmake_install.cmake:43 (include)

@nzoschke
Copy link
Author

nzoschke commented Nov 23, 2022

Aha, more progress updating paths

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 5d2926a..113e370 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -205,25 +205,25 @@ IF(APPLE)
     install(DIRECTORY "${PKG_GSTREAMER_BASE_PLUGIN_DIR}" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
     install(DIRECTORY "${PKG_GSTREAMER_BAD_PLUGIN_DIR}" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
 
-    install(DIRECTORY "/usr/local/Cellar/gst-plugins-good/1.18.4/lib/gstreamer-1.0" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
-    install(DIRECTORY "/usr/local/Cellar/gst-plugins-ugly/1.18.4_1/lib/gstreamer-1.0" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
-    install(DIRECTORY "/usr/local/Cellar/gst-libav/1.18.4/lib/gstreamer-1.0" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
+    install(DIRECTORY "/opt/homebrew/Cellar/gst-plugins-good/1.20.3_2/lib/gstreamer-1.0" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
+    install(DIRECTORY "/opt/homebrew/Cellar/gst-plugins-ugly/1.20.3_1/lib/gstreamer-1.0" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
+    install(DIRECTORY "/opt/homebrew/Cellar/gst-libav/1.20.3/lib/gstreamer-1.0" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
 
     # install locally recompiled & installed gst-plugins (because not included in brew package)
-    install(FILES   "/usr/local/lib/gstreamer-1.0/libgstapplemedia.dylib"
-                    "/usr/local/lib/gstreamer-1.0/libgstde265.dylib"
-                    "/usr/local/lib/gstreamer-1.0/libgstx265.dylib"
-            DESTINATION "${plugin_dest_dir}/gstreamer-1.0" COMPONENT Runtime)
+    # install(FILES   "/usr/local/lib/gstreamer-1.0/libgstapplemedia.dylib"
+    #                "/usr/local/lib/gstreamer-1.0/libgstde265.dylib"
+    #                "/usr/local/lib/gstreamer-1.0/libgstx265.dylib"
+    #        DESTINATION "${plugin_dest_dir}/gstreamer-1.0" COMPONENT Runtime)
 
     # install frei0r plugins (dependencies of gstreamer-1.0/libgstfrei0r.dylib plugin)
-    install(FILES "/usr/local/Cellar/frei0r/1.7.0/lib/frei0r-1/lissajous0r.so"
-                  "/usr/local/Cellar/frei0r/1.7.0/lib/frei0r-1/rgbnoise.so"
+    install(FILES "/opt/homebrew/Cellar/frei0r/1.8.0/lib/frei0r-1/lissajous0r.so"
+                  "/opt/homebrew/Cellar/frei0r/1.8.0/lib/frei0r-1/rgbnoise.so"
             DESTINATION "${plugin_dest_dir}/frei0r-1" COMPONENT Runtime)
 
 
     # ICU DATA LIB GST dependency : undocumented and hacked here : seems to work
 #    install(FILES "${ICU_LINK_LIBRARIES}" DESTINATION "${plugin_dest_dir}/gstreamer-1.0" COMPONENT Runtime)
-    install(FILES "/usr/local/Cellar/icu4c/69.1/lib/libicudata.69.1.dylib" DESTINATION "${plugin_dest_dir}/gstreamer-1.0" RENAME "libicudata.69.dylib" COMPONENT Runtime)
+    install(FILES "/opt/homebrew/Cellar/icu4c/71.1/lib/libicudata.71.1.dylib" DESTINATION "${plugin_dest_dir}/gstreamer-1.0" RENAME "libicudata.69.dylib" COMPONENT Runtime)
     message(STATUS "install  ${ICU_LINK_LIBRARIES} from ${ICU_LIBRARY_DIRS}")
 
     # package runtime fixup bundle

New error

 cmake --install . --prefix ./inst

-- fixup_bundle: fixing...
-- 367/732: fixing up '/Users/noah/src/vimix-build/inst/vimix.app/Contents/MacOS/vimix'
  exe_dotapp_dir/='./inst/vimix.app/'
  item_substring='/Users/noah/src/v'
  resolved_embedded_item='/Users/noah/src/vimix-build/inst/vimix.app/Contents/MacOS/vimix'

Install or copy the item into the bundle before calling fixup_bundle.
Or maybe there's a typo or incorrect path in one of the args to fixup_bundle?

CMake Error at /opt/homebrew/Cellar/cmake/3.25.0/share/cmake/Modules/BundleUtilities.cmake:851 (message):
  cannot fixup an item that is not in the bundle...
Call Stack (most recent call first):
  /opt/homebrew/Cellar/cmake/3.25.0/share/cmake/Modules/BundleUtilities.cmake:984 (fixup_bundle_item)
  src/cmake_install.cmake:91 (fixup_bundle)
  cmake_install.cmake:43 (include)

EDIT: this goes away with sudo cmake --install .

@nzoschke
Copy link
Author

nzoschke commented Nov 23, 2022

Getting closer but crashing

sudo cmake --install .
sudo codesign -s - /usr/local/vimix.app
-------------------------------------
Translated Report (Full Report Below)
-------------------------------------

Process:               vimix [92834]
Path:                  /usr/local/vimix.app/Contents/MacOS/vimix
Identifier:            com.bhbn.vimix
Version:               0.7 (0.7.0)
Code Type:             ARM-64 (Native)
Parent Process:        launchd [1]
User ID:               501

Date/Time:             2022-11-22 18:43:36.5460 -0800
OS Version:            macOS 12.5.1 (21G83)
Report Version:        12
Anonymous UUID:        FD4D5C46-C80B-544B-F3E8-85C817BF7C34

Sleep/Wake UUID:       57EE4261-7741-4CB5-BCE2-86762A69A46D

Time Awake Since Boot: 470000 seconds
Time Since Wake:       3411 seconds

System Integrity Protection: enabled

Crashed Thread:        0

Exception Type:        EXC_BAD_ACCESS (SIGKILL (Code Signature Invalid))
Exception Codes:       UNKNOWN_0x32 at 0x0000000104cd8000
Exception Codes:       0x0000000000000032, 0x0000000104cd8000
Exception Note:        EXC_CORPSE_NOTIFY

Termination Reason:    Namespace CODESIGNING, Code 2 

@brunoherbelin
Copy link
Owner

Here is what I did to compile the applemedia plugins to include the following features:

  • avfvideosrc : the gstreamer source to get the Apple Media screen capture and webcams
  • avfdeviceprovider : the gstreamer components to enable listing the plugged devices recognized by AppleMedia

The problem is that applemedia is not compiled by default in gst bad plugins. I thus overwrite in my Mac the default gst-plugins-bad package from homebrew by a re-compiled version.

Build GST plugins bad (downloaded source)
meson build -Dopenexr=disabled
cd build
ninja

Fix for OSX 10.13

  • disable compilation of openexr (fails to compile)

in meson_options.txt change the line :
option('openexr', type : 'feature', value : 'disabled', description : 'OpenEXR plugin')

  • disable some lines in ../sys/applemedia/avfvideosrc.m for OSX < 10.14

comment lines 430 to 481

Install in local system

ninja install
This installs dylibs to /usr/local/lib/gstreamer-1.0, and some in /usr/local/lib

NB: To restore Homebrew Gst-plugins-bad:
brew link gst-plugins-bad

@nzoschke
Copy link
Author

Thanks, i'll play with that next. Here are my questions / todo items:

  • gstreamer build

    • applemedia stuff above. Is that where libgstde265.dylib and libgstx265.dylib come from?
  • cmake build

    • detect CMAKE_OSX_ARCHITECTURES
    • detect PKG_CONFIG_PATH for icu
    • detect PKG_CONFIG_PATH for gstreamer necessary?
  • cmake install

    • is cmake --install and code sign stuff necessary for a working build?
    • detect homebrew path / versions for install() directives

@nzoschke
Copy link
Author

I do see libgstapplemedia in homebrew gst-plugins-bad.

% find . -name 'libgstapplemedi*'
./lib/gstreamer-1.0/libgstapplemedia.dylib
./Cellar/gst-plugins-bad/1.20.3_1/lib/gstreamer-1.0/libgstapplemedia.dylib

However I don't see libgstde265.dylib or libgstx265.dylib.

But I also don't see these two after building gst-plugins-bad-1.20.4 from source. Are they required?

@nzoschke
Copy link
Author

nzoschke commented Nov 26, 2022

I feel like I'm close with the following diff in cmake config:

diff --git a/CMakeLists.txt b/CMakeLists.txt
index f200d85..1a9f158 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -59,7 +59,7 @@ if(UNIX)
         # the RPATH to be used when installing
         set(CMAKE_SKIP_RPATH TRUE)
         set(OpenGL_DIR /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/)
-        set(CMAKE_OSX_ARCHITECTURES "x86_64")
+        set(CMAKE_OSX_ARCHITECTURES "arm64")
         set(CMAKE_OSX_DEPLOYMENT_TARGET "10.14")
 
         # CPACK
@@ -69,8 +69,7 @@ if(UNIX)
         set(APPLE_CODESIGN_ENTITLEMENTS "${CMAKE_CURRENT_SOURCE_DIR}/osx/entitlements.plist")
 
         # find icu4c in OSX (pretty well hidden...)
-        set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:/usr/local/opt/icu4c/lib/pkgconfig")
-
+        set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:/opt/homebrew/opt/icu4c/lib/pkgconfig")
     else()
         add_definitions(-DLINUX)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 5d2926a..e557003 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -205,25 +205,20 @@ IF(APPLE)
     install(DIRECTORY "${PKG_GSTREAMER_BASE_PLUGIN_DIR}" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
     install(DIRECTORY "${PKG_GSTREAMER_BAD_PLUGIN_DIR}" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
 
-    install(DIRECTORY "/usr/local/Cellar/gst-plugins-good/1.18.4/lib/gstreamer-1.0" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
-    install(DIRECTORY "/usr/local/Cellar/gst-plugins-ugly/1.18.4_1/lib/gstreamer-1.0" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
-    install(DIRECTORY "/usr/local/Cellar/gst-libav/1.18.4/lib/gstreamer-1.0" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
-
-    # install locally recompiled & installed gst-plugins (because not included in brew package)
-    install(FILES   "/usr/local/lib/gstreamer-1.0/libgstapplemedia.dylib"
-                    "/usr/local/lib/gstreamer-1.0/libgstde265.dylib"
-                    "/usr/local/lib/gstreamer-1.0/libgstx265.dylib"
-            DESTINATION "${plugin_dest_dir}/gstreamer-1.0" COMPONENT Runtime)
+    install(DIRECTORY "/opt/homebrew/Cellar/gst-plugins-good/1.20.3_2/lib/gstreamer-1.0" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
+    install(DIRECTORY "/opt/homebrew/Cellar/gst-plugins-ugly/1.20.3_1/lib/gstreamer-1.0" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
+    install(DIRECTORY "/opt/homebrew/Cellar/gst-plugins-bad/1.20.3_1/lib/gstreamer-1.0" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
+    install(DIRECTORY "/opt/homebrew/Cellar/gst-libav/1.20.3/lib/gstreamer-1.0" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
 
     # install frei0r plugins (dependencies of gstreamer-1.0/libgstfrei0r.dylib plugin)
-    install(FILES "/usr/local/Cellar/frei0r/1.7.0/lib/frei0r-1/lissajous0r.so"
-                  "/usr/local/Cellar/frei0r/1.7.0/lib/frei0r-1/rgbnoise.so"
+    install(FILES "/opt/homebrew/Cellar/frei0r/1.8.0/lib/frei0r-1/lissajous0r.so"
+                  "/opt/homebrew/Cellar/frei0r/1.8.0/lib/frei0r-1/rgbnoise.so"
             DESTINATION "${plugin_dest_dir}/frei0r-1" COMPONENT Runtime)
 
 
     # ICU DATA LIB GST dependency : undocumented and hacked here : seems to work
 #    install(FILES "${ICU_LINK_LIBRARIES}" DESTINATION "${plugin_dest_dir}/gstreamer-1.0" COMPONENT Runtime)
-    install(FILES "/usr/local/Cellar/icu4c/69.1/lib/libicudata.69.1.dylib" DESTINATION "${plugin_dest_dir}/gstreamer-1.0" RENAME "libicudata.69.dylib" COMPONENT Runtime)
+    install(FILES "/opt/homebrew/Cellar/icu4c/71.1/lib/libicudata.71.1.dylib" DESTINATION "${plugin_dest_dir}/gstreamer-1.0" RENAME "libicudata.69.dylib" COMPONENT Runtime)
     message(STATUS "install  ${ICU_LINK_LIBRARIES} from ${ICU_LIBRARY_DIRS}")
 
     # package runtime fixup bundle
@@ -238,9 +233,9 @@ IF(APPLE)
             COMPONENT Runtime
     )
 
-    set(APPLE_CODESIGN_IDENTITY "" CACHE STRING "")
-    string(LENGTH "${APPLE_CODESIGN_IDENTITY}" APPLE_CODESIGN_IDENTITY_LENGHT)
-    if( ${APPLE_CODESIGN_IDENTITY_LENGHT} LESS 40 )
+    set(APPLE_CODESIGN_IDENTITY "<REDACTED>")
+    string(LENGTH "${APPLE_CODESIGN_IDENTITY}" APPLE_CODESIGN_IDENTITY_LENGTH)
+    if( ${APPLE_CODESIGN_IDENTITY_LENGTH} LESS 40 )
         message(STATUS "Not signing bundle. Specify APPLE_CODESIGN_IDENTITY to cmake before running cpack to sign")
     else()
         install(CODE "

Configure finds everything as long as homebrew paths / versions are correct:

$ cmake -DCMAKE_BUILD_TYPE=Release ..

-----------------------------------------------------------------------------
-- The following external packages were located on your system.
-- This installation will have the extra features provided by these packages.
-----------------------------------------------------------------------------
   * GLib - GTK general-purpose utility library
   * GObject - GTK object-oriented framework
   * GStreamer - Open Source Multiplatform Multimedia Framework
   * GStreamerPluginsBase - GStreamer app library
   * GStreamerPluginsBase - GStreamer audio library
   * GStreamerPluginsBase - GStreamer video library
   * GStreamerPluginsBase - GStreamer pbutils library
   * GStreamerPluginsBase - GStreamer opengl library
   * ICU - International Components for Unicode
   * glfw3 - Open Source multi-platform library for OpenGL

-----------------------------------------------------------------------------
-- Congratulations! All external packages have been found.
-----------------------------------------------------------------------------

-- Including 'GLAD' Open source multi-language OpenGL loader https://glad.dav1d.de -- /Users/noah/src/vimix/ext/glad/include
-- Compiling 'Dear ImGui' from https://github.com/ocornut/imgui.git -- /Users/noah/src/vimix/ext/imgui
-- Compiling 'ImGuiColorTextEdit' from https://github.com/BalazsJako/ImGuiColorTextEdit -- /Users/noah/src/vimix/ext/ImGuiColorTextEdit
-- Compiling 'OSCPack' from http://www.rossbencina.com/code/oscpack -- /Users/noah/src/vimix/ext/OSCPack
-- Using 'CMakeRC ' from https://github.com/vector-of-bool/cmrc.git -- /usr/share/cmake;/Users/noah/src/vimix/cmake/modules.
-- install  gst-plugins /opt/homebrew/Cellar/gstreamer/1.20.4/lib/gstreamer-1.0
-- install  gst-plugins-base /opt/homebrew/Cellar/gst-plugins-base/1.20.3/lib/gstreamer-1.0
-- Checking for module 'gstreamer-plugins-bad-1.0'
--   Found gstreamer-plugins-bad-1.0, version 1.20.3
-- install  gst-plugins-bad /opt/homebrew/Cellar/gst-plugins-bad/1.20.3_1/lib/gstreamer-1.0
-- install  gst-plugin-scanner /opt/homebrew/Cellar/gstreamer/1.20.4/libexec/gstreamer-1.0/gst-plugin-scanner
-- install  /opt/homebrew/Cellar/icu4c/71.1/lib/libicuio.dylib;/opt/homebrew/Cellar/icu4c/71.1/lib/libicui18n.dylib;/opt/homebrew/Cellar/icu4c/71.1/lib/libicuuc.dylib;/opt/homebrew/Cellar/icu4c/71.1/lib/libicudata.dylib from /opt/homebrew/Cellar/icu4c/71.1/lib
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/noah/src/vimix/vimix-build

Build builds:

$ cmake --build .

...
6 warnings generated.
[ 99%] Building CXX object src/CMakeFiles/vimix.dir/VideoBroadcast.cpp.o
[ 99%] Building CXX object src/CMakeFiles/vimix.dir/SrtReceiverSource.cpp.o
[100%] Building CXX object src/CMakeFiles/vimix.dir/MultiFileRecorder.cpp.o
[100%] Linking CXX executable vimix.app/Contents/MacOS/vimix
ld: warning: dylib (/opt/homebrew/Cellar/glfw/3.3.8/lib/libglfw.dylib) was built for newer macOS version (12.0) than being linked (11.0)
ld: warning: dylib (/opt/homebrew/Cellar/icu4c/71.1/lib/libicuio.dylib) was built for newer macOS version (12.0) than being linked (11.0)
ld: warning: dylib (/opt/homebrew/Cellar/icu4c/71.1/lib/libicui18n.dylib) was built for newer macOS version (12.0) than being linked (11.0)
ld: warning: dylib (/opt/homebrew/Cellar/icu4c/71.1/lib/libicuuc.dylib) was built for newer macOS version (12.0) than being linked (11.0)
ld: warning: dylib (/opt/homebrew/Cellar/icu4c/71.1/lib/libicudata.dylib) was built for newer macOS version (12.0) than being linked (11.0)
ld: warning: dylib (/opt/homebrew/Cellar/glib/2.74.0/lib/libgobject-2.0.dylib) was built for newer macOS version (12.0) than being linked (11.0)
ld: warning: dylib (/opt/homebrew/Cellar/glib/2.74.0/lib/libgmodule-2.0.dylib) was built for newer macOS version (12.0) than being linked (11.0)
ld: warning: dylib (/opt/homebrew/Cellar/glib/2.74.0/lib/libgthread-2.0.dylib) was built for newer macOS version (12.0) than being linked (11.0)
ld: warning: dylib (/opt/homebrew/Cellar/glib/2.74.0/lib/libglib-2.0.dylib) was built for newer macOS version (12.0) than being linked (11.0)
ld: warning: dylib (/opt/homebrew/Cellar/gstreamer/1.20.4/lib/libgstreamer-1.0.dylib) was built for newer macOS version (12.0) than being linked (11.0)
ld: warning: dylib (/opt/homebrew/Cellar/gstreamer/1.20.4/lib/libgstbase-1.0.dylib) was built for newer macOS version (12.0) than being linked (11.0)
ld: warning: dylib (/opt/homebrew/Cellar/gst-plugins-base/1.20.3/lib/libgstapp-1.0.dylib) was built for newer macOS version (12.0) than being linked (11.0)
ld: warning: dylib (/opt/homebrew/Cellar/gst-plugins-base/1.20.3/lib/libgstaudio-1.0.dylib) was built for newer macOS version (12.0) than being linked (11.0)
ld: warning: dylib (/opt/homebrew/Cellar/gst-plugins-base/1.20.3/lib/libgstvideo-1.0.dylib) was built for newer macOS version (12.0) than being linked (11.0)
ld: warning: dylib (/opt/homebrew/Cellar/gst-plugins-base/1.20.3/lib/libgstpbutils-1.0.dylib) was built for newer macOS version (12.0) than being linked (11.0)
ld: warning: dylib (/opt/homebrew/Cellar/gst-plugins-base/1.20.3/lib/libgstgl-1.0.dylib) was built for newer macOS version (12.0) than being linked (11.0)
Copying OS X content src/vimix.app/Contents/Resources/vimix.icns
[100%] Built target vimix

Pack makes an installers and signs as long as I hard code an identity from security find-identity (redacted)

$ cpack

...
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool: warning: changes being made to the file will invalidate the code signature in: /Users/noah/src/vimix/vimix-build/_CPack_Packages/OSX_10.14_arm64/DragNDrop/vimix_0.7.2_OSX_10.14_arm64/vimix.app/Contents/Frameworks/libicuuc.71.1.dylib
/Users/noah/src/vimix/vimix-build/_CPack_Packages/OSX_10.14_arm64/DragNDrop/vimix_0.7.2_OSX_10.14_arm64/vimix.app: replacing existing signature
/Users/noah/src/vimix/vimix-build/_CPack_Packages/OSX_10.14_arm64/DragNDrop/vimix_0.7.2_OSX_10.14_arm64/vimix.app: signed app bundle with Mach-O thin (arm64) [com.bhbn.vimix]
CPack: Create package
CPack: - package: /Users/noah/src/vimix/vimix-build/vimix_0.7.2_OSX_10.14_arm64.dmg generated.

Then I install this, but it crashes on launch.

Note I've been messing around with the bundle identifier wondering if that needs to line up with my signing identity. I do have an Apple Developer account and various certificates but have no idea how manual signing works.

-------------------------------------
Translated Report (Full Report Below)
-------------------------------------

Process:               vimix [91947]
Path:                  /Applications/vimix.app/Contents/MacOS/vimix
Identifier:            net.mixable.tubetron
Version:               0.7 (0.7.0)
Code Type:             ARM-64 (Native)
Parent Process:        launchd [1]
User ID:               501

Date/Time:             2022-11-26 10:05:50.4458 -0800
OS Version:            macOS 12.5.1 (21G83)
Report Version:        12
Anonymous UUID:        FD4D5C46-C80B-544B-F3E8-85C817BF7C34

Sleep/Wake UUID:       0ACEB1ED-886C-4C6E-827D-49800C9AC825

Time Awake Since Boot: 680000 seconds
Time Since Wake:       93962 seconds

System Integrity Protection: enabled

Crashed Thread:        0  Dispatch queue: com.apple.main-thread

Exception Type:        EXC_BAD_ACCESS (SIGKILL (Code Signature Invalid))
Exception Codes:       UNKNOWN_0x32 at 0x0000000117908000
Exception Codes:       0x0000000000000032, 0x0000000117908000
Exception Note:        EXC_CORPSE_NOTIFY

Termination Reason:    Namespace CODESIGNING, Code 2 

VM Region Info: 0x117908000 is in 0x117908000-0x117928000;  bytes after start: 0  bytes before end: 131071
      REGION TYPE                    START - END         [ VSIZE] PRT/MAX SHRMOD  REGION DETAIL
      MALLOC_SMALL                114800000-115000000    [ 8192K] rw-/rwx SM=PRV  
      GAP OF 0x2908000 BYTES
--->  mapped file                 117908000-117928000    [  128K] r--/rwx SM=COW  ...t_id=93bca9fb
      GAP OF 0x6d8000 BYTES
      MALLOC_MEDIUM               118000000-118800000    [ 8192K] rw-/rwx SM=COW  

Thread 0 Crashed::  Dispatch queue: com.apple.main-thread
0   dyld                          	       0x1019d281c dyld3::MachOFile::compatibleSlice(Diagnostics&, void const*, unsigned long, char const*, dyld3::Platform, bool, dyld3::GradedArchs const&) + 76
1   dyld                          	       0x1019b6b9c invocation function for block in dyld4::JustInTimeLoader::makeJustInTimeLoaderDisk(Diagnostics&, dyld4::RuntimeState&, char const*, dyld4::Loader::LoadOptions const&, bool, unsigned int) + 96
2   dyld                          	       0x1019b6b9c invocation function for block in dyld4::JustInTimeLoader::makeJustInTimeLoaderDisk(Diagnostics&, dyld4::RuntimeState&, char const*, dyld4::Loader::LoadOptions const&, bool, unsigned int) + 96
3   dyld                          	       0x1019bbfcc dyld4::SyscallDelegate::withReadOnlyMappedFile(Diagnostics&, char const*, bool, void (void const*, unsigned long, bool, dyld4::FileID const&, char const*) block_pointer) const + 132
4   dyld                          	       0x1019b6b08 dyld4::JustInTimeLoader::makeJustInTimeLoaderDisk(Diagnostics&, dyld4::RuntimeState&, char const*, dyld4::Loader::LoadOptions const&, bool, unsigned int) + 204
5   dyld                          	       0x1019b07f0 invocation function for block in dyld4::Loader::getLoader(Diagnostics&, dyld4::RuntimeState&, char const*, dyld4::Loader::LoadOptions const&) + 1436
6   dyld                          	       0x1019afcac dyld4::Loader::forEachResolvedAtPathVar(dyld4::RuntimeState&, char const*, dyld4::Loader::LoadOptions const&, dyld4::ProcessConfig::PathOverrides::Type, bool&, void (char const*, dyld4::ProcessConfig::PathOverrides::Type, bool&) block_pointer) + 780
7   dyld                          	       0x1019af8d8 invocation function for block in dyld4::Loader::forEachPath(Diagnostics&, dyld4::RuntimeState&, char const*, dyld4::Loader::LoadOptions const&, void (char const*, dyld4::ProcessConfig::PathOverrides::Type, bool&) block_pointer) + 148
8   dyld                          	       0x1019a5ed4 dyld4::ProcessConfig::PathOverrides::forEachPathVariant(char const*, dyld3::Platform, bool, bool&, void (char const*, dyld4::ProcessConfig::PathOverrides::Type, bool&) block_pointer) const + 672
9   dyld                          	       0x1019af82c dyld4::Loader::forEachPath(Diagnostics&, dyld4::RuntimeState&, char const*, dyld4::Loader::LoadOptions const&, void (char const*, dyld4::ProcessConfig::PathOverrides::Type, bool&) block_pointer) + 172
10  dyld                          	       0x1019b004c dyld4::Loader::getLoader(Diagnostics&, dyld4::RuntimeState&, char const*, dyld4::Loader::LoadOptions const&) + 864
11  dyld                          	       0x1019c1f28 invocation function for block in dyld4::APIs::dlopen_from(char const*, int, void*) + 248
12  dyld                          	       0x1019a6b68 dyld4::RuntimeState::withLoadersWriteLock(void () block_pointer) + 100
13  dyld                          	       0x1019c1c34 dyld4::APIs::dlopen_from(char const*, int, void*) + 472
14  libgmodule-2.0.0.dylib        	       0x10194f240 g_module_open_full + 992
15  libgstreamer-1.0.0.dylib      	       0x1022c84d8 _priv_gst_plugin_load_file_for_registry + 432
16  libgstreamer-1.0.0.dylib      	       0x1022d97e4 gst_registry_scan_plugin_file + 248
17  libgstreamer-1.0.0.dylib      	       0x1022d93d4 gst_registry_scan_path_level + 988
18  libgstreamer-1.0.0.dylib      	       0x1022d7930 gst_registry_scan_path_internal + 64
19  libgstreamer-1.0.0.dylib      	       0x1022d8168 gst_update_registry + 896
20  libgstreamer-1.0.0.dylib      	       0x1022725a4 init_post + 1148
21  libglib-2.0.0.dylib           	       0x10218b824 g_option_context_parse + 1772
22  libgstreamer-1.0.0.dylib      	       0x102272760 gst_init_check + 156
23  libgstreamer-1.0.0.dylib      	       0x1022727e4 gst_init + 24
24  vimix                         	       0x100f8bf70 Rendering::init() + 808
25  vimix                         	       0x100ed44bc main + 1024
26  dyld                          	       0x1019a108c start + 520

Thread 1:
0   libsystem_kernel.dylib        	       0x1b892cc20 kevent + 8
1   vimix                         	       0x101017230 asio::detail::kqueue_reactor::run(long, asio::detail::op_queue<asio::detail::scheduler_operation>&) + 292
2   vimix                         	       0x101016d00 asio::detail::scheduler::do_run_one(asio::detail::conditionally_enabled_mutex::scoped_lock&, asio::detail::scheduler_thread_info&, std::__1::error_code const&) + 268
3   vimix                         	       0x101016980 asio::detail::scheduler::run(std::__1::error_code&) + 220
4   vimix                         	       0x101017bb0 ableton::platforms::asio::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog>::Context<ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::asio::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog> >::UdpSendExceptionHandler>(ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::asio::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog> >::UdpSendExceptionHandler)::'lambda'(asio::io_context&, ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::asio::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog> >::UdpSendExceptionHandler)::operator()(asio::io_context&, ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::asio::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog> >::UdpSendExceptionHandler) const + 136
5   vimix                         	       0x101017ac8 void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, ableton::platforms::asio::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog>::Context<ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::asio::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog> >::UdpSendExceptionHandler>(ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::asio::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog> >::UdpSendExceptionHandler)::'lambda'(asio::io_context&, ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::asio::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog> >::UdpSendExceptionHandler), std::__1::reference_wrapper<asio::io_context>, ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::asio::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog> >::UdpSendExceptionHandler> >(void*) + 48
6   libsystem_pthread.dylib       	       0x1b896426c _pthread_start + 148
7   libsystem_pthread.dylib       	       0x1b895f08c thread_start + 8

Thread 2:
0   libsystem_kernel.dylib        	       0x1b892a270 __psynch_cvwait + 8
1   libsystem_pthread.dylib       	       0x1b896483c _pthread_cond_wait + 1236
2   libc++.1.dylib                	       0x1b88b3320 std::__1::condition_variable::__do_timed_wait(std::__1::unique_lock<std::__1::mutex>&, std::__1::chrono::time_point<std::__1::chrono::system_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l> > >) + 100
3   vimix                         	       0x101032edc ableton::platforms::asio::LockFreeCallbackDispatcher<std::__1::function<void ()>, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000l> > >::run() + 304
4   vimix                         	       0x101032d4c void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, ableton::platforms::asio::LockFreeCallbackDispatcher<std::__1::function<void ()>, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000l> > >::LockFreeCallbackDispatcher(std::__1::function<void ()>, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000l> >)::'lambda'()> >(void*) + 44
5   libsystem_pthread.dylib       	       0x1b896426c _pthread_start + 148
6   libsystem_pthread.dylib       	       0x1b895f08c thread_start + 8

Thread 3:
0   libsystem_kernel.dylib        	       0x1b8931598 __select + 8
1   vimix                         	       0x10107f494 SocketReceiveMultiplexer::Implementation::Run() + 1072
2   vimix                         	       0x10100db98 Connection::listen() + 64
3   vimix                         	       0x10100ff1c void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (*)()> >(void*) + 44
4   libsystem_pthread.dylib       	       0x1b896426c _pthread_start + 148
5   libsystem_pthread.dylib       	       0x1b895f08c thread_start + 8

Thread 4:
0   libsystem_kernel.dylib        	       0x1b892a06c __semwait_signal + 8
1   libsystem_c.dylib             	       0x1b8832fc8 nanosleep + 220
2   libc++.1.dylib                	       0x1b88bfaf8 std::__1::this_thread::sleep_for(std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l> > const&) + 84
3   vimix                         	       0x10100e210 Connection::ask() + 1272
4   vimix                         	       0x10100ff1c void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (*)()> >(void*) + 44
5   libsystem_pthread.dylib       	       0x1b896426c _pthread_start + 148
6   libsystem_pthread.dylib       	       0x1b895f08c thread_start + 8

Thread 5:
0   libsystem_kernel.dylib        	       0x1b8931598 __select + 8
1   vimix                         	       0x10107f494 SocketReceiveMultiplexer::Implementation::Run() + 1072
2   vimix                         	       0x100f5f728 void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (*)(UdpListeningReceiveSocket*), UdpListeningReceiveSocket*> >(void*) + 44
3   libsystem_pthread.dylib       	       0x1b896426c _pthread_start + 148
4   libsystem_pthread.dylib       	       0x1b895f08c thread_start + 8

Thread 6:
0   libsystem_pthread.dylib       	       0x1b895f078 start_wqthread + 0

Thread 7:
0   libsystem_pthread.dylib       	       0x1b895f078 start_wqthread + 0

Thread 8:
0   libsystem_pthread.dylib       	       0x1b895f078 start_wqthread + 0

Thread 9:
0   libsystem_pthread.dylib       	       0x1b895f078 start_wqthread + 0

Thread 10:: com.apple.NSEventThread
0   libsystem_kernel.dylib        	       0x1b89268ec semaphore_wait_trap + 8
1   libdispatch.dylib             	       0x1b87a0750 _dispatch_sema4_wait + 28
2   libdispatch.dylib             	       0x1b87a0df8 _dispatch_semaphore_wait_slow + 132
3   HIToolbox                     	       0x1c1683f3c _BeginEventReceiptOnThread + 200
4   AppKit                        	       0x1bb703078 _NSEventThread + 60
5   libsystem_pthread.dylib       	       0x1b896426c _pthread_start + 148
6   libsystem_pthread.dylib       	       0x1b895f08c thread_start + 8


Thread 0 crashed with ARM Thread State (64-bit):
    x0: 0x000000016ef31ad0   x1: 0x0000000117908000   x2: 0x000000000001e0f0   x3: 0x0000600003827cf0
    x4: 0x0000000000000001   x5: 0x0000000000000000   x6: 0x00000001019ef800   x7: 0x00000000000002e0
    x8: 0x33cf243a60b0007a   x9: 0x00000001019b6b3c  x10: 0x0000000000000000  x11: 0x0000000000000001
   x12: 0x0000600003827cf2  x13: 0x0000000000000000  x14: 0x000000027053c01a  x15: 0x00000000000001fb
   x16: 0x0000000000000006  x17: 0x6ae100016ef31a00  x18: 0x0000000000000000  x19: 0x000000016ef31ad0
   x20: 0x0000600003827cf0  x21: 0x0000000000000001  x22: 0x0000000117908000  x23: 0x00000001019ef800
   x24: 0x0000000000000000  x25: 0x000000000001e0f0  x26: 0x00000001017d4e08  x27: 0x0000000000000000
   x28: 0x0000000000000000   fp: 0x000000016ef31070   lr: 0x2e3d0001019b6b9c
    sp: 0x000000016ef30ed0   pc: 0x00000001019d281c cpsr: 0x00001000
   far: 0x0000000117908000  esr: 0x92000006 (Data Abort) byte read Translation fault

Binary Images:
       0x10199c000 -        0x1019fbfff dyld (*) <75627683-a780-32ad-ae34-cf86dd23a26b> /usr/lib/dyld
       0x10194c000 -        0x10194ffff libgmodule-2.0.0.dylib (*) <d08203e3-eb53-3468-ad4c-6a95d9e34f71> /Applications/vimix.app/Contents/Frameworks/libgmodule-2.0.0.dylib
       0x102264000 -        0x10233bfff libgstreamer-1.0.0.dylib (*) <110e31c0-743a-3e1f-ad00-5917d64dbcfd> /Applications/vimix.app/Contents/Frameworks/libgstreamer-1.0.0.dylib
       0x10214c000 -        0x10222ffff libglib-2.0.0.dylib (*) <75be80c6-4e1b-3382-b72c-29cafcfded31> /Applications/vimix.app/Contents/Frameworks/libglib-2.0.0.dylib
       0x100ecc000 -        0x10165ffff net.mixable.tubetron (0.7) <5879d8bc-1922-3f82-968a-6786e5d96946> /Applications/vimix.app/Contents/MacOS/vimix
       0x1b8925000 -        0x1b895cfff libsystem_kernel.dylib (*) <d5cdde7e-7037-3a70-9ce4-9e3847da6ce0> /usr/lib/system/libsystem_kernel.dylib
       0x1b895d000 -        0x1b8969fff libsystem_pthread.dylib (*) <f32ff902-ba43-30b0-ad43-a2a8a9ff69fe> /usr/lib/system/libsystem_pthread.dylib
       0x1b88a6000 -        0x1b890cfff libc++.1.dylib (*) <ca366de6-c395-319a-b3ab-e22126d28394> /usr/lib/libc++.1.dylib
       0x1b8824000 -        0x1b88a5fff libsystem_c.dylib (*) <93fc2587-038e-31e1-b16b-369979e72cb1> /usr/lib/system/libsystem_c.dylib
       0x1b879c000 -        0x1b87e2fff libdispatch.dylib (*) <035d23d9-4cb5-3759-9059-1f7878f89fee> /usr/lib/system/libdispatch.dylib
       0x1c163c000 -        0x1c196ffff com.apple.HIToolbox (2.1.1) <7112f6f2-a77e-39db-83c8-f627b8a49df8> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox
       0x1bb555000 -        0x1bc40dfff com.apple.AppKit (6.9) <07bc3607-552a-3eb9-a941-4911c589dbc5> /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit
               0x0 - 0xffffffffffffffff ??? (*) <00000000-0000-0000-0000-000000000000> ???

External Modification Summary:
  Calls made by other processes targeting this process:
    task_for_pid: 0
    thread_create: 0
    thread_set_state: 0
  Calls made by this process:
    task_for_pid: 0
    thread_create: 0
    thread_set_state: 0
  Calls made by all processes on this machine:
    task_for_pid: 0
    thread_create: 0
    thread_set_state: 0

VM Region Summary:
ReadOnly portion of Libraries: Total=832.7M resident=0K(0%) swapped_out_or_unallocated=832.7M(100%)
Writable regions: Total=1.5G written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=1.5G(100%)

                                VIRTUAL   REGION 
REGION TYPE                        SIZE    COUNT (non-coalesced) 
===========                     =======  ======= 
Accelerate framework               128K        1 
Activity Tracing                   256K        1 
CG backing stores                 3520K        4 
ColorSync                          544K       24 
CoreAnimation                       16K        1 
CoreGraphics                        16K        1 
Foundation                          16K        1 
Kernel Alloc Once                   32K        1 
MALLOC                           279.3M       48 
MALLOC guard page                  192K       10 
MALLOC_MEDIUM (reserved)         840.0M        7         reserved VM address space (unallocated)
MALLOC_NANO (reserved)           384.0M        1         reserved VM address space (unallocated)
STACK GUARD                       56.2M       11 
Stack                             13.3M       11 
VM_ALLOCATE                        304K       16 
__AUTH                            1783K      149 
__AUTH_CONST                      9262K      290 
__CTF                               756        1 
__DATA                            8404K      297 
__DATA_CONST                      10.5M      311 
__DATA_DIRTY                       602K      102 
__FONT_DATA                          4K        1 
__GLSLBUILTINS                    5176K        1 
__LINKEDIT                       582.2M       25 
__OBJC_CONST                      1260K      125 
__OBJC_RO                         83.0M        1 
__OBJC_RW                         3168K        1 
__TEXT                           250.5M      326 
__UNICODE                          592K        1 
dyld private memory               1024K        1 
mapped file                       78.3M       20 
shared memory                      848K       14 
===========                     =======  ======= 
TOTAL                              2.6G     1804 
TOTAL, minus reserved VM space     1.4G     1804 



-----------
Full Report
-----------

{"app_name":"vimix","timestamp":"2022-11-26 10:05:50.00 -0800","app_version":"0.7","slice_uuid":"5879d8bc-1922-3f82-968a-6786e5d96946","build_version":"0.7.0","platform":1,"bundleID":"net.mixable.tubetron","share_with_app_devs":0,"is_first_party":0,"bug_type":"309","os_version":"macOS 12.5.1 (21G83)","incident_id":"E5E5D350-2E94-4226-958C-5E629B636A46","name":"vimix"}
{
  "uptime" : 680000,
  "procLaunch" : "2022-11-26 10:05:50.2737 -0800",
  "procRole" : "Foreground",
  "version" : 2,
  "userID" : 501,
  "deployVersion" : 210,
  "modelCode" : "MacBookPro18,3",
  "procStartAbsTime" : 16403647698453,
  "coalitionID" : 47696,
  "osVersion" : {
    "train" : "macOS 12.5.1",
    "build" : "21G83",
    "releaseType" : "User"
  },
  "captureTime" : "2022-11-26 10:05:50.4458 -0800",
  "incident" : "E5E5D350-2E94-4226-958C-5E629B636A46",
  "bug_type" : "309",
  "pid" : 91947,
  "procExitAbsTime" : 16403651425965,
  "translated" : false,
  "cpuType" : "ARM-64",
  "procName" : "vimix",
  "procPath" : "\/Applications\/vimix.app\/Contents\/MacOS\/vimix",
  "bundleInfo" : {"CFBundleShortVersionString":"0.7","CFBundleVersion":"0.7.0","CFBundleIdentifier":"net.mixable.tubetron"},
  "storeInfo" : {"deviceIdentifierForVendor":"F78E352C-94BA-5452-830D-A92438CB3A71","thirdParty":true},
  "parentProc" : "launchd",
  "parentPid" : 1,
  "coalitionName" : "net.mixable.tubetron",
  "crashReporterKey" : "FD4D5C46-C80B-544B-F3E8-85C817BF7C34",
  "wakeTime" : 93962,
  "sleepWakeUUID" : "0ACEB1ED-886C-4C6E-827D-49800C9AC825",
  "sip" : "enabled",
  "vmRegionInfo" : "0x117908000 is in 0x117908000-0x117928000;  bytes after start: 0  bytes before end: 131071\n      REGION TYPE                    START - END         [ VSIZE] PRT\/MAX SHRMOD  REGION DETAIL\n      MALLOC_SMALL                114800000-115000000    [ 8192K] rw-\/rwx SM=PRV  \n      GAP OF 0x2908000 BYTES\n--->  mapped file                 117908000-117928000    [  128K] r--\/rwx SM=COW  ...t_id=93bca9fb\n      GAP OF 0x6d8000 BYTES\n      MALLOC_MEDIUM               118000000-118800000    [ 8192K] rw-\/rwx SM=COW  ",
  "isCorpse" : 1,
  "exception" : {"codes":"0x0000000000000032, 0x0000000117908000","rawCodes":[50,4690313216],"type":"EXC_BAD_ACCESS","signal":"SIGKILL (Code Signature Invalid)","subtype":"UNKNOWN_0x32 at 0x0000000117908000"},
  "termination" : {"namespace":"CODESIGNING","flags":0,"code":2},
  "vmregioninfo" : "0x117908000 is in 0x117908000-0x117928000;  bytes after start: 0  bytes before end: 131071\n      REGION TYPE                    START - END         [ VSIZE] PRT\/MAX SHRMOD  REGION DETAIL\n      MALLOC_SMALL                114800000-115000000    [ 8192K] rw-\/rwx SM=PRV  \n      GAP OF 0x2908000 BYTES\n--->  mapped file                 117908000-117928000    [  128K] r--\/rwx SM=COW  ...t_id=93bca9fb\n      GAP OF 0x6d8000 BYTES\n      MALLOC_MEDIUM               118000000-118800000    [ 8192K] rw-\/rwx SM=COW  ",
  "extMods" : {"caller":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"system":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"targeted":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"warnings":0},
  "faultingThread" : 0,
  "threads" : [{"triggered":true,"id":10199005,"threadState":{"x":[{"value":6156393168},{"value":4690313216},{"value":123120},{"value":105553175149808},{"value":1},{"value":0},{"value":4322162688,"symbolLocation":0,"symbol":"dyld3::GradedArchs::arm64e_keysoff"},{"value":736},{"value":3733242449262280826},{"value":4321930044,"symbolLocation":0,"symbol":"invocation function for block in dyld4::JustInTimeLoader::makeJustInTimeLoaderDisk(Diagnostics&, dyld4::RuntimeState&, char const*, dyld4::Loader::LoadOptions const&, bool, unsigned int)"},{"value":0},{"value":1},{"value":105553175149810},{"value":0},{"value":10474471450},{"value":507},{"value":6},{"value":7701436843936651776},{"value":0},{"value":6156393168},{"value":105553175149808},{"value":1},{"value":4690313216},{"value":4322162688,"symbolLocation":0,"symbol":"dyld3::GradedArchs::arm64e_keysoff"},{"value":0},{"value":123120},{"value":4319956488},{"value":0},{"value":0}],"flavor":"ARM_THREAD_STATE64","lr":{"value":3331819303645965212},"cpsr":{"value":4096},"fp":{"value":6156390512},"sp":{"value":6156390096},"esr":{"value":2449473542,"description":"(Data Abort) byte read Translation fault"},"pc":{"value":4322043932,"matchesCrashFrame":1},"far":{"value":4690313216}},"queue":"com.apple.main-thread","frames":[{"imageOffset":223260,"symbol":"dyld3::MachOFile::compatibleSlice(Diagnostics&, void const*, unsigned long, char const*, dyld3::Platform, bool, dyld3::GradedArchs const&)","symbolLocation":76,"imageIndex":0},{"imageOffset":109468,"symbol":"invocation function for block in dyld4::JustInTimeLoader::makeJustInTimeLoaderDisk(Diagnostics&, dyld4::RuntimeState&, char const*, dyld4::Loader::LoadOptions const&, bool, unsigned int)","symbolLocation":96,"imageIndex":0},{"imageOffset":109468,"symbol":"invocation function for block in dyld4::JustInTimeLoader::makeJustInTimeLoaderDisk(Diagnostics&, dyld4::RuntimeState&, char const*, dyld4::Loader::LoadOptions const&, bool, unsigned int)","symbolLocation":96,"imageIndex":0},{"imageOffset":131020,"symbol":"dyld4::SyscallDelegate::withReadOnlyMappedFile(Diagnostics&, char const*, bool, void (void const*, unsigned long, bool, dyld4::FileID const&, char const*) block_pointer) const","symbolLocation":132,"imageIndex":0},{"imageOffset":109320,"symbol":"dyld4::JustInTimeLoader::makeJustInTimeLoaderDisk(Diagnostics&, dyld4::RuntimeState&, char const*, dyld4::Loader::LoadOptions const&, bool, unsigned int)","symbolLocation":204,"imageIndex":0},{"imageOffset":83952,"symbol":"invocation function for block in dyld4::Loader::getLoader(Diagnostics&, dyld4::RuntimeState&, char const*, dyld4::Loader::LoadOptions const&)","symbolLocation":1436,"imageIndex":0},{"imageOffset":81068,"symbol":"dyld4::Loader::forEachResolvedAtPathVar(dyld4::RuntimeState&, char const*, dyld4::Loader::LoadOptions const&, dyld4::ProcessConfig::PathOverrides::Type, bool&, void (char const*, dyld4::ProcessConfig::PathOverrides::Type, bool&) block_pointer)","symbolLocation":780,"imageIndex":0},{"imageOffset":80088,"symbol":"invocation function for block in dyld4::Loader::forEachPath(Diagnostics&, dyld4::RuntimeState&, char const*, dyld4::Loader::LoadOptions const&, void (char const*, dyld4::ProcessConfig::PathOverrides::Type, bool&) block_pointer)","symbolLocation":148,"imageIndex":0},{"imageOffset":40660,"symbol":"dyld4::ProcessConfig::PathOverrides::forEachPathVariant(char const*, dyld3::Platform, bool, bool&, void (char const*, dyld4::ProcessConfig::PathOverrides::Type, bool&) block_pointer) const","symbolLocation":672,"imageIndex":0},{"imageOffset":79916,"symbol":"dyld4::Loader::forEachPath(Diagnostics&, dyld4::RuntimeState&, char const*, dyld4::Loader::LoadOptions const&, void (char const*, dyld4::ProcessConfig::PathOverrides::Type, bool&) block_pointer)","symbolLocation":172,"imageIndex":0},{"imageOffset":81996,"symbol":"dyld4::Loader::getLoader(Diagnostics&, dyld4::RuntimeState&, char const*, dyld4::Loader::LoadOptions const&)","symbolLocation":864,"imageIndex":0},{"imageOffset":155432,"symbol":"invocation function for block in dyld4::APIs::dlopen_from(char const*, int, void*)","symbolLocation":248,"imageIndex":0},{"imageOffset":43880,"symbol":"dyld4::RuntimeState::withLoadersWriteLock(void () block_pointer)","symbolLocation":100,"imageIndex":0},{"imageOffset":154676,"symbol":"dyld4::APIs::dlopen_from(char const*, int, void*)","symbolLocation":472,"imageIndex":0},{"imageOffset":12864,"symbol":"g_module_open_full","symbolLocation":992,"imageIndex":1},{"imageOffset":410840,"symbol":"_priv_gst_plugin_load_file_for_registry","symbolLocation":432,"imageIndex":2},{"imageOffset":481252,"symbol":"gst_registry_scan_plugin_file","symbolLocation":248,"imageIndex":2},{"imageOffset":480212,"symbol":"gst_registry_scan_path_level","symbolLocation":988,"imageIndex":2},{"imageOffset":473392,"symbol":"gst_registry_scan_path_internal","symbolLocation":64,"imageIndex":2},{"imageOffset":475496,"symbol":"gst_update_registry","symbolLocation":896,"imageIndex":2},{"imageOffset":58788,"symbol":"init_post","symbolLocation":1148,"imageIndex":2},{"imageOffset":260132,"symbol":"g_option_context_parse","symbolLocation":1772,"imageIndex":3},{"imageOffset":59232,"symbol":"gst_init_check","symbolLocation":156,"imageIndex":2},{"imageOffset":59364,"symbol":"gst_init","symbolLocation":24,"imageIndex":2},{"imageOffset":786288,"symbol":"Rendering::init()","symbolLocation":808,"imageIndex":4},{"imageOffset":33980,"symbol":"main","symbolLocation":1024,"imageIndex":4},{"imageOffset":20620,"symbol":"start","symbolLocation":520,"imageIndex":0}]},{"id":10199029,"frames":[{"imageOffset":31776,"symbol":"kevent","symbolLocation":8,"imageIndex":5},{"imageOffset":1356336,"symbol":"asio::detail::kqueue_reactor::run(long, asio::detail::op_queue<asio::detail::scheduler_operation>&)","symbolLocation":292,"imageIndex":4},{"imageOffset":1355008,"symbol":"asio::detail::scheduler::do_run_one(asio::detail::conditionally_enabled_mutex::scoped_lock&, asio::detail::scheduler_thread_info&, std::__1::error_code const&)","symbolLocation":268,"imageIndex":4},{"imageOffset":1354112,"symbol":"asio::detail::scheduler::run(std::__1::error_code&)","symbolLocation":220,"imageIndex":4},{"imageOffset":1358768,"symbol":"ableton::platforms::asio::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog>::Context<ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::asio::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog> >::UdpSendExceptionHandler>(ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::asio::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog> >::UdpSendExceptionHandler)::'lambda'(asio::io_context&, ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::asio::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog> >::UdpSendExceptionHandler)::operator()(asio::io_context&, ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::asio::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog> >::UdpSendExceptionHandler) const","symbolLocation":136,"imageIndex":4},{"imageOffset":1358536,"symbol":"void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, ableton::platforms::asio::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog>::Context<ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::asio::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog> >::UdpSendExceptionHandler>(ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::asio::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog> >::UdpSendExceptionHandler)::'lambda'(asio::io_context&, ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::asio::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog> >::UdpSendExceptionHandler), std::__1::reference_wrapper<asio::io_context>, ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::asio::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog> >::UdpSendExceptionHandler> >(void*)","symbolLocation":48,"imageIndex":4},{"imageOffset":29292,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":6},{"imageOffset":8332,"symbol":"thread_start","symbolLocation":8,"imageIndex":6}]},{"id":10199030,"frames":[{"imageOffset":21104,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":5},{"imageOffset":30780,"symbol":"_pthread_cond_wait","symbolLocation":1236,"imageIndex":6},{"imageOffset":54048,"symbol":"std::__1::condition_variable::__do_timed_wait(std::__1::unique_lock<std::__1::mutex>&, std::__1::chrono::time_point<std::__1::chrono::system_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l> > >)","symbolLocation":100,"imageIndex":7},{"imageOffset":1470172,"symbol":"ableton::platforms::asio::LockFreeCallbackDispatcher<std::__1::function<void ()>, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000l> > >::run()","symbolLocation":304,"imageIndex":4},{"imageOffset":1469772,"symbol":"void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, ableton::platforms::asio::LockFreeCallbackDispatcher<std::__1::function<void ()>, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000l> > >::LockFreeCallbackDispatcher(std::__1::function<void ()>, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000l> >)::'lambda'()> >(void*)","symbolLocation":44,"imageIndex":4},{"imageOffset":29292,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":6},{"imageOffset":8332,"symbol":"thread_start","symbolLocation":8,"imageIndex":6}]},{"id":10199031,"frames":[{"imageOffset":50584,"symbol":"__select","symbolLocation":8,"imageIndex":5},{"imageOffset":1782932,"symbol":"SocketReceiveMultiplexer::Implementation::Run()","symbolLocation":1072,"imageIndex":4},{"imageOffset":1317784,"symbol":"Connection::listen()","symbolLocation":64,"imageIndex":4},{"imageOffset":1326876,"symbol":"void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (*)()> >(void*)","symbolLocation":44,"imageIndex":4},{"imageOffset":29292,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":6},{"imageOffset":8332,"symbol":"thread_start","symbolLocation":8,"imageIndex":6}]},{"id":10199032,"frames":[{"imageOffset":20588,"symbol":"__semwait_signal","symbolLocation":8,"imageIndex":5},{"imageOffset":61384,"symbol":"nanosleep","symbolLocation":220,"imageIndex":8},{"imageOffset":105208,"symbol":"std::__1::this_thread::sleep_for(std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l> > const&)","symbolLocation":84,"imageIndex":7},{"imageOffset":1319440,"symbol":"Connection::ask()","symbolLocation":1272,"imageIndex":4},{"imageOffset":1326876,"symbol":"void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (*)()> >(void*)","symbolLocation":44,"imageIndex":4},{"imageOffset":29292,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":6},{"imageOffset":8332,"symbol":"thread_start","symbolLocation":8,"imageIndex":6}]},{"id":10199033,"frames":[{"imageOffset":50584,"symbol":"__select","symbolLocation":8,"imageIndex":5},{"imageOffset":1782932,"symbol":"SocketReceiveMultiplexer::Implementation::Run()","symbolLocation":1072,"imageIndex":4},{"imageOffset":603944,"symbol":"void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (*)(UdpListeningReceiveSocket*), UdpListeningReceiveSocket*> >(void*)","symbolLocation":44,"imageIndex":4},{"imageOffset":29292,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":6},{"imageOffset":8332,"symbol":"thread_start","symbolLocation":8,"imageIndex":6}]},{"id":10199035,"frames":[{"imageOffset":8312,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":6}]},{"id":10199036,"frames":[{"imageOffset":8312,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":6}]},{"id":10199049,"frames":[{"imageOffset":8312,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":6}]},{"id":10199050,"frames":[{"imageOffset":8312,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":6}]},{"id":10199065,"name":"com.apple.NSEventThread","frames":[{"imageOffset":6380,"symbol":"semaphore_wait_trap","symbolLocation":8,"imageIndex":5},{"imageOffset":18256,"symbol":"_dispatch_sema4_wait","symbolLocation":28,"imageIndex":9},{"imageOffset":19960,"symbol":"_dispatch_semaphore_wait_slow","symbolLocation":132,"imageIndex":9},{"imageOffset":294716,"symbol":"_BeginEventReceiptOnThread","symbolLocation":200,"imageIndex":10},{"imageOffset":1761400,"symbol":"_NSEventThread","symbolLocation":60,"imageIndex":11},{"imageOffset":29292,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":6},{"imageOffset":8332,"symbol":"thread_start","symbolLocation":8,"imageIndex":6}]}],
  "usedImages" : [
  {
    "source" : "P",
    "arch" : "arm64e",
    "base" : 4321820672,
    "size" : 393216,
    "uuid" : "75627683-a780-32ad-ae34-cf86dd23a26b",
    "path" : "\/usr\/lib\/dyld",
    "name" : "dyld"
  },
  {
    "source" : "P",
    "arch" : "arm64",
    "base" : 4321492992,
    "size" : 16384,
    "uuid" : "d08203e3-eb53-3468-ad4c-6a95d9e34f71",
    "path" : "\/Applications\/vimix.app\/Contents\/Frameworks\/libgmodule-2.0.0.dylib",
    "name" : "libgmodule-2.0.0.dylib"
  },
  {
    "source" : "P",
    "arch" : "arm64",
    "base" : 4331028480,
    "size" : 884736,
    "uuid" : "110e31c0-743a-3e1f-ad00-5917d64dbcfd",
    "path" : "\/Applications\/vimix.app\/Contents\/Frameworks\/libgstreamer-1.0.0.dylib",
    "name" : "libgstreamer-1.0.0.dylib"
  },
  {
    "source" : "P",
    "arch" : "arm64",
    "base" : 4329881600,
    "size" : 933888,
    "uuid" : "75be80c6-4e1b-3382-b72c-29cafcfded31",
    "path" : "\/Applications\/vimix.app\/Contents\/Frameworks\/libglib-2.0.0.dylib",
    "name" : "libglib-2.0.0.dylib"
  },
  {
    "source" : "P",
    "arch" : "arm64",
    "base" : 4310482944,
    "CFBundleShortVersionString" : "0.7",
    "CFBundleIdentifier" : "net.mixable.tubetron",
    "size" : 7946240,
    "uuid" : "5879d8bc-1922-3f82-968a-6786e5d96946",
    "path" : "\/Applications\/vimix.app\/Contents\/MacOS\/vimix",
    "name" : "vimix",
    "CFBundleVersion" : "0.7.0"
  },
  {
    "source" : "P",
    "arch" : "arm64e",
    "base" : 7391563776,
    "size" : 229376,
    "uuid" : "d5cdde7e-7037-3a70-9ce4-9e3847da6ce0",
    "path" : "\/usr\/lib\/system\/libsystem_kernel.dylib",
    "name" : "libsystem_kernel.dylib"
  },
  {
    "source" : "P",
    "arch" : "arm64e",
    "base" : 7391793152,
    "size" : 53248,
    "uuid" : "f32ff902-ba43-30b0-ad43-a2a8a9ff69fe",
    "path" : "\/usr\/lib\/system\/libsystem_pthread.dylib",
    "name" : "libsystem_pthread.dylib"
  },
  {
    "source" : "P",
    "arch" : "arm64e",
    "base" : 7391043584,
    "size" : 421888,
    "uuid" : "ca366de6-c395-319a-b3ab-e22126d28394",
    "path" : "\/usr\/lib\/libc++.1.dylib",
    "name" : "libc++.1.dylib"
  },
  {
    "source" : "P",
    "arch" : "arm64e",
    "base" : 7390511104,
    "size" : 532480,
    "uuid" : "93fc2587-038e-31e1-b16b-369979e72cb1",
    "path" : "\/usr\/lib\/system\/libsystem_c.dylib",
    "name" : "libsystem_c.dylib"
  },
  {
    "source" : "P",
    "arch" : "arm64e",
    "base" : 7389954048,
    "size" : 290816,
    "uuid" : "035d23d9-4cb5-3759-9059-1f7878f89fee",
    "path" : "\/usr\/lib\/system\/libdispatch.dylib",
    "name" : "libdispatch.dylib"
  },
  {
    "source" : "P",
    "arch" : "arm64e",
    "base" : 7539507200,
    "CFBundleShortVersionString" : "2.1.1",
    "CFBundleIdentifier" : "com.apple.HIToolbox",
    "size" : 3358720,
    "uuid" : "7112f6f2-a77e-39db-83c8-f627b8a49df8",
    "path" : "\/System\/Library\/Frameworks\/Carbon.framework\/Versions\/A\/Frameworks\/HIToolbox.framework\/Versions\/A\/HIToolbox",
    "name" : "HIToolbox"
  },
  {
    "source" : "P",
    "arch" : "arm64e",
    "base" : 7437897728,
    "CFBundleShortVersionString" : "6.9",
    "CFBundleIdentifier" : "com.apple.AppKit",
    "size" : 15437824,
    "uuid" : "07bc3607-552a-3eb9-a941-4911c589dbc5",
    "path" : "\/System\/Library\/Frameworks\/AppKit.framework\/Versions\/C\/AppKit",
    "name" : "AppKit",
    "CFBundleVersion" : "2113.60.148"
  },
  {
    "size" : 0,
    "source" : "A",
    "base" : 0,
    "uuid" : "00000000-0000-0000-0000-000000000000"
  }
],
  "sharedCache" : {
  "base" : 7388495872,
  "size" : 3144712192,
  "uuid" : "f8ab76fb-504c-32dd-a5db-15a1f2f028f8"
},
  "vmSummary" : "ReadOnly portion of Libraries: Total=832.7M resident=0K(0%) swapped_out_or_unallocated=832.7M(100%)\nWritable regions: Total=1.5G written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=1.5G(100%)\n\n                                VIRTUAL   REGION \nREGION TYPE                        SIZE    COUNT (non-coalesced) \n===========                     =======  ======= \nAccelerate framework               128K        1 \nActivity Tracing                   256K        1 \nCG backing stores                 3520K        4 \nColorSync                          544K       24 \nCoreAnimation                       16K        1 \nCoreGraphics                        16K        1 \nFoundation                          16K        1 \nKernel Alloc Once                   32K        1 \nMALLOC                           279.3M       48 \nMALLOC guard page                  192K       10 \nMALLOC_MEDIUM (reserved)         840.0M        7         reserved VM address space (unallocated)\nMALLOC_NANO (reserved)           384.0M        1         reserved VM address space (unallocated)\nSTACK GUARD                       56.2M       11 \nStack                             13.3M       11 \nVM_ALLOCATE                        304K       16 \n__AUTH                            1783K      149 \n__AUTH_CONST                      9262K      290 \n__CTF                               756        1 \n__DATA                            8404K      297 \n__DATA_CONST                      10.5M      311 \n__DATA_DIRTY                       602K      102 \n__FONT_DATA                          4K        1 \n__GLSLBUILTINS                    5176K        1 \n__LINKEDIT                       582.2M       25 \n__OBJC_CONST                      1260K      125 \n__OBJC_RO                         83.0M        1 \n__OBJC_RW                         3168K        1 \n__TEXT                           250.5M      326 \n__UNICODE                          592K        1 \ndyld private memory               1024K        1 \nmapped file                       78.3M       20 \nshared memory                      848K       14 \n===========                     =======  ======= \nTOTAL                              2.6G     1804 \nTOTAL, minus reserved VM space     1.4G     1804 \n",
  "legacyInfo" : {
  "threadTriggered" : {
    "queue" : "com.apple.main-thread"
  }
},
  "trialInfo" : {
  "rollouts" : [
    {
      "rolloutId" : "5ffde50ce2aacd000d47a95f",
      "factorPackIds" : {

      },
      "deploymentId" : 240000223
    },
    {
      "rolloutId" : "60186475825c62000ccf5450",
      "factorPackIds" : {

      },
      "deploymentId" : 240000026
    }
  ],
  "experiments" : [

  ]
}
}

Model: MacBookPro18,3, BootROM 7459.141.1, proc 10:8:2 processors, 32 GB, SMC 
Graphics: Apple M1 Pro, Apple M1 Pro, Built-In
Display: Color LCD, 3024 x 1964 Retina, Main, MirrorOff, Online
Memory Module: LPDDR5
AirPort: Wi-Fi, wl0: Apr  6 2022 05:55:54 version 20.90.45.0.8.7.118 FWID 01-e7138ff2
Bluetooth: Version (null), 0 services, 0 devices, 0 incoming serial ports
Network Service: Wi-Fi, AirPort, en0
USB Device: USB31Bus
USB Device: USB31Bus
USB Device: USB31Bus
Thunderbolt Bus: MacBook Pro, Apple Inc.
Thunderbolt Bus: MacBook Pro, Apple Inc.
Thunderbolt Bus: MacBook Pro, Apple Inc.

@nzoschke
Copy link
Author

In console I see gst-plugin-scanner can't run due to code signing. I think the main app is actually ok.

-------------------------------------
Translated Report (Full Report Below)
-------------------------------------

Incident Identifier: F26D11D6-E240-4E64-923B-42C94E85B59B
CrashReporter Key:   FD4D5C46-C80B-544B-F3E8-85C817BF7C34
Hardware Model:      MacBookPro18,3
Process:             gst-plugin-scanner [92286]
Path:                /Applications/vimix.app/Contents/Resources/gst-plugin-scanner
Identifier:          gst-plugin-scanner
Version:             ???
Code Type:           ARM-64 (Native)
Role:                Unspecified
Parent Process:      zsh [81571]
Coalition:           com.apple.Terminal [35269]
Responsible Process: Terminal [42713]

Date/Time:           2022-11-26 10:14:02.9109 -0800
Launch Time:         2022-11-26 10:14:02.9078 -0800
OS Version:          macOS 12.5.1 (21G83)
Release Type:        User
Report Version:      104

Exception Type:  EXC_BAD_ACCESS (SIGKILL (Code Signature Invalid))
Exception Subtype: UNKNOWN_0x32 at 0x00000001046f8000
Exception Codes: 0x0000000000000032, 0x00000001046f8000
VM Region Info: 0x1046f8000 is in 0x1046f8000-0x1046fc000;  bytes after start: 0  bytes before end: 16383
      REGION TYPE                    START - END         [ VSIZE] PRT/MAX SHRMOD  REGION DETAIL
      UNUSED SPACE AT START
--->  mapped file                 1046f8000-1046fc000    [   16K] r-x/r-x SM=COW  ...t_id=8cf21dfb
      mapped file                 1046fc000-104700000    [   16K] rw-/rw- SM=COW  ...t_id=8cf21dfb
Exception Note:  EXC_CORPSE_NOTIFY
Termination Reason: CODESIGNING 2 

Highlighted by Thread:  0

Backtrace not available

No thread state (register information) available

Binary Images:
               0x0 - 0xffffffffffffffff ??? (*) <00000000-0000-0000-0000-000000000000> ???

Error Formulating Crash Report:
_dyld_process_info_create failed with 6
dyld_process_snapshot_get_shared_cache failed
Failed to create CSSymbolicatorRef - corpse still valid ¯\_(ツ)_/¯

EOF

-----------
Full Report
-----------

{"app_name":"gst-plugin-scanner","timestamp":"2022-11-26 10:14:07.00 -0800","app_version":"","slice_uuid":"d6fafa99-fd25-3787-92c9-9a1c01b70404","build_version":"","platform":0,"share_with_app_devs":0,"is_first_party":1,"bug_type":"309","os_version":"macOS 12.5.1 (21G83)","incident_id":"F26D11D6-E240-4E64-923B-42C94E85B59B","name":"gst-plugin-scanner"}
{
  "uptime" : 680000,
  "procLaunch" : "2022-11-26 10:14:02.9078 -0800",
  "procRole" : "Unspecified",
  "version" : 2,
  "userID" : 501,
  "deployVersion" : 210,
  "modelCode" : "MacBookPro18,3",
  "procStartAbsTime" : 16415471175523,
  "coalitionID" : 35269,
  "osVersion" : {
    "train" : "macOS 12.5.1",
    "build" : "21G83",
    "releaseType" : "User"
  },
  "captureTime" : "2022-11-26 10:14:02.9109 -0800",
  "incident" : "F26D11D6-E240-4E64-923B-42C94E85B59B",
  "bug_type" : "309",
  "pid" : 92286,
  "procExitAbsTime" : 16415471241956,
  "translated" : false,
  "cpuType" : "ARM-64",
  "procName" : "gst-plugin-scanner",
  "procPath" : "\/Applications\/vimix.app\/Contents\/Resources\/gst-plugin-scanner",
  "parentProc" : "zsh",
  "parentPid" : 81571,
  "coalitionName" : "com.apple.Terminal",
  "crashReporterKey" : "FD4D5C46-C80B-544B-F3E8-85C817BF7C34",
  "responsiblePid" : 42713,
  "responsibleProc" : "Terminal",
  "wakeTime" : 94455,
  "sleepWakeUUID" : "0ACEB1ED-886C-4C6E-827D-49800C9AC825",
  "sip" : "enabled",
  "vmRegionInfo" : "0x1046f8000 is in 0x1046f8000-0x1046fc000;  bytes after start: 0  bytes before end: 16383\n      REGION TYPE                    START - END         [ VSIZE] PRT\/MAX SHRMOD  REGION DETAIL\n      UNUSED SPACE AT START\n--->  mapped file                 1046f8000-1046fc000    [   16K] r-x\/r-x SM=COW  ...t_id=8cf21dfb\n      mapped file                 1046fc000-104700000    [   16K] rw-\/rw- SM=COW  ...t_id=8cf21dfb",
  "isCorpse" : 1,
  "exception" : {"codes":"0x0000000000000032, 0x00000001046f8000","rawCodes":[50,4369383424],"type":"EXC_BAD_ACCESS","signal":"SIGKILL (Code Signature Invalid)","subtype":"UNKNOWN_0x32 at 0x00000001046f8000"},
  "termination" : {"namespace":"CODESIGNING","flags":0,"code":2},
  "vmregioninfo" : "0x1046f8000 is in 0x1046f8000-0x1046fc000;  bytes after start: 0  bytes before end: 16383\n      REGION TYPE                    START - END         [ VSIZE] PRT\/MAX SHRMOD  REGION DETAIL\n      UNUSED SPACE AT START\n--->  mapped file                 1046f8000-1046fc000    [   16K] r-x\/r-x SM=COW  ...t_id=8cf21dfb\n      mapped file                 1046fc000-104700000    [   16K] rw-\/rw- SM=COW  ...t_id=8cf21dfb",
  "extMods" : {"caller":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"system":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"targeted":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"warnings":0},
  "usedImages" : [
  {
    "size" : 0,
    "source" : "A",
    "base" : 0,
    "uuid" : "00000000-0000-0000-0000-000000000000"
  }
],
  "legacyInfo" : {
  "threadHighlighted" : 0
},
  "trialInfo" : {
  "rollouts" : [
    {
      "rolloutId" : "5ffde50ce2aacd000d47a95f",
      "factorPackIds" : {

      },
      "deploymentId" : 240000223
    },
    {
      "rolloutId" : "60186475825c62000ccf5450",
      "factorPackIds" : {

      },
      "deploymentId" : 240000026
    }
  ],
  "experiments" : [

  ]
},
  "reportNotes" : [
  "_dyld_process_info_create failed with 6",
  "dyld_process_snapshot_get_shared_cache failed",
  "Failed to create CSSymbolicatorRef - corpse still valid ¯\\_(ツ)_\/¯"
]
}

@nzoschke
Copy link
Author

Probably need to sign every dylib and binary:

https://stackoverflow.com/a/71753248

@nzoschke
Copy link
Author

Holy cow I got something working!! By uncommenting more fixup stuff:

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 5d2926a..318eefd 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -205,25 +205,20 @@ IF(APPLE)
     install(DIRECTORY "${PKG_GSTREAMER_BASE_PLUGIN_DIR}" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
     install(DIRECTORY "${PKG_GSTREAMER_BAD_PLUGIN_DIR}" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
 
-    install(DIRECTORY "/usr/local/Cellar/gst-plugins-good/1.18.4/lib/gstreamer-1.0" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
-    install(DIRECTORY "/usr/local/Cellar/gst-plugins-ugly/1.18.4_1/lib/gstreamer-1.0" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
-    install(DIRECTORY "/usr/local/Cellar/gst-libav/1.18.4/lib/gstreamer-1.0" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
-
-    # install locally recompiled & installed gst-plugins (because not included in brew package)
-    install(FILES   "/usr/local/lib/gstreamer-1.0/libgstapplemedia.dylib"
-                    "/usr/local/lib/gstreamer-1.0/libgstde265.dylib"
-                    "/usr/local/lib/gstreamer-1.0/libgstx265.dylib"
-            DESTINATION "${plugin_dest_dir}/gstreamer-1.0" COMPONENT Runtime)
+    install(DIRECTORY "/opt/homebrew/Cellar/gst-plugins-good/1.20.3_2/lib/gstreamer-1.0" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
+    install(DIRECTORY "/opt/homebrew/Cellar/gst-plugins-ugly/1.20.3_1/lib/gstreamer-1.0" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
+    install(DIRECTORY "/opt/homebrew/Cellar/gst-plugins-bad/1.20.3_1/lib/gstreamer-1.0" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
+    install(DIRECTORY "/opt/homebrew/Cellar/gst-libav/1.20.3/lib/gstreamer-1.0" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
 
     # install frei0r plugins (dependencies of gstreamer-1.0/libgstfrei0r.dylib plugin)
-    install(FILES "/usr/local/Cellar/frei0r/1.7.0/lib/frei0r-1/lissajous0r.so"
-                  "/usr/local/Cellar/frei0r/1.7.0/lib/frei0r-1/rgbnoise.so"
+    install(FILES "/opt/homebrew/Cellar/frei0r/1.8.0/lib/frei0r-1/lissajous0r.so"
+                  "/opt/homebrew/Cellar/frei0r/1.8.0/lib/frei0r-1/rgbnoise.so"
             DESTINATION "${plugin_dest_dir}/frei0r-1" COMPONENT Runtime)
 
 
     # ICU DATA LIB GST dependency : undocumented and hacked here : seems to work
 #    install(FILES "${ICU_LINK_LIBRARIES}" DESTINATION "${plugin_dest_dir}/gstreamer-1.0" COMPONENT Runtime)
-    install(FILES "/usr/local/Cellar/icu4c/69.1/lib/libicudata.69.1.dylib" DESTINATION "${plugin_dest_dir}/gstreamer-1.0" RENAME "libicudata.69.dylib" COMPONENT Runtime)
+    install(FILES "/opt/homebrew/Cellar/icu4c/71.1/lib/libicudata.71.1.dylib" DESTINATION "${plugin_dest_dir}/gstreamer-1.0" RENAME "libicudata.69.dylib" COMPONENT Runtime)
     message(STATUS "install  ${ICU_LINK_LIBRARIES} from ${ICU_LIBRARY_DIRS}")
 
     # package runtime fixup bundle
@@ -238,9 +233,9 @@ IF(APPLE)
             COMPONENT Runtime
     )
 
-    set(APPLE_CODESIGN_IDENTITY "" CACHE STRING "")
-    string(LENGTH "${APPLE_CODESIGN_IDENTITY}" APPLE_CODESIGN_IDENTITY_LENGHT)
-    if( ${APPLE_CODESIGN_IDENTITY_LENGHT} LESS 40 )
+    set(APPLE_CODESIGN_IDENTITY "9B6580623287FF9060A4EDD94E641D23C9CD570F")
+    string(LENGTH "${APPLE_CODESIGN_IDENTITY}" APPLE_CODESIGN_IDENTITY_LENGTH)
+    if( ${APPLE_CODESIGN_IDENTITY_LENGTH} LESS 40 )
         message(STATUS "Not signing bundle. Specify APPLE_CODESIGN_IDENTITY to cmake before running cpack to sign")
     else()
         install(CODE "
@@ -254,14 +249,14 @@ IF(APPLE)
         )
     endif()
 
-#    # package runtime fixup bundle and codesign
-#    set(BUNDLE_NAME "vimix.app")
-#    set(BUNDLE_LIBS_DIR "${plugin_dest_dir}/gstreamer-1.0")
-#    set(BUNDLE_DIRS "${ICU_LIBRARY_DIRS}")
-#    set(APPLE_CODESIGN_ENTITLEMENTS "${CMAKE_CURRENT_SOURCE_DIR}/osx/entitlements.plist")
+   # package runtime fixup bundle and codesign
+   set(BUNDLE_NAME "vimix.app")
+   set(BUNDLE_LIBS_DIR "${plugin_dest_dir}/gstreamer-1.0")
+   set(BUNDLE_DIRS "${ICU_LIBRARY_DIRS}")
+   set(APPLE_CODESIGN_ENTITLEMENTS "${CMAKE_SOURCE_DIR}/osx/entitlements.plist")
 
-#    configure_file(cmake/modules/BundleInstall.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/BundleInstall.cmake" @ONLY)
-#    install(SCRIPT "${CMAKE_CURRENT_BINARY_DIR}/BundleInstall.cmake" COMPONENT Runtime)
+   configure_file("${CMAKE_SOURCE_DIR}/cmake/modules/BundleInstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/BundleInstall.cmake" @ONLY)
+   install(SCRIPT "${CMAKE_CURRENT_BINARY_DIR}/BundleInstall.cmake" COMPONENT Runtime)
 
 ELSE(APPLE)

A lot of gstreamer stuff including camera capture works! However screen recording still doesn't work :(

0001  Refusing stream requests to vimix@studio.attlocal.net.0. No streaming ongoing.
0002  Metronome Ableton Link Enabled
0003  Metronome Ableton Link start & stop sync Enabled
0004  Found Gstreamer plugins in /Applications/vimix.app/Contents/Resources/gstreamer-1.0
0005  Found Frei0r plugins in /Applications/vimix.app/Contents/Resources/frei0r-1
0006  Found the following GPU decoding plugin(s):
0007  1. vtdec_hw
0008  OSC: Loaded 1 translation.
0009  OSC: Listening to UDP messages sent to 192.168.1.161:7000
0010  Font size 20
0011  New session ready.
0012   Session '' loaded with no source.
0013  Device Screen capture selected its optimal config: video/x-raw BGRA 3024x1964@30.0fps
0014  Stream 1713630773059291 Opened 'avfvideosrc capture-screen=true ! video/x-raw,format=BGRA,framerate=30/1,width=3024,height=1964 ! videoconvert ! video/x-raw,format=RGB ! queue max-size-buffers=3 ! videoconvert ! appsink name=sink' (3024 x 1964)
0015   Warning - Stream 1713630773059291 Failed to initialize.

@nzoschke
Copy link
Author

nzoschke commented Nov 26, 2022

One thing that is weird is that the app is always asking for OS Permission to record the screen, even though I've given it.

Edit: it stopped prompting but still having problems.

@nzoschke
Copy link
Author

These work with my homebrew install, so still something inside vimix I suspect...

gst-launch-1.0 avfvideosrc capture-screen=true ! video/x-raw,format=BGRA,framerate=30/1,width=3024,height=1964 ! videoconvert ! video/x-raw,format=RGB ! queue max-size-buffers=3 ! videoconvert ! autovideosink

gst-launch-1.0 avfvideosrc capture-screen=true ! video/x-raw,format=BGRA,framerate=30/1,width=3024,height=1964 ! videoconvert ! video/x-raw,format=RGB ! queue max-size-buffers=3 ! videoconvert ! appsink name=sink

@nzoschke
Copy link
Author

IT WORKS!!

Screen Shot 2022-11-26 at 10 54 09 AM

Somehow I have two vimixes in the permissions settings. Enabling both got it to work!

Screen Shot 2022-11-26 at 10 54 46 AM

@brunoherbelin
Copy link
Owner

Youhou ! Well done !
I must admit I also always find it quite painful to build packages for OSX...

Nota Bene: you do not have to build the bundle to run vimix (i.e. run cpack) : after build, the vimix binary itself can be launched. This may explain why you have to instances (one is the program after compilation, the other is the bundle).

But This is a very important and good news for vimix: the gst plugin for applemedia works under recent OSX with M2 !! excellent!

Thanks for sharing the CMakeLists that works for you : I could use this as inspiration for making things more generic.

@edbneutron
Copy link

Hi guys,
I am also using a macbook Pro M1 an tried to build it without luck... I found this thread and was wondering if you could share the required files to build it on arm64. I used GLMixer before for a performance at a party. I am just a hobbyist VJ, but liked this program so much. I would love to have vimix running on my macbook pro. Thank You

@brunoherbelin
Copy link
Owner

Thanks for your interest: I will investigate to build on OSX Sonoma for M1-3 computers : for now indeed, only the binaries built for OSX 11 are available (https://github.com/brunoherbelin/vimix/releases)

@brunoherbelin
Copy link
Owner

Update: The recent update should fix the problem with compiling on OSX with Apple Silicon.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants