Changeset d988ef2 in mainline for uspace/srv/audio/hound/audio_data.h


Ignore:
Timestamp:
2013-04-05T12:02:45Z (12 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
f1438e5
Parents:
4b33db8e
Message:

hound: audio pipe class

This will be used by both streams and connections

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/audio/hound/audio_data.h

    r4b33db8e rd988ef2  
    3737#define AUDIO_DATA_H_
    3838
    39 #include <pcm/format.h>
    4039#include <adt/list.h>
    4140#include <atomic.h>
     41#include <errno.h>
     42#include <fibril_synch.h>
     43#include <pcm/format.h>
    4244
    4345typedef struct {
     
    5456} audio_data_link_t;
    5557
     58typedef struct {
     59        list_t list;
     60        size_t bytes;
     61        size_t frames;
     62        fibril_mutex_t guard;
     63} audio_pipe_t;
     64
    5665static inline audio_data_link_t * audio_data_link_list_instance(link_t *l)
    5766{
     
    6170audio_data_t * audio_data_create(const void *data, size_t size,
    6271    pcm_format_t format);
     72void audio_data_addref(audio_data_t *adata);
    6373void audio_data_unref(audio_data_t *adata);
    6474
     
    8393        return alink->adata->size - alink->position;
    8494}
     95
     96void audio_pipe_init(audio_pipe_t *pipe);
     97void audio_pipe_fini(audio_pipe_t *pipe);
     98
     99int audio_pipe_push(audio_pipe_t *pipe, audio_data_t *data);
     100audio_data_t *audio_pipe_pop(audio_pipe_t *pipe);
     101
     102ssize_t audio_pipe_mix_data(audio_pipe_t *pipe, void *buffer, size_t size,
     103    const pcm_format_t *f);
     104
     105static inline size_t audio_pipe_bytes(audio_pipe_t *pipe)
     106{
     107        assert(pipe);
     108        return pipe->bytes;
     109}
     110
     111static inline size_t audio_pipe_frames(audio_pipe_t *pipe)
     112{
     113        assert(pipe);
     114        return pipe->frames;
     115}
     116
     117static inline int audio_pipe_push_data(audio_pipe_t *pipe,
     118    const void *data, size_t size, pcm_format_t f)
     119{
     120        audio_data_t *adata = audio_data_create(data, size, f);
     121        if (adata) {
     122                const int ret = audio_pipe_push(pipe, adata);
     123                audio_data_unref(adata);
     124                return ret;
     125        }
     126        return ENOMEM;
     127}
     128
     129
    85130#endif
    86131
Note: See TracChangeset for help on using the changeset viewer.