int kqt_Handle_set_position(kqt_Handle handle, int track, long long nanoseconds) { check_handle(handle, 0); Handle* h = get_handle(handle); check_data_is_valid(h, 0); check_data_is_validated(h, 0); if (track < -1 || track >= KQT_TRACKS_MAX) { Handle_set_error(h, ERROR_ARGUMENT, "Invalid track number: %d", track); return 0; } if (nanoseconds < 0) { Handle_set_error(h, ERROR_ARGUMENT, "nanoseconds must be non-negative"); return 0; } int64_t skip_frames = (int64_t)(((double)nanoseconds / 1000000000L) * Player_get_audio_rate(h->player)); Device_states_reset(Player_get_device_states(h->player)); Player_reset(h->player, track); Player_skip(h->player, skip_frames); return 1; }
static bool Handle_update_connections(Handle* handle) { rassert(handle != NULL); Module* module = Handle_get_module(handle); const Connections* conns = Module_get_connections(module); if (conns == NULL) return true; Device_states* dstates = Player_get_device_states(handle->player); if (!Device_states_prepare(dstates, conns)) { Handle_set_error(handle, ERROR_MEMORY, "Couldn't allocate memory for connections"); return false; } return true; }