Changeset 00006e0 in mainline for uspace/drv/audio/sb16/dsp.c


Ignore:
Timestamp:
2012-07-02T12:31:08Z (12 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
2f7042e
Parents:
bd250b0f
Message:

audio: Allow client to specify buffer size.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/audio/sb16/dsp.c

    rbd250b0f r00006e0  
    113113}
    114114/*----------------------------------------------------------------------------*/
    115 static inline int sb_setup_buffer(sb_dsp_t *dsp)
    116 {
    117         assert(dsp);
    118         uint8_t *buffer = dma_create_buffer24(BUFFER_SIZE);
     115static inline int sb_setup_buffer(sb_dsp_t *dsp, size_t size)
     116{
     117        assert(dsp);
     118        if (size > BUFFER_SIZE || size == 0 || (size % 2) == 1)
     119                size = BUFFER_SIZE;
     120        uint8_t *buffer = dma_create_buffer24(size);
    119121        if (buffer == NULL) {
    120122                ddf_log_error("Failed to allocate buffer.\n");
     
    125127        assert(pa < (1 << 25));
    126128        /* Set 16 bit channel */
    127         const int ret = sb_setup_dma(dsp, pa, BUFFER_SIZE);
     129        const int ret = sb_setup_dma(dsp, pa, size);
    128130        if (ret == EOK) {
    129131                dsp->buffer.data = buffer;
    130                 dsp->buffer.size = BUFFER_SIZE;
    131                 bzero(buffer, BUFFER_SIZE);
     132                dsp->buffer.size = size;
     133                bzero(dsp->buffer.data, dsp->buffer.size);
    132134        } else {
    133135                ddf_log_error("Failed to setup DMA16 channel %s.\n",
     
    197199{
    198200        assert(dsp);
    199         const int ret = sb_setup_buffer(dsp);
    200         ddf_log_debug("Providing buffer(%u): %p, %zu.\n",
     201        assert(size);
     202
     203        const int ret = sb_setup_buffer(dsp, *size);
     204        ddf_log_debug("Providing buffer(%u): %p, %zu B.\n",
    201205            BUFFER_ID, dsp->buffer.data, dsp->buffer.size);
     206
    202207        if (ret == EOK && buffer)
    203208                *buffer = dsp->buffer.data;
Note: See TracChangeset for help on using the changeset viewer.