diff options
Diffstat (limited to 'sdl')
-rw-r--r-- | sdl/main.c | 22 | ||||
-rw-r--r-- | sdl/osx/Makefile | 2 | ||||
-rw-r--r-- | sdl/unix/Makefile | 4 | ||||
-rw-r--r-- | sdl/win/Makefile | 2 |
4 files changed, 27 insertions, 3 deletions
@@ -1,5 +1,6 @@ #include <SDL.h> #include <stdbool.h> +#include <stdatomic.h> #include "pacc/pacc.h" #include "fmdsp/fmdsp-pacc.h" #include "libopna/opna.h" @@ -7,6 +8,7 @@ #include "fmdriver/fmdriver.h" #include "common/fmplayer_file.h" #include "common/fmplayer_common.h" +#include "fft/fft.h" bool loadgl(void); @@ -20,19 +22,29 @@ static struct { struct opna_timer timer; struct fmdriver_work work; struct fmplayer_file *fmfile; + struct fmplayer_fft_data fftdata; + struct fmplayer_fft_input_data fftin; const char *currpath; SDL_Window *win; SDL_AudioDeviceID adev; struct ppz8 ppz8; char adpcmram[OPNA_ADPCM_RAM_SIZE]; struct fmdsp_pacc *fp; -} g; + atomic_flag fftdata_flag; +} g = { + .fftdata_flag = ATOMIC_FLAG_INIT, +}; static void audiocb(void *ptr, Uint8 *bufptr, int len) { int frames = len / (sizeof(int16_t)*2); int16_t *buf = (int16_t *)bufptr; memset(buf, 0, len); opna_timer_mix(&g.timer, buf, frames); + if (!atomic_flag_test_and_set_explicit( + &g.fftdata_flag, memory_order_acquire)) { + fft_write(&g.fftdata, buf, frames); + atomic_flag_clear_explicit(&g.fftdata_flag, memory_order_release); + } } static void openfile(const char *path) { @@ -57,6 +69,7 @@ static void openfile(const char *path) { int main(int argc, char **argv) { if (__builtin_cpu_supports("sse2")) opna_ssg_sinc_calc_func = opna_ssg_sinc_calc_sse2; + fft_init_table(); if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO)) { SDL_Log("Cannot initialize SDL\n"); return 1; @@ -140,7 +153,7 @@ int main(int argc, char **argv) { SDL_Quit(); return 1; } - fmdsp_pacc_set(g.fp, &g.work, &g.opna); + fmdsp_pacc_set(g.fp, &g.work, &g.opna, &g.fftin); SDL_EventState(SDL_DROPFILE, SDL_ENABLE); @@ -206,6 +219,11 @@ int main(int argc, char **argv) { } } } + if (!atomic_flag_test_and_set_explicit( + &g.fftdata_flag, memory_order_acquire)) { + memcpy(&g.fftin.fdata, &g.fftdata, sizeof(g.fftdata)); + atomic_flag_clear_explicit(&g.fftdata_flag, memory_order_release); + } fmdsp_pacc_render(g.fp); SDL_GL_SwapWindow(g.win); } diff --git a/sdl/osx/Makefile b/sdl/osx/Makefile index c2035fd..18ae005 100644 --- a/sdl/osx/Makefile +++ b/sdl/osx/Makefile @@ -4,6 +4,7 @@ vpath %.c ../../fmdsp vpath %.c ../../libopna vpath %.c ../../common vpath %.c ../../fmdriver +vpath %.c ../../fft XCRUN:=xcrun --sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/ CC:=$(XCRUN) cc OBJS:=main.o @@ -12,6 +13,7 @@ OBJS+=fmdsp-pacc.o font_fmdsp_small.o fmdsp_platform_mach.o OBJS+=opna.o opnafm.o opnassg.o opnadrum.o opnaadpcm.o opnatimer.o opnassg-sinc-c.o opnassg-sinc-sse2.o OBJS+=fmdriver_pmd.o fmdriver_fmp.o ppz8.o fmdriver_common.o OBJS+=fmplayer_file.o fmplayer_work_opna.o fmplayer_file_unix.o fmplayer_drumrom_unix.o +OBJS+=fft.o TARGET:=fmplayersdl CFLAGS:=-Wall -Wextra -O2 -g CFLAGS+=-DPACC_GL_3 diff --git a/sdl/unix/Makefile b/sdl/unix/Makefile index 9786031..ea22098 100644 --- a/sdl/unix/Makefile +++ b/sdl/unix/Makefile @@ -4,6 +4,7 @@ vpath %.c ../../fmdsp vpath %.c ../../libopna vpath %.c ../../common vpath %.c ../../fmdriver +vpath %.c ../../fft SDLCONFIG:=sdl2-config OBJS:=main.o OBJS+=pacc-gl.o @@ -11,6 +12,7 @@ OBJS+=fmdsp-pacc.o font_fmdsp_small.o fmdsp_platform_unix.o OBJS+=opna.o opnafm.o opnassg.o opnadrum.o opnaadpcm.o opnatimer.o opnassg-sinc-c.o opnassg-sinc-sse2.o OBJS+=fmdriver_pmd.o fmdriver_fmp.o ppz8.o fmdriver_common.o OBJS+=fmplayer_file.o fmplayer_work_opna.o fmplayer_file_unix.o fmplayer_drumrom_unix.o +OBJS+=fft.o TARGET:=fmplayersdl CFLAGS:=-Wall -Wextra -O2 -g @@ -19,7 +21,7 @@ CFLAGS+=-DPACC_GL_3 #CFLAGS+=-DPACC_GL_ES -DPACC_GL_3 CFLAGS+=-I.. -I../.. CFLAGS+=$(shell $(SDLCONFIG) --cflags) -LIBS:=-lGL +LIBS:=-lGL -lm LIBS+=$(shell $(SDLCONFIG) --libs) $(TARGET): $(OBJS) diff --git a/sdl/win/Makefile b/sdl/win/Makefile index e804dfc..0f63d19 100644 --- a/sdl/win/Makefile +++ b/sdl/win/Makefile @@ -4,6 +4,7 @@ vpath %.c ../../fmdsp vpath %.c ../../libopna vpath %.c ../../common vpath %.c ../../fmdriver +vpath %.c ../../fft SDLCONFIG:=i686-w64-mingw32-sdl2-config CC:=i686-w64-mingw32-gcc OBJS:=main.o @@ -12,6 +13,7 @@ OBJS+=fmdsp-pacc.o font_fmdsp_small.o fmdsp_platform_win.o OBJS+=opna.o opnafm.o opnassg.o opnadrum.o opnaadpcm.o opnatimer.o opnassg-sinc-c.o opnassg-sinc-sse2.o OBJS+=fmdriver_pmd.o fmdriver_fmp.o ppz8.o fmdriver_common.o OBJS+=fmplayer_file.o fmplayer_work_opna.o fmplayer_file_win.o fmplayer_drumrom_win.o +OBJS+=fft.o TARGET:=fmplayersdl.exe CFLAGS:=-Wall -Wextra -O2 |