Skip to content

Commit

Permalink
[NSW] SDK compat fixups
Browse files Browse the repository at this point in the history
  • Loading branch information
misson20000 committed Sep 15, 2018
1 parent fa76a3c commit 7072bbb
Show file tree
Hide file tree
Showing 10 changed files with 335 additions and 117 deletions.
4 changes: 3 additions & 1 deletion Makefile.common
Original file line number Diff line number Diff line change
Expand Up @@ -836,7 +836,9 @@ ifeq ($(TARGET), retroarch_switch)
OBJ += gfx/drivers/switch_gfx.o \
input/drivers/switch_input.o \
input/drivers_joypad/switch_joypad.o \
audio/drivers/switch_audio.o
audio/drivers/switch_audio.o \
audio/drivers/switch_nx_thread_audio.o \
frontend/drivers/platform_switch.o
endif
endif

Expand Down
4 changes: 2 additions & 2 deletions Makefile.switch
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ endif


ifeq ($(strip $(LIBTRANSISTOR_HOME)),)
$(error "Please set LIBTRANSISTOR_HOME in your environment. export LIBTRANSISTOR_HOME=<path t>o libtransistor")
$(error "Please set LIBTRANSISTOR_HOME in your environment. export LIBTRANSISTOR_HOME=<path/to/libtransistor/dist/>")
endif

include $(LIBTRANSISTOR_HOME)/libtransistor.mk
Expand All @@ -52,7 +52,7 @@ LIBDIRS := -L.

TARGETS := $(TARGET).nro

CFLAGS += $(INCDIRS) $(DEFINES) -Wunused-command-line-argument
CFLAGS += $(INCDIRS) $(DEFINES) -Wno-unused-command-line-argument -Werror-implicit-function-declaration

all: $(TARGETS)

