Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset 00006e0 in mainline


Ignore:
Timestamp:
2012-07-02T12:31:08Z (8 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
master
Children:
2f7042e
Parents:
bd250b0f
Message:

audio: Allow client to specify buffer size.

Location:
uspace
Files:
2 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;
  • uspace/lib/drv/generic/remote_audio_pcm_buffer.c

    rbd250b0f r00006e0  
    3434#include <async.h>
    3535#include <errno.h>
    36 #include <assert.h>
    3736#include <str.h>
    3837#include <as.h>
     
    8584    unsigned *id)
    8685{
    87         if (!exch || !buffer || !size)
    88                 return EINVAL;
    89         sysarg_t buffer_size, buffer_id;
    90         const int ret = async_req_1_2(exch,
     86        if (!exch || !buffer || !size || !id)
     87                return EINVAL;
     88
     89        sysarg_t buffer_size = *size, buffer_id = 0;
     90        const int ret = async_req_2_2(exch,
    9191            DEV_IFACE_ID(AUDIO_PCM_BUFFER_IFACE), IPC_M_AUDIO_PCM_GET_BUFFER,
    92             &buffer_size, &buffer_id);
     92            (sysarg_t)buffer_size, &buffer_size, &buffer_id);
    9393        if (ret == EOK) {
    9494                void *dst = NULL;
    95                 const int ret =
    96                     async_share_in_start_0_0(exch, buffer_size, &dst);
     95                // FIXME Do we need to know the flags?
     96                const int ret = async_share_in_start_0_0(exch, buffer_size, &dst);
    9797                if (ret != EOK) {
    9898                        return ret;
     
    100100                *buffer = dst;
    101101                *size = buffer_size;
    102         }
    103         if (ret == EOK && id)
    104102                *id = buffer_id;
     103        }
    105104        return ret;
    106105}
     
    219218        }
    220219        void *buffer = NULL;
    221         size_t size = 0;
     220        size_t size = DEV_IPC_GET_ARG1(*call);
    222221        unsigned id = 0;
    223222        const int ret = pcm_iface->get_buffer(fun, &buffer, &size, &id);
Note: See TracChangeset for help on using the changeset viewer.