예제 #1
0
static void playback_quit(void)
{
    if (!playback_running)
        playback_start();
    memset(playback_buffer[playback_decode_ind] + playback_decode_pos, 0,
           PLAYBACK_BUFFER_SIZE - playback_decode_pos);
    playback_running = false;
    SDL_SemPost(playback_decode_sema);
    SDL_SemWait(playback_play_sema);
    SDL_SemWait(playback_play_sema);
    SDL_Quit();
}
예제 #2
0
파일: playback.c 프로젝트: i-tek/audacious
void playback_play (int seek_time, bool_t pause)
{
    g_return_if_fail (! playing);

    int playlist = playlist_get_playing ();
    if (playlist < 0)
        return;

    int entry = playlist_get_position (playlist);
    if (entry < 0)
        return;

    failed_entries = 0;
    playback_start (playlist, entry, seek_time, pause);
}
예제 #3
0
파일: snesbot.c 프로젝트: SonnyJim/snesbot
void main_loop (void)
{ 
  clear_all_buttons (); 
  
  if (botcfg.state == STATE_RECORDING)
  {
    fprintf (stdout, "RECORDING\n");
    if (record_start () != 0)
    {
      fprintf (stderr, "Error setting up record buffer\n");
      botcfg.state = STATE_EXITING;
    }
    wait_for_snes_powerup ();
  }
  else if (botcfg.state == STATE_PLAYBACK)
  {
    fprintf (stdout, "PLAYBACK\n");
    if (playback_start () != 0)
    {
      fprintf (stderr, "Error setting up playback buffer\n");
      botcfg.state = STATE_EXITING;
    }
    wait_for_snes_powerup ();
  }
  
  interrupt_enable();
 
  if (botcfg.state == STATE_PLAYBACK || botcfg.state == STATE_RECORDING)
    wait_for_first_latch ();
  
  while (botcfg.state != STATE_EXITING)
  {
    if (botcfg.state != STATE_PLAYBACK && botcfg.state != STATE_MACRO)
    {
      read_joystick_inputs();
    }

    if (!snes_is_on())
    {
      fprintf (stdout, "SNES poweroff detected\n");
      botcfg.state = STATE_EXITING;
    }
  }
  //Always attempt a save before exiting
  record_save ();
}
예제 #4
0
static void playback_pcm(int16_t *pcm, int count)
{
    const char *stream = (const char *)pcm;
    count *= 4;

    while (count > 0) {
        if (playback_decode_pos >= PLAYBACK_BUFFER_SIZE) {
            if (!playback_running)
                playback_start();
            SDL_SemPost(playback_decode_sema);
            SDL_SemWait(playback_play_sema);
            playback_decode_ind = !playback_decode_ind;
            playback_decode_pos = 0;
        }
        char *decode_buffer = playback_buffer[playback_decode_ind];
        int copy_len = MIN(count, PLAYBACK_BUFFER_SIZE - playback_decode_pos);
        memcpy(decode_buffer + playback_decode_pos, stream, copy_len);
        stream += copy_len;
        count -= copy_len;
        playback_decode_pos += copy_len;
    }
}
예제 #5
0
파일: playback.c 프로젝트: i-tek/audacious
static bool_t end_cb (void * unused)
{
    g_return_val_if_fail (playing, FALSE);

    hook_call ("playback end", NULL);

    if (playback_error)
        failed_entries ++;
    else
        failed_entries = 0;

    playback_cleanup ();

    int playlist = playlist_get_playing ();
    bool_t play;

    if (get_bool (NULL, "no_playlist_advance"))
        play = get_bool (NULL, "repeat") && ! failed_entries;
    else if (! (play = playlist_next_song (playlist, get_bool (NULL, "repeat"))))
        playlist_set_position (playlist, -1);
    else if (failed_entries >= 10)
        play = FALSE;

    if (get_bool (NULL, "stop_after_current_song"))
        play = FALSE;

    if (play)
        playback_start (playlist, playlist_get_position (playlist), 0, FALSE);
    else
    {
        complete_stop ();
        hook_call ("playlist end reached", NULL);
    }

    return FALSE;
}
예제 #6
0
파일: playback.c 프로젝트: SonnyJim/spang
void playback_input_fire (void)
{
    if (input_keyrepeat () || num_files <= 0)
        return;
    playback_start (filelist[file_index]);
}
예제 #7
0
파일: FACE.CPP 프로젝트: sigt44/ravage-sdl
static void initmenu(void)
{
// Allocate Menu Background backup.
   menuback = new Back(MENUXS, MENUYS);
// Load menu screen.

   demoTexture.loadPointer(SDL_CreateTexture(render.getBase(), SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, HWXMAX, YMAX), true);
	clearmenu();

// Take a snapshot of the plain menu screen.
   menuback->save(MENUX, MENUY);
// .. freeze overlapping part of Title.
   head = (Sprite *)loadfile("pic\\ravage.spr", NULL);
	sHead.load(head, false);

// Load pointer.
   pointer = (Sprite *)loadfile("pic\\pointer.spr", NULL);
	sPointer.load(pointer, false);

// Set mouse area.
   //setmouselimits(MENUX, MENUY, MENUX+MENUXS-pointer->xs, MENUY+MENUYS-pointer->ys);
    setmouselimits(-BORDER, 0, 320, 240);
// Initialize POINTER animation buffer.
   back = new Back(pointer->xs, pointer->ys);
// Set events to initial values.
   pointer_enabled = 1;
   keys_enabled = 0;
   joy_enabled = 0;

// Several buttons & fonts.
   blue = new Font("fonts\\blue.fnt");
   tiny = new Font("fonts\\tiny.fnt");

   addsub = (Sprite *)loadfile("pic\\addsub.spr", NULL);
   sAddSub.load(addsub, false);

   yesno = (Sprite *)loadfile("pic\\yesno.spr", NULL);
   sYesNo.load(yesno, false);

// Write version information.
#ifdef SHAREWARE
   tiny->vanilla(215, 65, "shareware 1.1", 10);
#else
   tiny->vanilla(215, 65, "registered 1.1", 10);
#endif

// Save current game state in case the menu is in SHOP mode.
   gsave = gstate;
   psave = player[nowplayer];
   psave2 = player[1-nowplayer];
   player[1-nowplayer].active = 0;     // Deactivate unused player.

// Initialize DEMO GAME.
   cheatsave = cheatlevel;
   cheatlevel |= CHEAT_INVUL | CHEAT_NOMONEY;
   playback_start("demo1\\demo1.rec");
   player[nowplayer].control = playback_device;
   gstate.nplayers = 1; gstate.difficulty = 3;
   newgame(1);
   newlevel("demo1\\demo1");
   weapon_releaseall(nowplayer, STARTX1, STARTY);
// Start playing background music.
   s_loadmod("mods\\menu.uni");
   s_startmod();
// Fade In
   fadein(level.palette);
}