Exemplo n.º 1
0
Work_buffers* new_Work_buffers(int32_t buf_size)
{
    rassert(buf_size >= 0);
    rassert(buf_size <= WORK_BUFFER_SIZE_MAX);

    Work_buffers* buffers = memory_alloc_item(Work_buffers);
    if (buffers == NULL)
        return NULL;

    // Sanitise fields
    for (int i = 0; i < WORK_BUFFER_COUNT_; ++i)
        buffers->buffers[i] = NULL;

    // Allocate buffers
    for (int i = 0; i < WORK_BUFFER_COUNT_; ++i)
    {
        buffers->buffers[i] = new_Work_buffer(buf_size);
        if (buffers->buffers[i] == NULL)
        {
            del_Work_buffers(buffers);
            return NULL;
        }
    }

    return buffers;
}
Exemplo n.º 2
0
Device_state* new_Delay_pstate(
        const Device* device, int32_t audio_rate, int32_t audio_buffer_size)
{
    assert(device != NULL);
    assert(audio_rate > 0);
    assert(audio_buffer_size >= 0);

    Delay_pstate* dpstate = memory_alloc_item(Delay_pstate);
    if (dpstate == NULL)
        return NULL;

    if (!Proc_state_init(&dpstate->parent, device, audio_rate, audio_buffer_size))
    {
        memory_free(dpstate);
        return NULL;
    }

    dpstate->parent.destroy = del_Delay_pstate;
    dpstate->parent.set_audio_rate = Delay_pstate_set_audio_rate;
    dpstate->parent.reset = Delay_pstate_reset;
    dpstate->parent.render_mixed = Delay_pstate_render_mixed;
    dpstate->parent.clear_history = Delay_pstate_clear_history;
    dpstate->buf_pos = 0;

    for (int i = 0; i < KQT_BUFFERS_MAX; ++i)
        dpstate->bufs[i] = NULL;

    const Proc_delay* delay = (const Proc_delay*)device->dimpl;

    const int32_t delay_buf_size = delay->max_delay * audio_rate + 1;

    for (int i = 0; i < KQT_BUFFERS_MAX; ++i)
    {
        dpstate->bufs[i] = new_Work_buffer(delay_buf_size);
        if (dpstate->bufs[i] == NULL)
        {
            del_Device_state(&dpstate->parent.parent);
            return NULL;
        }
    }

    return &dpstate->parent.parent;
}
Exemplo n.º 3
0
static bool Device_thread_state_add_buffer(
        Device_thread_state* ts,
        Device_buffer_type buf_type,
        Device_port_type port_type,
        int port)
{
    rassert(ts != NULL);
    rassert(buf_type < DEVICE_BUFFER_TYPES);
    rassert(port_type < DEVICE_PORT_TYPES);
    rassert(port >= 0);
    rassert(port < KQT_DEVICE_PORTS_MAX);

    if (Etable_get(ts->buffers[buf_type][port_type], port) != NULL)
        return true;

    Work_buffer* wb = new_Work_buffer(ts->audio_buffer_size);
    if ((wb == NULL) || !Etable_set(ts->buffers[buf_type][port_type], port, wb))
    {
        del_Work_buffer(wb);
        return false;
    }

    return true;
}