Example #1
0
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;
}
Example #2
0
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;
}