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