static gboolean player_event_poll(XmrPlayer *player) { PlayerEvent *event = g_async_queue_try_pop(player->priv->event_queue); if (event == NULL) return TRUE; switch(event->type) { case libvlc_MediaPlayerEncounteredError: { GError error = { 0 }; error.message = (gchar *)libvlc_errmsg(); g_signal_emit(player, signals[ERROR], 0, &error); } break; case libvlc_MediaPlayerBuffering: { g_signal_emit(player, signals[BUFFERING], 0, (guint)event->buffering); } break; case libvlc_MediaPlayerPlaying: case libvlc_MediaPlayerPaused: case libvlc_MediaPlayerStopped: g_signal_emit(player, signals[STATE_CHANGED], 0); break; case libvlc_MediaPlayerTimeChanged: { g_signal_emit(player, signals[TICK], 0, event->position, xmr_player_get_duration(player)); } break; case libvlc_MediaPlayerEndReached: g_signal_emit(player, signals[EOS], 0, FALSE); break; default: break; } g_free(event); return TRUE; }
static gboolean tick_timeout(XmrPlayer *player) { if (player->priv->playing) { gint64 position; gint64 duration; position = xmr_player_get_time(player); duration = xmr_player_get_duration(player); g_signal_emit(player, signals[TICK], 0, position, duration); } return TRUE; }