Changeset 4eff63c in mainline
- Timestamp:
- 2013-04-11T21:55:43Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 6eeaf1d
- Parents:
- bee5349
- Location:
- uspace/srv/audio/hound
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/audio/hound/audio_device.c
rbee5349 r4eff63c 55 55 static int get_buffer(audio_device_t *dev); 56 56 static int release_buffer(audio_device_t *dev); 57 static void fill_buffer(audio_device_t *dev, size_t size);57 static void advance_buffer(audio_device_t *dev, size_t size); 58 58 static inline bool is_running(audio_device_t *dev) 59 59 { … … 167 167 pcm_format_silence(dev->buffer.base, dev->buffer.size, 168 168 &dev->sink.format); 169 fill_buffer(dev, dev->buffer.fragment_size * 2); 169 //TODO add underrun detection. 170 const size_t size = dev->buffer.fragment_size * 2; 171 /* We never cross the end of the buffer here */ 172 audio_sink_mix_inputs(&dev->sink, dev->buffer.position, size); 173 advance_buffer(dev, size); 170 174 171 175 const unsigned frames = dev->buffer.fragment_size / … … 280 284 struct timeval time1; 281 285 getuptime(&time1); 282 fill_buffer(dev, dev->buffer.fragment_size); 286 //TODO add underrun detection. 287 /* We never cross the end of the buffer here */ 288 audio_sink_mix_inputs(&dev->sink, dev->buffer.position, 289 dev->buffer.fragment_size); 290 advance_buffer(dev, dev->buffer.fragment_size); 283 291 struct timeval time2; 284 292 getuptime(&time2); … … 290 298 log_verbose("Playback terminated!"); 291 299 return; 292 case PCM_EVENT_FRAMES_CAPTURED: 293 //TODO implement 300 case PCM_EVENT_FRAMES_CAPTURED: { 301 const int ret = audio_source_push_data(&dev->source, 302 dev->buffer.position, dev->buffer.fragment_size); 303 advance_buffer(dev, dev->buffer.fragment_size); 304 if (ret != EOK) 305 log_warning("Failed to push recorded data"); 294 306 break; 307 } 295 308 case PCM_EVENT_CAPTURE_TERMINATED: 296 309 log_verbose("Recording terminated!"); … … 372 385 373 386 /** 374 * M ix data from all connections and add it to the device buffer.387 * Move buffer position pointer. 375 388 * @param dev Audio device. 376 * @param size portion of the device buffer to fill.377 */ 378 static void fill_buffer(audio_device_t *dev, size_t size)389 * @param size number of bytes to move forward 390 */ 391 static void advance_buffer(audio_device_t *dev, size_t size) 379 392 { 380 393 assert(dev); 381 394 assert(dev->buffer.position >= dev->buffer.base); 382 395 assert(dev->buffer.position < (dev->buffer.base + dev->buffer.size)); 383 384 //TODO add underrun detection.385 audio_sink_mix_inputs(&dev->sink, dev->buffer.position, size);386 396 dev->buffer.position += size; 387 397 if (dev->buffer.position == (dev->buffer.base + dev->buffer.size)) -
uspace/srv/audio/hound/audio_source.c
rbee5349 r4eff63c 41 41 #include <str_error.h> 42 42 43 #include "audio_data.h" 43 44 #include "audio_source.h" 44 45 #include "audio_sink.h" 46 #include "connection.h" 45 47 #include "log.h" 46 48 … … 87 89 source->name = NULL; 88 90 } 91 /** 92 * Push data to all connections. 93 * @param source The source of the data. 94 * @param dest Destination buffer. 95 * @param size size of the @p dest buffer. 96 * @return Error code. 97 */ 98 int audio_source_push_data(audio_source_t *source, const void *data, 99 size_t size) 100 { 101 assert(source); 102 assert(data); 103 104 audio_data_t *adata = audio_data_create(data, size, source->format); 105 if (!adata) 106 return ENOMEM; 107 108 list_foreach(source->connections, it) { 109 connection_t *conn = connection_from_source_list(it); 110 const int ret = connection_push_data(conn, adata); 111 if (ret != EOK) { 112 log_warning("Failed push data to %s: %s", 113 connection_sink_name(conn), str_error(ret)); 114 } 115 } 116 audio_data_unref(adata); 117 return EOK; 118 } 89 119 90 120 /** -
uspace/srv/audio/hound/audio_source.h
rbee5349 r4eff63c 75 75 const pcm_format_t *f); 76 76 void audio_source_fini(audio_source_t *source); 77 int audio_source_push_data(audio_source_t *source, const void *data, 78 size_t size); 77 79 static inline const pcm_format_t *audio_source_format(const audio_source_t *s) 78 80 {
Note:
See TracChangeset
for help on using the changeset viewer.