Fix preview bug

This commit is contained in:
2018-05-10 15:43:07 -04:00
parent 7beb9b72db
commit cb6f90adc7
3 changed files with 19 additions and 1 deletions

View File

@@ -42,9 +42,11 @@ typedef struct {
float mix[12]; float mix[12];
u8 buf_pos; u8 buf_pos;
long data_read; long data_read;
volatile bool stop;
char *filebuf; char *filebuf;
u32 filesize; u32 filesize;
volatile bool stop;
Handle finished;
} audio_s; } audio_s;
void play_audio(audio_s *); void play_audio(audio_s *);

View File

@@ -136,6 +136,11 @@ void free_lists(void)
void exit_function(bool power_pressed) void exit_function(bool power_pressed)
{ {
if (audio)
{
audio->stop = true;
svcWaitSynchronization(audio->finished, U64_MAX);
}
free_lists(); free_lists();
svcCloseHandle(update_icons_handle); svcCloseHandle(update_icons_handle);
exit_screens(); exit_screens();
@@ -461,7 +466,11 @@ int main(void)
{ {
preview_mode = false; preview_mode = false;
if(current_mode == MODE_THEMES && audio) if(current_mode == MODE_THEMES && audio)
{
audio->stop = true; audio->stop = true;
svcWaitSynchronization(audio->finished, U64_MAX);
audio = NULL;
}
} }
continue; continue;
} }
@@ -469,7 +478,11 @@ int main(void)
{ {
preview_mode = false; preview_mode = false;
if(current_mode == MODE_THEMES && audio) if(current_mode == MODE_THEMES && audio)
{
audio->stop = true; audio->stop = true;
svcWaitSynchronization(audio->finished, U64_MAX);
audio = NULL;
}
continue; continue;
} }
} }

View File

@@ -30,6 +30,8 @@
// Play a given audio struct // Play a given audio struct
Result update_audio(audio_s *audio) Result update_audio(audio_s *audio)
{ {
svcCreateEvent(&audio->finished, RESET_STICKY);
long size = audio->wave_buf[audio->buf_pos].nsamples * 4 - audio->data_read; long size = audio->wave_buf[audio->buf_pos].nsamples * 4 - audio->data_read;
char size_info[50] = {0}; char size_info[50] = {0};
sprintf(size_info, "Audio Size: %ld\n", size); sprintf(size_info, "Audio Size: %ld\n", size);
@@ -70,6 +72,7 @@ void thread_audio(void* data) {
while(!audio->stop) { while(!audio->stop) {
update_audio(audio); update_audio(audio);
} }
svcSignalEvent(audio->finished);
free(audio->filebuf); free(audio->filebuf);
free(audio); free(audio);
} }