Expand Down
2 changes: 0 additions & 2 deletions audio/audio_driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -125,9 +125,7 @@ static const audio_driver_t *audio_drivers[] = {
#endif
#ifdef SWITCH
&audio_switch,
#ifdef HAVE_LIBNX
&audio_switch_thread,
#endif
#endif
&audio_null,
NULL,
Expand Down
35 changes: 4 additions & 31 deletions audio/drivers/switch_audio.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,7 @@
#include <malloc.h>
#include <stdint.h>

#ifdef HAVE_LIBNX
#include <switch.h>
#else
#include <libtransistor/nx.h>
#include <libtransistor/alloc_pages.h>
#endif

#include "switch_audio_compat.h"
#include "../audio_driver.h"
#include "../../verbosity.h"

Expand All @@ -35,22 +29,6 @@
#define BUFFER_COUNT 3
#endif

#ifdef HAVE_LIBNX
#define switch_audio_ipc_init audoutInitialize
#define switch_audio_ipc_output_get_released_buffer(a, b) audoutGetReleasedAudioOutBuffer(&a->current_buffer, &b)
#define switch_audio_ipc_output_append_buffer(a, b) audoutAppendAudioOutBuffer(&b)
#define switch_audio_ipc_output_stop(a) audoutStopAudioOut()
#define switch_audio_ipc_output_start(a) audoutStartAudioOut()
#define audio_output_buffer_t AudioOutBuffer
#else
#define switch_audio_ipc_init audio_ipc_init
#define switch_audio_ipc_output_get_released_buffer(a, b) audio_ipc_output_get_released_buffer(&a->output, &b, &a->current_buffer)
#define switch_audio_ipc_output_append_buffer(a, b) audio_ipc_output_append_buffer(&a->output, &b)
#define switch_audio_ipc_output_stop(a) audio_ipc_output_stop(&a->output)
#define switch_audio_ipc_output_start(a) audio_ipc_output_start(&a->output)
#define audio_output_buffer_t audio_output_buffer_t
#endif

static const int sample_rate = 48000;
static const int max_num_samples = sample_rate;
static const int num_channels = 2;
Expand All @@ -62,8 +40,8 @@ typedef struct
bool is_paused;
uint64_t last_append;
unsigned latency;
audio_output_buffer_t buffers[BUFFER_COUNT];
audio_output_buffer_t *current_buffer;
compat_audio_out_buffer buffers[BUFFER_COUNT];
compat_audio_out_buffer *current_buffer;

#ifndef HAVE_LIBNX
audio_output_t output;
Expand Down Expand Up @@ -155,13 +133,8 @@ static ssize_t switch_audio_write(void *data, const void *buf, size_t size)

if (swa->current_buffer->data_size > (48000 * swa->latency) / 1000)
{
#ifdef HAVE_LIBNX
if (switch_audio_ipc_output_append_buffer(swa, *swa->current_buffer) != 0)
return -1;
#else
if (switch_audio_ipc_output_append_buffer(swa, swa->current_buffer) != 0)
return -1;
#endif
swa->current_buffer = NULL;
}

Expand Down Expand Up @@ -339,7 +312,7 @@ static void *switch_audio_init(const char *device,
goto fail_audio_output;
#endif

if (switch_audio_ipc_output_append_buffer(swa, swa->buffers[i]) != 0)
if (switch_audio_ipc_output_append_buffer(swa, &swa->buffers[i]) != 0)
goto fail_audio_output;
}

Expand Down
90 changes: 90 additions & 0 deletions audio/drivers/switch_audio_compat.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
#pragma once

#ifdef HAVE_LIBNX
#include <switch.h>
#else
#include <libtransistor/nx.h>
#endif

#ifdef HAVE_LIBNX

// libnx definitions

// threading
typedef Mutex compat_mutex;
typedef Thread compat_thread;
typedef CondVar compat_condvar;

#define compat_thread_create(thread, func, data, stack_size, prio, cpu) \
threadCreate(thread, func, data, stack_size, prio, cpu)
#define compat_thread_start(thread) \
threadStart(thread)
#define compat_thread_join(thread) \
threadWaitForExit(thread)
#define compat_thread_close(thread) \
threadClose(thread)
#define compat_mutex_create(mutex) \
mutexInit(mutex)
#define compat_mutex_lock(mutex) \
mutexLock(mutex)
#define compat_mutex_unlock(mutex) \
mutexUnlock(mutex)
#define compat_condvar_create(condvar) \
condvarInit(condvar)
#define compat_condvar_wait(condvar, mutex) \
condvarWait(condvar, mutex)
#define compat_condvar_wake_all(condvar) \
condvarWakeAll(condvar)

// audio
typedef AudioOutBuffer compat_audio_out_buffer;
#define switch_audio_ipc_init audoutInitialize
#define switch_audio_ipc_finalize audoutExit
#define switch_audio_ipc_output_get_released_buffer(a, b) audoutGetReleasedAudioOutBuffer(&a->current_buffer, &b)
#define switch_audio_ipc_output_append_buffer(a, b) audoutAppendAudioOutBuffer(b)
#define switch_audio_ipc_output_stop(a) audoutStopAudioOut()
#define switch_audio_ipc_output_start(a) audoutStartAudioOut()

#else

// libtransistor definitions

typedef result_t Result;
#define R_FAILED(r) ((r) != RESULT_OK)

// threading
typedef trn_mutex_t compat_mutex;
typedef trn_thread_t compat_thread;
typedef trn_condvar_t compat_condvar;

#define compat_thread_create(thread, func, data, stack_size, prio, cpu) \
trn_thread_create(thread, func, data, prio, cpu, stack_size, NULL)
#define compat_thread_start(thread) \
trn_thread_start(thread)
#define compat_thread_join(thread) \
trn_thread_join(thread, -1)
#define compat_thread_close(thread) \
trn_thread_destroy(thread)
#define compat_mutex_create(mutex) \
trn_mutex_create(mutex)
#define compat_mutex_lock(mutex) \
trn_mutex_lock(mutex)
#define compat_mutex_unlock(mutex) \
trn_mutex_unlock(mutex)
#define compat_condvar_create(condvar) \
trn_condvar_create(condvar)
#define compat_condvar_wait(condvar, mutex) \
trn_condvar_wait(condvar, mutex, -1)
#define compat_condvar_wake_all(condvar) \
trn_condvar_signal(condvar, -1)

// audio
typedef audio_output_buffer_t compat_audio_out_buffer;
#define switch_audio_ipc_init audio_ipc_init
#define switch_audio_ipc_finalize audio_ipc_finalize
#define switch_audio_ipc_output_get_released_buffer(a, b) audio_ipc_output_get_released_buffer(&a->output, &b, &a->current_buffer)
#define switch_audio_ipc_output_append_buffer(a, b) audio_ipc_output_append_buffer(&a->output, b)
#define switch_audio_ipc_output_stop(a) audio_ipc_output_stop(&a->output)
#define switch_audio_ipc_output_start(a) audio_ipc_output_start(&a->output)

#endif
Loading

0 comments on commit 7072bbb

Please sign in to comment.