• Home
  • Raw
  • Download

Lines Matching full:state

65 	struct libasound_state *state = xfer->private_data;  in xfer_libasound_init()  local
68 err = snd_output_stdio_attach(&state->log, stderr, 0); in xfer_libasound_init()
72 err = snd_pcm_hw_params_malloc(&state->hw_params); in xfer_libasound_init()
76 return snd_pcm_sw_params_malloc(&state->sw_params); in xfer_libasound_init()
82 struct libasound_state *state = xfer->private_data; in xfer_libasound_parse_opt() local
86 state->node_literal = arg_duplicate_string(optarg, &err); in xfer_libasound_parse_opt()
88 state->nonblock = true; in xfer_libasound_parse_opt()
90 state->mmap = true; in xfer_libasound_parse_opt()
92 state->msec_per_period = arg_parse_decimal_num(optarg, &err); in xfer_libasound_parse_opt()
94 state->msec_per_buffer = arg_parse_decimal_num(optarg, &err); in xfer_libasound_parse_opt()
96 state->frames_per_period = arg_parse_decimal_num(optarg, &err); in xfer_libasound_parse_opt()
98 state->frames_per_buffer = arg_parse_decimal_num(optarg, &err); in xfer_libasound_parse_opt()
100 state->msec_for_avail_min = arg_parse_decimal_num(optarg, &err); in xfer_libasound_parse_opt()
102 state->msec_for_start_threshold = arg_parse_decimal_num(optarg, &err); in xfer_libasound_parse_opt()
104 state->msec_for_stop_threshold = arg_parse_decimal_num(optarg, &err); in xfer_libasound_parse_opt()
106 state->waiter_type_literal = arg_duplicate_string(optarg, &err); in xfer_libasound_parse_opt()
108 state->sched_model_literal = arg_duplicate_string(optarg, &err); in xfer_libasound_parse_opt()
110 state->no_auto_resample = true; in xfer_libasound_parse_opt()
112 state->no_auto_channels = true; in xfer_libasound_parse_opt()
114 state->no_auto_format = true; in xfer_libasound_parse_opt()
116 state->no_softvol = true; in xfer_libasound_parse_opt()
122 state->finish_at_xrun = true; in xfer_libasound_parse_opt()
124 state->test_nowait = true; in xfer_libasound_parse_opt()
133 struct libasound_state *state = xfer->private_data; in xfer_libasound_validate_opts() local
136 state->verbose = xfer->verbose > 1; in xfer_libasound_validate_opts()
138 if (state->node_literal == NULL) { in xfer_libasound_validate_opts()
139 state->node_literal = strdup("default"); in xfer_libasound_validate_opts()
140 if (state->node_literal == NULL) in xfer_libasound_validate_opts()
144 if (state->mmap && state->nonblock) { in xfer_libasound_validate_opts()
151 if (state->test_nowait) { in xfer_libasound_validate_opts()
152 if (!state->nonblock && !state->mmap) { in xfer_libasound_validate_opts()
160 if (state->msec_per_period > 0 && state->msec_per_buffer > 0) { in xfer_libasound_validate_opts()
161 if (state->msec_per_period > state->msec_per_buffer) { in xfer_libasound_validate_opts()
162 state->msec_per_period = state->msec_per_buffer; in xfer_libasound_validate_opts()
163 state->msec_per_buffer = 0; in xfer_libasound_validate_opts()
167 if (state->frames_per_period > 0 && state->frames_per_buffer > 0) { in xfer_libasound_validate_opts()
168 if (state->frames_per_period > state->frames_per_buffer) { in xfer_libasound_validate_opts()
169 state->frames_per_period = state->frames_per_buffer; in xfer_libasound_validate_opts()
170 state->frames_per_buffer = 0; in xfer_libasound_validate_opts()
174 state->sched_model = SCHED_MODEL_IRQ; in xfer_libasound_validate_opts()
175 if (state->sched_model_literal != NULL) { in xfer_libasound_validate_opts()
176 if (!strcmp(state->sched_model_literal, "timer")) { in xfer_libasound_validate_opts()
177 state->sched_model = SCHED_MODEL_TIMER; in xfer_libasound_validate_opts()
178 state->mmap = true; in xfer_libasound_validate_opts()
179 state->nonblock = true; in xfer_libasound_validate_opts()
183 if (state->waiter_type_literal != NULL) { in xfer_libasound_validate_opts()
184 if (state->test_nowait) { in xfer_libasound_validate_opts()
190 if (!state->nonblock && !state->mmap) { in xfer_libasound_validate_opts()
197 state->waiter_type = in xfer_libasound_validate_opts()
198 waiter_type_from_label(state->waiter_type_literal); in xfer_libasound_validate_opts()
200 state->waiter_type = WAITER_TYPE_DEFAULT; in xfer_libasound_validate_opts()
206 static int set_access_hw_param(struct libasound_state *state) in set_access_hw_param() argument
215 if (state->mmap) { in set_access_hw_param()
222 err = snd_pcm_hw_params_set_access_mask(state->handle, state->hw_params, in set_access_hw_param()
229 static int disable_period_wakeup(struct libasound_state *state) in disable_period_wakeup() argument
233 if (snd_pcm_type(state->handle) != SND_PCM_TYPE_HW) { in disable_period_wakeup()
234 logging(state, in disable_period_wakeup()
240 if (!snd_pcm_hw_params_can_disable_period_wakeup(state->hw_params)) { in disable_period_wakeup()
241 logging(state, in disable_period_wakeup()
248 err = snd_pcm_hw_params_set_period_wakeup(state->handle, in disable_period_wakeup()
249 state->hw_params, 0); in disable_period_wakeup()
251 logging(state, in disable_period_wakeup()
262 struct libasound_state *state = xfer->private_data; in open_handle() local
266 if (state->nonblock) in open_handle()
268 if (state->no_auto_resample) in open_handle()
270 if (state->no_auto_channels) in open_handle()
272 if (state->no_auto_format) in open_handle()
274 if (state->no_softvol) in open_handle()
277 err = snd_pcm_open(&state->handle, state->node_literal, xfer->direction, in open_handle()
280 logging(state, "Fail to open libasound PCM node for %s: %s\n", in open_handle()
282 state->node_literal); in open_handle()
286 if ((state->nonblock || state->mmap) && !state->test_nowait) in open_handle()
287 state->use_waiter = true; in open_handle()
289 err = snd_pcm_hw_params_any(state->handle, state->hw_params); in open_handle()
293 if (state->sched_model == SCHED_MODEL_TIMER) { in open_handle()
294 err = disable_period_wakeup(state); in open_handle()
300 logging(state, "Available HW Params of node: %s\n", in open_handle()
301 snd_pcm_name(state->handle)); in open_handle()
302 snd_pcm_hw_params_dump(state->hw_params, state->log); in open_handle()
308 return set_access_hw_param(state); in open_handle()
311 static int prepare_waiter(struct libasound_state *state) in prepare_waiter() argument
317 if (state->waiter_type == WAITER_TYPE_DEFAULT) in prepare_waiter()
320 err = snd_pcm_poll_descriptors_count(state->handle); in prepare_waiter()
327 state->waiter = malloc(sizeof(*state->waiter)); in prepare_waiter()
328 if (state->waiter == NULL) in prepare_waiter()
331 err = waiter_context_init(state->waiter, state->waiter_type, pfd_count); in prepare_waiter()
335 err = snd_pcm_poll_descriptors(state->handle, state->waiter->pfds, in prepare_waiter()
340 return waiter_context_prepare(state->waiter); in prepare_waiter()
343 int xfer_libasound_wait_event(struct libasound_state *state, int timeout_msec, in xfer_libasound_wait_event() argument
348 if (state->waiter_type != WAITER_TYPE_DEFAULT) { in xfer_libasound_wait_event()
349 struct waiter_context *waiter = state->waiter; in xfer_libasound_wait_event()
358 err = snd_pcm_poll_descriptors_revents(state->handle, in xfer_libasound_wait_event()
363 count = snd_pcm_wait(state->handle, timeout_msec); in xfer_libasound_wait_event()
369 if (snd_pcm_stream(state->handle) == SND_PCM_STREAM_PLAYBACK) in xfer_libasound_wait_event()
378 static int configure_hw_params(struct libasound_state *state, in configure_hw_params() argument
396 snd_pcm_hw_params_get_format_mask(state->hw_params, mask); in configure_hw_params()
403 logging(state, in configure_hw_params()
408 err = snd_pcm_hw_params_set_format(state->handle, state->hw_params, in configure_hw_params()
411 logging(state, in configure_hw_params()
419 err = snd_pcm_hw_params_get_channels_min(state->hw_params, in configure_hw_params()
422 logging(state, in configure_hw_params()
427 err = snd_pcm_hw_params_set_channels(state->handle, state->hw_params, in configure_hw_params()
430 logging(state, in configure_hw_params()
438 err = snd_pcm_hw_params_get_rate_min(state->hw_params, in configure_hw_params()
441 logging(state, in configure_hw_params()
447 err = snd_pcm_hw_params_set_rate(state->handle, state->hw_params, in configure_hw_params()
450 logging(state, in configure_hw_params()
460 state->hw_params, &msec_per_buffer, NULL); in configure_hw_params()
462 logging(state, in configure_hw_params()
495 err = snd_pcm_hw_params_set_period_time_near(state->handle, in configure_hw_params()
496 state->hw_params, &msec_per_period, NULL); in configure_hw_params()
498 logging(state, in configure_hw_params()
504 err = snd_pcm_hw_params_set_period_size_near(state->handle, in configure_hw_params()
505 state->hw_params, &frames_per_period, NULL); in configure_hw_params()
507 logging(state, in configure_hw_params()
515 err = snd_pcm_hw_params_set_buffer_time_near(state->handle, in configure_hw_params()
516 state->hw_params, &msec_per_buffer, NULL); in configure_hw_params()
518 logging(state, in configure_hw_params()
524 err = snd_pcm_hw_params_set_buffer_size_near(state->handle, in configure_hw_params()
525 state->hw_params, &frames_per_buffer); in configure_hw_params()
527 logging(state, in configure_hw_params()
534 return snd_pcm_hw_params(state->handle, state->hw_params); in configure_hw_params()
567 static int configure_sw_params(struct libasound_state *state, in configure_sw_params() argument
580 logging(state, in configure_sw_params()
588 err = snd_pcm_sw_params_set_avail_min(state->handle, in configure_sw_params()
589 state->sw_params, frame_count); in configure_sw_params()
591 logging(state, in configure_sw_params()
601 logging(state, in configure_sw_params()
609 err = snd_pcm_sw_params_set_start_threshold(state->handle, in configure_sw_params()
610 state->sw_params, frame_count); in configure_sw_params()
612 logging(state, in configure_sw_params()
622 logging(state, in configure_sw_params()
630 err = snd_pcm_sw_params_set_stop_threshold(state->handle, in configure_sw_params()
631 state->sw_params, frame_count); in configure_sw_params()
633 logging(state, in configure_sw_params()
639 return snd_pcm_sw_params(state->handle, state->sw_params); in configure_sw_params()
649 struct libasound_state *state = xfer->private_data; in xfer_libasound_pre_process() local
657 err = configure_hw_params(state, *format, *samples_per_frame, in xfer_libasound_pre_process()
659 state->msec_per_period, in xfer_libasound_pre_process()
660 state->msec_per_buffer, in xfer_libasound_pre_process()
661 state->frames_per_period, in xfer_libasound_pre_process()
662 state->frames_per_buffer); in xfer_libasound_pre_process()
664 logging(state, "Current hardware parameters:\n"); in xfer_libasound_pre_process()
665 snd_pcm_hw_params_dump(state->hw_params, state->log); in xfer_libasound_pre_process()
670 err = retrieve_actual_hw_params(state->hw_params, format, in xfer_libasound_pre_process()
677 err = snd_pcm_sw_params_current(state->handle, state->sw_params); in xfer_libasound_pre_process()
682 err = snd_pcm_hw_params_get_period_wakeup(state->handle, in xfer_libasound_pre_process()
683 state->hw_params, &flag); in xfer_libasound_pre_process()
690 state->ops = &xfer_libasound_irq_rw_ops; in xfer_libasound_pre_process()
693 if (snd_pcm_stream(state->handle) == SND_PCM_STREAM_CAPTURE) in xfer_libasound_pre_process()
694 state->ops = &xfer_libasound_irq_mmap_r_ops; in xfer_libasound_pre_process()
696 state->ops = &xfer_libasound_irq_mmap_w_ops; in xfer_libasound_pre_process()
703 if (snd_pcm_stream(state->handle) == SND_PCM_STREAM_CAPTURE) in xfer_libasound_pre_process()
704 state->ops = &xfer_libasound_timer_mmap_r_ops; in xfer_libasound_pre_process()
706 state->ops = &xfer_libasound_timer_mmap_w_ops; in xfer_libasound_pre_process()
712 if (state->ops->private_size > 0) { in xfer_libasound_pre_process()
713 state->private_data = malloc(state->ops->private_size); in xfer_libasound_pre_process()
714 if (state->private_data == NULL) in xfer_libasound_pre_process()
716 memset(state->private_data, 0, state->ops->private_size); in xfer_libasound_pre_process()
719 err = state->ops->pre_process(state); in xfer_libasound_pre_process()
723 err = configure_sw_params(state, *frames_per_second, in xfer_libasound_pre_process()
725 state->msec_for_avail_min, in xfer_libasound_pre_process()
726 state->msec_for_start_threshold, in xfer_libasound_pre_process()
727 state->msec_for_stop_threshold); in xfer_libasound_pre_process()
729 logging(state, "Current software parameters:\n"); in xfer_libasound_pre_process()
730 snd_pcm_sw_params_dump(state->sw_params, state->log); in xfer_libasound_pre_process()
735 snd_pcm_dump(state->handle, state->log); in xfer_libasound_pre_process()
736 logging(state, "Scheduling model:\n"); in xfer_libasound_pre_process()
737 logging(state, " %s\n", sched_model_labels[state->sched_model]); in xfer_libasound_pre_process()
740 if (state->use_waiter) { in xfer_libasound_pre_process()
743 err = prepare_waiter(state); in xfer_libasound_pre_process()
748 logging(state, "Waiter type:\n"); in xfer_libasound_pre_process()
749 logging(state, in xfer_libasound_pre_process()
751 waiter_label_from_type(state->waiter_type)); in xfer_libasound_pre_process()
763 struct libasound_state *state = xfer->private_data; in xfer_libasound_process_frames() local
766 if (state->handle == NULL) in xfer_libasound_process_frames()
769 err = state->ops->process_frames(state, frame_count, mapper, cntrs); in xfer_libasound_process_frames()
773 if (err == -EPIPE && !state->finish_at_xrun) { in xfer_libasound_process_frames()
777 err = snd_pcm_prepare(state->handle); in xfer_libasound_process_frames()
784 logging(state, "Fail to process frames: %s\n", in xfer_libasound_process_frames()
794 struct libasound_state *state = xfer->private_data; in xfer_libasound_pause() local
795 snd_pcm_state_t s = snd_pcm_state(state->handle); in xfer_libasound_pause()
798 if (state->handle == NULL) in xfer_libasound_pause()
809 // Not supported. Leave the substream to enter XRUN state. in xfer_libasound_pause()
810 if (!snd_pcm_hw_params_can_pause(state->hw_params)) in xfer_libasound_pause()
813 err = snd_pcm_pause(state->handle, enable); in xfer_libasound_pause()
814 if (err < 0 && state->verbose) { in xfer_libasound_pause()
815 logging(state, "snd_pcm_pause(): %s\n", snd_strerror(err)); in xfer_libasound_pause()
821 struct libasound_state *state = xfer->private_data; in xfer_libasound_post_process() local
825 if (state->handle == NULL) in xfer_libasound_post_process()
828 pcm_state = snd_pcm_state(state->handle); in xfer_libasound_post_process()
831 if (snd_pcm_stream(state->handle) == SND_PCM_STREAM_CAPTURE || in xfer_libasound_post_process()
832 state->ops == &xfer_libasound_timer_mmap_w_ops) { in xfer_libasound_post_process()
833 err = snd_pcm_drop(state->handle); in xfer_libasound_post_process()
835 logging(state, "snd_pcm_drop(): %s\n", in xfer_libasound_post_process()
839 if (state->nonblock) in xfer_libasound_post_process()
840 snd_pcm_nonblock(state->handle, 0); in xfer_libasound_post_process()
841 err = snd_pcm_drain(state->handle); in xfer_libasound_post_process()
842 if (state->nonblock) in xfer_libasound_post_process()
843 snd_pcm_nonblock(state->handle, 1); in xfer_libasound_post_process()
845 logging(state, "snd_pcm_drain(): %s\n", in xfer_libasound_post_process()
850 err = snd_pcm_hw_free(state->handle); in xfer_libasound_post_process()
852 logging(state, "snd_pcm_hw_free(): %s\n", snd_strerror(err)); in xfer_libasound_post_process()
854 snd_pcm_close(state->handle); in xfer_libasound_post_process()
855 state->handle = NULL; in xfer_libasound_post_process()
857 if (state->ops && state->ops->post_process) in xfer_libasound_post_process()
858 state->ops->post_process(state); in xfer_libasound_post_process()
859 free(state->private_data); in xfer_libasound_post_process()
860 state->private_data = NULL; in xfer_libasound_post_process()
869 struct libasound_state *state = xfer->private_data; in xfer_libasound_destroy() local
871 free(state->node_literal); in xfer_libasound_destroy()
872 free(state->waiter_type_literal); in xfer_libasound_destroy()
873 free(state->sched_model_literal); in xfer_libasound_destroy()
874 state->node_literal = NULL; in xfer_libasound_destroy()
875 state->waiter_type_literal = NULL; in xfer_libasound_destroy()
876 state->sched_model_literal = NULL; in xfer_libasound_destroy()
878 if (state->hw_params) in xfer_libasound_destroy()
879 snd_pcm_hw_params_free(state->hw_params); in xfer_libasound_destroy()
880 if (state->sw_params) in xfer_libasound_destroy()
881 snd_pcm_sw_params_free(state->sw_params); in xfer_libasound_destroy()
882 state->hw_params = NULL; in xfer_libasound_destroy()
883 state->sw_params = NULL; in xfer_libasound_destroy()
885 if (state->log) in xfer_libasound_destroy()
886 snd_output_close(state->log); in xfer_libasound_destroy()
887 state->log = NULL; in xfer_libasound_destroy()