Lines Matching refs:out

225 static void do_out_standby(struct stream_out *out)  in do_out_standby()  argument
227 struct audio_device *adev = out->dev; in do_out_standby()
229 if (!out->standby) { in do_out_standby()
230 pcm_close(out->pcm); in do_out_standby()
231 out->pcm = NULL; in do_out_standby()
233 if (out->resampler) { in do_out_standby()
234 release_resampler(out->resampler); in do_out_standby()
235 out->resampler = NULL; in do_out_standby()
237 if (out->buffer) { in do_out_standby()
238 free(out->buffer); in do_out_standby()
239 out->buffer = NULL; in do_out_standby()
241 out->standby = true; in do_out_standby()
267 static int start_output_stream(struct stream_out *out) in start_output_stream() argument
269 struct audio_device *adev = out->dev; in start_output_stream()
281 out->pcm_config = &pcm_config_sco; in start_output_stream()
284 out->pcm_config = &pcm_config_out; in start_output_stream()
285 out->buffer_type = OUT_BUFFER_TYPE_UNKNOWN; in start_output_stream()
298 if (((out->pcm_config->rate % 8000 == 0) && in start_output_stream()
300 ((out->pcm_config->rate % 11025 == 0) && in start_output_stream()
306 out->pcm = pcm_open(PCM_CARD, device, PCM_OUT | PCM_NORESTART | PCM_MONOTONIC, out->pcm_config); in start_output_stream()
308 if (out->pcm && !pcm_is_ready(out->pcm)) { in start_output_stream()
309 ALOGE("pcm_open(out) failed: %s", pcm_get_error(out->pcm)); in start_output_stream()
310 pcm_close(out->pcm); in start_output_stream()
318 if (out_get_sample_rate(&out->stream.common) != out->pcm_config->rate) { in start_output_stream()
319 ret = create_resampler(out_get_sample_rate(&out->stream.common), in start_output_stream()
320 out->pcm_config->rate, in start_output_stream()
321 out->pcm_config->channels, in start_output_stream()
324 &out->resampler); in start_output_stream()
325 out->buffer_frames = (pcm_config_out.period_size * out->pcm_config->rate) / in start_output_stream()
326 out_get_sample_rate(&out->stream.common) + 1; in start_output_stream()
328 out->buffer = malloc(pcm_frames_to_bytes(out->pcm, out->buffer_frames)); in start_output_stream()
331 adev->active_out = out; in start_output_stream()
364 struct stream_out *out = adev->active_out; in start_input_stream() local
365 pthread_mutex_lock(&out->lock); in start_input_stream()
367 (out->pcm_config->rate % 8000) != 0) || in start_input_stream()
369 (out->pcm_config->rate % 11025) != 0)) in start_input_stream()
370 do_out_standby(out); in start_input_stream()
371 pthread_mutex_unlock(&out->lock); in start_input_stream()
540 struct stream_out *out = (struct stream_out *)stream; in out_standby() local
542 pthread_mutex_lock(&out->dev->lock); in out_standby()
543 pthread_mutex_lock(&out->lock); in out_standby()
544 do_out_standby(out); in out_standby()
545 pthread_mutex_unlock(&out->lock); in out_standby()
546 pthread_mutex_unlock(&out->dev->lock); in out_standby()
558 struct stream_out *out = (struct stream_out *)stream; in out_set_parameters() local
559 struct audio_device *adev = out->dev; in out_set_parameters()
579 pthread_mutex_lock(&out->lock); in out_set_parameters()
580 do_out_standby(out); in out_set_parameters()
581 pthread_mutex_unlock(&out->lock); in out_set_parameters()
601 struct stream_out *out = (struct stream_out *)stream; in out_get_latency() local
602 struct audio_device *adev = out->dev; in out_get_latency()
627 struct stream_out *out = (struct stream_out *)stream; in out_write() local
628 struct audio_device *adev = out->dev; in out_write()
644 pthread_mutex_lock(&out->lock); in out_write()
645 if (out->standby) { in out_write()
646 ret = start_output_stream(out); in out_write()
651 out->standby = false; in out_write()
660 if (!sco_on && (buffer_type != out->buffer_type)) { in out_write()
668 out->write_threshold = out->pcm_config->period_size * period_count; in out_write()
670 if (out->buffer_type == OUT_BUFFER_TYPE_UNKNOWN) in out_write()
671 out->cur_write_threshold = out->write_threshold; in out_write()
672 out->buffer_type = buffer_type; in out_write()
677 (int)out->pcm_config->channels) { in out_write()
689 if (out_get_sample_rate(&stream->common) != out->pcm_config->rate) { in out_write()
690 out_frames = out->buffer_frames; in out_write()
691 out->resampler->resample_from_input(out->resampler, in out_write()
693 out->buffer, &out_frames); in out_write()
694 in_buffer = out->buffer; in out_write()
701 size_t period_size = out->pcm_config->period_size; in out_write()
707 if (pcm_get_htimestamp(out->pcm, in out_write()
711 kernel_frames = pcm_get_buffer_size(out->pcm) - kernel_frames; in out_write()
713 if (kernel_frames > out->cur_write_threshold) { in out_write()
715 (int)(((int64_t)(kernel_frames - out->cur_write_threshold) in out_write()
716 * 1000000) / out->pcm_config->rate); in out_write()
729 } while ((kernel_frames > out->cur_write_threshold) && in out_write()
739 if (out->cur_write_threshold > out->write_threshold) { in out_write()
740 out->cur_write_threshold -= period_size / 4; in out_write()
741 if (out->cur_write_threshold < out->write_threshold) { in out_write()
742 out->cur_write_threshold = out->write_threshold; in out_write()
744 } else if (out->cur_write_threshold < out->write_threshold) { in out_write()
745 out->cur_write_threshold += period_size / 4; in out_write()
746 if (out->cur_write_threshold > out->write_threshold) { in out_write()
747 out->cur_write_threshold = out->write_threshold; in out_write()
749 } else if ((kernel_frames < out->write_threshold) && in out_write()
750 ((out->write_threshold - kernel_frames) > in out_write()
752 out->cur_write_threshold = (kernel_frames / period_size + 1) * period_size; in out_write()
753 out->cur_write_threshold += period_size / 4; in out_write()
757 ret = pcm_write(out->pcm, in_buffer, out_frames * frame_size); in out_write()
760 pthread_mutex_unlock(&out->lock); in out_write()
764 out->written += out_frames; in out_write()
768 pthread_mutex_unlock(&out->lock); in out_write()
803 struct stream_out *out = (struct stream_out *)stream; in out_get_presentation_position() local
806 pthread_mutex_lock(&out->lock); in out_get_presentation_position()
809 if (pcm_get_htimestamp(out->pcm, &avail, timestamp) == 0) { in out_get_presentation_position()
810 size_t kernel_buffer_size = out->pcm_config->period_size * out->pcm_config->period_count; in out_get_presentation_position()
812 int64_t signed_frames = out->written - kernel_buffer_size + avail; in out_get_presentation_position()
820 pthread_mutex_unlock(&out->lock); in out_get_presentation_position()
1030 struct stream_out *out; in adev_open_output_stream() local
1033 out = (struct stream_out *)calloc(1, sizeof(struct stream_out)); in adev_open_output_stream()
1034 if (!out) in adev_open_output_stream()
1037 out->stream.common.get_sample_rate = out_get_sample_rate; in adev_open_output_stream()
1038 out->stream.common.set_sample_rate = out_set_sample_rate; in adev_open_output_stream()
1039 out->stream.common.get_buffer_size = out_get_buffer_size; in adev_open_output_stream()
1040 out->stream.common.get_channels = out_get_channels; in adev_open_output_stream()
1041 out->stream.common.get_format = out_get_format; in adev_open_output_stream()
1042 out->stream.common.set_format = out_set_format; in adev_open_output_stream()
1043 out->stream.common.standby = out_standby; in adev_open_output_stream()
1044 out->stream.common.dump = out_dump; in adev_open_output_stream()
1045 out->stream.common.set_parameters = out_set_parameters; in adev_open_output_stream()
1046 out->stream.common.get_parameters = out_get_parameters; in adev_open_output_stream()
1047 out->stream.common.add_audio_effect = out_add_audio_effect; in adev_open_output_stream()
1048 out->stream.common.remove_audio_effect = out_remove_audio_effect; in adev_open_output_stream()
1049 out->stream.get_latency = out_get_latency; in adev_open_output_stream()
1050 out->stream.set_volume = out_set_volume; in adev_open_output_stream()
1051 out->stream.write = out_write; in adev_open_output_stream()
1052 out->stream.get_render_position = out_get_render_position; in adev_open_output_stream()
1053 out->stream.get_next_write_timestamp = out_get_next_write_timestamp; in adev_open_output_stream()
1054 out->stream.get_presentation_position = out_get_presentation_position; in adev_open_output_stream()
1056 out->dev = adev; in adev_open_output_stream()
1058 config->format = out_get_format(&out->stream.common); in adev_open_output_stream()
1059 config->channel_mask = out_get_channels(&out->stream.common); in adev_open_output_stream()
1060 config->sample_rate = out_get_sample_rate(&out->stream.common); in adev_open_output_stream()
1062 out->standby = true; in adev_open_output_stream()
1065 *stream_out = &out->stream; in adev_open_output_stream()
1069 free(out); in adev_open_output_stream()