int
ol_elapse_emulator_get_real_ms (OlElapseEmulator *emulator,
                                int time)
{
  if (emulator->first_time < 0 || emulator->prev_time - time > emulator->accuracy || time - emulator->last_time > 150)
  {
    /* reinitialize timer */
    ol_infof ("prev:%d, time:%d\n", emulator->prev_time, time);
    ol_elapse_emulator_init (emulator, time, emulator->accuracy);
  }
  else
  {
    struct timeval current_time;
    gettimeofday (&current_time, NULL);
    int real_time = emulator->first_time +
      (current_time.tv_sec - emulator->begin_time.tv_sec) * 1000 +
      (current_time.tv_usec - emulator->begin_time.tv_usec) / 1000;
    if (real_time - time > 2 * emulator->accuracy || time - real_time > emulator->accuracy )
    {
      ol_infof ("real_time: %d, time: %d\n", real_time, time);
      ol_elapse_emulator_init (emulator, time, emulator->accuracy);
    }
    else
    {
      emulator->prev_time = time;
      time = real_time;
    }
  }
  emulator->last_time = time;
  return time;
}
OlElapseEmulator *
ol_elapse_emulator_new (int initial_time, int accuracy)
{
  OlElapseEmulator *emulator = g_new (OlElapseEmulator, 1);
  ol_elapse_emulator_init (emulator, initial_time, accuracy);
  return emulator;
}
Esempio n. 3
0
static void
ol_player_amarok2_ensure_elapse (int elapsed_time)
{
    if (elapse_emulator == NULL)
    {
        elapse_emulator = g_new (OlElapseEmulator, 1);
        if (elapse_emulator != NULL)
            ol_elapse_emulator_init (elapse_emulator, elapsed_time, 1000);
    }
}
int
ol_elapse_emulator_get_last_ms (OlElapseEmulator *emulator,
                                int time)
{
  if (emulator->first_time < 0 || emulator->last_time - time > emulator->accuracy || time - emulator->last_time > emulator->accuracy)
  {
    /* reinitialize timer */
    ol_debugf ("prev:%d, time:%d\n", emulator->prev_time, time);
    ol_elapse_emulator_init (emulator, time, emulator->accuracy);
  }
  return emulator->last_time;
}
Esempio n. 5
0
static gboolean
ol_player_exaile02_get_played_time (int *played_time)
{
  guint8 percent;
  int duration;
  int exaile02_time;
  if (played_time == NULL)
    return FALSE;
  if (connection == NULL || proxy == NULL)
    if (!ol_player_exaile02_init_dbus ())
      return FALSE;
  enum OlPlayerStatus status = ol_player_exaile02_get_status ();
  if (status == OL_PLAYER_PLAYING || status == OL_PLAYER_PAUSED)
  {
    if (!ol_dbus_get_uint8 (proxy, current_position, &percent))
      return FALSE;
    if (!ol_player_exaile02_get_music_length (&duration))
      return FALSE;
    exaile02_time = duration * percent / 100;
    if (elapse_emulator == NULL)
    {
      elapse_emulator = g_new (OlElapseEmulator, 1);
      if (elapse_emulator != NULL)
        ol_elapse_emulator_init (elapse_emulator, exaile02_time, duration / 100);
    }
    if (elapse_emulator != NULL)
    {
      if (status == OL_PLAYER_PLAYING)
        *played_time = ol_elapse_emulator_get_real_ms (elapse_emulator, exaile02_time);
      else /* if (status == OL_PLAYER_PAUSED)  */
        *played_time = ol_elapse_emulator_get_last_ms (elapse_emulator, exaile02_time);
    }
    else
      *played_time = exaile02_time;
  }
  else
  {
    *played_time = -1;
  }
  return TRUE;
}
Esempio n. 6
0
static gboolean
ol_player_listen_get_played_time (int *played_time)
{
  /* ol_log_func (); */
  int listen_time;
  if (played_time == NULL)
    return FALSE;
  if (connection == NULL || proxy == NULL)
    if (!ol_player_listen_init_dbus ())
      return FALSE;
  enum OlPlayerStatus status = ol_player_listen_get_status ();
  if (status == OL_PLAYER_PLAYING)
  {
    if (!ol_dbus_get_int (proxy, current_position, &listen_time))
      return FALSE;
    listen_time = listen_time*1000;
    if (elapse_emulator == NULL)
    {
      elapse_emulator = g_new (OlElapseEmulator, 1);
      if (elapse_emulator != NULL)
        ol_elapse_emulator_init (elapse_emulator, listen_time, 1000);
    }
    if (elapse_emulator != NULL)
    {
      if (status == OL_PLAYER_PLAYING)
        *played_time = ol_elapse_emulator_get_real_ms (elapse_emulator, listen_time);
      else /* if (status == OL_PLAYER_PAUSED)  */
        *played_time = ol_elapse_emulator_get_last_ms (elapse_emulator, listen_time);
    }
    else
      *played_time = listen_time;
  }
  else
  {
    *played_time = -1;
  }
  return TRUE;
}