Home | History | Annotate | Download | only in server
      1 /* Copyright 2017 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 #include <poll.h>
      7 #include <syslog.h>
      8 
      9 #include "audio_thread_log.h"
     10 #include "cras_audio_area.h"
     11 #include "cras_iodev.h"
     12 #include "cras_non_empty_audio_handler.h"
     13 #include "cras_rstream.h"
     14 #include "cras_server_metrics.h"
     15 #include "dev_stream.h"
     16 #include "input_data.h"
     17 #include "polled_interval_checker.h"
     18 #include "utlist.h"
     19 
     20 #include "dev_io.h"
     21 
     22 static const struct timespec playback_wake_fuzz_ts = {
     23 	0, 500 * 1000 /* 500 usec. */
     24 };
     25 
     26 /* The maximum time to wait before checking the device's non-empty status. */
     27 static const int NON_EMPTY_UPDATE_INTERVAL_SEC = 5;
     28 
     29 /*
     30  * The minimum number of consecutive seconds of empty audio that must be
     31  * played before a device is considered to be playing empty audio.
     32  */
     33 static const int MIN_EMPTY_PERIOD_SEC = 30;
     34 
     35 /* The number of devices playing/capturing non-empty stream(s). */
     36 static int non_empty_device_count = 0;
     37 
     38 /* Gets the master device which the stream is attached to. */
     39 static inline
     40 struct cras_iodev *get_master_dev(const struct dev_stream *stream)
     41 {
     42 	return (struct cras_iodev *)stream->stream->master_dev.dev_ptr;
     43 }
     44 
     45 /* Updates the estimated sample rate of open device to all attached
     46  * streams.
     47  */
     48 static void update_estimated_rate(struct open_dev *adev)
     49 {
     50 	struct cras_iodev *master_dev;
     51 	struct cras_iodev *dev = adev->dev;
     52 	struct dev_stream *dev_stream;
     53 
     54 	DL_FOREACH(dev->streams, dev_stream) {
     55 		master_dev = get_master_dev(dev_stream);
     56 		if (master_dev == NULL) {
     57 			syslog(LOG_ERR, "Fail to find master open dev.");
     58 			continue;
     59 		}
     60 
     61 		dev_stream_set_dev_rate(dev_stream,
     62 				dev->ext_format->frame_rate,
     63 				cras_iodev_get_est_rate_ratio(dev),
     64 				cras_iodev_get_est_rate_ratio(master_dev),
     65 				adev->coarse_rate_adjust);
     66 	}
     67 }
     68 
     69 /*
     70  * Counts the number of devices which are currently playing/capturing non-empty
     71  * audio.
     72  */
     73 static inline int count_non_empty_dev(struct open_dev *adevs) {
     74 	int count = 0;
     75 	struct open_dev *adev;
     76 	DL_FOREACH(adevs, adev) {
     77 		if (!adev->empty_pi || !pic_interval_elapsed(adev->empty_pi))
     78 			count++;
     79 	}
     80 	return count;
     81 }
     82 
     83 static void check_non_empty_state_transition(struct open_dev *adevs) {
     84 	int new_non_empty_dev_count = count_non_empty_dev(adevs);
     85 
     86 	// If we have transitioned to or from a state with 0 non-empty devices,
     87 	// notify the main thread to update system state.
     88 	if ((non_empty_device_count == 0) != (new_non_empty_dev_count == 0))
     89 		cras_non_empty_audio_send_msg(
     90 			new_non_empty_dev_count > 0 ? 1 : 0);
     91 
     92 	non_empty_device_count = new_non_empty_dev_count;
     93 }
     94 
     95 /* Asks any stream with room for more data. Sets the time stamp for all streams.
     96  * Args:
     97  *    adev - The output device streams are attached to.
     98  * Returns:
     99  *    0 on success, negative error on failure. If failed, can assume that all
    100  *    streams have been removed from the device.
    101  */
    102 static int fetch_streams(struct open_dev *adev)
    103 {
    104 	struct dev_stream *dev_stream;
    105 	struct cras_iodev *odev = adev->dev;
    106 	int rc;
    107 	int delay;
    108 
    109 	delay = cras_iodev_delay_frames(odev);
    110 	if (delay < 0)
    111 		return delay;
    112 
    113 	DL_FOREACH(adev->dev->streams, dev_stream) {
    114 		struct cras_rstream *rstream = dev_stream->stream;
    115 		struct cras_audio_shm *shm =
    116 			cras_rstream_output_shm(rstream);
    117 		const struct timespec *next_cb_ts;
    118 		struct timespec now;
    119 
    120 		clock_gettime(CLOCK_MONOTONIC_RAW, &now);
    121 
    122 		if (dev_stream_is_pending_reply(dev_stream)) {
    123 			dev_stream_flush_old_audio_messages(dev_stream);
    124 			cras_rstream_record_fetch_interval(dev_stream->stream,
    125 							   &now);
    126 		}
    127 
    128 		if (cras_shm_get_frames(shm) < 0)
    129 			cras_rstream_set_is_draining(rstream, 1);
    130 
    131 		if (cras_rstream_get_is_draining(dev_stream->stream))
    132 			continue;
    133 
    134 		next_cb_ts = dev_stream_next_cb_ts(dev_stream);
    135 		if (!next_cb_ts)
    136 			continue;
    137 
    138 		/* Check if it's time to get more data from this stream.
    139 		 * Allow for waking up a little early. */
    140 		add_timespecs(&now, &playback_wake_fuzz_ts);
    141 		if (!timespec_after(&now, next_cb_ts))
    142 			continue;
    143 
    144 		if (!dev_stream_can_fetch(dev_stream)) {
    145 			ATLOG(atlog, AUDIO_THREAD_STREAM_SKIP_CB,
    146 			      cras_rstream_id(rstream),
    147 			      shm->area->write_offset[0],
    148 			      shm->area->write_offset[1]);
    149 			continue;
    150 		}
    151 
    152 		dev_stream_set_delay(dev_stream, delay);
    153 
    154 		ATLOG(atlog, AUDIO_THREAD_FETCH_STREAM, rstream->stream_id,
    155 		      cras_rstream_get_cb_threshold(rstream), delay);
    156 
    157 		rc = dev_stream_request_playback_samples(dev_stream, &now);
    158 		if (rc < 0) {
    159 			syslog(LOG_ERR, "fetch err: %d for %x",
    160 			       rc, cras_rstream_id(rstream));
    161 			cras_rstream_set_is_draining(rstream, 1);
    162 		}
    163 	}
    164 
    165 	return 0;
    166 }
    167 
    168 /* Gets the max delay frames of open input devices. */
    169 static int input_delay_frames(struct open_dev *adevs)
    170 {
    171 	struct open_dev *adev;
    172 	int delay;
    173 	int max_delay = 0;
    174 
    175 	DL_FOREACH(adevs, adev) {
    176 		if (!cras_iodev_is_open(adev->dev))
    177 			continue;
    178 		delay = cras_iodev_delay_frames(adev->dev);
    179 		if (delay < 0)
    180 			return delay;
    181 		if (delay > max_delay)
    182 			max_delay = delay;
    183 	}
    184 	return max_delay;
    185 }
    186 
    187 /* Sets the stream delay.
    188  * Args:
    189  *    adev[in] - The device to capture from.
    190  */
    191 static unsigned int set_stream_delay(struct open_dev *adev)
    192 {
    193 	struct dev_stream *stream;
    194 	int delay;
    195 
    196 	/* TODO(dgreid) - Setting delay from last dev only. */
    197 	delay = input_delay_frames(adev);
    198 
    199 	DL_FOREACH(adev->dev->streams, stream) {
    200 		if (stream->stream->flags & TRIGGER_ONLY)
    201 			continue;
    202 
    203 		dev_stream_set_delay(stream, delay);
    204 	}
    205 
    206 	return 0;
    207 }
    208 
    209 /* Gets the minimum amount of space available for writing across all streams.
    210  * Args:
    211  *    adev[in] - The device to capture from.
    212  *    write_limit[in] - Initial limit to number of frames to capture.
    213  *    limit_stream[out] - The pointer to the pointer of stream which
    214  *                        causes capture limit.
    215  *                        Output NULL if there is no stream that causes
    216  *                        capture limit less than the initial limit.
    217  */
    218 static unsigned int get_stream_limit(
    219 		struct open_dev *adev,
    220 		unsigned int write_limit,
    221 		struct dev_stream **limit_stream)
    222 {
    223 	struct cras_rstream *rstream;
    224 	struct cras_audio_shm *shm;
    225 	struct dev_stream *stream;
    226 	unsigned int avail;
    227 
    228 	*limit_stream = NULL;
    229 
    230 	DL_FOREACH(adev->dev->streams, stream) {
    231 		rstream = stream->stream;
    232 		if (rstream->flags & TRIGGER_ONLY)
    233 			continue;
    234 
    235 		shm = cras_rstream_input_shm(rstream);
    236 		if (cras_shm_check_write_overrun(shm))
    237 			ATLOG(atlog, AUDIO_THREAD_READ_OVERRUN,
    238 			      adev->dev->info.idx, rstream->stream_id,
    239 			      shm->area->num_overruns);
    240 		avail = dev_stream_capture_avail(stream);
    241 		if (avail < write_limit) {
    242 			write_limit = avail;
    243 			*limit_stream = stream;
    244 		}
    245 	}
    246 
    247 	return write_limit;
    248 }
    249 
    250 /*
    251  * The minimum wake time for a input device, which is 5ms. It's only used by
    252  * function get_input_dev_max_wake_ts.
    253  */
    254 static const struct timespec min_input_dev_wake_ts = {
    255 	0, 5 * 1000 * 1000 /* 5 ms. */
    256 };
    257 
    258 /*
    259  * Get input device maximum sleep time, which is the approximate time that the
    260  * device will have hw_level = buffer_size / 2 samples. Some devices have
    261  * capture period = 2 so the audio_thread should wake up and consume some
    262  * samples from hardware at that time. To prevent busy loop occurs, the returned
    263  * sleep time should be >= 5ms.
    264  *
    265  * Returns: 0 on success negative error on device failure.
    266  */
    267 static int get_input_dev_max_wake_ts(
    268 	struct open_dev *adev,
    269 	unsigned int curr_level,
    270 	struct timespec *res_ts)
    271 {
    272 	struct timespec dev_wake_ts, now;
    273 	unsigned int dev_rate, half_buffer_size, target_frames;
    274 
    275 	if(!adev || !adev->dev || !adev->dev->format ||
    276 	   !adev->dev->format->frame_rate || !adev->dev->buffer_size)
    277 		return -EINVAL;
    278 
    279 	*res_ts = min_input_dev_wake_ts;
    280 
    281 	dev_rate = adev->dev->format->frame_rate;
    282 	half_buffer_size = adev->dev->buffer_size / 2;
    283 	if(curr_level < half_buffer_size)
    284 		target_frames = half_buffer_size - curr_level;
    285 	else
    286 		target_frames = 0;
    287 
    288 	cras_frames_to_time(target_frames, dev_rate, &dev_wake_ts);
    289 
    290 	if (timespec_after(&dev_wake_ts, res_ts)) {
    291 		*res_ts = dev_wake_ts;
    292 	}
    293 
    294 	clock_gettime(CLOCK_MONOTONIC_RAW, &now);
    295 	add_timespecs(res_ts, &now);
    296 	return 0;
    297 }
    298 
    299 /*
    300  * Set wake_ts for this device to be the earliest wake up time for
    301  * dev_streams.
    302  */
    303 static int set_input_dev_wake_ts(struct open_dev *adev)
    304 {
    305 	int rc;
    306 	struct timespec level_tstamp, wake_time_out, min_ts, now, dev_wake_ts;
    307 	unsigned int curr_level, cap_limit;
    308 	struct dev_stream *stream;
    309 	struct dev_stream *cap_limit_stream;
    310 
    311 	/* Limit the sleep time to 20 seconds. */
    312 	min_ts.tv_sec = 20;
    313 	min_ts.tv_nsec = 0;
    314 	clock_gettime(CLOCK_MONOTONIC_RAW, &now);
    315 	add_timespecs(&min_ts, &now);
    316 
    317 	rc = cras_iodev_frames_queued(adev->dev, &level_tstamp);
    318 	if (rc < 0)
    319 		return rc;
    320 	curr_level = rc;
    321 	if (!timespec_is_nonzero(&level_tstamp))
    322 		clock_gettime(CLOCK_MONOTONIC_RAW, &level_tstamp);
    323 
    324 
    325 	cap_limit = get_stream_limit(adev, UINT_MAX, &cap_limit_stream);
    326 
    327 	/*
    328 	 * Loop through streams to find the earliest time audio thread
    329 	 * should wake up.
    330 	 */
    331 	DL_FOREACH(adev->dev->streams, stream) {
    332 		wake_time_out = min_ts;
    333 		rc = dev_stream_wake_time(
    334 			stream,
    335 			curr_level,
    336 			&level_tstamp,
    337 			cap_limit,
    338 			cap_limit_stream == stream,
    339 			&wake_time_out);
    340 
    341 		/*
    342 		 * rc > 0 means there is no need to set wake up time for this
    343 		 * stream.
    344 		 */
    345 		if (rc > 0)
    346 			continue;
    347 
    348 		if (rc < 0)
    349 			return rc;
    350 
    351 		if (timespec_after(&min_ts, &wake_time_out)) {
    352 			min_ts = wake_time_out;
    353 		}
    354 	}
    355 
    356 	if(adev->dev->active_node &&
    357 	   adev->dev->active_node->type != CRAS_NODE_TYPE_HOTWORD) {
    358 		rc = get_input_dev_max_wake_ts(adev, curr_level, &dev_wake_ts);
    359 		if(rc < 0) {
    360 			syslog(LOG_ERR,
    361 			       "Failed to call get_input_dev_max_wake_ts."
    362 			       "rc = %d", rc);
    363 		} else if(timespec_after(&min_ts, &dev_wake_ts)) {
    364 			min_ts = dev_wake_ts;
    365 		}
    366 	}
    367 
    368 	adev->wake_ts = min_ts;
    369 	return rc;
    370 }
    371 
    372 /* Read samples from an input device to the specified stream.
    373  * Args:
    374  *    adev - The device to capture samples from.
    375  * Returns 0 on success.
    376  */
    377 static int capture_to_streams(struct open_dev *adev)
    378 {
    379 	struct cras_iodev *idev = adev->dev;
    380 	snd_pcm_uframes_t remainder, hw_level, cap_limit;
    381 	struct timespec hw_tstamp;
    382 	int rc;
    383 	struct dev_stream *cap_limit_stream;
    384 	struct dev_stream *stream;
    385 
    386 	DL_FOREACH(adev->dev->streams, stream)
    387 		dev_stream_flush_old_audio_messages(stream);
    388 
    389 	rc = cras_iodev_frames_queued(idev, &hw_tstamp);
    390 	if (rc < 0)
    391 		return rc;
    392 	hw_level = rc;
    393 
    394 	cras_iodev_update_highest_hw_level(idev, hw_level);
    395 
    396 	ATLOG(atlog, AUDIO_THREAD_READ_AUDIO_TSTAMP, idev->info.idx,
    397 	      hw_tstamp.tv_sec, hw_tstamp.tv_nsec);
    398 	if (timespec_is_nonzero(&hw_tstamp)) {
    399 		if (hw_level < idev->min_cb_level / 2)
    400 			adev->coarse_rate_adjust = 1;
    401 		else if (hw_level > idev->max_cb_level * 2)
    402 			adev->coarse_rate_adjust = -1;
    403 		else
    404 			adev->coarse_rate_adjust = 0;
    405 		if (cras_iodev_update_rate(idev, hw_level, &hw_tstamp))
    406 			update_estimated_rate(adev);
    407 	}
    408 
    409 	cap_limit = get_stream_limit(adev, hw_level, &cap_limit_stream);
    410 	set_stream_delay(adev);
    411 
    412 	remainder = MIN(hw_level, cap_limit);
    413 
    414 	ATLOG(atlog, AUDIO_THREAD_READ_AUDIO, idev->info.idx,
    415 	      hw_level, remainder);
    416 
    417 	if (cras_iodev_state(idev) != CRAS_IODEV_STATE_NORMAL_RUN)
    418 		return 0;
    419 
    420 	while (remainder > 0) {
    421 		struct cras_audio_area *area = NULL;
    422 		unsigned int nread, total_read;
    423 
    424 		nread = remainder;
    425 
    426 		rc = cras_iodev_get_input_buffer(idev, &nread);
    427 		if (rc < 0 || nread == 0)
    428 			return rc;
    429 
    430 		DL_FOREACH(adev->dev->streams, stream) {
    431 			unsigned int this_read;
    432 			unsigned int area_offset;
    433 			float software_gain_scaler;
    434 
    435 			if ((stream->stream->flags & TRIGGER_ONLY) &&
    436 			    stream->stream->triggered)
    437 				continue;
    438 
    439 			input_data_get_for_stream(idev->input_data, stream->stream,
    440 						  idev->buf_state,
    441 						  &area, &area_offset);
    442 			/*
    443 			 * APM has more advanced gain control mechanism, so
    444 			 * don't apply the CRAS software gain to this stream
    445 			 * if APM is used.
    446 			 */
    447 			software_gain_scaler = stream->stream->apm_list
    448 				? 1.0f
    449 				: cras_iodev_get_software_gain_scaler(idev);
    450 
    451 			this_read = dev_stream_capture(
    452 					stream, area, area_offset,
    453 					software_gain_scaler);
    454 
    455 			input_data_put_for_stream(idev->input_data, stream->stream,
    456 						  idev->buf_state, this_read);
    457 		}
    458 
    459 		rc = cras_iodev_put_input_buffer(idev);
    460 		if (rc < 0)
    461 			return rc;
    462 
    463 		total_read = rc;
    464 		remainder -= nread;
    465 
    466 		if (total_read < nread)
    467 			break;
    468 	}
    469 
    470 	ATLOG(atlog, AUDIO_THREAD_READ_AUDIO_DONE, remainder, 0, 0);
    471 
    472 	return 0;
    473 }
    474 
    475 /* Fill the buffer with samples from the attached streams.
    476  * Args:
    477  *    odevs - The list of open output devices, provided so streams can be
    478  *            removed from all devices on error.
    479  *    adev - The device to write to.
    480  *    dst - The buffer to put the samples in (returned from snd_pcm_mmap_begin)
    481  *    write_limit - The maximum number of frames to write to dst.
    482  *
    483  * Returns:
    484  *    The number of frames rendered on success, a negative error code otherwise.
    485  *    This number of frames is the minimum of the amount of frames each stream
    486  *    could provide which is the maximum that can currently be rendered.
    487  */
    488 static int write_streams(struct open_dev **odevs,
    489 			 struct open_dev *adev,
    490 			 uint8_t *dst,
    491 			 size_t write_limit)
    492 {
    493 	struct cras_iodev *odev = adev->dev;
    494 	struct dev_stream *curr;
    495 	unsigned int max_offset = 0;
    496 	unsigned int frame_bytes = cras_get_format_bytes(odev->ext_format);
    497 	unsigned int num_playing = 0;
    498 	unsigned int drain_limit = write_limit;
    499 
    500 	/* Mix as much as we can, the minimum fill level of any stream. */
    501 	max_offset = cras_iodev_max_stream_offset(odev);
    502 
    503         /* Mix as much as we can, the minimum fill level of any stream. */
    504 	DL_FOREACH(adev->dev->streams, curr) {
    505 		int dev_frames;
    506 
    507 		/* If this is a single output dev stream, updates the latest
    508 		 * number of frames for playback. */
    509 		if (dev_stream_attached_devs(curr) == 1)
    510 			dev_stream_update_frames(curr);
    511 
    512 		dev_frames = dev_stream_playback_frames(curr);
    513 		if (dev_frames < 0) {
    514 			dev_io_remove_stream(
    515 				odevs,
    516 				curr->stream, NULL);
    517 			continue;
    518 		}
    519 		ATLOG(atlog, AUDIO_THREAD_WRITE_STREAMS_STREAM,
    520 		      curr->stream->stream_id, dev_frames,
    521 		      dev_stream_is_pending_reply(curr));
    522 		if (cras_rstream_get_is_draining(curr->stream)) {
    523 			drain_limit = MIN((size_t)dev_frames, drain_limit);
    524 			if (!dev_frames)
    525 				dev_io_remove_stream(
    526 					odevs,
    527 					curr->stream, NULL);
    528 		} else {
    529 			write_limit = MIN((size_t)dev_frames, write_limit);
    530 			num_playing++;
    531 		}
    532 	}
    533 
    534 	if (!num_playing)
    535 		write_limit = drain_limit;
    536 
    537 	if (write_limit > max_offset)
    538 		memset(dst + max_offset * frame_bytes, 0,
    539 		       (write_limit - max_offset) * frame_bytes);
    540 
    541 	ATLOG(atlog, AUDIO_THREAD_WRITE_STREAMS_MIX,
    542 	      write_limit, max_offset, 0);
    543 
    544 	DL_FOREACH(adev->dev->streams, curr) {
    545 		unsigned int offset;
    546 		int nwritten;
    547 
    548 		offset = cras_iodev_stream_offset(odev, curr);
    549 		if (offset >= write_limit)
    550 			continue;
    551 		nwritten = dev_stream_mix(curr, odev->ext_format,
    552 					  dst + frame_bytes * offset,
    553 					  write_limit - offset);
    554 
    555 		if (nwritten < 0) {
    556 			dev_io_remove_stream(odevs, curr->stream, NULL);
    557 			continue;
    558 		}
    559 
    560 		cras_iodev_stream_written(odev, curr, nwritten);
    561 	}
    562 
    563 	write_limit = cras_iodev_all_streams_written(odev);
    564 
    565 	ATLOG(atlog, AUDIO_THREAD_WRITE_STREAMS_MIXED, write_limit, 0, 0);
    566 
    567 	return write_limit;
    568 }
    569 
    570 /* Update next wake up time of the device.
    571  * Args:
    572  *    adev[in] - The device to update to.
    573  *    hw_level[out] - Pointer to number of frames in hardware.
    574  */
    575 void update_dev_wakeup_time(struct open_dev *adev, unsigned int *hw_level)
    576 {
    577 	struct timespec now;
    578 	struct timespec sleep_time;
    579 	double est_rate;
    580 	unsigned int frames_to_play_in_sleep;
    581 
    582 	clock_gettime(CLOCK_MONOTONIC_RAW, &now);
    583 
    584 	frames_to_play_in_sleep = cras_iodev_frames_to_play_in_sleep(
    585 			adev->dev, hw_level, &adev->wake_ts);
    586 	if (!timespec_is_nonzero(&adev->wake_ts))
    587 		adev->wake_ts = now;
    588 
    589 	if (cras_iodev_state(adev->dev) == CRAS_IODEV_STATE_NORMAL_RUN)
    590 		cras_iodev_update_highest_hw_level(adev->dev, *hw_level);
    591 
    592 	est_rate = adev->dev->ext_format->frame_rate *
    593 			cras_iodev_get_est_rate_ratio(adev->dev);
    594 
    595 	ATLOG(atlog, AUDIO_THREAD_SET_DEV_WAKE, adev->dev->info.idx,
    596 	      *hw_level, frames_to_play_in_sleep);
    597 
    598 	cras_frames_to_time_precise(
    599 			frames_to_play_in_sleep,
    600 			est_rate,
    601 			&sleep_time);
    602 
    603 	add_timespecs(&adev->wake_ts, &sleep_time);
    604 
    605 	ATLOG(atlog, AUDIO_THREAD_DEV_SLEEP_TIME, adev->dev->info.idx,
    606 	      adev->wake_ts.tv_sec, adev->wake_ts.tv_nsec);
    607 }
    608 
    609 /* Returns 0 on success negative error on device failure. */
    610 int write_output_samples(struct open_dev **odevs,
    611 			 struct open_dev *adev,
    612 			 struct cras_fmt_conv *output_converter)
    613 {
    614 	struct cras_iodev *odev = adev->dev;
    615 	unsigned int hw_level;
    616 	struct timespec hw_tstamp;
    617 	unsigned int frames, fr_to_req;
    618 	snd_pcm_sframes_t written;
    619 	snd_pcm_uframes_t total_written = 0;
    620 	int rc;
    621 	int non_empty = 0;
    622 	int *non_empty_ptr = NULL;
    623 	uint8_t *dst = NULL;
    624 	struct cras_audio_area *area = NULL;
    625 
    626 	/* Possibly fill zeros for no_stream state and possibly transit state.
    627 	 */
    628 	rc = cras_iodev_prepare_output_before_write_samples(odev);
    629 	if (rc < 0) {
    630 		syslog(LOG_ERR, "Failed to prepare output dev for write");
    631 		return rc;
    632 	}
    633 
    634 	if (cras_iodev_state(odev) != CRAS_IODEV_STATE_NORMAL_RUN)
    635 		return 0;
    636 
    637 	rc = cras_iodev_frames_queued(odev, &hw_tstamp);
    638 	if (rc < 0)
    639 		return rc;
    640 	hw_level = rc;
    641 
    642 	ATLOG(atlog, AUDIO_THREAD_FILL_AUDIO_TSTAMP, adev->dev->info.idx,
    643 	      hw_tstamp.tv_sec, hw_tstamp.tv_nsec);
    644 	if (timespec_is_nonzero(&hw_tstamp)) {
    645 		if (hw_level < odev->min_cb_level / 2)
    646 			adev->coarse_rate_adjust = 1;
    647 		else if (hw_level > odev->max_cb_level * 2)
    648 			adev->coarse_rate_adjust = -1;
    649 		else
    650 			adev->coarse_rate_adjust = 0;
    651 
    652 		if (cras_iodev_update_rate(odev, hw_level, &hw_tstamp))
    653 			update_estimated_rate(adev);
    654 	}
    655 	ATLOG(atlog, AUDIO_THREAD_FILL_AUDIO, adev->dev->info.idx, hw_level, 0);
    656 
    657 	/* Don't request more than hardware can hold. Note that min_buffer_level
    658 	 * has been subtracted from the actual hw_level so we need to take it
    659 	 * into account here. */
    660 	fr_to_req = cras_iodev_buffer_avail(odev, hw_level);
    661 
    662 	/* Have to loop writing to the device, will be at most 2 loops, this
    663 	 * only happens when the circular buffer is at the end and returns us a
    664 	 * partial area to write to from mmap_begin */
    665 	while (total_written < fr_to_req) {
    666 		frames = fr_to_req - total_written;
    667 		rc = cras_iodev_get_output_buffer(odev, &area, &frames);
    668 		if (rc < 0)
    669 			return rc;
    670 
    671 		/* TODO(dgreid) - This assumes interleaved audio. */
    672 		dst = area->channels[0].buf;
    673 		written = write_streams(odevs, adev, dst, frames);
    674 		if (written < 0) /* pcm has been closed */
    675 			return (int)written;
    676 
    677 		if (written < (snd_pcm_sframes_t)frames)
    678 			/* Got all the samples from client that we can, but it
    679 			 * won't fill the request. */
    680 			fr_to_req = 0; /* break out after committing samples */
    681 
    682 		// This interval is lazily initialized once per device.
    683 		// Note that newly opened devices are considered non-empty
    684 		// (until their status is updated through the normal flow).
    685 		if (!adev->non_empty_check_pi) {
    686 			adev->non_empty_check_pi = pic_polled_interval_create(
    687 				NON_EMPTY_UPDATE_INTERVAL_SEC);
    688 		}
    689 
    690 		// If we were empty last iteration, or the sampling interval
    691 		// has elapsed, check for emptiness.
    692 		if (adev->empty_pi ||
    693 			pic_interval_elapsed(adev->non_empty_check_pi)) {
    694 			non_empty_ptr = &non_empty;
    695 			pic_interval_reset(adev->non_empty_check_pi);
    696 		}
    697 
    698 		rc = cras_iodev_put_output_buffer(odev, dst, written,
    699 						  non_empty_ptr,
    700 						  output_converter);
    701 
    702 		if (rc < 0)
    703 			return rc;
    704 		total_written += written;
    705 
    706 		if (non_empty && adev->empty_pi) {
    707 			// We're not empty, but we were previously.
    708 			// Reset the empty period.
    709 			pic_polled_interval_destroy(&adev->empty_pi);
    710 		}
    711 
    712 		if (non_empty_ptr && !non_empty && !adev->empty_pi)
    713 			// We checked for emptiness, we were empty, and we
    714 			// previously weren't. Start the empty period.
    715 			adev->empty_pi = pic_polled_interval_create(
    716 				MIN_EMPTY_PERIOD_SEC);
    717 	}
    718 
    719 	ATLOG(atlog, AUDIO_THREAD_FILL_AUDIO_DONE, hw_level,
    720 	      total_written, odev->min_cb_level);
    721 
    722 	return total_written;
    723 }
    724 
    725 /*
    726  * Public funcitons.
    727  */
    728 
    729 int dev_io_send_captured_samples(struct open_dev *idev_list)
    730 {
    731 	struct open_dev *adev;
    732 	int rc;
    733 
    734 	// TODO(dgreid) - once per rstream, not once per dev_stream.
    735 	DL_FOREACH(idev_list, adev) {
    736 		struct dev_stream *stream;
    737 
    738 		if (!cras_iodev_is_open(adev->dev))
    739 			continue;
    740 
    741 		/* Post samples to rstream if there are enough samples. */
    742 		DL_FOREACH(adev->dev->streams, stream) {
    743 			dev_stream_capture_update_rstream(stream);
    744 		}
    745 
    746 		/* Set wake_ts for this device. */
    747 		rc = set_input_dev_wake_ts(adev);
    748 		if (rc < 0)
    749 			return rc;
    750 	}
    751 
    752 	return 0;
    753 }
    754 
    755 static void handle_dev_err(
    756 		int err_rc,
    757 		struct open_dev **odevs,
    758 		struct open_dev *adev)
    759 {
    760 	if (err_rc == -EPIPE) {
    761 		/* Handle severe underrun. */
    762 		ATLOG(atlog, AUDIO_THREAD_SEVERE_UNDERRUN,
    763 		      adev->dev->info.idx, 0, 0);
    764 		cras_iodev_reset_request(adev->dev);
    765 	} else {
    766 		/* Device error, close it. */
    767 		dev_io_rm_open_dev(odevs, adev);
    768 	}
    769 }
    770 
    771 int dev_io_capture(struct open_dev **list)
    772 {
    773 	struct open_dev *idev_list = *list;
    774 	struct open_dev *adev;
    775 	int rc;
    776 
    777 	DL_FOREACH(idev_list, adev) {
    778 		if (!cras_iodev_is_open(adev->dev))
    779 			continue;
    780 		rc = capture_to_streams(adev);
    781 		if (rc < 0)
    782 			handle_dev_err(rc, list, adev);
    783 	}
    784 
    785 	return 0;
    786 }
    787 
    788 void dev_io_playback_fetch(struct open_dev *odev_list)
    789 {
    790 	struct open_dev *adev;
    791 
    792 	DL_FOREACH(odev_list, adev) {
    793 		if (!cras_iodev_is_open(adev->dev))
    794 			continue;
    795 		fetch_streams(adev);
    796 	}
    797 }
    798 
    799 int dev_io_playback_write(struct open_dev **odevs,
    800 			  struct cras_fmt_conv *output_converter)
    801 {
    802 	struct open_dev *adev;
    803 	struct dev_stream *curr;
    804 	int rc;
    805 	unsigned int hw_level, total_written;
    806 
    807 	/* For multiple output case, update the number of queued frames in shm
    808 	 * of all streams before starting write output samples. */
    809 	adev = *odevs;
    810 	if (adev && adev->next) {
    811 		DL_FOREACH(*odevs, adev) {
    812 			DL_FOREACH(adev->dev->streams, curr)
    813 				dev_stream_update_frames(curr);
    814 		}
    815 	}
    816 
    817 	DL_FOREACH(*odevs, adev) {
    818 		if (!cras_iodev_is_open(adev->dev))
    819 			continue;
    820 
    821 		rc = write_output_samples(odevs, adev, output_converter);
    822 		if (rc < 0) {
    823 			handle_dev_err(rc, odevs, adev);
    824 		} else {
    825 			total_written = rc;
    826 
    827 			/*
    828 			 * Skip the underrun check and device wake up time update if
    829 			 * device should not wake up.
    830 			 */
    831 			if (!cras_iodev_odev_should_wake(adev->dev))
    832 				continue;
    833 
    834 			/*
    835 			 * Update device wake up time and get the new hardware
    836 			 * level.
    837 			 */
    838 			update_dev_wakeup_time(adev, &hw_level);
    839 
    840 			/*
    841 			 * If new hardware level is less than or equal to the
    842 			 * written frames, we can suppose underrun happened. But
    843 			 * keep in mind there may have a false positive. If
    844 			 * hardware level changed just after frames being
    845 			 * written, we may get hw_level <= total_written here
    846 			 * without underrun happened. However, we can still
    847 			 * treat it as underrun because it is an abnormal state
    848 			 * we should handle it.
    849 			 */
    850 			if (hw_level <= total_written) {
    851 				ATLOG(atlog, AUDIO_THREAD_UNDERRUN,
    852 				      adev->dev->info.idx,
    853 				      hw_level, total_written);
    854 				rc = cras_iodev_output_underrun(adev->dev);
    855 				if(rc < 0) {
    856 					handle_dev_err(rc, odevs, adev);
    857 				} else {
    858 					update_dev_wakeup_time(adev, &hw_level);
    859 				}
    860 			}
    861 		}
    862 	}
    863 
    864 	/* TODO(dgreid) - once per rstream, not once per dev_stream. */
    865 	DL_FOREACH(*odevs, adev) {
    866 		struct dev_stream *stream;
    867 		if (!cras_iodev_is_open(adev->dev))
    868 			continue;
    869 		DL_FOREACH(adev->dev->streams, stream) {
    870 			dev_stream_playback_update_rstream(stream);
    871 		}
    872 	}
    873 
    874 	return 0;
    875 }
    876 
    877 void dev_io_run(struct open_dev **odevs, struct open_dev **idevs,
    878 		struct cras_fmt_conv *output_converter)
    879 {
    880 	pic_update_current_time();
    881 
    882 	dev_io_playback_fetch(*odevs);
    883 	dev_io_capture(idevs);
    884 	dev_io_send_captured_samples(*idevs);
    885 	dev_io_playback_write(odevs, output_converter);
    886 
    887 	check_non_empty_state_transition(*odevs);
    888 }
    889 
    890 static int input_adev_ignore_wake(const struct open_dev *adev)
    891 {
    892 	if (!cras_iodev_is_open(adev->dev))
    893 		return 1;
    894 
    895 	if (!adev->dev->active_node)
    896 		return 1;
    897 
    898 	if (adev->dev->active_node->type == CRAS_NODE_TYPE_HOTWORD &&
    899 	    !cras_iodev_input_streaming(adev->dev))
    900 		return 1;
    901 
    902 	return 0;
    903 }
    904 
    905 int dev_io_next_input_wake(struct open_dev **idevs, struct timespec *min_ts)
    906 {
    907 	struct open_dev *adev;
    908 	int ret = 0; /* The total number of devices to wait on. */
    909 
    910 	DL_FOREACH(*idevs, adev) {
    911 		if (input_adev_ignore_wake(adev))
    912 			continue;
    913 		ret++;
    914 		ATLOG(atlog, AUDIO_THREAD_DEV_SLEEP_TIME, adev->dev->info.idx,
    915 		      adev->wake_ts.tv_sec, adev->wake_ts.tv_nsec);
    916 		if (timespec_after(min_ts, &adev->wake_ts))
    917 			*min_ts = adev->wake_ts;
    918 	}
    919 
    920 	return ret;
    921 }
    922 
    923 struct open_dev *dev_io_find_open_dev(struct open_dev *odev_list,
    924 				      const struct cras_iodev *dev)
    925 {
    926 	struct open_dev *odev;
    927 	DL_FOREACH(odev_list, odev)
    928 		if (odev->dev == dev)
    929 			return odev;
    930 	return NULL;
    931 }
    932 
    933 void dev_io_rm_open_dev(struct open_dev **odev_list,
    934 			struct open_dev *dev_to_rm)
    935 {
    936 	struct open_dev *odev;
    937 	struct dev_stream *dev_stream;
    938 
    939 	/* Do nothing if dev_to_rm wasn't already in the active dev list. */
    940 	odev = dev_io_find_open_dev(*odev_list, dev_to_rm->dev);
    941 	if (!odev)
    942 		return;
    943 
    944 
    945 	DL_DELETE(*odev_list, dev_to_rm);
    946 
    947 	/* Metrics logs the number of underruns of this device. */
    948 	cras_server_metrics_num_underruns(
    949 		cras_iodev_get_num_underruns(dev_to_rm->dev));
    950 
    951 	/* Metrics logs the highest_hw_level of this device. */
    952 	cras_server_metrics_highest_hw_level(
    953 		dev_to_rm->dev->highest_hw_level, dev_to_rm->dev->direction);
    954 
    955 	check_non_empty_state_transition(*odev_list);
    956 
    957 	ATLOG(atlog, AUDIO_THREAD_DEV_REMOVED, dev_to_rm->dev->info.idx, 0, 0);
    958 
    959 	DL_FOREACH(dev_to_rm->dev->streams, dev_stream) {
    960 		cras_iodev_rm_stream(dev_to_rm->dev, dev_stream->stream);
    961 		dev_stream_destroy(dev_stream);
    962 	}
    963 
    964 	if (dev_to_rm->empty_pi)
    965 		pic_polled_interval_destroy(&dev_to_rm->empty_pi);
    966 	if (dev_to_rm->non_empty_check_pi)
    967 		pic_polled_interval_destroy(&dev_to_rm->non_empty_check_pi);
    968 	free(dev_to_rm);
    969 }
    970 
    971 static void delete_stream_from_dev(struct cras_iodev *dev,
    972 				   struct cras_rstream *stream)
    973 {
    974 	struct dev_stream *out;
    975 
    976 	out = cras_iodev_rm_stream(dev, stream);
    977 	if (out)
    978 		dev_stream_destroy(out);
    979 }
    980 
    981 int dev_io_remove_stream(struct open_dev **dev_list,
    982 			 struct cras_rstream *stream,
    983 			 struct cras_iodev *dev)
    984 {
    985 	struct open_dev *open_dev;
    986 	struct timespec delay;
    987 	unsigned fetch_delay_msec;
    988 
    989 	/* Metrics log the longest fetch delay of this stream. */
    990 	if (timespec_after(&stream->longest_fetch_interval,
    991 			   &stream->sleep_interval_ts)) {
    992 		subtract_timespecs(&stream->longest_fetch_interval,
    993 				   &stream->sleep_interval_ts,
    994 				   &delay);
    995 		fetch_delay_msec = delay.tv_sec * 1000 +
    996 				   delay.tv_nsec / 1000000;
    997 		if (fetch_delay_msec)
    998 			cras_server_metrics_longest_fetch_delay(
    999 					fetch_delay_msec);
   1000 	}
   1001 
   1002 	ATLOG(atlog, AUDIO_THREAD_STREAM_REMOVED, stream->stream_id, 0, 0);
   1003 
   1004 	if (dev == NULL) {
   1005 		DL_FOREACH(*dev_list, open_dev) {
   1006 			delete_stream_from_dev(open_dev->dev, stream);
   1007 		}
   1008 	} else {
   1009 		delete_stream_from_dev(dev, stream);
   1010 	}
   1011 
   1012 	return 0;
   1013 }
   1014