Skip to content

Commit

Permalink
UI: Add support for TEB/GoLiveApi on Apple Silicon
Browse files Browse the repository at this point in the history
  • Loading branch information
dsaedtler committed Oct 22, 2024
1 parent d9b1b82 commit 467ade6
Show file tree
Hide file tree
Showing 2 changed files with 93 additions and 1 deletion.
90 changes: 90 additions & 0 deletions UI/system-info-macos.mm
Original file line number Diff line number Diff line change
@@ -1,6 +1,96 @@
#include "system-info.hpp"

#ifdef __aarch64__
#include <util/platform.h>

#include <sys/types.h>
#include <sys/sysctl.h>
#import <Foundation/Foundation.h>
#import <Foundation/NSProcessInfo.h>

static std::optional<std::string> getCpuName()
{
std::string name;
size_t size;
int ret;

ret = sysctlbyname("machdep.cpu.brand_string", NULL, &size, NULL, 0);
if (ret != 0)
return std::nullopt;

name.resize(size);

ret = sysctlbyname("machdep.cpu.brand_string", name.data(), &size, NULL, 0);
if (ret != 0)
return std::nullopt;

// Remove null terminator
name.resize(name.find('\0'));
return name;
}

// Apple Silicon Macs have a single SoC that contains both GPU and CPU, the same information is valid for bith.
static void fillSoCInfo(GoLiveApi::Capabilities &capabilities)
{
capabilities.cpu.name = getCpuName();
// Getting the frequency is not supported on Apple Silicon
capabilities.cpu.physical_cores = os_get_physical_cores();
capabilities.cpu.logical_cores = os_get_logical_cores();

capabilities.memory.total = os_get_sys_total_size();
capabilities.memory.free = os_get_sys_free_size();

// Apple Silicon does not support dGPUs, there's only going to be one (the SoC).
GoLiveApi::Gpu gpu;
gpu.model = capabilities.cpu.name.value_or("Unknown");
gpu.vendor_id = 0x106b; // Always Apple
gpu.device_id = 0; // Always 0 for Apple Silicon

std::vector<GoLiveApi::Gpu> gpus;
gpus.push_back(std::move(gpu));
capabilities.gpu = gpus;
}

static void fillSystemInfo(GoLiveApi::System &sysinfo)
{
NSProcessInfo *procInfo = [NSProcessInfo processInfo];
NSOperatingSystemVersion versionObj = [procInfo operatingSystemVersion];

sysinfo.name = "macOS";
sysinfo.bits = 64; // 32-bit macOS is long deprecated.
sysinfo.version = [[procInfo operatingSystemVersionString] UTF8String];

switch (versionObj.majorVersion) {
case 11:
sysinfo.release = "Big Sur";
break;
case 12:
sysinfo.release = "Monterey";
break;
case 13:
sysinfo.release = "Ventura";
break;
case 14:
sysinfo.release = "Sonoma";
break;
case 15:
sysinfo.release = "Sequoia";
break;
default:
sysinfo.release = "unknown";
}

sysinfo.arm = true;
sysinfo.armEmulation = false;
}
#endif

void system_info(GoLiveApi::Capabilities &capabilities)
{
#ifdef __aarch64__
fillSoCInfo(capabilities);
fillSystemInfo(capabilities.system);
#else
UNUSED_PARAMETER(capabilities);
#endif
}
4 changes: 3 additions & 1 deletion UI/window-basic-settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5616,7 +5616,9 @@ void OBSBasicSettings::UpdateMultitrackVideo()
ui->enableMultitrackVideo->setChecked(false);
}

#ifndef _WIN32
// Enhanced Broadcasting works on Windows and Apple Silicon Macs.
// For other OS variants, only enable the GUI controls if developer mode was invoked.
#if !defined(_WIN32) && !(defined(__APPLE__) && defined(__aarch64__))
available = available && MultitrackVideoDeveloperModeEnabled();
#endif

Expand Down

0 comments on commit 467ade6

Please sign in to comment.