Changeset bf13c9a4 in mainline for uspace/srv/audio/hound/hound_ctx.c
- Timestamp:
- 2013-04-04T12:16:46Z (11 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 23878dc
- Parents:
- b266f9e
- File:
-
- 1 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 * @}
Note:
See TracChangeset
for help on using the changeset viewer.