static short sndBuffer[2*44100/50];\r
static char noticeMsg[64]; // notice msg to draw\r
static struct timeval noticeMsgTime = { 0, 0 }; // when started showing\r
-static int reset_timing, osd_fps_x;\r
+static int osd_fps_x;\r
static int combo_keys = 0, combo_acts = 0; // keys and actions which need button combos\r
static int gp2x_old_gamma = 100;\r
static unsigned char *movie_data = NULL;\r
static int movie_size = 0;\r
unsigned char *framebuff = 0; // temporary buffer for alt renderer\r
int state_slot = 0;\r
+int reset_timing = 0;\r
\r
/*\r
// tmp\r
{\r
if (PicoOpt&8) len<<=1;\r
\r
- gp2x_sound_write(PsndOut, len<<1);\r
+ /* avoid writing audio when lagging behind to prevent audio lag */\r
+ if (PicoSkipFrame != 2)\r
+ gp2x_sound_write(PsndOut, len<<1);\r
}\r
\r
\r
-static void SkipFrame(void)\r
+static void SkipFrame(int do_audio)\r
{\r
- PicoSkipFrame=1;\r
+ PicoSkipFrame=do_audio ? 1 : 2;\r
PicoFrame();\r
PicoSkipFrame=0;\r
}\r
// when second changes, but we don't want buffer to starve.\r
if(PsndOut && frames_done < target_fps && frames_done > target_fps-5) {\r
updateKeys();\r
- SkipFrame(); frames_done++;\r
+ SkipFrame(1); frames_done++;\r
}\r
\r
frames_done -= target_fps; if (frames_done < 0) frames_done = 0;\r
if(currentConfig.Frameskip >= 0) { // frameskip enabled\r
for(i = 0; i < currentConfig.Frameskip; i++) {\r
updateKeys();\r
- SkipFrame(); frames_done++;\r
+ SkipFrame(1); frames_done++;\r
if (PsndOut) { // do framelimitting if sound is enabled\r
gettimeofday(&tval, 0);\r
if(thissec != tval.tv_sec) tval.tv_usec+=1000000;\r
continue;\r
}\r
updateKeys();\r
- SkipFrame(/*tval.tv_usec < lim_time+target_frametime*/); frames_done++;\r
+ SkipFrame(tval.tv_usec < lim_time+target_frametime*2); frames_done++;\r
continue;\r
}\r
\r