mirror of
https://github.com/libretro/RetroArch.git
synced 2025-02-09 19:02:37 +00:00
(OSX) Support video_monitor_index and audio_device settings
This commit is contained in:
parent
f926f954a1
commit
081e526bf9
@ -343,15 +343,23 @@ bool apple_game_view_has_focus(void)
|
|||||||
|
|
||||||
bool apple_set_video_mode(unsigned width, unsigned height, bool fullscreen)
|
bool apple_set_video_mode(unsigned width, unsigned height, bool fullscreen)
|
||||||
{
|
{
|
||||||
|
__block bool result = true;
|
||||||
|
|
||||||
#ifdef OSX
|
#ifdef OSX
|
||||||
dispatch_sync(dispatch_get_main_queue(),
|
dispatch_sync(dispatch_get_main_queue(),
|
||||||
^{
|
^{
|
||||||
// TODO: Multi-monitor support
|
|
||||||
// TODO: Sceen mode support
|
// TODO: Sceen mode support
|
||||||
|
|
||||||
if (fullscreen && !g_has_went_fullscreen)
|
if (fullscreen && !g_has_went_fullscreen)
|
||||||
{
|
{
|
||||||
[g_view enterFullScreenMode:[NSScreen mainScreen] withOptions:nil];
|
if (g_settings.video.monitor_index >= [NSScreen screens].count)
|
||||||
|
{
|
||||||
|
apple_display_alert(@"Could not go fullscreen: Monitor index out of range.", nil);
|
||||||
|
result = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
[g_view enterFullScreenMode:[NSScreen screens][g_settings.video.monitor_index] withOptions:nil];
|
||||||
[NSCursor hide];
|
[NSCursor hide];
|
||||||
}
|
}
|
||||||
else if (!fullscreen && g_has_went_fullscreen)
|
else if (!fullscreen && g_has_went_fullscreen)
|
||||||
@ -369,7 +377,7 @@ bool apple_set_video_mode(unsigned width, unsigned height, bool fullscreen)
|
|||||||
|
|
||||||
// TODO: Maybe iOS users should be apple to show/hide the status bar here?
|
// TODO: Maybe iOS users should be apple to show/hide the status bar here?
|
||||||
|
|
||||||
return true;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef IOS
|
#ifdef IOS
|
||||||
|
@ -22,6 +22,10 @@
|
|||||||
#include "../boolean.h"
|
#include "../boolean.h"
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
|
|
||||||
|
#ifdef OSX
|
||||||
|
#include <CoreAudio/CoreAudio.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <CoreAudio/CoreAudioTypes.h>
|
#include <CoreAudio/CoreAudioTypes.h>
|
||||||
#include <AudioUnit/AudioUnit.h>
|
#include <AudioUnit/AudioUnit.h>
|
||||||
#include <AudioUnit/AUComponent.h>
|
#include <AudioUnit/AUComponent.h>
|
||||||
@ -93,6 +97,48 @@ static OSStatus audio_write_cb(void *userdata, AudioUnitRenderActionFlags *actio
|
|||||||
return noErr;
|
return noErr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef OSX
|
||||||
|
static void choose_output_device(coreaudio_t *dev, const char* device)
|
||||||
|
{
|
||||||
|
AudioObjectPropertyAddress propaddr =
|
||||||
|
{
|
||||||
|
kAudioHardwarePropertyDevices,
|
||||||
|
kAudioObjectPropertyScopeGlobal,
|
||||||
|
kAudioObjectPropertyElementMaster
|
||||||
|
};
|
||||||
|
|
||||||
|
UInt32 size = 0;
|
||||||
|
|
||||||
|
if (AudioObjectGetPropertyDataSize(kAudioObjectSystemObject, &propaddr, 0, 0, &size) != noErr)
|
||||||
|
return;
|
||||||
|
|
||||||
|
UInt32 deviceCount = size / sizeof(AudioDeviceID);
|
||||||
|
AudioDeviceID *devices = malloc(size);
|
||||||
|
|
||||||
|
if (!devices || AudioObjectGetPropertyData(kAudioObjectSystemObject, &propaddr, 0, 0, &size, devices) != noErr)
|
||||||
|
goto done;
|
||||||
|
|
||||||
|
propaddr.mScope = kAudioDevicePropertyScopeOutput;
|
||||||
|
propaddr.mSelector = kAudioDevicePropertyDeviceName;
|
||||||
|
size = 1024;
|
||||||
|
|
||||||
|
for (unsigned i = 0; i < deviceCount; i ++)
|
||||||
|
{
|
||||||
|
char device_name[1024];
|
||||||
|
device_name[0] = 0;
|
||||||
|
|
||||||
|
if (AudioObjectGetPropertyData(devices[i], &propaddr, 0, 0, &size, device_name) == noErr && strcmp(device_name, device) == 0)
|
||||||
|
{
|
||||||
|
AudioUnitSetProperty(dev->dev, kAudioOutputUnitProperty_CurrentDevice, kAudioUnitScope_Global, 0, &devices[i], sizeof(AudioDeviceID));
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
done:
|
||||||
|
free(devices);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void *coreaudio_init(const char *device, unsigned rate, unsigned latency)
|
static void *coreaudio_init(const char *device, unsigned rate, unsigned latency)
|
||||||
{
|
{
|
||||||
(void)device;
|
(void)device;
|
||||||
@ -121,6 +167,11 @@ static void *coreaudio_init(const char *device, unsigned rate, unsigned latency)
|
|||||||
if (AudioComponentInstanceNew(comp, &dev->dev) != noErr)
|
if (AudioComponentInstanceNew(comp, &dev->dev) != noErr)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
|
#ifdef OSX
|
||||||
|
if (device)
|
||||||
|
choose_output_device(dev, device);
|
||||||
|
#endif
|
||||||
|
|
||||||
dev->dev_alive = true;
|
dev->dev_alive = true;
|
||||||
|
|
||||||
// Set audio format
|
// Set audio format
|
||||||
|
Loading…
x
Reference in New Issue
Block a user