unify helix mp3 code, some sound adjustments
[libpicofe.git] / gp2x / emu.c
index 372ce56..0700e81 100644 (file)
@@ -409,6 +409,7 @@ void plat_status_msg_busy_next(const char *msg)
 {\r
        plat_status_msg_clear();\r
        pemu_update_display("", msg);\r
+       emu_status_msg("");\r
 \r
        /* assumption: msg_busy_next gets called only when\r
         * something slow is about to happen */\r
@@ -600,22 +601,26 @@ static void updateSound(int len)
 void pemu_sound_start(void)\r
 {\r
        static int PsndRate_old = 0, PicoOpt_old = 0, pal_old = 0;\r
-       int target_fps = Pico.m.pal ? 50 : 60;\r
 \r
        PsndOut = NULL;\r
 \r
        // prepare sound stuff\r
-       if (currentConfig.EmuOpt & 4)\r
+       if (currentConfig.EmuOpt & EOPT_EN_SOUND)\r
        {\r
+               int is_stereo = (PicoOpt & POPT_EN_STEREO) ? 1 : 0;\r
+               int target_fps = Pico.m.pal ? 50 : 60;\r
                int snd_excess_add;\r
-               if (PsndRate != PsndRate_old || (PicoOpt&0x20b) != (PicoOpt_old&0x20b) || Pico.m.pal != pal_old ||\r
-                               ((PicoOpt&0x200) && crashed_940)) {\r
+               gp2x_soc_t soc;\r
+\r
+               #define SOUND_RERATE_FLAGS (POPT_EN_FM|POPT_EN_PSG|POPT_EN_STEREO|POPT_EXT_FM|POPT_EN_MCD_CDDA)\r
+               if (PsndRate != PsndRate_old || Pico.m.pal != pal_old || ((PicoOpt & POPT_EXT_FM) && crashed_940) ||\r
+                               ((PicoOpt ^ PicoOpt_old) & SOUND_RERATE_FLAGS)) {\r
                        PsndRerate(Pico.m.frame_count ? 1 : 0);\r
                }\r
-               snd_excess_add = ((PsndRate - PsndLen*target_fps)<<16) / target_fps;\r
+               snd_excess_add = ((PsndRate - PsndLen * target_fps)<<16) / target_fps;\r
                printf("starting audio: %i len: %i (ex: %04x) stereo: %i, pal: %i\n",\r
-                       PsndRate, PsndLen, snd_excess_add, (PicoOpt&8)>>3, Pico.m.pal);\r
-               sndout_oss_start(PsndRate, 16, (PicoOpt&8)>>3);\r
+                       PsndRate, PsndLen, snd_excess_add, is_stereo, Pico.m.pal);\r
+               sndout_oss_start(PsndRate, 16, is_stereo);\r
                sndout_oss_setvol(currentConfig.volume, currentConfig.volume);\r
                PicoWriteSound = updateSound;\r
                plat_update_volume(0, 0);\r
@@ -624,6 +629,11 @@ void pemu_sound_start(void)
                PsndRate_old = PsndRate;\r
                PicoOpt_old  = PicoOpt;\r
                pal_old = Pico.m.pal;\r
+\r
+               /* Wiz's sound hardware needs more prebuffer */\r
+               soc = soc_detect();\r
+               if (soc == SOCID_POLLUX)\r
+                       updateSound(PsndLen);\r
        }\r
 }\r
 \r