• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include <pthread.h>
7 #include <stdbool.h>
8 #include <stdlib.h>
9 #include <sys/param.h>
10 #include <sys/time.h>
11 #include <syslog.h>
12 #include <time.h>
13 
14 #include "audio_thread.h"
15 #include "audio_thread_log.h"
16 #include "buffer_share.h"
17 #include "cras_audio_area.h"
18 #include "cras_audio_thread_monitor.h"
19 #include "cras_device_monitor.h"
20 #include "cras_dsp.h"
21 #include "cras_dsp_pipeline.h"
22 #include "cras_fmt_conv.h"
23 #include "cras_iodev.h"
24 #include "cras_main_thread_log.h"
25 #include "cras_iodev_list.h"
26 #include "cras_mix.h"
27 #include "cras_ramp.h"
28 #include "cras_rstream.h"
29 #include "cras_server_metrics.h"
30 #include "cras_system_state.h"
31 #include "cras_util.h"
32 #include "dev_stream.h"
33 #include "input_data.h"
34 #include "utlist.h"
35 #include "rate_estimator.h"
36 #include "softvol_curve.h"
37 
38 static const float RAMP_UNMUTE_DURATION_SECS = 0.5;
39 static const float RAMP_NEW_STREAM_DURATION_SECS = 0.01;
40 static const float RAMP_MUTE_DURATION_SECS = 0.1;
41 static const float RAMP_RESUME_MUTE_DURATION_SECS = 1;
42 static const float RAMP_SWITCH_MUTE_DURATION_SECS = 0.5;
43 static const float RAMP_VOLUME_CHANGE_DURATION_SECS = 0.1;
44 
45 /*
46  * It is the lastest time for the device to wake up when it is in the normal
47  * run state. It represents how many remaining frames in the device buffer.
48  */
49 static const struct timespec dev_normal_run_wake_up_time = {
50 	0, 1 * 1000 * 1000 /* 1 msec. */
51 };
52 
53 /*
54  * It is the lastest time for the device to wake up when it is in the no stream
55  * state. It represents how many remaining frames in the device buffer.
56  */
57 static const struct timespec dev_no_stream_wake_up_time = {
58 	0, 5 * 1000 * 1000 /* 5 msec. */
59 };
60 
61 /*
62  * Check issu b/72496547 and commit message for the history of
63  * rate estimator tuning.
64  */
65 static const struct timespec rate_estimation_window_sz = {
66 	5, 0 /* 5 sec. */
67 };
68 static const double rate_estimation_smooth_factor = 0.3f;
69 
70 static void cras_iodev_alloc_dsp(struct cras_iodev *iodev);
71 
default_no_stream_playback(struct cras_iodev * odev)72 static int default_no_stream_playback(struct cras_iodev *odev)
73 {
74 	int rc;
75 	unsigned int hw_level, fr_to_write;
76 	unsigned int target_hw_level = odev->min_cb_level * 2;
77 	struct timespec hw_tstamp;
78 
79 	/* The default action for no stream playback is to fill zeros. */
80 	rc = cras_iodev_frames_queued(odev, &hw_tstamp);
81 	if (rc < 0)
82 		return rc;
83 	hw_level = rc;
84 
85 	/* If underrun happened, handle underrun and get hw_level again. */
86 	if (hw_level == 0) {
87 		rc = cras_iodev_output_underrun(odev, hw_level, 0);
88 		if (rc < 0)
89 			return rc;
90 
91 		rc = cras_iodev_frames_queued(odev, &hw_tstamp);
92 		if (rc < 0)
93 			return rc;
94 		hw_level = rc;
95 	}
96 
97 	ATLOG(atlog, AUDIO_THREAD_ODEV_DEFAULT_NO_STREAMS, odev->info.idx,
98 	      hw_level, target_hw_level);
99 
100 	fr_to_write = cras_iodev_buffer_avail(odev, hw_level);
101 	if (hw_level <= target_hw_level) {
102 		fr_to_write = MIN(target_hw_level - hw_level, fr_to_write);
103 		return cras_iodev_fill_odev_zeros(odev, fr_to_write);
104 	}
105 	return 0;
106 }
107 
cras_iodev_start(struct cras_iodev * iodev)108 static int cras_iodev_start(struct cras_iodev *iodev)
109 {
110 	int rc;
111 	if (!cras_iodev_is_open(iodev))
112 		return -EPERM;
113 	if (!iodev->start) {
114 		syslog(LOG_ERR,
115 		       "start called on device %s not supporting start ops",
116 		       iodev->info.name);
117 		return -EINVAL;
118 	}
119 	rc = iodev->start(iodev);
120 	if (rc)
121 		return rc;
122 	iodev->state = CRAS_IODEV_STATE_NORMAL_RUN;
123 	return 0;
124 }
125 
126 /* Gets the number of frames ready for this device to play.
127  * It is the minimum number of available samples in dev_streams.
128  */
dev_playback_frames(struct cras_iodev * odev)129 static unsigned int dev_playback_frames(struct cras_iodev *odev)
130 {
131 	struct dev_stream *curr;
132 	int frames = 0;
133 
134 	DL_FOREACH (odev->streams, curr) {
135 		int dev_frames;
136 
137 		/* Skip stream which hasn't started running yet. */
138 		if (!dev_stream_is_running(curr))
139 			continue;
140 
141 		/* If this is a single output dev stream, updates the latest
142 		 * number of frames for playback. */
143 		if (dev_stream_attached_devs(curr) == 1)
144 			dev_stream_update_frames(curr);
145 
146 		dev_frames = dev_stream_playback_frames(curr);
147 		/* Do not handle stream error or end of draining in this
148 		 * function because they should be handled in write_streams. */
149 		if (dev_frames < 0)
150 			continue;
151 		if (!dev_frames) {
152 			if (cras_rstream_get_is_draining(curr->stream))
153 				continue;
154 			else
155 				return 0;
156 		}
157 		if (frames == 0)
158 			frames = dev_frames;
159 		else
160 			frames = MIN(dev_frames, frames);
161 	}
162 	return frames;
163 }
164 
165 /* Let device enter/leave no stream playback.
166  * Args:
167  *    iodev[in] - The output device.
168  *    enable[in] - 1 to enter no stream playback, 0 to leave.
169  * Returns:
170  *    0 on success. Negative error code on failure.
171  */
cras_iodev_no_stream_playback_transition(struct cras_iodev * odev,int enable)172 static int cras_iodev_no_stream_playback_transition(struct cras_iodev *odev,
173 						    int enable)
174 {
175 	int rc;
176 
177 	if (odev->direction != CRAS_STREAM_OUTPUT)
178 		return -EINVAL;
179 
180 	/* This function is for transition between normal run and
181 	 * no stream run state.
182 	 */
183 	if ((odev->state != CRAS_IODEV_STATE_NORMAL_RUN) &&
184 	    (odev->state != CRAS_IODEV_STATE_NO_STREAM_RUN))
185 		return -EINVAL;
186 
187 	if (enable) {
188 		ATLOG(atlog, AUDIO_THREAD_ODEV_NO_STREAMS, odev->info.idx, 0,
189 		      0);
190 	} else {
191 		ATLOG(atlog, AUDIO_THREAD_ODEV_LEAVE_NO_STREAMS, odev->info.idx,
192 		      0, 0);
193 	}
194 
195 	rc = odev->no_stream(odev, enable);
196 	if (rc < 0)
197 		return rc;
198 	if (enable)
199 		odev->state = CRAS_IODEV_STATE_NO_STREAM_RUN;
200 	else
201 		odev->state = CRAS_IODEV_STATE_NORMAL_RUN;
202 	return 0;
203 }
204 
205 /* Determines if the output device should mute. It considers system mute,
206  * system volume, and active node volume on the device. */
output_should_mute(struct cras_iodev * odev)207 static int output_should_mute(struct cras_iodev *odev)
208 {
209 	/* System mute has highest priority. */
210 	if (cras_system_get_mute())
211 		return 1;
212 
213 	/* consider system volume and active node volume. */
214 	return cras_iodev_is_zero_volume(odev);
215 }
216 
cras_iodev_is_zero_volume(const struct cras_iodev * odev)217 int cras_iodev_is_zero_volume(const struct cras_iodev *odev)
218 {
219 	size_t system_volume;
220 	unsigned int adjusted_node_volume;
221 
222 	system_volume = cras_system_get_volume();
223 	if (odev->active_node) {
224 		adjusted_node_volume = cras_iodev_adjust_node_volume(
225 			odev->active_node, system_volume);
226 		return (adjusted_node_volume == 0);
227 	}
228 	return (system_volume == 0);
229 }
230 
231 /* Output device state transition diagram:
232  *
233  *                           ----------------
234  *  -------------<-----------| S0  Closed   |------<-------.
235  *  |                        ----------------              |
236  *  |                           |   iodev_list enables     |
237  *  |                           |   device and adds to     |
238  *  |                           V   audio thread           | iodev_list removes
239  *  |                        ----------------              | device from
240  *  |                        | S1  Open     |              | audio_thread and
241  *  |                        ----------------              | closes device
242  *  | Device with empty start       |                      |
243  *  | ops transits into             | Sample is ready      |
244  *  | no stream state right         V                      |
245  *  | after open.            ----------------              |
246  *  |                        | S2  Normal   |              |
247  *  |                        ----------------              |
248  *  |                           |        ^                 |
249  *  |       There is no stream  |        | Sample is ready |
250  *  |                           V        |                 |
251  *  |                        ----------------              |
252  *  ------------->-----------| S3 No Stream |------->------
253  *                           ----------------
254  *
255  *  Device in open_devs can be in one of S1, S2, S3.
256  *
257  * cras_iodev_output_event_sample_ready change device state from S1 or S3 into
258  * S2.
259  */
cras_iodev_output_event_sample_ready(struct cras_iodev * odev)260 static int cras_iodev_output_event_sample_ready(struct cras_iodev *odev)
261 {
262 	if (odev->state == CRAS_IODEV_STATE_OPEN ||
263 	    odev->state == CRAS_IODEV_STATE_NO_STREAM_RUN) {
264 		/* Starts ramping up if device should not be muted.
265 		 * Both mute and volume are taken into consideration.
266 		 */
267 		if (odev->ramp && !output_should_mute(odev)) {
268 			cras_iodev_start_ramp(odev, odev->initial_ramp_request);
269 		}
270 	}
271 
272 	if (odev->state == CRAS_IODEV_STATE_OPEN) {
273 		/* S1 => S2:
274 		 * If device is not started yet, and there is sample ready from
275 		 * stream, fill 1 min_cb_level of zeros first and fill sample
276 		 * from stream later.
277 		 * Starts the device here to finish state transition. */
278 		cras_iodev_fill_odev_zeros(odev, odev->min_cb_level);
279 		ATLOG(atlog, AUDIO_THREAD_ODEV_START, odev->info.idx,
280 		      odev->min_cb_level, 0);
281 		return cras_iodev_start(odev);
282 	} else if (odev->state == CRAS_IODEV_STATE_NO_STREAM_RUN) {
283 		/* S3 => S2:
284 		 * Device in no stream state get sample ready. Leave no stream
285 		 * state and transit to normal run state.*/
286 		return cras_iodev_no_stream_playback_transition(odev, 0);
287 	} else {
288 		syslog(LOG_ERR,
289 		       "Device %s in state %d received sample ready event",
290 		       odev->info.name, odev->state);
291 		return -EINVAL;
292 	}
293 	return 0;
294 }
295 
296 /*
297  * Exported Interface.
298  */
299 
300 /* Finds the supported sample rate that best suits the requested rate, "rrate".
301  * Exact matches have highest priority, then integer multiples, then the default
302  * rate for the device. */
get_best_rate(struct cras_iodev * iodev,size_t rrate)303 static size_t get_best_rate(struct cras_iodev *iodev, size_t rrate)
304 {
305 	size_t i;
306 	size_t best;
307 
308 	if (iodev->supported_rates[0] == 0) /* No rates supported */
309 		return 0;
310 
311 	for (i = 0, best = 0; iodev->supported_rates[i] != 0; i++) {
312 		if (rrate == iodev->supported_rates[i] && rrate >= 44100)
313 			return rrate;
314 		if (best == 0 && (rrate % iodev->supported_rates[i] == 0 ||
315 				  iodev->supported_rates[i] % rrate == 0))
316 			best = iodev->supported_rates[i];
317 	}
318 
319 	if (best)
320 		return best;
321 	return iodev->supported_rates[0];
322 }
323 
324 /* Finds the best match for the channel count.  The following match rules
325  * will apply in order and return the value once matched:
326  * 1. Match the exact given channel count.
327  * 2. Match the preferred channel count.
328  * 3. The first channel count in the list.
329  */
get_best_channel_count(struct cras_iodev * iodev,size_t count)330 static size_t get_best_channel_count(struct cras_iodev *iodev, size_t count)
331 {
332 	static const size_t preferred_channel_count = 2;
333 	size_t i;
334 
335 	assert(iodev->supported_channel_counts[0] != 0);
336 
337 	for (i = 0; iodev->supported_channel_counts[i] != 0; i++) {
338 		if (iodev->supported_channel_counts[i] == count)
339 			return count;
340 	}
341 
342 	/* If provided count is not supported, search for preferred
343 	 * channel count to which we're good at converting.
344 	 */
345 	for (i = 0; iodev->supported_channel_counts[i] != 0; i++) {
346 		if (iodev->supported_channel_counts[i] ==
347 		    preferred_channel_count)
348 			return preferred_channel_count;
349 	}
350 
351 	return iodev->supported_channel_counts[0];
352 }
353 
354 /* finds the best match for the current format. If no exact match is
355  * found, use the first. */
get_best_pcm_format(struct cras_iodev * iodev,snd_pcm_format_t fmt)356 static snd_pcm_format_t get_best_pcm_format(struct cras_iodev *iodev,
357 					    snd_pcm_format_t fmt)
358 {
359 	size_t i;
360 
361 	for (i = 0; iodev->supported_formats[i] != 0; i++) {
362 		if (fmt == iodev->supported_formats[i])
363 			return fmt;
364 	}
365 
366 	return iodev->supported_formats[0];
367 }
368 
369 /* Applies the DSP to the samples for the iodev if applicable. */
apply_dsp(struct cras_iodev * iodev,uint8_t * buf,size_t frames)370 static int apply_dsp(struct cras_iodev *iodev, uint8_t *buf, size_t frames)
371 {
372 	struct cras_dsp_context *ctx;
373 	struct pipeline *pipeline;
374 	int rc;
375 
376 	ctx = iodev->dsp_context;
377 	if (!ctx)
378 		return 0;
379 
380 	pipeline = cras_dsp_get_pipeline(ctx);
381 	if (!pipeline)
382 		return 0;
383 
384 	rc = cras_dsp_pipeline_apply(pipeline, buf, iodev->format->format,
385 				     frames);
386 
387 	cras_dsp_put_pipeline(ctx);
388 	return rc;
389 }
390 
cras_iodev_free_dsp(struct cras_iodev * iodev)391 static void cras_iodev_free_dsp(struct cras_iodev *iodev)
392 {
393 	if (iodev->dsp_context) {
394 		cras_dsp_context_free(iodev->dsp_context);
395 		iodev->dsp_context = NULL;
396 	}
397 }
398 
399 /* Modifies the number of channels in device format to the one that will be
400  * presented to the device after any channel changes from the DSP. */
adjust_dev_channel_for_dsp(const struct cras_iodev * iodev)401 static inline void adjust_dev_channel_for_dsp(const struct cras_iodev *iodev)
402 {
403 	struct cras_dsp_context *ctx = iodev->dsp_context;
404 
405 	if (!ctx || !cras_dsp_get_pipeline(ctx))
406 		return;
407 
408 	if (iodev->direction == CRAS_STREAM_OUTPUT)
409 		iodev->format->num_channels = cras_dsp_num_output_channels(ctx);
410 	else
411 		iodev->format->num_channels = cras_dsp_num_input_channels(ctx);
412 
413 	cras_dsp_put_pipeline(ctx);
414 }
415 
416 /* Updates channel layout based on the number of channels set by a
417  * client stream. Set a default value to format if the update call
418  * fails.
419  */
update_channel_layout(struct cras_iodev * iodev)420 static void update_channel_layout(struct cras_iodev *iodev)
421 {
422 	int rc;
423 
424 	if (iodev->update_channel_layout == NULL)
425 		return;
426 
427 	rc = iodev->update_channel_layout(iodev);
428 	if (rc < 0)
429 		cras_audio_format_set_default_channel_layout(iodev->format);
430 }
431 
432 /*
433  * For the specified format, removes any channels from the channel layout that
434  * are higher than the supported number of channels. Should be used when the
435  * number of channels of the format been reduced.
436  */
trim_channel_layout(struct cras_audio_format * fmt)437 static void trim_channel_layout(struct cras_audio_format *fmt)
438 {
439 	int i;
440 	for (i = 0; i < CRAS_CH_MAX; i++)
441 		if (fmt->channel_layout[i] >= fmt->num_channels)
442 			fmt->channel_layout[i] = -1;
443 }
444 
cras_iodev_set_format(struct cras_iodev * iodev,const struct cras_audio_format * fmt)445 int cras_iodev_set_format(struct cras_iodev *iodev,
446 			  const struct cras_audio_format *fmt)
447 {
448 	size_t actual_rate, actual_num_channels;
449 	snd_pcm_format_t actual_format;
450 	int rc;
451 
452 	/* Update supported formats on iodev before negotiating the final value
453 	 * with what stream requested.
454 	 */
455 	if (iodev->update_supported_formats) {
456 		rc = iodev->update_supported_formats(iodev);
457 		if (rc) {
458 			syslog(LOG_ERR, "Failed to update formats");
459 			return rc;
460 		}
461 	}
462 
463 	/* If this device isn't already using a format, try to match the one
464 	 * requested in "fmt". */
465 	if (iodev->format == NULL) {
466 		iodev->format = malloc(sizeof(struct cras_audio_format));
467 		if (!iodev->format)
468 			return -ENOMEM;
469 		*iodev->format = *fmt;
470 
471 		/* Finds the actual rate of device before allocating DSP
472 		 * because DSP needs to use the rate of device, not rate of
473 		 * stream. */
474 		actual_rate = get_best_rate(iodev, fmt->frame_rate);
475 		iodev->format->frame_rate = actual_rate;
476 
477 		cras_iodev_alloc_dsp(iodev);
478 		cras_iodev_update_dsp(iodev);
479 		if (iodev->dsp_context)
480 			adjust_dev_channel_for_dsp(iodev);
481 
482 		actual_num_channels = get_best_channel_count(
483 			iodev, iodev->format->num_channels);
484 		actual_format = get_best_pcm_format(iodev, fmt->format);
485 		if (actual_rate == 0 || actual_num_channels == 0 ||
486 		    actual_format == 0) {
487 			/* No compatible frame rate found. */
488 			rc = -EINVAL;
489 			goto error;
490 		}
491 		iodev->format->format = actual_format;
492 		if (iodev->format->num_channels != actual_num_channels) {
493 			/* If the DSP for this device doesn't match, drop it. */
494 			iodev->format->num_channels = actual_num_channels;
495 			trim_channel_layout(iodev->format);
496 			cras_iodev_free_dsp(iodev);
497 		}
498 
499 		update_channel_layout(iodev);
500 
501 		if (!iodev->rate_est)
502 			iodev->rate_est = rate_estimator_create(
503 				actual_rate, &rate_estimation_window_sz,
504 				rate_estimation_smooth_factor);
505 		else
506 			rate_estimator_reset_rate(iodev->rate_est, actual_rate);
507 	}
508 
509 	return 0;
510 
511 error:
512 	free(iodev->format);
513 	iodev->format = NULL;
514 	return rc;
515 }
516 
517 /*
518  * Configures the external dsp module and adds it to the existing dsp pipeline.
519  */
add_ext_dsp_module_to_pipeline(struct cras_iodev * iodev)520 static void add_ext_dsp_module_to_pipeline(struct cras_iodev *iodev)
521 {
522 	struct pipeline *pipeline;
523 
524 	pipeline = iodev->dsp_context ?
525 			   cras_dsp_get_pipeline(iodev->dsp_context) :
526 			   NULL;
527 
528 	if (!pipeline) {
529 		cras_iodev_alloc_dsp(iodev);
530 		cras_dsp_load_mock_pipeline(iodev->dsp_context,
531 					    iodev->format->num_channels);
532 		pipeline = cras_dsp_get_pipeline(iodev->dsp_context);
533 	}
534 	/* dsp_context mutex locked. Now it's safe to modify dsp
535 	 * pipeline resources. */
536 
537 	if (iodev->ext_dsp_module)
538 		iodev->ext_dsp_module->configure(iodev->ext_dsp_module,
539 						 iodev->buffer_size,
540 						 iodev->format->num_channels,
541 						 iodev->format->frame_rate);
542 
543 	cras_dsp_pipeline_set_sink_ext_module(pipeline, iodev->ext_dsp_module);
544 
545 	/* Unlock dsp_context mutex. */
546 	cras_dsp_put_pipeline(iodev->dsp_context);
547 }
548 
549 /*
550  * Releases the ext_dsp_module if it ever added to iodev's dsp pipeline.
551  */
release_ext_dsp_module_from_pipeline(struct cras_iodev * iodev)552 static void release_ext_dsp_module_from_pipeline(struct cras_iodev *iodev)
553 {
554 	struct pipeline *pipeline;
555 
556 	if (iodev->dsp_context == NULL)
557 		return;
558 
559 	pipeline = cras_dsp_get_pipeline(iodev->dsp_context);
560 	if (pipeline == NULL)
561 		return;
562 	/* dsp_context mutex locked. */
563 
564 	cras_dsp_pipeline_set_sink_ext_module(pipeline, NULL);
565 
566 	/* Unlock dsp_context mutex. */
567 	cras_dsp_put_pipeline(iodev->dsp_context);
568 }
569 
cras_iodev_set_ext_dsp_module(struct cras_iodev * iodev,struct ext_dsp_module * ext)570 void cras_iodev_set_ext_dsp_module(struct cras_iodev *iodev,
571 				   struct ext_dsp_module *ext)
572 {
573 	iodev->ext_dsp_module = ext;
574 
575 	if (!cras_iodev_is_open(iodev))
576 		return;
577 
578 	if (iodev->ext_dsp_module)
579 		add_ext_dsp_module_to_pipeline(iodev);
580 	else
581 		release_ext_dsp_module_from_pipeline(iodev);
582 }
583 
cras_iodev_update_dsp(struct cras_iodev * iodev)584 void cras_iodev_update_dsp(struct cras_iodev *iodev)
585 {
586 	char swap_lr_disabled = 1;
587 
588 	if (!iodev->dsp_context)
589 		return;
590 
591 	cras_dsp_set_variable_string(iodev->dsp_context, "dsp_name",
592 				     iodev->dsp_name ?: "");
593 
594 	if (iodev->active_node && iodev->active_node->left_right_swapped)
595 		swap_lr_disabled = 0;
596 
597 	cras_dsp_set_variable_boolean(iodev->dsp_context, "swap_lr_disabled",
598 				      swap_lr_disabled);
599 
600 	cras_dsp_load_pipeline(iodev->dsp_context);
601 }
602 
cras_iodev_dsp_set_swap_mode_for_node(struct cras_iodev * iodev,struct cras_ionode * node,int enable)603 int cras_iodev_dsp_set_swap_mode_for_node(struct cras_iodev *iodev,
604 					  struct cras_ionode *node, int enable)
605 {
606 	if (node->left_right_swapped == enable)
607 		return 0;
608 
609 	/* Sets left_right_swapped property on the node. It will be used
610 	 * when cras_iodev_update_dsp is called. */
611 	node->left_right_swapped = enable;
612 
613 	/* Possibly updates dsp if the node is active on the device and there
614 	 * is dsp context. If dsp context is not created yet,
615 	 * cras_iodev_update_dsp returns right away. */
616 	if (iodev->active_node == node)
617 		cras_iodev_update_dsp(iodev);
618 	return 0;
619 }
620 
cras_iodev_free_format(struct cras_iodev * iodev)621 void cras_iodev_free_format(struct cras_iodev *iodev)
622 {
623 	free(iodev->format);
624 	iodev->format = NULL;
625 }
626 
cras_iodev_init_audio_area(struct cras_iodev * iodev,int num_channels)627 void cras_iodev_init_audio_area(struct cras_iodev *iodev, int num_channels)
628 {
629 	if (iodev->area)
630 		cras_iodev_free_audio_area(iodev);
631 
632 	iodev->area = cras_audio_area_create(num_channels);
633 	cras_audio_area_config_channels(iodev->area, iodev->format);
634 }
635 
cras_iodev_free_audio_area(struct cras_iodev * iodev)636 void cras_iodev_free_audio_area(struct cras_iodev *iodev)
637 {
638 	if (!iodev->area)
639 		return;
640 
641 	cras_audio_area_destroy(iodev->area);
642 	iodev->area = NULL;
643 }
644 
cras_iodev_free_resources(struct cras_iodev * iodev)645 void cras_iodev_free_resources(struct cras_iodev *iodev)
646 {
647 	cras_iodev_free_dsp(iodev);
648 	rate_estimator_destroy(iodev->rate_est);
649 	if (iodev->ramp)
650 		cras_ramp_destroy(iodev->ramp);
651 }
652 
cras_iodev_alloc_dsp(struct cras_iodev * iodev)653 static void cras_iodev_alloc_dsp(struct cras_iodev *iodev)
654 {
655 	const char *purpose;
656 
657 	if (iodev->direction == CRAS_STREAM_OUTPUT)
658 		purpose = "playback";
659 	else
660 		purpose = "capture";
661 
662 	cras_iodev_free_dsp(iodev);
663 	iodev->dsp_context =
664 		cras_dsp_context_new(iodev->format->frame_rate, purpose);
665 }
666 
cras_iodev_fill_time_from_frames(size_t frames,size_t frame_rate,struct timespec * ts)667 void cras_iodev_fill_time_from_frames(size_t frames, size_t frame_rate,
668 				      struct timespec *ts)
669 {
670 	uint64_t to_play_usec;
671 
672 	ts->tv_sec = 0;
673 	/* adjust sleep time to target our callback threshold */
674 	to_play_usec = (uint64_t)frames * 1000000L / (uint64_t)frame_rate;
675 
676 	while (to_play_usec > 1000000) {
677 		ts->tv_sec++;
678 		to_play_usec -= 1000000;
679 	}
680 	ts->tv_nsec = to_play_usec * 1000;
681 }
682 
683 /* This is called when a node is plugged/unplugged */
cras_iodev_set_node_plugged(struct cras_ionode * node,int plugged)684 void cras_iodev_set_node_plugged(struct cras_ionode *node, int plugged)
685 {
686 	if (node->plugged == plugged)
687 		return;
688 	node->plugged = plugged;
689 	MAINLOG(main_log, MAIN_THREAD_NODE_PLUGGED, node->dev->info.idx,
690 		plugged, 0);
691 	if (plugged) {
692 		gettimeofday(&node->plugged_time, NULL);
693 	} else if (node == node->dev->active_node) {
694 		/*
695 		 * Remove normal and pinned streams, when node unplugged.
696 		 * TODO(hychao): clean this up, per crbug.com/1006646
697 		 */
698 		cras_iodev_list_disable_dev(node->dev, true);
699 	}
700 	cras_iodev_list_notify_nodes_changed();
701 }
702 
cras_iodev_add_node(struct cras_iodev * iodev,struct cras_ionode * node)703 void cras_iodev_add_node(struct cras_iodev *iodev, struct cras_ionode *node)
704 {
705 	DL_APPEND(iodev->nodes, node);
706 	cras_iodev_list_notify_nodes_changed();
707 }
708 
cras_iodev_rm_node(struct cras_iodev * iodev,struct cras_ionode * node)709 void cras_iodev_rm_node(struct cras_iodev *iodev, struct cras_ionode *node)
710 {
711 	DL_DELETE(iodev->nodes, node);
712 	cras_iodev_list_notify_nodes_changed();
713 }
714 
cras_iodev_set_active_node(struct cras_iodev * iodev,struct cras_ionode * node)715 void cras_iodev_set_active_node(struct cras_iodev *iodev,
716 				struct cras_ionode *node)
717 {
718 	iodev->active_node = node;
719 	cras_iodev_list_notify_active_node_changed(iodev->direction);
720 }
721 
cras_iodev_is_aec_use_case(const struct cras_ionode * node)722 bool cras_iodev_is_aec_use_case(const struct cras_ionode *node)
723 {
724 	if ((node->type == CRAS_NODE_TYPE_INTERNAL_SPEAKER) ||
725 	    (node->type == CRAS_NODE_TYPE_ECHO_REFERENCE))
726 		return true;
727 
728 	if (node->type == CRAS_NODE_TYPE_MIC)
729 		return (node->position == NODE_POSITION_INTERNAL) ||
730 		       (node->position == NODE_POSITION_FRONT);
731 
732 	return false;
733 }
734 
cras_iodev_is_on_internal_card(const struct cras_ionode * node)735 bool cras_iodev_is_on_internal_card(const struct cras_ionode *node)
736 {
737 	if (node->type == CRAS_NODE_TYPE_INTERNAL_SPEAKER)
738 		return true;
739 	if (node->type == CRAS_NODE_TYPE_HEADPHONE)
740 		return true;
741 	if (node->type == CRAS_NODE_TYPE_MIC)
742 		return true;
743 	return false;
744 }
745 
cras_iodev_get_software_volume_scaler(struct cras_iodev * iodev)746 float cras_iodev_get_software_volume_scaler(struct cras_iodev *iodev)
747 {
748 	unsigned int volume;
749 
750 	volume = cras_iodev_adjust_active_node_volume(iodev,
751 						      cras_system_get_volume());
752 
753 	if (iodev->active_node && iodev->active_node->softvol_scalers)
754 		return iodev->active_node->softvol_scalers[volume];
755 	return softvol_get_scaler(volume);
756 }
757 
cras_iodev_get_software_gain_scaler(const struct cras_iodev * iodev)758 float cras_iodev_get_software_gain_scaler(const struct cras_iodev *iodev)
759 {
760 	if (cras_iodev_software_volume_needed(iodev))
761 		return convert_softvol_scaler_from_dB(
762 			iodev->active_node->capture_gain);
763 	return 1.0f;
764 }
765 
cras_iodev_get_valid_frames(struct cras_iodev * odev,struct timespec * hw_tstamp)766 int cras_iodev_get_valid_frames(struct cras_iodev *odev,
767 				struct timespec *hw_tstamp)
768 {
769 	int rc;
770 
771 	if (odev->direction != CRAS_STREAM_OUTPUT)
772 		return -EINVAL;
773 
774 	if (odev->get_valid_frames) {
775 		rc = odev->get_valid_frames(odev, hw_tstamp);
776 		if (rc < 0)
777 			return rc;
778 
779 		if (rc < odev->min_buffer_level)
780 			return 0;
781 
782 		return rc - odev->min_buffer_level;
783 	} else {
784 		return cras_iodev_frames_queued(odev, hw_tstamp);
785 	}
786 }
787 
cras_iodev_add_stream(struct cras_iodev * iodev,struct dev_stream * stream)788 int cras_iodev_add_stream(struct cras_iodev *iodev, struct dev_stream *stream)
789 {
790 	/*
791 	 * For input stream, start stream right after adding stream.
792 	 * For output stream, start stream after its first fetch such that it does not
793 	 * block other existing streams.
794 	 */
795 	DL_APPEND(iodev->streams, stream);
796 	if (!iodev->buf_state)
797 		iodev->buf_state = buffer_share_create(iodev->buffer_size);
798 	if (stream->stream->direction == CRAS_STREAM_INPUT)
799 		cras_iodev_start_stream(iodev, stream);
800 	return 0;
801 }
802 
cras_iodev_start_stream(struct cras_iodev * iodev,struct dev_stream * stream)803 void cras_iodev_start_stream(struct cras_iodev *iodev,
804 			     struct dev_stream *stream)
805 {
806 	unsigned int cb_threshold = dev_stream_cb_threshold(stream);
807 
808 	if (dev_stream_is_running(stream))
809 		return;
810 	/*
811 	 * TRIGGER_ONLY streams do not want to receive data, so do not add them
812 	 * to buffer_share, otherwise they'll affect other streams to receive.
813 	 */
814 	if (!(stream->stream->flags & TRIGGER_ONLY))
815 		buffer_share_add_id(iodev->buf_state, stream->stream->stream_id,
816 				    NULL);
817 	iodev->min_cb_level = MIN(iodev->min_cb_level, cb_threshold);
818 	iodev->max_cb_level = MAX(iodev->max_cb_level, cb_threshold);
819 	iodev->largest_cb_level = MAX(iodev->largest_cb_level, cb_threshold);
820 	dev_stream_set_running(stream);
821 }
822 
cras_iodev_rm_stream(struct cras_iodev * iodev,const struct cras_rstream * rstream)823 struct dev_stream *cras_iodev_rm_stream(struct cras_iodev *iodev,
824 					const struct cras_rstream *rstream)
825 {
826 	struct dev_stream *out;
827 	struct dev_stream *ret = NULL;
828 	unsigned int cb_threshold;
829 	struct timespec earliest_next_cb_ts;
830 	int set_earliest = 0;
831 
832 	iodev->min_cb_level = iodev->buffer_size / 2;
833 	iodev->max_cb_level = 0;
834 	DL_FOREACH (iodev->streams, out) {
835 		if (out->stream == rstream) {
836 			buffer_share_rm_id(iodev->buf_state,
837 					   rstream->stream_id);
838 			ret = out;
839 			DL_DELETE(iodev->streams, out);
840 			continue;
841 		}
842 		if (!dev_stream_is_running(out))
843 			continue;
844 		cb_threshold = dev_stream_cb_threshold(out);
845 		iodev->min_cb_level = MIN(iodev->min_cb_level, cb_threshold);
846 		iodev->max_cb_level = MAX(iodev->max_cb_level, cb_threshold);
847 		if (!set_earliest) {
848 			set_earliest = 1;
849 			earliest_next_cb_ts = out->stream->next_cb_ts;
850 		}
851 		if (timespec_after(&earliest_next_cb_ts,
852 				   &out->stream->next_cb_ts))
853 			earliest_next_cb_ts = out->stream->next_cb_ts;
854 	}
855 
856 	if (!iodev->streams) {
857 		buffer_share_destroy(iodev->buf_state);
858 		iodev->buf_state = NULL;
859 		iodev->min_cb_level = iodev->buffer_size / 2;
860 		/* Let output device transit into no stream state if it's
861 		 * in normal run state now. Leave input device in normal
862 		 * run state. */
863 		if ((iodev->direction == CRAS_STREAM_OUTPUT) &&
864 		    (iodev->state == CRAS_IODEV_STATE_NORMAL_RUN))
865 			cras_iodev_no_stream_playback_transition(iodev, 1);
866 	}
867 
868 	if (!set_earliest)
869 		return ret;
870 
871 	DL_FOREACH (iodev->streams, out) {
872 		if (!dev_stream_is_running(out))
873 			out->stream->next_cb_ts = earliest_next_cb_ts;
874 	}
875 
876 	return ret;
877 }
878 
cras_iodev_stream_offset(struct cras_iodev * iodev,struct dev_stream * stream)879 unsigned int cras_iodev_stream_offset(struct cras_iodev *iodev,
880 				      struct dev_stream *stream)
881 {
882 	return buffer_share_id_offset(iodev->buf_state,
883 				      stream->stream->stream_id);
884 }
885 
cras_iodev_stream_written(struct cras_iodev * iodev,struct dev_stream * stream,unsigned int nwritten)886 void cras_iodev_stream_written(struct cras_iodev *iodev,
887 			       struct dev_stream *stream, unsigned int nwritten)
888 {
889 	buffer_share_offset_update(iodev->buf_state, stream->stream->stream_id,
890 				   nwritten);
891 }
892 
cras_iodev_all_streams_written(struct cras_iodev * iodev)893 unsigned int cras_iodev_all_streams_written(struct cras_iodev *iodev)
894 {
895 	if (!iodev->buf_state)
896 		return 0;
897 	return buffer_share_get_new_write_point(iodev->buf_state);
898 }
899 
cras_iodev_max_stream_offset(const struct cras_iodev * iodev)900 unsigned int cras_iodev_max_stream_offset(const struct cras_iodev *iodev)
901 {
902 	unsigned int max = 0;
903 	struct dev_stream *curr;
904 
905 	DL_FOREACH (iodev->streams, curr) {
906 		/* Skip stream which hasn't started running yet. */
907 		if (!dev_stream_is_running(curr))
908 			continue;
909 
910 		max = MAX(max, buffer_share_id_offset(iodev->buf_state,
911 						      curr->stream->stream_id));
912 	}
913 
914 	return max;
915 }
916 
cras_iodev_open(struct cras_iodev * iodev,unsigned int cb_level,const struct cras_audio_format * fmt)917 int cras_iodev_open(struct cras_iodev *iodev, unsigned int cb_level,
918 		    const struct cras_audio_format *fmt)
919 {
920 	struct cras_loopback *loopback;
921 	int rc;
922 
923 	if (iodev->pre_open_iodev_hook)
924 		iodev->pre_open_iodev_hook();
925 
926 	DL_FOREACH (iodev->loopbacks, loopback) {
927 		if (loopback->hook_control)
928 			loopback->hook_control(true, loopback->cb_data);
929 	}
930 
931 	if (iodev->open_dev) {
932 		rc = iodev->open_dev(iodev);
933 		if (rc)
934 			return rc;
935 	}
936 
937 	if (iodev->format == NULL) {
938 		rc = cras_iodev_set_format(iodev, fmt);
939 		if (rc) {
940 			iodev->close_dev(iodev);
941 			return rc;
942 		}
943 	}
944 
945 	rc = iodev->configure_dev(iodev);
946 	if (rc < 0) {
947 		iodev->close_dev(iodev);
948 		return rc;
949 	}
950 
951 	/*
952 	 * Convert cb_level from input format to device format
953 	 */
954 	cb_level = cras_frames_at_rate(fmt->frame_rate, cb_level,
955 				       iodev->format->frame_rate);
956 	/* Make sure the min_cb_level doesn't get too large. */
957 	iodev->min_cb_level = MIN(iodev->buffer_size / 2, cb_level);
958 	iodev->max_cb_level = 0;
959 	iodev->largest_cb_level = 0;
960 	iodev->num_underruns = 0;
961 
962 	iodev->reset_request_pending = 0;
963 	iodev->state = CRAS_IODEV_STATE_OPEN;
964 	iodev->highest_hw_level = 0;
965 	iodev->input_dsp_offset = 0;
966 
967 	ewma_power_init(&iodev->ewma, iodev->format->frame_rate);
968 
969 	if (iodev->direction == CRAS_STREAM_OUTPUT) {
970 		/* If device supports start ops, device can be in open state.
971 		 * Otherwise, device starts running right after opening. */
972 		if (iodev->start) {
973 			iodev->state = CRAS_IODEV_STATE_OPEN;
974 		} else {
975 			iodev->state = CRAS_IODEV_STATE_NO_STREAM_RUN;
976 			cras_iodev_fill_odev_zeros(iodev, iodev->min_cb_level);
977 		}
978 	} else {
979 		iodev->input_data = input_data_create(iodev);
980 		/* If this is the echo reference dev, its ext_dsp_module will
981 		 * be set to APM reverse module. Do not override it to its
982 		 * input data. */
983 		if (iodev->ext_dsp_module == NULL)
984 			iodev->ext_dsp_module = &iodev->input_data->ext;
985 
986 		/* Input device starts running right after opening.
987 		 * No stream state is only for output device. Input device
988 		 * should be in normal run state. */
989 		iodev->state = CRAS_IODEV_STATE_NORMAL_RUN;
990 		/* Initialize the input_streaming flag to zero.*/
991 		iodev->input_streaming = 0;
992 
993 		/*
994 		 * The device specific gain scaler to be used in audio thread.
995 		 * It's expected to stick to 1.0f if device has hardware gain
996 		 * control. For alsa device, this gain value will be configured
997 		 * based on UCM labels IntrinsicSensitivity.
998 		 */
999 		iodev->software_gain_scaler =
1000 			cras_iodev_get_software_gain_scaler(iodev);
1001 	}
1002 
1003 	add_ext_dsp_module_to_pipeline(iodev);
1004 	clock_gettime(CLOCK_MONOTONIC_RAW, &iodev->open_ts);
1005 
1006 	return 0;
1007 }
1008 
cras_iodev_state(const struct cras_iodev * iodev)1009 enum CRAS_IODEV_STATE cras_iodev_state(const struct cras_iodev *iodev)
1010 {
1011 	return iodev->state;
1012 }
1013 
cras_iodev_close(struct cras_iodev * iodev)1014 int cras_iodev_close(struct cras_iodev *iodev)
1015 {
1016 	struct cras_loopback *loopback;
1017 	int rc;
1018 
1019 	if (!cras_iodev_is_open(iodev))
1020 		return 0;
1021 
1022 	if (iodev->active_node) {
1023 		cras_server_metrics_device_runtime(iodev);
1024 		cras_server_metrics_device_gain(iodev);
1025 		cras_server_metrics_device_volume(iodev);
1026 	}
1027 
1028 	if (iodev->input_data) {
1029 		if (iodev->ext_dsp_module == &iodev->input_data->ext)
1030 			iodev->ext_dsp_module = NULL;
1031 		input_data_destroy(&iodev->input_data);
1032 	}
1033 
1034 	rc = iodev->close_dev(iodev);
1035 	if (rc)
1036 		syslog(LOG_ERR, "Error closing dev %s, rc %d", iodev->info.name,
1037 		       rc);
1038 	iodev->state = CRAS_IODEV_STATE_CLOSE;
1039 	if (iodev->ramp)
1040 		cras_ramp_reset(iodev->ramp);
1041 
1042 	if (iodev->post_close_iodev_hook)
1043 		iodev->post_close_iodev_hook();
1044 
1045 	DL_FOREACH (iodev->loopbacks, loopback) {
1046 		if (loopback->hook_control)
1047 			loopback->hook_control(false, loopback->cb_data);
1048 	}
1049 
1050 	return 0;
1051 }
1052 
cras_iodev_put_input_buffer(struct cras_iodev * iodev)1053 int cras_iodev_put_input_buffer(struct cras_iodev *iodev)
1054 {
1055 	unsigned int min_frames;
1056 	unsigned int dsp_frames;
1057 	struct input_data *data = iodev->input_data;
1058 	int rc;
1059 
1060 	if (iodev->streams)
1061 		min_frames = buffer_share_get_new_write_point(iodev->buf_state);
1062 	else
1063 		min_frames = data->area->frames;
1064 
1065 	// Update the max number of frames has applied input dsp.
1066 	dsp_frames = MAX(iodev->input_frames_read, iodev->input_dsp_offset);
1067 	iodev->input_dsp_offset = dsp_frames - min_frames;
1068 
1069 	input_data_set_all_streams_read(data, min_frames);
1070 	rate_estimator_add_frames(iodev->rate_est, -min_frames);
1071 	rc = iodev->put_buffer(iodev, min_frames);
1072 	if (rc < 0)
1073 		return rc;
1074 	return min_frames;
1075 }
1076 
cras_iodev_put_output_buffer(struct cras_iodev * iodev,uint8_t * frames,unsigned int nframes,int * is_non_empty,struct cras_fmt_conv * remix_converter)1077 int cras_iodev_put_output_buffer(struct cras_iodev *iodev, uint8_t *frames,
1078 				 unsigned int nframes, int *is_non_empty,
1079 				 struct cras_fmt_conv *remix_converter)
1080 {
1081 	const struct cras_audio_format *fmt = iodev->format;
1082 	struct cras_ramp_action ramp_action = {
1083 		.type = CRAS_RAMP_ACTION_NONE,
1084 		.scaler = 0.0f,
1085 		.increment = 0.0f,
1086 		.target = 1.0f,
1087 	};
1088 	float software_volume_scaler = 1.0;
1089 	int software_volume_needed = cras_iodev_software_volume_needed(iodev);
1090 	int rc;
1091 	struct cras_loopback *loopback;
1092 
1093 	/* Calculate whether the final output was non-empty, if requested. */
1094 	if (is_non_empty) {
1095 		const size_t bytes = nframes * cras_get_format_bytes(fmt);
1096 
1097 		/*
1098 		 * Speed up checking frames are all zeros using memcmp.
1099 		 * frames contains all zeros if both conditions are met:
1100 		 *  - frames[0] is 0.
1101 		 *  - frames[i] == frames[i+1] for i in [0, 1, ..., bytes - 2].
1102 		 */
1103 		*is_non_empty = bytes ? (*frames || memcmp(frames, frames + 1,
1104 							   bytes - 1)) :
1105 					0;
1106 	}
1107 
1108 	DL_FOREACH (iodev->loopbacks, loopback) {
1109 		if (loopback->type == LOOPBACK_POST_MIX_PRE_DSP)
1110 			loopback->hook_data(frames, nframes, iodev->format,
1111 					    loopback->cb_data);
1112 	}
1113 
1114 	ewma_power_calculate(&iodev->ewma, (int16_t *)frames,
1115 			     iodev->format->num_channels, nframes);
1116 
1117 	rc = apply_dsp(iodev, frames, nframes);
1118 	if (rc)
1119 		return rc;
1120 
1121 	DL_FOREACH (iodev->loopbacks, loopback) {
1122 		if (loopback->type == LOOPBACK_POST_DSP)
1123 			loopback->hook_data(frames, nframes, iodev->format,
1124 					    loopback->cb_data);
1125 	}
1126 
1127 	if (iodev->ramp) {
1128 		ramp_action = cras_ramp_get_current_action(iodev->ramp);
1129 	}
1130 
1131 	/* Mute samples if adjusted volume is 0 or system is muted, plus
1132 	 * that this device is not ramping. */
1133 	if (output_should_mute(iodev) &&
1134 	    ramp_action.type != CRAS_RAMP_ACTION_PARTIAL) {
1135 		const unsigned int frame_bytes = cras_get_format_bytes(fmt);
1136 		cras_mix_mute_buffer(frames, frame_bytes, nframes);
1137 	}
1138 
1139 	/* Compute scaler for software volume if needed. */
1140 	if (software_volume_needed) {
1141 		software_volume_scaler =
1142 			cras_iodev_get_software_volume_scaler(iodev);
1143 	}
1144 
1145 	if (ramp_action.type == CRAS_RAMP_ACTION_PARTIAL) {
1146 		/* Scale with increment for ramp and possibly
1147 		 * software volume using cras_scale_buffer_increment.*/
1148 		float starting_scaler = ramp_action.scaler;
1149 		float increment = ramp_action.increment;
1150 		float target = ramp_action.target;
1151 
1152 		if (software_volume_needed) {
1153 			starting_scaler *= software_volume_scaler;
1154 			increment *= software_volume_scaler;
1155 			target *= software_volume_scaler;
1156 		}
1157 
1158 		cras_scale_buffer_increment(fmt->format, frames, nframes,
1159 					    starting_scaler, increment, target,
1160 					    fmt->num_channels);
1161 		cras_ramp_update_ramped_frames(iodev->ramp, nframes);
1162 	} else if (!output_should_mute(iodev) && software_volume_needed) {
1163 		/* Just scale for software volume using
1164 		 * cras_scale_buffer. */
1165 		unsigned int nsamples = nframes * fmt->num_channels;
1166 		cras_scale_buffer(fmt->format, frames, nsamples,
1167 				  software_volume_scaler);
1168 	}
1169 
1170 	if (remix_converter)
1171 		cras_channel_remix_convert(remix_converter, iodev->format,
1172 					   frames, nframes);
1173 	if (iodev->rate_est)
1174 		rate_estimator_add_frames(iodev->rate_est, nframes);
1175 
1176 	return iodev->put_buffer(iodev, nframes);
1177 }
1178 
cras_iodev_get_input_buffer(struct cras_iodev * iodev,unsigned int * frames)1179 int cras_iodev_get_input_buffer(struct cras_iodev *iodev, unsigned int *frames)
1180 {
1181 	const unsigned int frame_bytes = cras_get_format_bytes(iodev->format);
1182 	struct input_data *data = iodev->input_data;
1183 	int rc;
1184 	uint8_t *hw_buffer;
1185 	unsigned frame_requested = *frames;
1186 
1187 	rc = iodev->get_buffer(iodev, &data->area, frames);
1188 	if (rc < 0 || *frames == 0)
1189 		return rc;
1190 
1191 	if (*frames > frame_requested) {
1192 		syslog(LOG_ERR,
1193 		       "frames returned from get_buffer is greater than "
1194 		       "requested: %u > %u",
1195 		       *frames, frame_requested);
1196 		return -EINVAL;
1197 	}
1198 
1199 	iodev->input_frames_read = *frames;
1200 
1201 	/* TODO(hychao) - This assumes interleaved audio. */
1202 	hw_buffer = data->area->channels[0].buf;
1203 
1204 	/*
1205 	 * input_dsp_offset records the position where input dsp has applied to
1206 	 * last time. It's possible the requested |frames| count is smaller
1207 	 * than the tracked offset. That could happen when client stream uses
1208 	 * small buffer size and runs APM processing (which requires 10 ms
1209 	 * equivalent of data to process).
1210 	 * Only apply input dsp to the part of read buffer beyond where we've
1211 	 * already applied dsp.
1212 	 */
1213 	if (*frames > iodev->input_dsp_offset) {
1214 		rc = apply_dsp(iodev,
1215 			       hw_buffer +
1216 				       iodev->input_dsp_offset * frame_bytes,
1217 			       *frames - iodev->input_dsp_offset);
1218 		if (rc)
1219 			return rc;
1220 		ewma_power_calculate_area(
1221 			&iodev->ewma,
1222 			(int16_t *)(hw_buffer +
1223 				    iodev->input_dsp_offset * frame_bytes),
1224 			data->area, *frames - iodev->input_dsp_offset);
1225 	}
1226 
1227 	if (cras_system_get_capture_mute())
1228 		cras_mix_mute_buffer(hw_buffer, frame_bytes, *frames);
1229 
1230 	return rc;
1231 }
1232 
cras_iodev_get_output_buffer(struct cras_iodev * iodev,struct cras_audio_area ** area,unsigned * frames)1233 int cras_iodev_get_output_buffer(struct cras_iodev *iodev,
1234 				 struct cras_audio_area **area,
1235 				 unsigned *frames)
1236 {
1237 	int rc;
1238 	unsigned frame_requested = *frames;
1239 
1240 	rc = iodev->get_buffer(iodev, area, frames);
1241 	if (*frames > frame_requested) {
1242 		syslog(LOG_ERR,
1243 		       "frames returned from get_buffer is greater than "
1244 		       "requested: %u > %u",
1245 		       *frames, frame_requested);
1246 		return -EINVAL;
1247 	}
1248 	return rc;
1249 }
1250 
cras_iodev_update_rate(struct cras_iodev * iodev,unsigned int level,struct timespec * level_tstamp)1251 int cras_iodev_update_rate(struct cras_iodev *iodev, unsigned int level,
1252 			   struct timespec *level_tstamp)
1253 {
1254 	/* If output underruns, reset to avoid incorrect estimated rate. */
1255 	if ((iodev->direction == CRAS_STREAM_OUTPUT) && !level)
1256 		rate_estimator_reset_rate(iodev->rate_est,
1257 					  iodev->format->frame_rate);
1258 
1259 	return rate_estimator_check(iodev->rate_est, level, level_tstamp);
1260 }
1261 
cras_iodev_reset_rate_estimator(const struct cras_iodev * iodev)1262 int cras_iodev_reset_rate_estimator(const struct cras_iodev *iodev)
1263 {
1264 	rate_estimator_reset_rate(iodev->rate_est, iodev->format->frame_rate);
1265 	return 0;
1266 }
1267 
cras_iodev_get_est_rate_ratio(const struct cras_iodev * iodev)1268 double cras_iodev_get_est_rate_ratio(const struct cras_iodev *iodev)
1269 {
1270 	return rate_estimator_get_rate(iodev->rate_est) /
1271 	       iodev->format->frame_rate;
1272 }
1273 
cras_iodev_get_dsp_delay(const struct cras_iodev * iodev)1274 int cras_iodev_get_dsp_delay(const struct cras_iodev *iodev)
1275 {
1276 	struct cras_dsp_context *ctx;
1277 	struct pipeline *pipeline;
1278 	int delay;
1279 
1280 	ctx = iodev->dsp_context;
1281 	if (!ctx)
1282 		return 0;
1283 
1284 	pipeline = cras_dsp_get_pipeline(ctx);
1285 	if (!pipeline)
1286 		return 0;
1287 
1288 	delay = cras_dsp_pipeline_get_delay(pipeline);
1289 
1290 	cras_dsp_put_pipeline(ctx);
1291 	return delay;
1292 }
1293 
cras_iodev_frames_queued(struct cras_iodev * iodev,struct timespec * hw_tstamp)1294 int cras_iodev_frames_queued(struct cras_iodev *iodev,
1295 			     struct timespec *hw_tstamp)
1296 {
1297 	int rc;
1298 
1299 	rc = iodev->frames_queued(iodev, hw_tstamp);
1300 	if (rc < 0)
1301 		return rc;
1302 
1303 	if (iodev->direction == CRAS_STREAM_INPUT) {
1304 		if (rc > 0)
1305 			iodev->input_streaming = 1;
1306 		return rc;
1307 	}
1308 
1309 	if (rc < iodev->min_buffer_level)
1310 		return 0;
1311 
1312 	return rc - iodev->min_buffer_level;
1313 }
1314 
cras_iodev_buffer_avail(struct cras_iodev * iodev,unsigned hw_level)1315 int cras_iodev_buffer_avail(struct cras_iodev *iodev, unsigned hw_level)
1316 {
1317 	if (iodev->direction == CRAS_STREAM_INPUT)
1318 		return hw_level;
1319 
1320 	if (hw_level + iodev->min_buffer_level > iodev->buffer_size)
1321 		return 0;
1322 
1323 	return iodev->buffer_size - iodev->min_buffer_level - hw_level;
1324 }
1325 
cras_iodev_fill_odev_zeros(struct cras_iodev * odev,unsigned int frames)1326 int cras_iodev_fill_odev_zeros(struct cras_iodev *odev, unsigned int frames)
1327 {
1328 	struct cras_audio_area *area = NULL;
1329 	unsigned int frame_bytes, frames_written;
1330 	int rc;
1331 	uint8_t *buf;
1332 
1333 	if (odev->direction != CRAS_STREAM_OUTPUT)
1334 		return -EINVAL;
1335 
1336 	ATLOG(atlog, AUDIO_THREAD_FILL_ODEV_ZEROS, odev->info.idx, frames, 0);
1337 
1338 	frame_bytes = cras_get_format_bytes(odev->format);
1339 	while (frames > 0) {
1340 		frames_written = frames;
1341 		rc = cras_iodev_get_output_buffer(odev, &area, &frames_written);
1342 		if (rc < 0) {
1343 			syslog(LOG_ERR, "fill zeros fail: %d", rc);
1344 			return rc;
1345 		}
1346 
1347 		/* This assumes consecutive channel areas. */
1348 		buf = area->channels[0].buf;
1349 		memset(buf, 0, (size_t)frames_written * (size_t)frame_bytes);
1350 		cras_iodev_put_output_buffer(odev, buf, frames_written, NULL,
1351 					     NULL);
1352 		frames -= frames_written;
1353 	}
1354 
1355 	return 0;
1356 }
1357 
cras_iodev_output_underrun(struct cras_iodev * odev,unsigned int hw_level,unsigned int frames_written)1358 int cras_iodev_output_underrun(struct cras_iodev *odev, unsigned int hw_level,
1359 			       unsigned int frames_written)
1360 {
1361 	ATLOG(atlog, AUDIO_THREAD_UNDERRUN, odev->info.idx, hw_level,
1362 	      frames_written);
1363 	odev->num_underruns++;
1364 	cras_audio_thread_event_underrun();
1365 	if (odev->output_underrun)
1366 		return odev->output_underrun(odev);
1367 	else
1368 		return cras_iodev_fill_odev_zeros(odev, odev->min_cb_level);
1369 }
1370 
cras_iodev_odev_should_wake(const struct cras_iodev * odev)1371 int cras_iodev_odev_should_wake(const struct cras_iodev *odev)
1372 {
1373 	if (odev->direction != CRAS_STREAM_OUTPUT)
1374 		return 0;
1375 
1376 	if (odev->is_free_running && odev->is_free_running(odev))
1377 		return 0;
1378 
1379 	/* Do not wake up for device not started yet. */
1380 	return (odev->state == CRAS_IODEV_STATE_NORMAL_RUN ||
1381 		odev->state == CRAS_IODEV_STATE_NO_STREAM_RUN);
1382 }
1383 
1384 unsigned int
cras_iodev_default_frames_to_play_in_sleep(struct cras_iodev * odev,unsigned int * hw_level,struct timespec * hw_tstamp)1385 cras_iodev_default_frames_to_play_in_sleep(struct cras_iodev *odev,
1386 					   unsigned int *hw_level,
1387 					   struct timespec *hw_tstamp)
1388 {
1389 	int rc = cras_iodev_frames_queued(odev, hw_tstamp);
1390 	unsigned int level = (rc < 0) ? 0 : rc;
1391 	unsigned int wakeup_frames;
1392 	*hw_level = level;
1393 
1394 	if (odev->streams) {
1395 		/*
1396 		 * We have two cases in this scope. The first one is if there are frames
1397 		 * waiting to be played, audio thread will wake up when hw_level drops
1398 		 * to min_cb_level. This situation only happens when hardware buffer is
1399 		 * smaller than the client stream buffer. The second one is waking up
1400 		 * when hw_level drops to dev_normal_run_wake_up_time. It is a default
1401 		 * behavior. This wake up time is the bottom line to avoid underrun.
1402 		 * Normally, the audio thread does not wake up at that time because the
1403 		 * streams should wake it up before then.
1404 		 */
1405 		if (*hw_level > odev->min_cb_level && dev_playback_frames(odev))
1406 			return *hw_level - odev->min_cb_level;
1407 
1408 		wakeup_frames = cras_time_to_frames(
1409 			&dev_normal_run_wake_up_time, odev->format->frame_rate);
1410 		if (level > wakeup_frames)
1411 			return level - wakeup_frames;
1412 		else
1413 			return level;
1414 	}
1415 
1416 	/*
1417 	 * When this device has no stream, schedule audio thread to wake up when
1418 	 * hw_level drops to dev_no_stream_wake_up_time so audio thread can
1419 	 * fill zeros to it. We also need to consider min_cb_level in order to avoid
1420 	 * busyloop when device buffer size is smaller than wake up time.
1421 	 */
1422 	wakeup_frames = cras_time_to_frames(&dev_no_stream_wake_up_time,
1423 					    odev->format->frame_rate);
1424 	if (level > MIN(odev->min_cb_level, wakeup_frames))
1425 		return level - MIN(odev->min_cb_level, wakeup_frames);
1426 	else
1427 		return 0;
1428 }
1429 
cras_iodev_frames_to_play_in_sleep(struct cras_iodev * odev,unsigned int * hw_level,struct timespec * hw_tstamp)1430 unsigned int cras_iodev_frames_to_play_in_sleep(struct cras_iodev *odev,
1431 						unsigned int *hw_level,
1432 						struct timespec *hw_tstamp)
1433 {
1434 	/* Use odev's own implementation, if not supported then fall back
1435 	 * to default behavior below. */
1436 	if (odev->frames_to_play_in_sleep)
1437 		return odev->frames_to_play_in_sleep(odev, hw_level, hw_tstamp);
1438 	else
1439 		return cras_iodev_default_frames_to_play_in_sleep(
1440 			odev, hw_level, hw_tstamp);
1441 }
1442 
cras_iodev_default_no_stream_playback(struct cras_iodev * odev,int enable)1443 int cras_iodev_default_no_stream_playback(struct cras_iodev *odev, int enable)
1444 {
1445 	if (enable)
1446 		return default_no_stream_playback(odev);
1447 	return 0;
1448 }
1449 
cras_iodev_prepare_output_before_write_samples(struct cras_iodev * odev)1450 int cras_iodev_prepare_output_before_write_samples(struct cras_iodev *odev)
1451 {
1452 	int may_enter_normal_run;
1453 	enum CRAS_IODEV_STATE state;
1454 
1455 	if (odev->direction != CRAS_STREAM_OUTPUT)
1456 		return -EINVAL;
1457 
1458 	state = cras_iodev_state(odev);
1459 
1460 	may_enter_normal_run = (state == CRAS_IODEV_STATE_OPEN ||
1461 				state == CRAS_IODEV_STATE_NO_STREAM_RUN);
1462 
1463 	if (may_enter_normal_run && dev_playback_frames(odev))
1464 		return cras_iodev_output_event_sample_ready(odev);
1465 
1466 	/* no_stream ops is called every cycle in no_stream state. */
1467 	if (state == CRAS_IODEV_STATE_NO_STREAM_RUN)
1468 		return odev->no_stream(odev, 1);
1469 
1470 	return 0;
1471 }
1472 
cras_iodev_get_num_underruns(const struct cras_iodev * iodev)1473 unsigned int cras_iodev_get_num_underruns(const struct cras_iodev *iodev)
1474 {
1475 	return iodev->num_underruns;
1476 }
1477 
cras_iodev_get_num_severe_underruns(const struct cras_iodev * iodev)1478 unsigned int cras_iodev_get_num_severe_underruns(const struct cras_iodev *iodev)
1479 {
1480 	if (iodev->get_num_severe_underruns)
1481 		return iodev->get_num_severe_underruns(iodev);
1482 	return 0;
1483 }
1484 
cras_iodev_reset_request(struct cras_iodev * iodev)1485 int cras_iodev_reset_request(struct cras_iodev *iodev)
1486 {
1487 	/* Ignore requests if there is a pending request.
1488 	 * This function sends the request from audio thread to main
1489 	 * thread when audio thread finds a device is in a bad state
1490 	 * e.g. severe underrun. Before main thread receives the
1491 	 * request and resets device, audio thread might try to send
1492 	 * multiple requests because it finds device is still in bad
1493 	 * state. We should ignore requests in this cause. Otherwise,
1494 	 * main thread will reset device multiple times.
1495 	 * The flag is cleared in cras_iodev_open.
1496 	 * */
1497 	if (iodev->reset_request_pending)
1498 		return 0;
1499 	iodev->reset_request_pending = 1;
1500 	return cras_device_monitor_reset_device(iodev->info.idx);
1501 }
1502 
ramp_down_mute_callback(void * data)1503 static void ramp_down_mute_callback(void *data)
1504 {
1505 	struct cras_iodev *odev = (struct cras_iodev *)data;
1506 	cras_device_monitor_set_device_mute_state(odev->info.idx);
1507 }
1508 
1509 /* Used in audio thread. Check the docstrings of CRAS_IODEV_RAMP_REQUEST. */
cras_iodev_start_ramp(struct cras_iodev * odev,enum CRAS_IODEV_RAMP_REQUEST request)1510 int cras_iodev_start_ramp(struct cras_iodev *odev,
1511 			  enum CRAS_IODEV_RAMP_REQUEST request)
1512 {
1513 	cras_ramp_cb cb = NULL;
1514 	void *cb_data = NULL;
1515 	int rc;
1516 	float from, to, duration_secs;
1517 
1518 	/* Ignores request if device is closed. */
1519 	if (!cras_iodev_is_open(odev))
1520 		return 0;
1521 
1522 	switch (request) {
1523 	case CRAS_IODEV_RAMP_REQUEST_UP_UNMUTE:
1524 		from = 0.0;
1525 		to = 1.0;
1526 		duration_secs = RAMP_UNMUTE_DURATION_SECS;
1527 		break;
1528 	case CRAS_IODEV_RAMP_REQUEST_UP_START_PLAYBACK:
1529 		from = 0.0;
1530 		to = 1.0;
1531 		duration_secs = RAMP_NEW_STREAM_DURATION_SECS;
1532 		break;
1533 	/* Unmute -> mute. Callback to set mute state should be called after
1534 	 * ramping is done. */
1535 	case CRAS_IODEV_RAMP_REQUEST_DOWN_MUTE:
1536 		from = 1.0;
1537 		to = 0.0;
1538 		duration_secs = RAMP_MUTE_DURATION_SECS;
1539 		cb = ramp_down_mute_callback;
1540 		cb_data = (void *)odev;
1541 		break;
1542 	case CRAS_IODEV_RAMP_REQUEST_RESUME_MUTE:
1543 		from = 0;
1544 		to = 0;
1545 		duration_secs = RAMP_RESUME_MUTE_DURATION_SECS;
1546 		odev->initial_ramp_request =
1547 			CRAS_IODEV_RAMP_REQUEST_UP_START_PLAYBACK;
1548 		break;
1549 	case CRAS_IODEV_RAMP_REQUEST_SWITCH_MUTE:
1550 		from = 0;
1551 		to = 0;
1552 		duration_secs = RAMP_SWITCH_MUTE_DURATION_SECS;
1553 		odev->initial_ramp_request =
1554 			CRAS_IODEV_RAMP_REQUEST_UP_START_PLAYBACK;
1555 		break;
1556 	default:
1557 		return -EINVAL;
1558 	}
1559 
1560 	/* Starts ramping. */
1561 	rc = cras_mute_ramp_start(odev->ramp, from, to,
1562 				  duration_secs * odev->format->frame_rate, cb,
1563 				  cb_data);
1564 
1565 	if (rc)
1566 		return rc;
1567 
1568 	/* Mute -> unmute case, unmute state should be set after ramping is
1569 	 * started so device can start playing with samples close to 0. */
1570 	if (request == CRAS_IODEV_RAMP_REQUEST_UP_UNMUTE)
1571 		cras_device_monitor_set_device_mute_state(odev->info.idx);
1572 
1573 	return 0;
1574 }
1575 
cras_iodev_start_volume_ramp(struct cras_iodev * odev,unsigned int old_volume,unsigned int new_volume)1576 int cras_iodev_start_volume_ramp(struct cras_iodev *odev,
1577 				 unsigned int old_volume,
1578 				 unsigned int new_volume)
1579 {
1580 	float old_scaler, new_scaler;
1581 	float from, to;
1582 
1583 	if (old_volume == new_volume)
1584 		return 0;
1585 	if (!cras_iodev_is_open(odev))
1586 		return 0;
1587 	if (!odev->format)
1588 		return -EINVAL;
1589 	if (odev->active_node && odev->active_node->softvol_scalers) {
1590 		old_scaler = odev->active_node->softvol_scalers[old_volume];
1591 		new_scaler = odev->active_node->softvol_scalers[new_volume];
1592 	} else {
1593 		old_scaler = softvol_get_scaler(old_volume);
1594 		new_scaler = softvol_get_scaler(new_volume);
1595 	}
1596 	if (new_scaler == 0.0) {
1597 		return -EINVAL;
1598 	}
1599 	/* We will soon set odev's volume to new_volume from old_volume.
1600 	 * Because we're using softvol, we were previously scaling our volume by
1601 	 * old_scaler. If we want to avoid a jump in volume, we need to start
1602 	 * our ramp so that (from * new_scaler) = old_scaler. */
1603 	from = old_scaler / new_scaler;
1604 	to = 1.0;
1605 
1606 	return cras_volume_ramp_start(odev->ramp, from, to,
1607 				      RAMP_VOLUME_CHANGE_DURATION_SECS *
1608 					      odev->format->frame_rate,
1609 				      NULL, NULL);
1610 }
1611 
cras_iodev_set_mute(struct cras_iodev * iodev)1612 int cras_iodev_set_mute(struct cras_iodev *iodev)
1613 {
1614 	if (!cras_iodev_is_open(iodev))
1615 		return 0;
1616 
1617 	if (iodev->set_mute)
1618 		iodev->set_mute(iodev);
1619 	return 0;
1620 }
1621 
cras_iodev_update_highest_hw_level(struct cras_iodev * iodev,unsigned int hw_level)1622 void cras_iodev_update_highest_hw_level(struct cras_iodev *iodev,
1623 					unsigned int hw_level)
1624 {
1625 	/*
1626 	 * If the hw_level is unreasonably high and reach to the device's
1627 	 * buffer size, regard it as a device overrun.
1628 	 * In the normal status, the hw_level for should be between 1 to 2
1629 	 * largest_cb_level for an output device and 0 to 1 largest_cb_level
1630 	 * for an input device. Therefore, larger than 3 can be considered
1631 	 * unreasonable.
1632 	 */
1633 	if (hw_level == iodev->buffer_size &&
1634 	    iodev->largest_cb_level * 3 < iodev->buffer_size) {
1635 		ATLOG(atlog, AUDIO_THREAD_DEV_OVERRUN, iodev->info.idx,
1636 		      hw_level, 0);
1637 		/* Only log the event when the first time it happens. */
1638 		if (iodev->highest_hw_level != hw_level)
1639 			cras_audio_thread_event_dev_overrun();
1640 	}
1641 	iodev->highest_hw_level = MAX(iodev->highest_hw_level, hw_level);
1642 }
1643 
1644 /*
1645  * Makes an input device drop the given number of frames.
1646  * Args:
1647  *    iodev - The device.
1648  *    frames - How many frames will be dropped in a device.
1649  * Returns:
1650  *    The number of frames have been dropped. Negative error code on failure.
1651  */
cras_iodev_drop_frames(struct cras_iodev * iodev,unsigned int frames)1652 static int cras_iodev_drop_frames(struct cras_iodev *iodev, unsigned int frames)
1653 {
1654 	struct timespec hw_tstamp;
1655 	int i, rc;
1656 	unsigned int target_frames, dropped_frames = 0;
1657 
1658 	if (iodev->direction != CRAS_STREAM_INPUT)
1659 		return -EINVAL;
1660 
1661 	rc = cras_iodev_frames_queued(iodev, &hw_tstamp);
1662 	if (rc < 0)
1663 		return rc;
1664 
1665 	target_frames = MIN(frames, rc);
1666 
1667 	/*
1668 	 * Loop reading the buffer, at most twice. This is to cover when
1669 	 * circular buffer is at the end and returns partial of the target
1670 	 * frames.
1671 	 */
1672 	for (i = 0; (dropped_frames < target_frames) && (i < 2); i++) {
1673 		frames = target_frames - dropped_frames;
1674 		rc = iodev->get_buffer(iodev, &iodev->input_data->area,
1675 				       &frames);
1676 		if (rc < 0)
1677 			return rc;
1678 
1679 		rc = iodev->put_buffer(iodev, frames);
1680 		if (rc < 0)
1681 			return rc;
1682 		dropped_frames += frames;
1683 		/*
1684 		 * Tell rate estimator that some frames have been dropped to
1685 		 * avoid calculating the wrong rate.
1686 		 */
1687 		rate_estimator_add_frames(iodev->rate_est, -frames);
1688 	}
1689 
1690 	ATLOG(atlog, AUDIO_THREAD_DEV_DROP_FRAMES, iodev->info.idx,
1691 	      dropped_frames, 0);
1692 
1693 	return frames;
1694 }
1695 
cras_iodev_drop_frames_by_time(struct cras_iodev * iodev,struct timespec ts)1696 int cras_iodev_drop_frames_by_time(struct cras_iodev *iodev, struct timespec ts)
1697 {
1698 	int frames_to_set;
1699 	double est_rate;
1700 	int rc;
1701 
1702 	est_rate = iodev->format->frame_rate *
1703 		   cras_iodev_get_est_rate_ratio(iodev);
1704 	frames_to_set = cras_time_to_frames(&ts, est_rate);
1705 
1706 	rc = cras_iodev_drop_frames(iodev, frames_to_set);
1707 
1708 	return rc;
1709 }
1710 
cras_iodev_support_noise_cancellation(const struct cras_iodev * iodev)1711 bool cras_iodev_support_noise_cancellation(const struct cras_iodev *iodev)
1712 {
1713 	if (iodev->direction != CRAS_STREAM_INPUT)
1714 		return false;
1715 
1716 	if (iodev->support_noise_cancellation)
1717 		return !!iodev->support_noise_cancellation(iodev);
1718 	return false;
1719 }
1720