Changeset bf13c9a4 in mainline
- Timestamp:
- 2013-04-04T12:16:46Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 23878dc
- Parents:
- b266f9e
- Location:
- uspace/srv/audio/hound
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/audio/hound/hound_ctx.c
rb266f9e rbf13c9a4 94 94 } 95 95 96 /* 97 * STREAMS 98 */ 99 100 typedef struct { 101 const void *data; 102 size_t size; 103 link_t link; 104 } audio_data_t; 105 106 static inline audio_data_t * audio_data_list_instance(link_t *l) 107 { 108 return l ? list_get_instance(l, audio_data_t, link) : NULL; 109 } 110 96 111 hound_ctx_stream_t *hound_ctx_create_stream(hound_ctx_t *ctx, int flags, 97 112 pcm_format_t format, size_t buffer_size) … … 100 115 hound_ctx_stream_t *stream = malloc(sizeof(hound_ctx_stream_t)); 101 116 if (stream) { 117 list_initialize(&stream->fifo); 102 118 link_initialize(&stream->link); 103 119 stream->ctx = ctx; … … 105 121 stream->format = format; 106 122 stream->allowed_size = buffer_size; 123 stream->current_size = 0; 107 124 list_append(&stream->link, &ctx->streams); 108 125 log_verbose("CTX: %p added stream; flags:%#x ch: %u r:%u f:%s", … … 116 133 { 117 134 if (stream) { 135 //TODO consider DRAIN FLAG 118 136 list_remove(&stream->link); 119 //TODO free used buffer space 120 log_verbose("CTX: %p remove stream; flags:%#x ch: %u r:%u f:%s", 121 stream->ctx, stream->flags, stream->format.channels, 137 if (!list_empty(&stream->fifo)) 138 log_warning("Destroying stream with non empty buffer"); 139 while (!list_empty(&stream->fifo)) { 140 link_t *l = list_first(&stream->fifo); 141 audio_data_t *data = audio_data_list_instance(l); 142 list_remove(l); 143 free(data->data); 144 free(data); 145 } 146 log_verbose("CTX: %p remove stream (%zu/%zu); " 147 "flags:%#x ch: %u r:%u f:%s", 148 stream->ctx, stream->current_size, stream->allowed_size, 149 stream->flags, stream->format.channels, 122 150 stream->format.sampling_rate, 123 151 pcm_sample_format_str(stream->format.sample_format)); … … 126 154 } 127 155 156 157 int hound_ctx_stream_write(hound_ctx_stream_t *stream, const void *data, 158 size_t size) 159 { 160 assert(stream); 161 log_verbose("%p:, %zu", stream, size); 162 163 if (stream->allowed_size && size > stream->allowed_size) 164 return EINVAL; 165 166 if (stream->allowed_size && 167 (stream->current_size + size > stream->allowed_size)) 168 return EBUSY; 169 170 audio_data_t *adata = malloc(sizeof(audio_data_t)); 171 if (adata) { 172 adata->data = data; 173 adata->size = size; 174 link_initialize(&adata->link); 175 list_append(&adata->link, &stream->fifo); 176 stream->current_size += size; 177 return EOK; 178 } 179 log_warning("Failed to enqueue %zu bytes of data.", size); 180 return ENOMEM; 181 } 182 183 int hound_ctx_stream_read(hound_ctx_stream_t *stream, void *data, size_t size) 184 { 185 log_verbose("%p:, %zu", stream, size); 186 return ENOTSUP; 187 } 188 128 189 /** 129 190 * @} -
uspace/srv/audio/hound/hound_ctx.h
rb266f9e rbf13c9a4 56 56 typedef struct { 57 57 link_t link; 58 list_t fifo; 58 59 hound_ctx_t *ctx; 59 60 pcm_format_t format; 60 61 int flags; 61 62 size_t allowed_size; 63 size_t current_size; 62 64 } hound_ctx_stream_t; 63 65 … … 79 81 void hound_ctx_destroy_stream(hound_ctx_stream_t *stream); 80 82 83 int hound_ctx_stream_write(hound_ctx_stream_t *stream, const void *buffer, 84 size_t size); 85 int hound_ctx_stream_read(hound_ctx_stream_t *stream, void *buffer, size_t size); 86 81 87 #endif 82 88 -
uspace/srv/audio/hound/iface.c
rb266f9e rbf13c9a4 131 131 static int iface_rem_stream(void *server, void *stream) 132 132 { 133 log_verbose("%s: %p, %s", __FUNCTION__, server, (char *)stream);134 133 hound_ctx_destroy_stream(stream); 135 134 return EOK; … … 138 137 static int iface_stream_data_read(void *stream, void *buffer, size_t size) 139 138 { 140 log_verbose("%p:, %zu", stream, size); 141 return ENOTSUP; 139 return hound_ctx_stream_read(stream, buffer, size); 142 140 } 143 141 144 142 static int iface_stream_data_write(void *stream, const void *buffer, size_t size) 145 143 { 146 log_verbose("%p: %zu", stream, size); 147 return ENOTSUP; 144 return hound_ctx_stream_write(stream, buffer, size); 148 145 } 149 146
Note:
See TracChangeset
for help on using the changeset viewer.