1 /* Copyright (c) 2012 The Chromium OS Authors. All rights reserved. 2 * Use of this source code is governed by a BSD-style license that can be 3 * found in the LICENSE file. 4 */ 5 6 #ifndef _GNU_SOURCE 7 #define _GNU_SOURCE /* for ppoll */ 8 #endif 9 10 #include <pthread.h> 11 #include <poll.h> 12 #include <sys/param.h> 13 #include <syslog.h> 14 15 #include "cras_audio_area.h" 16 #include "audio_thread_log.h" 17 #include "cras_config.h" 18 #include "cras_fmt_conv.h" 19 #include "cras_iodev.h" 20 #include "cras_rstream.h" 21 #include "cras_server_metrics.h" 22 #include "cras_system_state.h" 23 #include "cras_types.h" 24 #include "cras_util.h" 25 #include "dev_stream.h" 26 #include "audio_thread.h" 27 #include "utlist.h" 28 29 #define MIN_PROCESS_TIME_US 500 /* 0.5ms - min amount of time to mix/src. */ 30 #define SLEEP_FUZZ_FRAMES 10 /* # to consider "close enough" to sleep frames. */ 31 #define MIN_READ_WAIT_US 2000 /* 2ms */ 32 static const struct timespec playback_wake_fuzz_ts = { 33 0, 500 * 1000 /* 500 usec. */ 34 }; 35 36 /* Messages that can be sent from the main context to the audio thread. */ 37 enum AUDIO_THREAD_COMMAND { 38 AUDIO_THREAD_ADD_OPEN_DEV, 39 AUDIO_THREAD_RM_OPEN_DEV, 40 AUDIO_THREAD_ADD_STREAM, 41 AUDIO_THREAD_DISCONNECT_STREAM, 42 AUDIO_THREAD_STOP, 43 AUDIO_THREAD_DUMP_THREAD_INFO, 44 AUDIO_THREAD_DRAIN_STREAM, 45 AUDIO_THREAD_CONFIG_GLOBAL_REMIX, 46 AUDIO_THREAD_DEV_START_RAMP, 47 AUDIO_THREAD_REMOVE_CALLBACK, 48 }; 49 50 struct audio_thread_msg { 51 size_t length; 52 enum AUDIO_THREAD_COMMAND id; 53 }; 54 55 struct audio_thread_config_global_remix { 56 struct audio_thread_msg header; 57 struct cras_fmt_conv *fmt_conv; 58 }; 59 60 struct audio_thread_open_device_msg { 61 struct audio_thread_msg header; 62 struct cras_iodev *dev; 63 }; 64 65 struct audio_thread_rm_callback_msg { 66 struct audio_thread_msg header; 67 int fd; 68 }; 69 70 struct audio_thread_add_rm_stream_msg { 71 struct audio_thread_msg header; 72 struct cras_rstream *stream; 73 struct cras_iodev **devs; 74 unsigned int num_devs; 75 }; 76 77 struct audio_thread_dump_debug_info_msg { 78 struct audio_thread_msg header; 79 struct audio_debug_info *info; 80 }; 81 82 struct audio_thread_dev_start_ramp_msg { 83 struct audio_thread_msg header; 84 struct cras_iodev *dev; 85 enum CRAS_IODEV_RAMP_REQUEST request; 86 }; 87 88 /* Audio thread logging. */ 89 struct audio_thread_event_log *atlog; 90 /* Global fmt converter used to remix output channels. */ 91 static struct cras_fmt_conv *remix_converter = NULL; 92 93 static struct iodev_callback_list *iodev_callbacks; 94 static struct timespec longest_wake; 95 96 struct iodev_callback_list { 97 int fd; 98 int is_write; 99 int enabled; 100 thread_callback cb; 101 void *cb_data; 102 struct pollfd *pollfd; 103 struct iodev_callback_list *prev, *next; 104 }; 105 106 static void _audio_thread_add_callback(int fd, thread_callback cb, 107 void *data, int is_write) 108 { 109 struct iodev_callback_list *iodev_cb; 110 111 /* Don't add iodev_cb twice */ 112 DL_FOREACH(iodev_callbacks, iodev_cb) 113 if (iodev_cb->fd == fd && iodev_cb->cb_data == data) 114 return; 115 116 iodev_cb = (struct iodev_callback_list *)calloc(1, sizeof(*iodev_cb)); 117 iodev_cb->fd = fd; 118 iodev_cb->cb = cb; 119 iodev_cb->cb_data = data; 120 iodev_cb->enabled = 1; 121 iodev_cb->is_write = is_write; 122 123 DL_APPEND(iodev_callbacks, iodev_cb); 124 } 125 126 void audio_thread_add_callback(int fd, thread_callback cb, 127 void *data) 128 { 129 _audio_thread_add_callback(fd, cb, data, 0); 130 } 131 132 void audio_thread_add_write_callback(int fd, thread_callback cb, 133 void *data) 134 { 135 _audio_thread_add_callback(fd, cb, data, 1); 136 } 137 138 void audio_thread_rm_callback(int fd) 139 { 140 struct iodev_callback_list *iodev_cb; 141 142 DL_FOREACH(iodev_callbacks, iodev_cb) { 143 if (iodev_cb->fd == fd) { 144 DL_DELETE(iodev_callbacks, iodev_cb); 145 free(iodev_cb); 146 return; 147 } 148 } 149 } 150 151 void audio_thread_enable_callback(int fd, int enabled) 152 { 153 struct iodev_callback_list *iodev_cb; 154 155 DL_FOREACH(iodev_callbacks, iodev_cb) { 156 if (iodev_cb->fd == fd) { 157 iodev_cb->enabled = !!enabled; 158 return; 159 } 160 } 161 } 162 163 /* Sends a response (error code) from the audio thread to the main thread. 164 * Indicates that the last message sent to the audio thread has been handled 165 * with an error code of rc. 166 * Args: 167 * thread - thread responding to command. 168 * rc - Result code to send back to the main thread. 169 * Returns: 170 * The number of bytes written to the main thread. 171 */ 172 static int audio_thread_send_response(struct audio_thread *thread, int rc) 173 { 174 return write(thread->to_main_fds[1], &rc, sizeof(rc)); 175 } 176 177 /* Reads a command from the main thread. Called from the playback/capture 178 * thread. This will read the next available command from the main thread and 179 * put it in buf. 180 * Args: 181 * thread - thread reading the command. 182 * buf - Message is stored here on return. 183 * max_len - maximum length of message to put into buf. 184 * Returns: 185 * 0 on success, negative error code on failure. 186 */ 187 static int audio_thread_read_command(struct audio_thread *thread, 188 uint8_t *buf, 189 size_t max_len) 190 { 191 int to_read, nread, rc; 192 struct audio_thread_msg *msg = (struct audio_thread_msg *)buf; 193 194 /* Get the length of the message first */ 195 nread = read(thread->to_thread_fds[0], buf, sizeof(msg->length)); 196 if (nread < 0) 197 return nread; 198 if (msg->length > max_len) 199 return -ENOMEM; 200 201 to_read = msg->length - nread; 202 rc = read(thread->to_thread_fds[0], &buf[0] + nread, to_read); 203 if (rc < 0) 204 return rc; 205 return 0; 206 } 207 208 /* Builds an initial buffer to avoid an underrun. Adds min_level of latency. */ 209 static void fill_odevs_zeros_min_level(struct cras_iodev *odev) 210 { 211 cras_iodev_fill_odev_zeros(odev, odev->min_buffer_level); 212 } 213 214 static void thread_rm_open_adev(struct audio_thread *thread, 215 struct open_dev *adev); 216 217 static void delete_stream_from_dev(struct cras_iodev *dev, 218 struct cras_rstream *stream) 219 { 220 struct dev_stream *out; 221 222 out = cras_iodev_rm_stream(dev, stream); 223 if (out) 224 dev_stream_destroy(out); 225 } 226 227 /* Append a new stream to a specified set of iodevs. */ 228 static int append_stream(struct audio_thread *thread, 229 struct cras_rstream *stream, 230 struct cras_iodev **iodevs, 231 unsigned int num_iodevs) 232 { 233 struct open_dev *open_dev; 234 struct cras_iodev *dev; 235 struct dev_stream *out; 236 struct timespec init_cb_ts; 237 const struct timespec *stream_ts; 238 unsigned int i; 239 int rc = 0; 240 241 for (i = 0; i < num_iodevs; i++) { 242 DL_SEARCH_SCALAR(thread->open_devs[stream->direction], open_dev, 243 dev, iodevs[i]); 244 if (!open_dev) 245 continue; 246 247 dev = iodevs[i]; 248 DL_SEARCH_SCALAR(dev->streams, out, stream, stream); 249 if (out) 250 continue; 251 252 /* If open device already has stream, get the first stream 253 * and use its next callback time to align with. Otherwise 254 * use the timestamp now as the initial callback time for 255 * new stream. 256 */ 257 if (dev->streams && 258 (stream_ts = dev_stream_next_cb_ts(dev->streams))) 259 init_cb_ts = *stream_ts; 260 else 261 clock_gettime(CLOCK_MONOTONIC_RAW, &init_cb_ts); 262 263 out = dev_stream_create(stream, dev->info.idx, 264 dev->ext_format, dev, &init_cb_ts); 265 if (!out) { 266 rc = -EINVAL; 267 break; 268 } 269 270 /* When the first input stream is added, flush the input buffer 271 * so that we can read from multiple input devices of the same 272 * buffer level. 273 */ 274 if ((stream->direction == CRAS_STREAM_INPUT) && !dev->streams) { 275 int num_flushed = dev->flush_buffer(dev); 276 if (num_flushed < 0) { 277 rc = num_flushed; 278 break; 279 } 280 } 281 282 cras_iodev_add_stream(dev, out); 283 284 /* For multiple inputs case, if the new stream is not the first 285 * one to append, copy the 1st stream's offset to it so that 286 * future read offsets can be aligned across all input streams 287 * to avoid the deadlock scenario when multiple streams reading 288 * from multiple devices. 289 */ 290 if ((stream->direction == CRAS_STREAM_INPUT) && 291 (dev->streams != out)) { 292 unsigned int offset = 293 cras_iodev_stream_offset(dev, dev->streams); 294 if (offset > stream->cb_threshold) 295 offset = stream->cb_threshold; 296 cras_iodev_stream_written(dev, out, offset); 297 298 offset = cras_rstream_dev_offset(dev->streams->stream, 299 dev->info.idx); 300 if (offset > stream->cb_threshold) 301 offset = stream->cb_threshold; 302 cras_rstream_dev_offset_update(stream, offset, 303 dev->info.idx); 304 } 305 } 306 307 if (rc) { 308 DL_FOREACH(thread->open_devs[stream->direction], open_dev) { 309 dev = open_dev->dev; 310 DL_SEARCH_SCALAR(dev->streams, out, stream, stream); 311 if (!out) 312 continue; 313 314 cras_iodev_rm_stream(dev, stream); 315 dev_stream_destroy(out); 316 } 317 } 318 319 return rc; 320 } 321 322 /* Handles messages from main thread to add a new active device. */ 323 static int thread_add_open_dev(struct audio_thread *thread, 324 struct cras_iodev *iodev) 325 { 326 struct open_dev *adev; 327 328 DL_SEARCH_SCALAR(thread->open_devs[iodev->direction], 329 adev, dev, iodev); 330 if (adev) 331 return -EEXIST; 332 333 adev = (struct open_dev *)calloc(1, sizeof(*adev)); 334 adev->dev = iodev; 335 336 /* 337 * Start output devices by padding the output. This avoids a burst of 338 * audio callbacks when the stream starts 339 */ 340 if (iodev->direction == CRAS_STREAM_OUTPUT) 341 fill_odevs_zeros_min_level(iodev); 342 else 343 adev->input_streaming = 0; 344 345 ATLOG(atlog, 346 AUDIO_THREAD_DEV_ADDED, 347 iodev->info.idx, 0, 0); 348 349 DL_APPEND(thread->open_devs[iodev->direction], adev); 350 351 return 0; 352 } 353 354 static struct open_dev *find_adev(struct open_dev *adev_list, 355 struct cras_iodev *dev) 356 { 357 struct open_dev *adev; 358 DL_FOREACH(adev_list, adev) 359 if (adev->dev == dev) 360 return adev; 361 return NULL; 362 } 363 364 static void thread_rm_open_adev(struct audio_thread *thread, 365 struct open_dev *dev_to_rm) 366 { 367 enum CRAS_STREAM_DIRECTION dir = dev_to_rm->dev->direction; 368 struct open_dev *adev; 369 struct dev_stream *dev_stream; 370 371 /* Do nothing if dev_to_rm wasn't already in the active dev list. */ 372 adev = find_adev(thread->open_devs[dir], dev_to_rm->dev); 373 if (!adev) 374 return; 375 376 DL_DELETE(thread->open_devs[dir], dev_to_rm); 377 378 ATLOG(atlog, 379 AUDIO_THREAD_DEV_REMOVED, 380 dev_to_rm->dev->info.idx, 0, 0); 381 382 DL_FOREACH(dev_to_rm->dev->streams, dev_stream) { 383 cras_iodev_rm_stream(dev_to_rm->dev, dev_stream->stream); 384 dev_stream_destroy(dev_stream); 385 } 386 387 free(dev_to_rm); 388 } 389 390 /* Handles messages from the main thread to remove an active device. */ 391 static int thread_rm_open_dev(struct audio_thread *thread, 392 struct cras_iodev *iodev) 393 { 394 struct open_dev *adev = find_adev( 395 thread->open_devs[iodev->direction], iodev); 396 if (!adev) 397 return -EINVAL; 398 399 thread_rm_open_adev(thread, adev); 400 return 0; 401 } 402 403 /* Handles messages from the main thread to start ramping on a device. */ 404 static int thread_dev_start_ramp(struct audio_thread *thread, 405 struct cras_iodev *iodev, 406 enum CRAS_IODEV_RAMP_REQUEST request) 407 { 408 /* Do nothing if device wasn't already in the active dev list. */ 409 struct open_dev *adev = find_adev( 410 thread->open_devs[iodev->direction], iodev); 411 if (!adev) 412 return -EINVAL; 413 return cras_iodev_start_ramp(iodev, request); 414 } 415 416 417 /* Return non-zero if the stream is attached to any device. */ 418 static int thread_find_stream(struct audio_thread *thread, 419 struct cras_rstream *rstream) 420 { 421 struct open_dev *open_dev; 422 struct dev_stream *s; 423 424 DL_FOREACH(thread->open_devs[rstream->direction], open_dev) { 425 DL_FOREACH(open_dev->dev->streams, s) { 426 if (s->stream == rstream) 427 return 1; 428 } 429 } 430 return 0; 431 } 432 433 /* Remove stream from the audio thread. If this is the last stream to be 434 * removed close the device. 435 */ 436 static int thread_remove_stream(struct audio_thread *thread, 437 struct cras_rstream *stream, 438 struct cras_iodev *dev) 439 { 440 struct open_dev *open_dev; 441 struct timespec delay; 442 unsigned fetch_delay_msec; 443 444 /* Metrics log the longest fetch delay of this stream. */ 445 if (timespec_after(&stream->longest_fetch_interval, 446 &stream->sleep_interval_ts)) { 447 subtract_timespecs(&stream->longest_fetch_interval, 448 &stream->sleep_interval_ts, 449 &delay); 450 fetch_delay_msec = delay.tv_sec * 1000 + 451 delay.tv_nsec / 1000000; 452 if (fetch_delay_msec) 453 cras_server_metrics_longest_fetch_delay( 454 fetch_delay_msec); 455 } 456 457 ATLOG(atlog, 458 AUDIO_THREAD_STREAM_REMOVED, 459 stream->stream_id, 0, 0); 460 461 if (dev == NULL) { 462 DL_FOREACH(thread->open_devs[stream->direction], open_dev) { 463 delete_stream_from_dev(open_dev->dev, stream); 464 } 465 } else { 466 delete_stream_from_dev(dev, stream); 467 } 468 469 return 0; 470 } 471 472 /* Handles the disconnect_stream message from the main thread. */ 473 static int thread_disconnect_stream(struct audio_thread* thread, 474 struct cras_rstream* stream, 475 struct cras_iodev *dev) 476 { 477 int rc; 478 479 if (!thread_find_stream(thread, stream)) 480 return 0; 481 482 rc = thread_remove_stream(thread, stream, dev); 483 484 return rc; 485 } 486 487 /* Initiates draining of a stream or returns the status of a draining stream. 488 * If the stream has completed draining the thread forfeits ownership and must 489 * never reference it again. Returns the number of milliseconds it will take to 490 * finish draining, a minimum of one ms if any samples remain. 491 */ 492 static int thread_drain_stream_ms_remaining(struct audio_thread *thread, 493 struct cras_rstream *rstream) 494 { 495 int fr_in_buff; 496 struct cras_audio_shm *shm; 497 498 if (rstream->direction != CRAS_STREAM_OUTPUT) 499 return 0; 500 501 shm = cras_rstream_output_shm(rstream); 502 fr_in_buff = cras_shm_get_frames(shm); 503 504 if (fr_in_buff <= 0) 505 return 0; 506 507 cras_rstream_set_is_draining(rstream, 1); 508 509 return 1 + cras_frames_to_ms(fr_in_buff, rstream->format.frame_rate); 510 } 511 512 /* Handles a request to begin draining and return the amount of time left to 513 * draing a stream. 514 */ 515 static int thread_drain_stream(struct audio_thread *thread, 516 struct cras_rstream *rstream) 517 { 518 int ms_left; 519 520 if (!thread_find_stream(thread, rstream)) 521 return 0; 522 523 ms_left = thread_drain_stream_ms_remaining(thread, rstream); 524 if (ms_left == 0) 525 thread_remove_stream(thread, rstream, NULL); 526 527 return ms_left; 528 } 529 530 /* Handles the add_stream message from the main thread. */ 531 static int thread_add_stream(struct audio_thread *thread, 532 struct cras_rstream *stream, 533 struct cras_iodev **iodevs, 534 unsigned int num_iodevs) 535 { 536 int rc; 537 538 rc = append_stream(thread, stream, iodevs, num_iodevs); 539 if (rc < 0) 540 return rc; 541 542 ATLOG(atlog, 543 AUDIO_THREAD_STREAM_ADDED, 544 stream->stream_id, 545 num_iodevs ? iodevs[0]->info.idx : 0, 546 num_iodevs); 547 return 0; 548 } 549 550 /* Reads any pending audio message from the socket. */ 551 static void flush_old_aud_messages(struct cras_audio_shm *shm, int fd) 552 { 553 struct audio_message msg; 554 struct pollfd pollfd; 555 int err; 556 557 pollfd.fd = fd; 558 pollfd.events = POLLIN; 559 560 do { 561 err = poll(&pollfd, 1, 0); 562 if (pollfd.revents & POLLIN) { 563 err = read(fd, &msg, sizeof(msg)); 564 cras_shm_set_callback_pending(shm, 0); 565 } 566 } while (err > 0); 567 } 568 569 /* Asks any stream with room for more data. Sets the time stamp for all streams. 570 * Args: 571 * thread - The thread to fetch samples for. 572 * adev - The output device streams are attached to. 573 * Returns: 574 * 0 on success, negative error on failure. If failed, can assume that all 575 * streams have been removed from the device. 576 */ 577 static int fetch_streams(struct audio_thread *thread, 578 struct open_dev *adev) 579 { 580 struct dev_stream *dev_stream; 581 struct cras_iodev *odev = adev->dev; 582 int rc; 583 int delay; 584 585 delay = cras_iodev_delay_frames(odev); 586 if (delay < 0) 587 return delay; 588 589 DL_FOREACH(adev->dev->streams, dev_stream) { 590 struct cras_rstream *rstream = dev_stream->stream; 591 struct cras_audio_shm *shm = 592 cras_rstream_output_shm(rstream); 593 int fd = cras_rstream_get_audio_fd(rstream); 594 const struct timespec *next_cb_ts; 595 struct timespec now; 596 597 clock_gettime(CLOCK_MONOTONIC_RAW, &now); 598 599 if (cras_shm_callback_pending(shm) && fd >= 0) { 600 flush_old_aud_messages(shm, fd); 601 cras_rstream_record_fetch_interval(dev_stream->stream, 602 &now); 603 } 604 605 if (cras_shm_get_frames(shm) < 0) 606 cras_rstream_set_is_draining(rstream, 1); 607 608 if (cras_rstream_get_is_draining(dev_stream->stream)) 609 continue; 610 611 next_cb_ts = dev_stream_next_cb_ts(dev_stream); 612 if (!next_cb_ts) 613 continue; 614 615 /* Check if it's time to get more data from this stream. 616 * Allowing for waking up half a little early. */ 617 add_timespecs(&now, &playback_wake_fuzz_ts); 618 if (!timespec_after(&now, next_cb_ts)) 619 continue; 620 621 if (!dev_stream_can_fetch(dev_stream)) { 622 ATLOG( 623 atlog, AUDIO_THREAD_STREAM_SKIP_CB, 624 rstream->stream_id, 625 shm->area->write_offset[0], 626 shm->area->write_offset[1]); 627 continue; 628 } 629 630 dev_stream_set_delay(dev_stream, delay); 631 632 ATLOG( 633 atlog, 634 AUDIO_THREAD_FETCH_STREAM, 635 rstream->stream_id, 636 cras_rstream_get_cb_threshold(rstream), delay); 637 638 rc = dev_stream_request_playback_samples(dev_stream, &now); 639 if (rc < 0) { 640 syslog(LOG_ERR, "fetch err: %d for %x", 641 rc, rstream->stream_id); 642 cras_rstream_set_is_draining(rstream, 1); 643 } 644 } 645 646 return 0; 647 } 648 649 /* Fill the buffer with samples from the attached streams. 650 * Args: 651 * thread - The thread object the device is attached to. 652 * adev - The device to write to. 653 * dst - The buffer to put the samples in (returned from snd_pcm_mmap_begin) 654 * write_limit - The maximum number of frames to write to dst. 655 * 656 * Returns: 657 * The number of frames rendered on success, a negative error code otherwise. 658 * This number of frames is the minimum of the amount of frames each stream 659 * could provide which is the maximum that can currently be rendered. 660 */ 661 static int write_streams(struct audio_thread *thread, 662 struct open_dev *adev, 663 uint8_t *dst, 664 size_t write_limit) 665 { 666 struct cras_iodev *odev = adev->dev; 667 struct dev_stream *curr; 668 unsigned int max_offset = 0; 669 unsigned int frame_bytes = cras_get_format_bytes(odev->ext_format); 670 unsigned int num_playing = 0; 671 unsigned int drain_limit = write_limit; 672 673 /* Mix as much as we can, the minimum fill level of any stream. */ 674 max_offset = cras_iodev_max_stream_offset(odev); 675 676 /* Mix as much as we can, the minimum fill level of any stream. */ 677 DL_FOREACH(adev->dev->streams, curr) { 678 int dev_frames; 679 680 /* If this is a single output dev stream, updates the latest 681 * number of frames for playback. */ 682 if (dev_stream_attached_devs(curr) == 1) 683 dev_stream_update_frames(curr); 684 685 dev_frames = dev_stream_playback_frames(curr); 686 if (dev_frames < 0) { 687 thread_remove_stream(thread, curr->stream, NULL); 688 continue; 689 } 690 ATLOG(atlog, 691 AUDIO_THREAD_WRITE_STREAMS_STREAM, 692 curr->stream->stream_id, 693 dev_frames, 694 cras_shm_callback_pending(cras_rstream_output_shm(curr->stream))); 695 if (cras_rstream_get_is_draining(curr->stream)) { 696 drain_limit = MIN((size_t)dev_frames, drain_limit); 697 if (!dev_frames) 698 thread_remove_stream(thread, curr->stream, 699 NULL); 700 } else { 701 write_limit = MIN((size_t)dev_frames, write_limit); 702 num_playing++; 703 } 704 } 705 706 if (!num_playing) 707 write_limit = drain_limit; 708 709 if (write_limit > max_offset) 710 memset(dst + max_offset * frame_bytes, 0, 711 (write_limit - max_offset) * frame_bytes); 712 713 ATLOG(atlog, AUDIO_THREAD_WRITE_STREAMS_MIX, 714 write_limit, max_offset, 0); 715 716 DL_FOREACH(adev->dev->streams, curr) { 717 unsigned int offset; 718 int nwritten; 719 720 offset = cras_iodev_stream_offset(odev, curr); 721 if (offset >= write_limit) 722 continue; 723 nwritten = dev_stream_mix(curr, odev->ext_format, 724 dst + frame_bytes * offset, 725 write_limit - offset); 726 727 if (nwritten < 0) { 728 thread_remove_stream(thread, curr->stream, NULL); 729 continue; 730 } 731 732 cras_iodev_stream_written(odev, curr, nwritten); 733 } 734 735 write_limit = cras_iodev_all_streams_written(odev); 736 737 ATLOG(atlog, AUDIO_THREAD_WRITE_STREAMS_MIXED, 738 write_limit, 0, 0); 739 740 return write_limit; 741 } 742 743 /* Gets the max delay frames of open input devices. */ 744 static int input_delay_frames(struct open_dev *adevs) 745 { 746 struct open_dev *adev; 747 int delay; 748 int max_delay = 0; 749 750 DL_FOREACH(adevs, adev) { 751 if (!cras_iodev_is_open(adev->dev)) 752 continue; 753 delay = cras_iodev_delay_frames(adev->dev); 754 if (delay < 0) 755 return delay; 756 if (delay > max_delay) 757 max_delay = delay; 758 } 759 return max_delay; 760 } 761 762 /* Stop the playback thread */ 763 static void terminate_pb_thread() 764 { 765 pthread_exit(0); 766 } 767 768 static void append_dev_dump_info(struct audio_dev_debug_info *di, 769 struct open_dev *adev) 770 { 771 struct cras_audio_format *fmt = adev->dev->ext_format; 772 strncpy(di->dev_name, adev->dev->info.name, sizeof(di->dev_name)); 773 di->buffer_size = adev->dev->buffer_size; 774 di->min_buffer_level = adev->dev->min_buffer_level; 775 di->min_cb_level = adev->dev->min_cb_level; 776 di->max_cb_level = adev->dev->max_cb_level; 777 di->direction = adev->dev->direction; 778 di->num_underruns = cras_iodev_get_num_underruns(adev->dev); 779 di->num_severe_underruns = cras_iodev_get_num_severe_underruns( 780 adev->dev); 781 if (fmt) { 782 di->frame_rate = fmt->frame_rate; 783 di->num_channels = fmt->num_channels; 784 di->est_rate_ratio = cras_iodev_get_est_rate_ratio(adev->dev); 785 } else { 786 di->frame_rate = 0; 787 di->num_channels = 0; 788 di->est_rate_ratio = 0; 789 } 790 } 791 792 /* Put stream info for the given stream into the info struct. */ 793 static void append_stream_dump_info(struct audio_debug_info *info, 794 struct dev_stream *stream, 795 unsigned int dev_idx, 796 int index) 797 { 798 struct audio_stream_debug_info *si; 799 800 si = &info->streams[index]; 801 802 si->stream_id = stream->stream->stream_id; 803 si->dev_idx = dev_idx; 804 si->direction = stream->stream->direction; 805 si->stream_type = stream->stream->stream_type; 806 si->buffer_frames = stream->stream->buffer_frames; 807 si->cb_threshold = stream->stream->cb_threshold; 808 si->frame_rate = stream->stream->format.frame_rate; 809 si->num_channels = stream->stream->format.num_channels; 810 memcpy(si->channel_layout, stream->stream->format.channel_layout, 811 sizeof(si->channel_layout)); 812 si->longest_fetch_sec = stream->stream->longest_fetch_interval.tv_sec; 813 si->longest_fetch_nsec = stream->stream->longest_fetch_interval.tv_nsec; 814 si->num_overruns = cras_shm_num_overruns(&stream->stream->shm); 815 816 longest_wake.tv_sec = 0; 817 longest_wake.tv_nsec = 0; 818 } 819 820 /* Handle a message sent to the playback thread */ 821 static int handle_playback_thread_message(struct audio_thread *thread) 822 { 823 uint8_t buf[256]; 824 struct audio_thread_msg *msg = (struct audio_thread_msg *)buf; 825 int ret = 0; 826 int err; 827 828 err = audio_thread_read_command(thread, buf, 256); 829 if (err < 0) 830 return err; 831 832 ATLOG(atlog, AUDIO_THREAD_PB_MSG, msg->id, 0, 0); 833 834 switch (msg->id) { 835 case AUDIO_THREAD_ADD_STREAM: { 836 struct audio_thread_add_rm_stream_msg *amsg; 837 amsg = (struct audio_thread_add_rm_stream_msg *)msg; 838 ATLOG( 839 atlog, 840 AUDIO_THREAD_WRITE_STREAMS_WAIT, 841 amsg->stream->stream_id, 0, 0); 842 ret = thread_add_stream(thread, amsg->stream, amsg->devs, 843 amsg->num_devs); 844 break; 845 } 846 case AUDIO_THREAD_DISCONNECT_STREAM: { 847 struct audio_thread_add_rm_stream_msg *rmsg; 848 849 rmsg = (struct audio_thread_add_rm_stream_msg *)msg; 850 851 ret = thread_disconnect_stream(thread, rmsg->stream, 852 rmsg->devs[0]); 853 break; 854 } 855 case AUDIO_THREAD_ADD_OPEN_DEV: { 856 struct audio_thread_open_device_msg *rmsg; 857 858 rmsg = (struct audio_thread_open_device_msg *)msg; 859 ret = thread_add_open_dev(thread, rmsg->dev); 860 break; 861 } 862 case AUDIO_THREAD_RM_OPEN_DEV: { 863 struct audio_thread_open_device_msg *rmsg; 864 865 rmsg = (struct audio_thread_open_device_msg *)msg; 866 ret = thread_rm_open_dev(thread, rmsg->dev); 867 break; 868 } 869 case AUDIO_THREAD_STOP: 870 ret = 0; 871 err = audio_thread_send_response(thread, ret); 872 if (err < 0) 873 return err; 874 terminate_pb_thread(); 875 break; 876 case AUDIO_THREAD_DUMP_THREAD_INFO: { 877 struct dev_stream *curr; 878 struct open_dev *adev; 879 struct audio_thread_dump_debug_info_msg *dmsg; 880 struct audio_debug_info *info; 881 unsigned int num_streams = 0; 882 unsigned int num_devs = 0; 883 884 ret = 0; 885 dmsg = (struct audio_thread_dump_debug_info_msg *)msg; 886 info = dmsg->info; 887 888 /* Go through all open devices. */ 889 DL_FOREACH(thread->open_devs[CRAS_STREAM_OUTPUT], adev) { 890 append_dev_dump_info(&info->devs[num_devs], adev); 891 if (++num_devs == MAX_DEBUG_DEVS) 892 break; 893 DL_FOREACH(adev->dev->streams, curr) { 894 if (num_streams == MAX_DEBUG_STREAMS) 895 break; 896 append_stream_dump_info(info, curr, 897 adev->dev->info.idx, 898 num_streams++); 899 } 900 } 901 DL_FOREACH(thread->open_devs[CRAS_STREAM_INPUT], adev) { 902 if (num_devs == MAX_DEBUG_DEVS) 903 break; 904 append_dev_dump_info(&info->devs[num_devs], adev); 905 DL_FOREACH(adev->dev->streams, curr) { 906 if (num_streams == MAX_DEBUG_STREAMS) 907 break; 908 append_stream_dump_info(info, curr, 909 adev->dev->info.idx, 910 num_streams++); 911 } 912 ++num_devs; 913 } 914 info->num_devs = num_devs; 915 916 info->num_streams = num_streams; 917 918 memcpy(&info->log, atlog, sizeof(info->log)); 919 break; 920 } 921 case AUDIO_THREAD_DRAIN_STREAM: { 922 struct audio_thread_add_rm_stream_msg *rmsg; 923 924 rmsg = (struct audio_thread_add_rm_stream_msg *)msg; 925 ret = thread_drain_stream(thread, rmsg->stream); 926 break; 927 } 928 case AUDIO_THREAD_REMOVE_CALLBACK: { 929 struct audio_thread_rm_callback_msg *rmsg; 930 931 rmsg = (struct audio_thread_rm_callback_msg *)msg; 932 audio_thread_rm_callback(rmsg->fd); 933 break; 934 } 935 case AUDIO_THREAD_CONFIG_GLOBAL_REMIX: { 936 struct audio_thread_config_global_remix *rmsg; 937 void *rsp; 938 939 /* Respond the pointer to the old remix converter, so it can be 940 * freed later in main thread. */ 941 rsp = (void *)remix_converter; 942 943 rmsg = (struct audio_thread_config_global_remix *)msg; 944 remix_converter = rmsg->fmt_conv; 945 946 return write(thread->to_main_fds[1], &rsp, sizeof(rsp)); 947 } 948 case AUDIO_THREAD_DEV_START_RAMP: { 949 struct audio_thread_dev_start_ramp_msg *rmsg; 950 951 rmsg = (struct audio_thread_dev_start_ramp_msg*)msg; 952 ret = thread_dev_start_ramp(thread, rmsg->dev, rmsg->request); 953 break; 954 } 955 default: 956 ret = -EINVAL; 957 break; 958 } 959 960 err = audio_thread_send_response(thread, ret); 961 if (err < 0) 962 return err; 963 return ret; 964 } 965 966 /* Fills the time that the next stream needs to be serviced. */ 967 static int get_next_stream_wake_from_list(struct dev_stream *streams, 968 struct timespec *min_ts) 969 { 970 struct dev_stream *dev_stream; 971 int ret = 0; /* The total number of streams to wait on. */ 972 973 DL_FOREACH(streams, dev_stream) { 974 const struct timespec *next_cb_ts; 975 976 if (cras_rstream_get_is_draining(dev_stream->stream) && 977 dev_stream_playback_frames(dev_stream) <= 0) 978 continue; 979 if (!dev_stream_can_fetch(dev_stream)) 980 continue; 981 982 next_cb_ts = dev_stream_next_cb_ts(dev_stream); 983 if (!next_cb_ts) 984 continue; 985 986 ATLOG(atlog, 987 AUDIO_THREAD_STREAM_SLEEP_TIME, 988 dev_stream->stream->stream_id, 989 next_cb_ts->tv_sec, 990 next_cb_ts->tv_nsec); 991 if (timespec_after(min_ts, next_cb_ts)) 992 *min_ts = *next_cb_ts; 993 ret++; 994 } 995 996 return ret; 997 } 998 999 static int get_next_output_wake(struct audio_thread *thread, 1000 struct timespec *min_ts, 1001 const struct timespec *now) 1002 { 1003 struct open_dev *adev; 1004 struct timespec sleep_time; 1005 double est_rate; 1006 int ret = 0; 1007 unsigned int frames_to_play_in_sleep; 1008 unsigned int hw_level = 0; 1009 1010 DL_FOREACH(thread->open_devs[CRAS_STREAM_OUTPUT], adev) 1011 ret += get_next_stream_wake_from_list( 1012 adev->dev->streams, 1013 min_ts); 1014 1015 DL_FOREACH(thread->open_devs[CRAS_STREAM_OUTPUT], adev) { 1016 if (!cras_iodev_odev_should_wake(adev->dev)) 1017 continue; 1018 1019 frames_to_play_in_sleep = cras_iodev_frames_to_play_in_sleep( 1020 adev->dev, &hw_level, &adev->wake_ts); 1021 if (!timespec_is_nonzero(&adev->wake_ts)) 1022 adev->wake_ts = *now; 1023 1024 est_rate = adev->dev->ext_format->frame_rate * 1025 cras_iodev_get_est_rate_ratio(adev->dev); 1026 1027 ATLOG(atlog, 1028 AUDIO_THREAD_SET_DEV_WAKE, 1029 adev->dev->info.idx, 1030 hw_level, 1031 frames_to_play_in_sleep); 1032 1033 cras_frames_to_time_precise( 1034 frames_to_play_in_sleep, 1035 est_rate, 1036 &sleep_time); 1037 1038 add_timespecs(&adev->wake_ts, &sleep_time); 1039 1040 ret++; 1041 ATLOG(atlog, 1042 AUDIO_THREAD_DEV_SLEEP_TIME, 1043 adev->dev->info.idx, 1044 adev->wake_ts.tv_sec, 1045 adev->wake_ts.tv_nsec); 1046 if (timespec_after(min_ts, &adev->wake_ts)) 1047 *min_ts = adev->wake_ts; 1048 } 1049 1050 return ret; 1051 } 1052 1053 static int input_adev_ignore_wake(const struct open_dev *adev) 1054 { 1055 if (!cras_iodev_is_open(adev->dev)) 1056 return 1; 1057 1058 if (!adev->dev->active_node) 1059 return 1; 1060 1061 if (adev->dev->active_node->type == CRAS_NODE_TYPE_HOTWORD && 1062 !adev->input_streaming) 1063 return 1; 1064 1065 return 0; 1066 } 1067 1068 static int get_next_input_wake(struct audio_thread *thread, 1069 struct timespec *min_ts, 1070 const struct timespec *now) 1071 { 1072 struct open_dev *adev; 1073 int ret = 0; /* The total number of devices to wait on. */ 1074 1075 DL_FOREACH(thread->open_devs[CRAS_STREAM_INPUT], adev) { 1076 if (input_adev_ignore_wake(adev)) 1077 continue; 1078 ret++; 1079 ATLOG(atlog, 1080 AUDIO_THREAD_DEV_SLEEP_TIME, 1081 adev->dev->info.idx, 1082 adev->wake_ts.tv_sec, 1083 adev->wake_ts.tv_nsec); 1084 if (timespec_after(min_ts, &adev->wake_ts)) 1085 *min_ts = adev->wake_ts; 1086 } 1087 1088 return ret; 1089 } 1090 1091 static int output_stream_fetch(struct audio_thread *thread) 1092 { 1093 struct open_dev *odev_list = thread->open_devs[CRAS_STREAM_OUTPUT]; 1094 struct open_dev *adev; 1095 1096 DL_FOREACH(odev_list, adev) { 1097 if (!cras_iodev_is_open(adev->dev)) 1098 continue; 1099 fetch_streams(thread, adev); 1100 } 1101 1102 return 0; 1103 } 1104 1105 static int wait_pending_output_streams(struct audio_thread *thread) 1106 { 1107 /* TODO(dgreid) - is this needed? */ 1108 return 0; 1109 } 1110 1111 /* Gets the master device which the stream is attached to. */ 1112 static inline 1113 struct cras_iodev *get_master_dev(const struct dev_stream *stream) 1114 { 1115 return (struct cras_iodev *)stream->stream->master_dev.dev_ptr; 1116 } 1117 1118 /* Updates the estimated sample rate of open device to all attached 1119 * streams. 1120 */ 1121 static void update_estimated_rate(struct audio_thread *thread, 1122 struct open_dev *adev) 1123 { 1124 struct cras_iodev *master_dev; 1125 struct cras_iodev *dev = adev->dev; 1126 struct dev_stream *dev_stream; 1127 1128 DL_FOREACH(dev->streams, dev_stream) { 1129 master_dev = get_master_dev(dev_stream); 1130 if (master_dev == NULL) { 1131 syslog(LOG_ERR, "Fail to find master open dev."); 1132 continue; 1133 } 1134 1135 dev_stream_set_dev_rate(dev_stream, 1136 dev->ext_format->frame_rate, 1137 cras_iodev_get_est_rate_ratio(dev), 1138 cras_iodev_get_est_rate_ratio(master_dev), 1139 adev->coarse_rate_adjust); 1140 } 1141 } 1142 1143 /* Returns 0 on success negative error on device failure. */ 1144 static int write_output_samples(struct audio_thread *thread, 1145 struct open_dev *adev) 1146 { 1147 struct cras_iodev *odev = adev->dev; 1148 unsigned int hw_level; 1149 struct timespec hw_tstamp; 1150 unsigned int frames, fr_to_req; 1151 snd_pcm_sframes_t written; 1152 snd_pcm_uframes_t total_written = 0; 1153 int rc; 1154 uint8_t *dst = NULL; 1155 struct cras_audio_area *area = NULL; 1156 1157 /* Possibly fill zeros for no_stream state and possibly transit state. 1158 */ 1159 rc = cras_iodev_prepare_output_before_write_samples(odev); 1160 if (rc < 0) { 1161 syslog(LOG_ERR, "Failed to prepare output dev for write"); 1162 return rc; 1163 } 1164 1165 if (cras_iodev_state(odev) != CRAS_IODEV_STATE_NORMAL_RUN) 1166 return 0; 1167 1168 rc = cras_iodev_frames_queued(odev, &hw_tstamp); 1169 if (rc < 0) 1170 return rc; 1171 hw_level = rc; 1172 1173 ATLOG(atlog, AUDIO_THREAD_FILL_AUDIO_TSTAMP, adev->dev->info.idx, 1174 hw_tstamp.tv_sec, hw_tstamp.tv_nsec); 1175 if (timespec_is_nonzero(&hw_tstamp)) { 1176 if (hw_level < odev->min_cb_level / 2) 1177 adev->coarse_rate_adjust = 1; 1178 else if (hw_level > odev->max_cb_level * 2) 1179 adev->coarse_rate_adjust = -1; 1180 else 1181 adev->coarse_rate_adjust = 0; 1182 1183 if (cras_iodev_update_rate(odev, hw_level, &hw_tstamp)) 1184 update_estimated_rate(thread, adev); 1185 } 1186 ATLOG(atlog, AUDIO_THREAD_FILL_AUDIO, 1187 adev->dev->info.idx, hw_level, 0); 1188 1189 /* Don't request more than hardware can hold. Note that min_buffer_level 1190 * has been subtracted from the actual hw_level so we need to take it 1191 * into account here. */ 1192 fr_to_req = cras_iodev_buffer_avail(odev, hw_level); 1193 1194 /* Have to loop writing to the device, will be at most 2 loops, this 1195 * only happens when the circular buffer is at the end and returns us a 1196 * partial area to write to from mmap_begin */ 1197 while (total_written < fr_to_req) { 1198 frames = fr_to_req - total_written; 1199 rc = cras_iodev_get_output_buffer(odev, &area, &frames); 1200 if (rc < 0) 1201 return rc; 1202 1203 /* TODO(dgreid) - This assumes interleaved audio. */ 1204 dst = area->channels[0].buf; 1205 written = write_streams(thread, adev, dst, frames); 1206 if (written < 0) /* pcm has been closed */ 1207 return (int)written; 1208 1209 if (written < (snd_pcm_sframes_t)frames) 1210 /* Got all the samples from client that we can, but it 1211 * won't fill the request. */ 1212 fr_to_req = 0; /* break out after committing samples */ 1213 1214 rc = cras_iodev_put_output_buffer(odev, dst, written); 1215 if (rc < 0) 1216 return rc; 1217 total_written += written; 1218 } 1219 1220 /* Empty hardware and nothing written, zero fill it if it is running. */ 1221 if (!hw_level && !total_written && 1222 odev->min_cb_level < odev->buffer_size) 1223 cras_iodev_output_underrun(odev); 1224 1225 ATLOG(atlog, AUDIO_THREAD_FILL_AUDIO_DONE, 1226 hw_level, total_written, odev->min_cb_level); 1227 return 0; 1228 } 1229 1230 static int do_playback(struct audio_thread *thread) 1231 { 1232 struct open_dev *adev; 1233 struct dev_stream *curr; 1234 int rc; 1235 1236 /* For multiple output case, update the number of queued frames in shm 1237 * of all streams before starting write output samples. */ 1238 adev = thread->open_devs[CRAS_STREAM_OUTPUT]; 1239 if (adev && adev->next) { 1240 DL_FOREACH(thread->open_devs[CRAS_STREAM_OUTPUT], adev) { 1241 DL_FOREACH(adev->dev->streams, curr) 1242 dev_stream_update_frames(curr); 1243 } 1244 } 1245 1246 DL_FOREACH(thread->open_devs[CRAS_STREAM_OUTPUT], adev) { 1247 if (!cras_iodev_is_open(adev->dev)) 1248 continue; 1249 1250 rc = write_output_samples(thread, adev); 1251 if (rc < 0) { 1252 if (rc == -EPIPE) { 1253 /* Handle severe underrun. */ 1254 ATLOG(atlog, AUDIO_THREAD_SEVERE_UNDERRUN, 1255 adev->dev->info.idx, 0, 0); 1256 cras_iodev_reset_request(adev->dev); 1257 } else { 1258 /* Device error, close it. */ 1259 thread_rm_open_adev(thread, adev); 1260 } 1261 } 1262 } 1263 1264 /* TODO(dgreid) - once per rstream, not once per dev_stream. */ 1265 DL_FOREACH(thread->open_devs[CRAS_STREAM_OUTPUT], adev) { 1266 struct dev_stream *stream; 1267 if (!cras_iodev_is_open(adev->dev)) 1268 continue; 1269 DL_FOREACH(adev->dev->streams, stream) { 1270 dev_stream_playback_update_rstream(stream); 1271 } 1272 } 1273 1274 return 0; 1275 } 1276 1277 /* Gets the minimum amount of space available for writing across all streams. 1278 * Args: 1279 * adev - The device to capture from. 1280 * write_limit - Initial limit to number of frames to capture. 1281 */ 1282 static unsigned int get_stream_limit_set_delay(struct open_dev *adev, 1283 unsigned int write_limit) 1284 { 1285 struct cras_rstream *rstream; 1286 struct cras_audio_shm *shm; 1287 struct dev_stream *stream; 1288 int delay; 1289 unsigned int avail; 1290 1291 /* TODO(dgreid) - Setting delay from last dev only. */ 1292 delay = input_delay_frames(adev); 1293 1294 DL_FOREACH(adev->dev->streams, stream) { 1295 rstream = stream->stream; 1296 1297 shm = cras_rstream_input_shm(rstream); 1298 if (cras_shm_check_write_overrun(shm)) 1299 ATLOG(atlog, AUDIO_THREAD_READ_OVERRUN, 1300 adev->dev->info.idx, rstream->stream_id, 1301 shm->area->num_overruns); 1302 dev_stream_set_delay(stream, delay); 1303 avail = dev_stream_capture_avail(stream); 1304 write_limit = MIN(write_limit, avail); 1305 } 1306 1307 return write_limit; 1308 } 1309 1310 /* Read samples from an input device to the specified stream. 1311 * Args: 1312 * adev - The device to capture samples from. 1313 * Returns 0 on success. 1314 */ 1315 static int capture_to_streams(struct audio_thread *thread, 1316 struct open_dev *adev) 1317 { 1318 struct cras_iodev *idev = adev->dev; 1319 snd_pcm_uframes_t remainder, hw_level, cap_limit; 1320 struct timespec hw_tstamp; 1321 int rc; 1322 1323 rc = cras_iodev_frames_queued(idev, &hw_tstamp); 1324 if (rc < 0) 1325 return rc; 1326 hw_level = rc; 1327 1328 ATLOG(atlog, AUDIO_THREAD_READ_AUDIO_TSTAMP, idev->info.idx, 1329 hw_tstamp.tv_sec, hw_tstamp.tv_nsec); 1330 if (timespec_is_nonzero(&hw_tstamp)) { 1331 if (hw_level) 1332 adev->input_streaming = 1; 1333 1334 if (hw_level < idev->min_cb_level / 2) 1335 adev->coarse_rate_adjust = 1; 1336 else if (hw_level > idev->max_cb_level * 2) 1337 adev->coarse_rate_adjust = -1; 1338 else 1339 adev->coarse_rate_adjust = 0; 1340 if (cras_iodev_update_rate(idev, hw_level, &hw_tstamp)) 1341 update_estimated_rate(thread, adev); 1342 } 1343 1344 cap_limit = get_stream_limit_set_delay(adev, hw_level); 1345 remainder = MIN(hw_level, cap_limit); 1346 1347 ATLOG(atlog, AUDIO_THREAD_READ_AUDIO, 1348 idev->info.idx, hw_level, remainder); 1349 1350 if (cras_iodev_state(idev) != CRAS_IODEV_STATE_NORMAL_RUN) 1351 return 0; 1352 1353 while (remainder > 0) { 1354 struct cras_audio_area *area = NULL; 1355 struct dev_stream *stream; 1356 unsigned int nread, total_read; 1357 1358 nread = remainder; 1359 1360 rc = cras_iodev_get_input_buffer(idev, &area, &nread); 1361 if (rc < 0 || nread == 0) 1362 return rc; 1363 1364 DL_FOREACH(adev->dev->streams, stream) { 1365 unsigned int this_read; 1366 unsigned int area_offset; 1367 1368 area_offset = cras_iodev_stream_offset(idev, stream); 1369 this_read = dev_stream_capture( 1370 stream, area, area_offset, 1371 cras_iodev_get_software_gain_scaler(idev)); 1372 1373 cras_iodev_stream_written(idev, stream, this_read); 1374 } 1375 if (adev->dev->streams) 1376 total_read = cras_iodev_all_streams_written(idev); 1377 else 1378 total_read = nread; /* No streams, drop. */ 1379 1380 rc = cras_iodev_put_input_buffer(idev, total_read); 1381 if (rc < 0) 1382 return rc; 1383 remainder -= nread; 1384 1385 if (total_read < nread) 1386 break; 1387 } 1388 1389 ATLOG(atlog, AUDIO_THREAD_READ_AUDIO_DONE, 1390 remainder, 0, 0); 1391 1392 return 0; 1393 } 1394 1395 static int do_capture(struct audio_thread *thread) 1396 { 1397 struct open_dev *idev_list = thread->open_devs[CRAS_STREAM_INPUT]; 1398 struct open_dev *adev; 1399 1400 DL_FOREACH(idev_list, adev) { 1401 if (!cras_iodev_is_open(adev->dev)) 1402 continue; 1403 if (capture_to_streams(thread, adev) < 0) 1404 thread_rm_open_adev(thread, adev); 1405 } 1406 1407 return 0; 1408 } 1409 1410 /* 1411 * Set wake_ts for this device to be the earliest wake up time for 1412 * dev_streams. 1413 */ 1414 static int set_input_dev_wake_ts(struct open_dev *adev) 1415 { 1416 int rc; 1417 struct timespec level_tstamp, wake_time_out, min_ts, now; 1418 unsigned int curr_level; 1419 struct dev_stream *stream; 1420 1421 /* Limit the sleep time to 20 seconds. */ 1422 min_ts.tv_sec = 20; 1423 min_ts.tv_nsec = 0; 1424 clock_gettime(CLOCK_MONOTONIC_RAW, &now); 1425 add_timespecs(&min_ts, &now); 1426 1427 curr_level = cras_iodev_frames_queued(adev->dev, &level_tstamp); 1428 if (!timespec_is_nonzero(&level_tstamp)) 1429 clock_gettime(CLOCK_MONOTONIC_RAW, &level_tstamp); 1430 1431 /* 1432 * Loop through streams to find the earliest time audio thread 1433 * should wake up. 1434 */ 1435 DL_FOREACH(adev->dev->streams, stream) { 1436 rc = dev_stream_wake_time( 1437 stream, 1438 curr_level, 1439 &level_tstamp, 1440 &wake_time_out); 1441 1442 if (rc < 0) 1443 return rc; 1444 1445 if (timespec_after(&min_ts, &wake_time_out)) { 1446 min_ts = wake_time_out; 1447 } 1448 } 1449 adev->wake_ts = min_ts; 1450 return 0; 1451 } 1452 1453 static int send_captured_samples(struct audio_thread *thread) 1454 { 1455 struct open_dev *idev_list = thread->open_devs[CRAS_STREAM_INPUT]; 1456 struct open_dev *adev; 1457 int rc; 1458 1459 // TODO(dgreid) - once per rstream, not once per dev_stream. 1460 DL_FOREACH(idev_list, adev) { 1461 struct dev_stream *stream; 1462 1463 if (!cras_iodev_is_open(adev->dev)) 1464 continue; 1465 1466 /* Post samples to rstream if there are enough samples. */ 1467 DL_FOREACH(adev->dev->streams, stream) { 1468 dev_stream_capture_update_rstream(stream); 1469 } 1470 1471 /* Set wake_ts for this device. */ 1472 rc = set_input_dev_wake_ts(adev); 1473 if (rc < 0) 1474 return rc; 1475 } 1476 1477 return 0; 1478 } 1479 1480 /* Reads and/or writes audio sampels from/to the devices. */ 1481 static int stream_dev_io(struct audio_thread *thread) 1482 { 1483 output_stream_fetch(thread); 1484 do_capture(thread); 1485 send_captured_samples(thread); 1486 wait_pending_output_streams(thread); 1487 do_playback(thread); 1488 1489 return 0; 1490 } 1491 1492 int fill_next_sleep_interval(struct audio_thread *thread, struct timespec *ts) 1493 { 1494 struct timespec min_ts; 1495 struct timespec now; 1496 int ret; /* The sum of active streams and devices. */ 1497 1498 ts->tv_sec = 0; 1499 ts->tv_nsec = 0; 1500 /* Limit the sleep time to 20 seconds. */ 1501 min_ts.tv_sec = 20; 1502 min_ts.tv_nsec = 0; 1503 clock_gettime(CLOCK_MONOTONIC_RAW, &now); 1504 add_timespecs(&min_ts, &now); 1505 ret = get_next_output_wake(thread, &min_ts, &now); 1506 ret += get_next_input_wake(thread, &min_ts, &now); 1507 if (timespec_after(&min_ts, &now)) 1508 subtract_timespecs(&min_ts, &now, ts); 1509 1510 return ret; 1511 } 1512 1513 /* For playback, fill the audio buffer when needed, for capture, pull out 1514 * samples when they are ready. 1515 * This thread will attempt to run at a high priority to allow for low latency 1516 * streams. This thread sleeps while the device plays back or captures audio, 1517 * it will wake up as little as it can while avoiding xruns. It can also be 1518 * woken by sending it a message using the "audio_thread_post_message" function. 1519 */ 1520 static void *audio_io_thread(void *arg) 1521 { 1522 struct audio_thread *thread = (struct audio_thread *)arg; 1523 struct open_dev *adev; 1524 struct dev_stream *curr; 1525 struct timespec ts, now, last_wake; 1526 struct pollfd *pollfds; 1527 unsigned int num_pollfds; 1528 unsigned int pollfds_size = 32; 1529 int msg_fd; 1530 int rc; 1531 1532 msg_fd = thread->to_thread_fds[0]; 1533 1534 /* Attempt to get realtime scheduling */ 1535 if (cras_set_rt_scheduling(CRAS_SERVER_RT_THREAD_PRIORITY) == 0) 1536 cras_set_thread_priority(CRAS_SERVER_RT_THREAD_PRIORITY); 1537 1538 last_wake.tv_sec = 0; 1539 longest_wake.tv_sec = 0; 1540 longest_wake.tv_nsec = 0; 1541 1542 pollfds = (struct pollfd *)malloc(sizeof(*pollfds) * pollfds_size); 1543 pollfds[0].fd = msg_fd; 1544 pollfds[0].events = POLLIN; 1545 1546 while (1) { 1547 struct timespec *wait_ts; 1548 struct iodev_callback_list *iodev_cb; 1549 1550 wait_ts = NULL; 1551 num_pollfds = 1; 1552 1553 /* device opened */ 1554 rc = stream_dev_io(thread); 1555 if (rc < 0) 1556 syslog(LOG_ERR, "audio cb error %d", rc); 1557 1558 if (fill_next_sleep_interval(thread, &ts)) 1559 wait_ts = &ts; 1560 1561 restart_poll_loop: 1562 num_pollfds = 1; 1563 1564 DL_FOREACH(iodev_callbacks, iodev_cb) { 1565 if (!iodev_cb->enabled) 1566 continue; 1567 pollfds[num_pollfds].fd = iodev_cb->fd; 1568 iodev_cb->pollfd = &pollfds[num_pollfds]; 1569 if (iodev_cb->is_write) 1570 pollfds[num_pollfds].events = POLLOUT; 1571 else 1572 pollfds[num_pollfds].events = POLLIN; 1573 num_pollfds++; 1574 if (num_pollfds >= pollfds_size) { 1575 pollfds_size *= 2; 1576 pollfds = (struct pollfd *)realloc(pollfds, 1577 sizeof(*pollfds) * pollfds_size); 1578 goto restart_poll_loop; 1579 } 1580 } 1581 1582 /* TODO(dgreid) - once per rstream not per dev_stream */ 1583 DL_FOREACH(thread->open_devs[CRAS_STREAM_OUTPUT], adev) { 1584 DL_FOREACH(adev->dev->streams, curr) { 1585 int fd = dev_stream_poll_stream_fd(curr); 1586 if (fd < 0) 1587 continue; 1588 pollfds[num_pollfds].fd = fd; 1589 pollfds[num_pollfds].events = POLLIN; 1590 num_pollfds++; 1591 if (num_pollfds >= pollfds_size) { 1592 pollfds_size *= 2; 1593 pollfds = (struct pollfd *)realloc( 1594 pollfds, 1595 sizeof(*pollfds) * 1596 pollfds_size); 1597 goto restart_poll_loop; 1598 } 1599 } 1600 } 1601 1602 if (last_wake.tv_sec) { 1603 struct timespec this_wake; 1604 clock_gettime(CLOCK_MONOTONIC_RAW, &now); 1605 subtract_timespecs(&now, &last_wake, &this_wake); 1606 if (timespec_after(&this_wake, &longest_wake)) 1607 longest_wake = this_wake; 1608 } 1609 1610 ATLOG(atlog, AUDIO_THREAD_SLEEP, 1611 wait_ts ? wait_ts->tv_sec : 0, 1612 wait_ts ? wait_ts->tv_nsec : 0, 1613 longest_wake.tv_nsec); 1614 rc = ppoll(pollfds, num_pollfds, wait_ts, NULL); 1615 clock_gettime(CLOCK_MONOTONIC_RAW, &last_wake); 1616 ATLOG(atlog, AUDIO_THREAD_WAKE, rc, 0, 0); 1617 if (rc <= 0) 1618 continue; 1619 1620 if (pollfds[0].revents & POLLIN) { 1621 rc = handle_playback_thread_message(thread); 1622 if (rc < 0) 1623 syslog(LOG_INFO, "handle message %d", rc); 1624 } 1625 1626 DL_FOREACH(iodev_callbacks, iodev_cb) { 1627 if (iodev_cb->pollfd && 1628 iodev_cb->pollfd->revents & (POLLIN | POLLOUT)) { 1629 ATLOG( 1630 atlog, AUDIO_THREAD_IODEV_CB, 1631 iodev_cb->is_write, 0, 0); 1632 iodev_cb->cb(iodev_cb->cb_data); 1633 } 1634 } 1635 } 1636 1637 return NULL; 1638 } 1639 1640 /* Write a message to the playback thread and wait for an ack, This keeps these 1641 * operations synchronous for the main server thread. For instance when the 1642 * RM_STREAM message is sent, the stream can be deleted after the function 1643 * returns. Making this synchronous also allows the thread to return an error 1644 * code that can be handled by the caller. 1645 * Args: 1646 * thread - thread to receive message. 1647 * msg - The message to send. 1648 * Returns: 1649 * A return code from the message handler in the thread. 1650 */ 1651 static int audio_thread_post_message(struct audio_thread *thread, 1652 struct audio_thread_msg *msg) 1653 { 1654 int err; 1655 void *rsp; 1656 1657 err = write(thread->to_thread_fds[1], msg, msg->length); 1658 if (err < 0) { 1659 syslog(LOG_ERR, "Failed to post message to thread."); 1660 return err; 1661 } 1662 /* Synchronous action, wait for response. */ 1663 err = read(thread->to_main_fds[0], &rsp, sizeof(rsp)); 1664 if (err < 0) { 1665 syslog(LOG_ERR, "Failed to read reply from thread."); 1666 return err; 1667 } 1668 1669 return (intptr_t)rsp; 1670 } 1671 1672 static void init_open_device_msg(struct audio_thread_open_device_msg *msg, 1673 enum AUDIO_THREAD_COMMAND id, 1674 struct cras_iodev *dev) 1675 { 1676 memset(msg, 0, sizeof(*msg)); 1677 msg->header.id = id; 1678 msg->header.length = sizeof(*msg); 1679 msg->dev = dev; 1680 } 1681 1682 static void init_add_rm_stream_msg(struct audio_thread_add_rm_stream_msg *msg, 1683 enum AUDIO_THREAD_COMMAND id, 1684 struct cras_rstream *stream, 1685 struct cras_iodev **devs, 1686 unsigned int num_devs) 1687 { 1688 memset(msg, 0, sizeof(*msg)); 1689 msg->header.id = id; 1690 msg->header.length = sizeof(*msg); 1691 msg->stream = stream; 1692 msg->devs = devs; 1693 msg->num_devs = num_devs; 1694 } 1695 1696 static void init_dump_debug_info_msg( 1697 struct audio_thread_dump_debug_info_msg *msg, 1698 struct audio_debug_info *info) 1699 { 1700 memset(msg, 0, sizeof(*msg)); 1701 msg->header.id = AUDIO_THREAD_DUMP_THREAD_INFO; 1702 msg->header.length = sizeof(*msg); 1703 msg->info = info; 1704 } 1705 1706 static void init_config_global_remix_msg( 1707 struct audio_thread_config_global_remix *msg) 1708 { 1709 memset(msg, 0, sizeof(*msg)); 1710 msg->header.id = AUDIO_THREAD_CONFIG_GLOBAL_REMIX; 1711 msg->header.length = sizeof(*msg); 1712 } 1713 1714 static void init_device_start_ramp_msg( 1715 struct audio_thread_dev_start_ramp_msg *msg, 1716 enum AUDIO_THREAD_COMMAND id, 1717 struct cras_iodev *dev, 1718 enum CRAS_IODEV_RAMP_REQUEST request) 1719 { 1720 memset(msg, 0, sizeof(*msg)); 1721 msg->header.id = id; 1722 msg->header.length = sizeof(*msg); 1723 msg->dev = dev; 1724 msg->request = request; 1725 } 1726 1727 /* Exported Interface */ 1728 1729 int audio_thread_add_stream(struct audio_thread *thread, 1730 struct cras_rstream *stream, 1731 struct cras_iodev **devs, 1732 unsigned int num_devs) 1733 { 1734 struct audio_thread_add_rm_stream_msg msg; 1735 1736 assert(thread && stream); 1737 1738 if (!thread->started) 1739 return -EINVAL; 1740 1741 init_add_rm_stream_msg(&msg, AUDIO_THREAD_ADD_STREAM, stream, 1742 devs, num_devs); 1743 return audio_thread_post_message(thread, &msg.header); 1744 } 1745 1746 int audio_thread_disconnect_stream(struct audio_thread *thread, 1747 struct cras_rstream *stream, 1748 struct cras_iodev *dev) 1749 { 1750 struct audio_thread_add_rm_stream_msg msg; 1751 1752 assert(thread && stream); 1753 1754 init_add_rm_stream_msg(&msg, AUDIO_THREAD_DISCONNECT_STREAM, stream, 1755 &dev, 0); 1756 return audio_thread_post_message(thread, &msg.header); 1757 } 1758 1759 int audio_thread_drain_stream(struct audio_thread *thread, 1760 struct cras_rstream *stream) 1761 { 1762 struct audio_thread_add_rm_stream_msg msg; 1763 1764 assert(thread && stream); 1765 1766 init_add_rm_stream_msg(&msg, AUDIO_THREAD_DRAIN_STREAM, stream, 1767 NULL, 0); 1768 return audio_thread_post_message(thread, &msg.header); 1769 } 1770 1771 int audio_thread_dump_thread_info(struct audio_thread *thread, 1772 struct audio_debug_info *info) 1773 { 1774 struct audio_thread_dump_debug_info_msg msg; 1775 1776 init_dump_debug_info_msg(&msg, info); 1777 return audio_thread_post_message(thread, &msg.header); 1778 } 1779 1780 int audio_thread_rm_callback_sync(struct audio_thread *thread, int fd) { 1781 struct audio_thread_rm_callback_msg msg; 1782 1783 memset(&msg, 0, sizeof(msg)); 1784 msg.header.id = AUDIO_THREAD_REMOVE_CALLBACK; 1785 msg.header.length = sizeof(msg); 1786 msg.fd = fd; 1787 1788 return audio_thread_post_message(thread, &msg.header); 1789 } 1790 1791 int audio_thread_config_global_remix(struct audio_thread *thread, 1792 unsigned int num_channels, 1793 const float *coefficient) 1794 { 1795 int err; 1796 int identity_remix = 1; 1797 unsigned int i, j; 1798 struct audio_thread_config_global_remix msg; 1799 void *rsp; 1800 1801 init_config_global_remix_msg(&msg); 1802 1803 /* Check if the coefficients represent an identity matrix for remix 1804 * conversion, which means no remix at all. If so then leave the 1805 * converter as NULL. */ 1806 for (i = 0; i < num_channels; i++) { 1807 if (coefficient[i * num_channels + i] != 1.0f) { 1808 identity_remix = 0; 1809 break; 1810 } 1811 for (j = i + 1; j < num_channels; j++) { 1812 if (coefficient[i * num_channels + j] != 0 || 1813 coefficient[j * num_channels + i] != 0) 1814 identity_remix = 0; 1815 break; 1816 } 1817 } 1818 1819 if (!identity_remix) { 1820 msg.fmt_conv = cras_channel_remix_conv_create(num_channels, 1821 coefficient); 1822 if (NULL == msg.fmt_conv) 1823 return -ENOMEM; 1824 } 1825 1826 err = write(thread->to_thread_fds[1], &msg, msg.header.length); 1827 if (err < 0) { 1828 syslog(LOG_ERR, "Failed to post message to thread."); 1829 return err; 1830 } 1831 /* Synchronous action, wait for response. */ 1832 err = read(thread->to_main_fds[0], &rsp, sizeof(rsp)); 1833 if (err < 0) { 1834 syslog(LOG_ERR, "Failed to read reply from thread."); 1835 return err; 1836 } 1837 1838 if (rsp) 1839 cras_fmt_conv_destroy((struct cras_fmt_conv *)rsp); 1840 return 0; 1841 } 1842 1843 struct cras_fmt_conv *audio_thread_get_global_remix_converter() 1844 { 1845 return remix_converter; 1846 } 1847 1848 struct audio_thread *audio_thread_create() 1849 { 1850 int rc; 1851 struct audio_thread *thread; 1852 1853 thread = (struct audio_thread *)calloc(1, sizeof(*thread)); 1854 if (!thread) 1855 return NULL; 1856 1857 thread->to_thread_fds[0] = -1; 1858 thread->to_thread_fds[1] = -1; 1859 thread->to_main_fds[0] = -1; 1860 thread->to_main_fds[1] = -1; 1861 1862 /* Two way pipes for communication with the device's audio thread. */ 1863 rc = pipe(thread->to_thread_fds); 1864 if (rc < 0) { 1865 syslog(LOG_ERR, "Failed to pipe"); 1866 free(thread); 1867 return NULL; 1868 } 1869 rc = pipe(thread->to_main_fds); 1870 if (rc < 0) { 1871 syslog(LOG_ERR, "Failed to pipe"); 1872 free(thread); 1873 return NULL; 1874 } 1875 1876 atlog = audio_thread_event_log_init(); 1877 1878 return thread; 1879 } 1880 1881 int audio_thread_add_open_dev(struct audio_thread *thread, 1882 struct cras_iodev *dev) 1883 { 1884 struct audio_thread_open_device_msg msg; 1885 1886 assert(thread && dev); 1887 1888 if (!thread->started) 1889 return -EINVAL; 1890 1891 init_open_device_msg(&msg, AUDIO_THREAD_ADD_OPEN_DEV, dev); 1892 return audio_thread_post_message(thread, &msg.header); 1893 } 1894 1895 int audio_thread_rm_open_dev(struct audio_thread *thread, 1896 struct cras_iodev *dev) 1897 { 1898 struct audio_thread_open_device_msg msg; 1899 1900 assert(thread && dev); 1901 if (!thread->started) 1902 return -EINVAL; 1903 1904 init_open_device_msg(&msg, AUDIO_THREAD_RM_OPEN_DEV, dev); 1905 return audio_thread_post_message(thread, &msg.header); 1906 } 1907 1908 int audio_thread_dev_start_ramp(struct audio_thread *thread, 1909 struct cras_iodev *dev, 1910 enum CRAS_IODEV_RAMP_REQUEST request) 1911 { 1912 struct audio_thread_dev_start_ramp_msg msg; 1913 1914 assert(thread && dev); 1915 1916 if (!thread->started) 1917 return -EINVAL; 1918 1919 init_device_start_ramp_msg(&msg, AUDIO_THREAD_DEV_START_RAMP, 1920 dev, request); 1921 return audio_thread_post_message(thread, &msg.header); 1922 } 1923 1924 int audio_thread_start(struct audio_thread *thread) 1925 { 1926 int rc; 1927 1928 rc = pthread_create(&thread->tid, NULL, audio_io_thread, thread); 1929 if (rc) { 1930 syslog(LOG_ERR, "Failed pthread_create"); 1931 return rc; 1932 } 1933 1934 thread->started = 1; 1935 1936 return 0; 1937 } 1938 1939 void audio_thread_destroy(struct audio_thread *thread) 1940 { 1941 audio_thread_event_log_deinit(atlog); 1942 1943 if (thread->started) { 1944 struct audio_thread_msg msg; 1945 1946 msg.id = AUDIO_THREAD_STOP; 1947 msg.length = sizeof(msg); 1948 audio_thread_post_message(thread, &msg); 1949 pthread_join(thread->tid, NULL); 1950 } 1951 1952 if (thread->to_thread_fds[0] != -1) { 1953 close(thread->to_thread_fds[0]); 1954 close(thread->to_thread_fds[1]); 1955 } 1956 if (thread->to_main_fds[0] != -1) { 1957 close(thread->to_main_fds[0]); 1958 close(thread->to_main_fds[1]); 1959 } 1960 1961 if (remix_converter) 1962 cras_fmt_conv_destroy(remix_converter); 1963 1964 free(thread); 1965 } 1966