brunoherbelin / vimix

Live Video Mixer
GNU General Public License v3.0
260 stars 25 forks source link

Trouble building on OS X / M1 Pro #58

Open nzoschke opened 1 year ago

nzoschke commented 1 year ago

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, std::__1::allocator > const&) in BaseToolkit.cpp.o "icu_71::UnicodeString::UnicodeString(char const*)", referenced from: BaseToolkit::transliterate(std::__1::basic_string, std::__1::allocator > const&) in BaseToolkit.cpp.o "icu_71::UnicodeString::~UnicodeString()", referenced from: BaseToolkit::transliterate(std::__1::basic_string, std::__1::allocator > const&) in BaseToolkit.cpp.o "icu_71::Transliterator::createInstance(icu_71::UnicodeString const&, UTransDirection, UErrorCode&)", referenced from: BaseToolkit::transliterate(std::__1::basic_string, std::__1::allocator > const&) in BaseToolkit.cpp.o "icu_71::operator<<(std::__1::basic_ostream >&, icu_71::UnicodeString const&)", referenced from: BaseToolkit::transliterate(std::__1::basic_string, std::__1::allocator > const&) in BaseToolkit.cpp.o "__gst_fraction_range_type", referenced from: Device::getDeviceConfigs(std::__1::basic_string, std::__1::allocator > 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, std::__1::allocator > const&) in DeviceSource.cpp.o VideoBroadcast::init(_GstCaps*) in VideoBroadcast.cpp.o MultiFileRecorder::start_record(std::__1::basic_string, std::__1::allocator > const&) in MultiFileRecorder.cpp.o "__gst_value_list_type", referenced from: Device::getDeviceConfigs(std::__1::basic_string, std::__1::allocator > 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, std::__1::allocator > const&) in MediaPlayer.cpp.o MediaPlayer::execute_open() in MediaPlayer.cpp.o Device::getDeviceConfigs(std::__1::basic_string, std::__1::allocator > 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, std::__1::allocator > const&) in MediaPlayer.cpp.o Device::getDeviceConfigs(std::__1::basic_string, std::__1::allocator > 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, std::__1::allocator > const&, unsigned int, unsigned int) in Stream.cpp.o Stream::execute_open() in Stream.cpp.o MediaPlayer::UriDiscoverer(std::__1::basic_string, std::__1::allocator > const&) in MediaPlayer.cpp.o ... "_g_type_check_instance_is_a", referenced from: MediaPlayer::UriDiscoverer(std::__1::basic_string, std::__1::allocator > 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, std::__1::allocator > 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, std::__1::allocator > 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, std::__1::allocator > 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, std::__1::allocator > 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, std::__1::allocator > 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, std::__1::allocator > 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, std::__1::allocator > 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, std::__1::allocator > 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, std::__1::allocator > 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, std::__1::allocator > 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, std::__1::allocator > 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, std::__1::allocator > 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, std::__1::allocator > 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, std::__1::allocator > 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, std::__1::allocator > 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, std::__1::allocator > 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, std::__1::allocator > 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, std::__1::allocator > 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, std::__1::allocator > 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, std::__1::allocator > 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, std::__1::allocator > const&) in MultiFileRecorder.cpp.o "_gst_buffer_unmap", referenced from: FrameGrabbing::grabFrame(FrameBuffer*) in FrameGrabber.cpp.o MultiFileRecorder::add_image(std::__1::basic_string, std::__1::allocator > 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, std::__1::allocator > const&) in DeviceSource.cpp.o "_gst_caps_get_structure", referenced from: VideoStreamer::init(_GstCaps*) in Streamer.cpp.o Device::getDeviceConfigs(std::__1::basic_string, std::__1::allocator > 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, std::__1::allocator > 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, std::__1::allocator > const&) in MediaPlayer.cpp.o "_gst_discoverer_info_get_duration", referenced from: MediaPlayer::UriDiscoverer(std::__1::basic_string, std::__1::allocator > const&) in MediaPlayer.cpp.o "_gst_discoverer_info_get_misc", referenced from: MediaPlayer::UriDiscoverer(std::__1::basic_string, std::__1::allocator > const&) in MediaPlayer.cpp.o "_gst_discoverer_info_get_result", referenced from: MediaPlayer::UriDiscoverer(std::__1::basic_string, std::__1::allocator > const&) in MediaPlayer.cpp.o "_gst_discoverer_info_get_seekable", referenced from: MediaPlayer::UriDiscoverer(std::__1::basic_string, std::__1::allocator > const&) in MediaPlayer.cpp.o "_gst_discoverer_info_get_video_streams", referenced from: MediaPlayer::UriDiscoverer(std::__1::basic_string, std::__1::allocator > const&) in MediaPlayer.cpp.o "_gst_discoverer_new", referenced from: MediaPlayer::UriDiscoverer(std::__1::basic_string, std::__1::allocator > const&) in MediaPlayer.cpp.o "_gst_discoverer_stream_info_get_caps", referenced from: MediaPlayer::UriDiscoverer(std::__1::basic_string, std::__1::allocator > const&) in MediaPlayer.cpp.o "_gst_discoverer_stream_info_get_tags", referenced from: MediaPlayer::UriDiscoverer(std::__1::basic_string, std::__1::allocator > const&) in MediaPlayer.cpp.o "_gst_discoverer_stream_info_list_free", referenced from: MediaPlayer::UriDiscoverer(std::__1::basic_string, std::__1::allocator > const&) in MediaPlayer.cpp.o "_gst_discoverer_video_info_get_bitrate", referenced from: MediaPlayer::UriDiscoverer(std::__1::basic_string, std::__1::allocator > const&) in MediaPlayer.cpp.o "_gst_discoverer_video_info_get_framerate_denom", referenced from: MediaPlayer::UriDiscoverer(std::__1::basic_string, std::__1::allocator > const&) in MediaPlayer.cpp.o "_gst_discoverer_video_info_get_framerate_num", referenced from: MediaPlayer::UriDiscoverer(std::__1::basic_string, std::__1::allocator > const&) in MediaPlayer.cpp.o "_gst_discoverer_video_info_get_height", referenced from: MediaPlayer::UriDiscoverer(std::__1::basic_string, std::__1::allocator > const&) in MediaPlayer.cpp.o "_gst_discoverer_video_info_get_par_denom", referenced from: MediaPlayer::UriDiscoverer(std::__1::basic_string, std::__1::allocator > const&) in MediaPlayer.cpp.o "_gst_discoverer_video_info_get_par_num", referenced from: MediaPlayer::UriDiscoverer(std::__1::basic_string, std::__1::allocator > const&) in MediaPlayer.cpp.o "_gst_discoverer_video_info_get_type", referenced from: MediaPlayer::UriDiscoverer(std::__1::basic_string, std::__1::allocator > const&) in MediaPlayer.cpp.o "_gst_discoverer_video_info_get_width", referenced from: MediaPlayer::UriDiscoverer(std::__1::basic_string, std::__1::allocator > const&) in MediaPlayer.cpp.o "_gst_discoverer_video_info_is_image", referenced from: MediaPlayer::UriDiscoverer(std::__1::basic_string, std::__1::allocator > const&) in MediaPlayer.cpp.o "_gst_discoverer_video_info_is_interlaced", referenced from: MediaPlayer::UriDiscoverer(std::__1::basic_string, std::__1::allocator > const&) in MediaPlayer.cpp.o "_gst_element_factory_create", referenced from: GstToolkit::has_feature(std::__1::basic_string, std::__1::allocator >) in GstToolkit.cpp.o "_gst_element_factory_find", referenced from: GstToolkit::enable_feature(std::__1::basic_string, std::__1::allocator >, bool) in GstToolkit.cpp.o GstToolkit::has_feature(std::__1::basic_string, std::__1::allocator >) 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, std::__1::allocator > 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, std::__1::allocator > const&) in MultiFileRecorder.cpp.o "_gst_element_iterate_src_pads", referenced from: Device::getDeviceConfigs(std::__1::basic_string, std::__1::allocator > 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::allocator >, 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, std::__1::allocator > 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, std::__1::allocator >) 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, std::__1::allocator > 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, std::__1::allocator > 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, std::__1::allocator > 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, std::__1::allocator > const&) in DeviceSource.cpp.o "_gst_pad_query_caps", referenced from: Device::getDeviceConfigs(std::__1::basic_string, std::__1::allocator > 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, std::__1::allocator > 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, std::__1::allocator > const&) in DeviceSource.cpp.o ... "_gst_pb_utils_get_codec_description", referenced from: MediaPlayer::UriDiscoverer(std::__1::basic_string, std::__1::allocator > 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, std::__1::allocator > 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, std::__1::allocator > 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, std::__1::allocator >) in GstToolkit.cpp.o GstToolkit::enable_feature(std::__1::basic_string, std::__1::allocator >, bool) in GstToolkit.cpp.o "_gst_plugin_feature_list_free", referenced from: GstToolkit::all_plugin_features(std::__1::basic_string, std::__1::allocator >) in GstToolkit.cpp.o "_gst_plugin_feature_set_rank", referenced from: GstToolkit::enable_feature(std::__1::basic_string, std::__1::allocator >, 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, std::__1::allocator >, 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, std::__1::allocator >) in GstToolkit.cpp.o GstToolkit::enable_feature(std::__1::basic_string, std::__1::allocator >, bool) in GstToolkit.cpp.o GstToolkit::has_feature(std::__1::basic_string, std::__1::allocator >) 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, std::__1::allocator >) 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, std::__1::allocator > const&) in DeviceSource.cpp.o "_gst_structure_get_name", referenced from: Device::getDeviceConfigs(std::__1::basic_string, std::__1::allocator > 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, std::__1::allocator > const&) in DeviceSource.cpp.o "_gst_structure_has_field", referenced from: VideoStreamer::init(_GstCaps*) in Streamer.cpp.o Device::getDeviceConfigs(std::__1::basic_string, std::__1::allocator > const&) in DeviceSource.cpp.o "_gst_structure_to_string", referenced from: MediaPlayer::UriDiscoverer(std::__1::basic_string, std::__1::allocator > const&) in MediaPlayer.cpp.o "_gst_tag_list_get_string", referenced from: MediaPlayer::UriDiscoverer(std::__1::basic_string, std::__1::allocator > const&) in MediaPlayer.cpp.o "_gst_util_fraction_to_double", referenced from: Device::getDeviceConfigs(std::__1::basic_string, std::__1::allocator > 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, std::__1::allocator > const&) in DeviceSource.cpp.o "_gst_value_get_fraction_numerator", referenced from: Device::getDeviceConfigs(std::__1::basic_string, std::__1::allocator > const&) in DeviceSource.cpp.o "_gst_value_get_fraction_range_max", referenced from: Device::getDeviceConfigs(std::__1::basic_string, std::__1::allocator > const&) in DeviceSource.cpp.o "_gst_value_list_get_size", referenced from: Device::getDeviceConfigs(std::__1::basic_string, std::__1::allocator > const&) in DeviceSource.cpp.o "_gst_value_list_get_value", referenced from: Device::getDeviceConfigs(std::__1::basic_string, std::__1::allocator > const&) in DeviceSource.cpp.o "_gst_value_serialize", referenced from: Device::getDeviceConfigs(std::__1::basic_string, std::__1::allocator > 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, std::__1::allocator > 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 commented 1 year ago

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 commented 1 year ago

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 commented 1 year ago

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 commented 1 year ago

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

nzoschke commented 1 year ago

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 commented 1 year ago

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 commented 1 year ago

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 commented 1 year ago

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 commented 1 year ago

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

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

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 commented 1 year ago

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

nzoschke commented 1 year ago

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 commented 1 year ago

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 commented 1 year ago

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 commented 1 year ago

Probably need to sign every dylib and binary:

https://stackoverflow.com/a/71753248

nzoschke commented 1 year ago

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 commented 1 year ago

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 commented 1 year ago

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 commented 1 year ago

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 commented 1 year ago

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.