Changeset 76ea1b7 in mainline


Ignore:
Timestamp:
2013-04-04T13:38:38Z (11 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
5a6f362
Parents:
23878dc
Message:

hound: make audio data reference counted

Location:
uspace/srv/audio/hound
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/audio/hound/Makefile

    r23878dc r76ea1b7  
    4343SOURCES = \
    4444        audio_client.c \
     45        audio_data.c \
    4546        audio_device.c \
    4647        audio_sink.c \
  • uspace/srv/audio/hound/audio_data.h

    r23878dc r76ea1b7  
    3838
    3939#include <adt/list.h>
     40#include <atomic.h>
    4041
    4142typedef struct {
    4243        const void *data;
    4344        size_t size;
    44         link_t link;
     45        atomic_t refcount;
    4546} audio_data_t;
    4647
    47 static inline audio_data_t * audio_data_list_instance(link_t *l)
     48typedef struct {
     49        link_t link;
     50        audio_data_t *adata;
     51        size_t position;
     52} audio_data_link_t;
     53
     54static inline audio_data_link_t * audio_data_link_list_instance(link_t *l)
    4855{
    49         return l ? list_get_instance(l, audio_data_t, link) : NULL;
     56        return l ? list_get_instance(l, audio_data_link_t, link) : NULL;
    5057}
    5158
     59audio_data_link_t * audio_data_link_create(const void *data, size_t size);
     60audio_data_link_t *audio_data_link_clone(audio_data_t *adata);
     61void audio_data_link_destroy(audio_data_link_t *link);
    5262
    5363#endif
  • uspace/srv/audio/hound/hound_ctx.c

    r23878dc r76ea1b7  
    143143                while (!list_empty(&stream->fifo)) {
    144144                        link_t *l = list_first(&stream->fifo);
    145                         audio_data_t *data = audio_data_list_instance(l);
     145                        audio_data_link_t *data =
     146                            audio_data_link_list_instance(l);
    146147                        list_remove(l);
    147                         free(data->data);
    148                         free(data);
     148                        audio_data_link_destroy(data);
    149149                }
    150150                log_verbose("CTX: %p remove stream (%zu/%zu); "
     
    172172                return EBUSY;
    173173
    174         audio_data_t *adata = malloc(sizeof(audio_data_t));
    175         if (adata) {
    176                 adata->data = data;
    177                 adata->size = size;
    178                 link_initialize(&adata->link);
    179                 list_append(&adata->link, &stream->fifo);
     174        audio_data_link_t *adatalink = audio_data_link_create(data, size);
     175        if (adatalink) {
     176                list_append(&adatalink->link, &stream->fifo);
    180177                stream->current_size += size;
    181178                return EOK;
     
    191188}
    192189
     190void hound_ctx_stream_drain(hound_ctx_stream_t *stream)
     191{
     192        assert(stream);
     193        while (!list_empty(&stream->fifo))
     194                async_usleep(10000);
     195}
     196
     197int hound_ctx_stream_add(hound_ctx_stream_t *stream, void *buffer, size_t size,
     198    pcm_format_t format)
     199{
     200        return ENOTSUP;
     201}
     202
    193203/**
    194204 * @}
  • uspace/srv/audio/hound/hound_ctx.h

    r23878dc r76ea1b7  
    7171    size_t size);
    7272int hound_ctx_stream_read(hound_ctx_stream_t *stream, void *buffer, size_t size);
     73void hound_ctx_stream_drain(hound_ctx_stream_t *stream);
     74int hound_ctx_stream_add(hound_ctx_stream_t *stream, void *buffer, size_t size,
     75    pcm_format_t format);
    7376
    7477#endif
Note: See TracChangeset for help on using the changeset viewer.