X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=platform%2Fpsp%2Femu.c;h=9fc890cab7d99650fbf685832b87de458cf30a63;hb=110df09c8a2479c6a58655ad6b09b50584fbe5f4;hp=6ce910da0adb53326eebc50ff056b426e4eb55eb;hpb=81fda4e8d854c96e70dc2e6b7cd2f48a51f55d86;p=picodrive.git diff --git a/platform/psp/emu.c b/platform/psp/emu.c index 6ce910d..9fc890c 100644 --- a/platform/psp/emu.c +++ b/platform/psp/emu.c @@ -508,7 +508,7 @@ static int sound_thread(SceSize args, void *argp) { if (samples_made - samples_done < samples_block) { // wait for data (use at least 2 blocks) - lprintf("sthr: wait... (%i)\n", samples_made - samples_done); + //lprintf("sthr: wait... (%i)\n", samples_made - samples_done); while (samples_made - samples_done <= samples_block*2 && !sound_thread_exit) ret = sceKernelWaitSema(sound_sem, 1, 0); if (ret < 0) lprintf("sthr: sceKernelWaitSema: %i\n", ret); @@ -523,8 +523,9 @@ static int sound_thread(SceSize args, void *argp) snd_playptr += samples_block; if (snd_playptr >= sndBuffer_endptr) snd_playptr = sndBuffer; - if (ret) - lprintf("sthr: outf: %i; pos %i/%i\n", ret, samples_done, samples_made); + // 1.5 kernel returns 0, newer ones return # of samples queued + if (ret < 0) + lprintf("sthr: sceAudio_E0727056: %08x; pos %i/%i\n", ret, samples_done, samples_made); // shouln't happen, but just in case if (samples_made - samples_done >= samples_block*3) { @@ -543,6 +544,7 @@ static int sound_thread(SceSize args, void *argp) static void sound_init(void) { SceUID thid; + int ret; sound_sem = sceKernelCreateSema("sndsem", 0, 0, 1, NULL); if (sound_sem < 0) lprintf("sceKernelCreateSema() failed: %i\n", sound_sem); @@ -553,7 +555,8 @@ static void sound_init(void) thid = sceKernelCreateThread("sndthread", sound_thread, 0x12, 0x10000, 0, NULL); if (thid >= 0) { - sceKernelStartThread(thid, 0, 0); + ret = sceKernelStartThread(thid, 0, 0); + if (ret < 0) lprintf("sound_init: sceKernelStartThread returned %08x\n", ret); } else lprintf("sceKernelCreateThread failed: %i\n", thid); @@ -865,6 +868,7 @@ static void simpleWait(unsigned int until) void emu_Loop(void) { + static int mp3_init_done = 0; char fpsbuff[24]; // fps count c string unsigned int tval, tval_prev = 0, tval_thissec = 0; // timing int frames_done = 0, frames_shown = 0, oldmodes = 0; @@ -894,8 +898,16 @@ void emu_Loop(void) target_frametime = Pico.m.pal ? (1000000<<8)/50 : (1000000<<8)/60+1; reset_timing = 1; - // prepare CD buffer - if (PicoMCD & 1) PicoCDBufferInit(); + if (PicoMCD & 1) { + // prepare CD buffer + PicoCDBufferInit(); + // mp3... + if (!mp3_init_done) { + i = mp3_init(); + mp3_init_done = 1; + if (i) { engineState = PGS_Menu; return; } + } + } // prepare sound stuff PsndOut = NULL;