Changes in uspace/srv/audio/hound/audio_device.c [7f9d97f3:b7fd2a0] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/audio/hound/audio_device.c
r7f9d97f3 rb7fd2a0 51 51 #define BUFFER_PARTS 16 52 52 53 static int device_sink_connection_callback(audio_sink_t *sink, bool new);54 static int device_source_connection_callback(audio_source_t *source, bool new);53 static errno_t device_sink_connection_callback(audio_sink_t *sink, bool new); 54 static errno_t device_source_connection_callback(audio_source_t *source, bool new); 55 55 static void device_event_callback(ipc_callid_t iid, ipc_call_t *icall, void *arg); 56 static int device_check_format(audio_sink_t* sink);57 static int get_buffer(audio_device_t *dev);58 static int release_buffer(audio_device_t *dev);56 static errno_t device_check_format(audio_sink_t* sink); 57 static errno_t get_buffer(audio_device_t *dev); 58 static errno_t release_buffer(audio_device_t *dev); 59 59 static void advance_buffer(audio_device_t *dev, size_t size); 60 60 static inline bool is_running(audio_device_t *dev) … … 62 62 assert(dev); 63 63 /* we release buffer on stop so this should be enough */ 64 return (bool)dev->buffer.base;64 return dev->buffer.base != NULL; 65 65 } 66 66 … … 72 72 * @return Error code. 73 73 */ 74 int audio_device_init(audio_device_t *dev, service_id_t id, const char *name)74 errno_t audio_device_init(audio_device_t *dev, service_id_t id, const char *name) 75 75 { 76 76 assert(dev); … … 121 121 { 122 122 assert(dev); 123 if (audio_pcm_query_cap(dev->sess, AUDIO_CAP_CAPTURE)) 123 sysarg_t val; 124 errno_t rc = audio_pcm_query_cap(dev->sess, AUDIO_CAP_CAPTURE, &val); 125 if (rc == EOK && val) 124 126 return &dev->source; 125 127 return NULL; … … 135 137 { 136 138 assert(dev); 137 if (audio_pcm_query_cap(dev->sess, AUDIO_CAP_PLAYBACK)) 139 sysarg_t val; 140 errno_t rc = audio_pcm_query_cap(dev->sess, AUDIO_CAP_PLAYBACK, &val); 141 if (rc == EOK && val) 138 142 return &dev->sink; 139 143 return NULL; … … 149 153 * connections. 150 154 */ 151 static int device_sink_connection_callback(audio_sink_t* sink, bool new)155 static errno_t device_sink_connection_callback(audio_sink_t* sink, bool new) 152 156 { 153 157 assert(sink); … … 156 160 log_verbose("First connection on device sink '%s'", sink->name); 157 161 158 int ret = get_buffer(dev);162 errno_t ret = get_buffer(dev); 159 163 if (ret != EOK) { 160 164 log_error("Failed to get device buffer: %s", … … 192 196 log_verbose("Removed last connection on device sink '%s'", 193 197 sink->name); 194 int ret = audio_pcm_stop_playback(dev->sess);198 errno_t ret = audio_pcm_stop_playback(dev->sess); 195 199 if (ret != EOK) { 196 200 log_error("Failed to stop playback: %s", … … 211 215 * connections. 212 216 */ 213 static int device_source_connection_callback(audio_source_t *source, bool new)217 static errno_t device_source_connection_callback(audio_source_t *source, bool new) 214 218 { 215 219 assert(source); 216 220 audio_device_t *dev = source->private_data; 217 221 if (new && list_count(&source->connections) == 1) { 218 int ret = get_buffer(dev);222 errno_t ret = get_buffer(dev); 219 223 if (ret != EOK) { 220 224 log_error("Failed to get device buffer: %s", … … 240 244 if (list_count(&source->connections) == 0) { /* Disconnected */ 241 245 assert(!new); 242 int ret = audio_pcm_stop_capture_immediate(dev->sess);246 errno_t ret = audio_pcm_stop_capture_immediate(dev->sess); 243 247 if (ret != EOK) { 244 248 log_error("Failed to start recording: %s", … … 285 289 log_verbose("Capture terminated"); 286 290 dev->source.format = AUDIO_FORMAT_ANY; 287 const int ret = release_buffer(dev);291 const errno_t ret = release_buffer(dev); 288 292 if (ret != EOK) { 289 293 log_error("Failed to release buffer: %s", … … 296 300 log_verbose("Playback Terminated"); 297 301 dev->sink.format = AUDIO_FORMAT_ANY; 298 const int ret = release_buffer(dev);302 const errno_t ret = release_buffer(dev); 299 303 if (ret != EOK) { 300 304 log_error("Failed to release buffer: %s", … … 305 309 } 306 310 case PCM_EVENT_FRAMES_CAPTURED: { 307 const int ret = audio_source_push_data(&dev->source,311 const errno_t ret = audio_source_push_data(&dev->source, 308 312 dev->buffer.position, dev->buffer.fragment_size); 309 313 advance_buffer(dev, dev->buffer.fragment_size); … … 325 329 * @return Error code. 326 330 */ 327 static int device_check_format(audio_sink_t* sink)331 static errno_t device_check_format(audio_sink_t* sink) 328 332 { 329 333 assert(sink); … … 343 347 * @return Error code. 344 348 */ 345 static int get_buffer(audio_device_t *dev)349 static errno_t get_buffer(audio_device_t *dev) 346 350 { 347 351 assert(dev); … … 358 362 size_t preferred_size = 0; 359 363 360 const int ret = audio_pcm_get_buffer(dev->sess, &dev->buffer.base,364 const errno_t ret = audio_pcm_get_buffer(dev->sess, &dev->buffer.base, 361 365 &preferred_size); 362 366 if (ret == EOK) { … … 374 378 * @return Error code. 375 379 */ 376 static int release_buffer(audio_device_t *dev)380 static errno_t release_buffer(audio_device_t *dev) 377 381 { 378 382 assert(dev); 379 383 assert(dev->buffer.base); 380 384 381 const int ret = audio_pcm_release_buffer(dev->sess);385 const errno_t ret = audio_pcm_release_buffer(dev->sess); 382 386 if (ret == EOK) { 383 387 as_area_destroy(dev->buffer.base);
Note:
See TracChangeset
for help on using the changeset viewer.