Lines Matching refs:proxy

46 int proxy_prepare(alsa_device_proxy * proxy, const alsa_device_profile* profile,  in proxy_prepare()  argument
53 proxy->profile = profile; in proxy_prepare()
60 proxy->alsa_config.format = config->format; in proxy_prepare()
62 proxy->alsa_config.format = profile->default_config.format; in proxy_prepare()
72 proxy->alsa_config.rate = config->rate; in proxy_prepare()
74 proxy->alsa_config.rate = profile->default_config.rate; in proxy_prepare()
84 proxy->alsa_config.channels = config->channels; in proxy_prepare()
86 proxy->alsa_config.channels = profile_get_closest_channel_count(profile, config->channels); in proxy_prepare()
88 config->channels, proxy->alsa_config.channels); in proxy_prepare()
95 proxy->alsa_config.period_count = profile->default_config.period_count; in proxy_prepare()
96 proxy->alsa_config.period_size = in proxy_prepare()
97 profile_get_period_size(proxy->profile, proxy->alsa_config.rate); in proxy_prepare()
102 if (proxy->alsa_config.period_count == 0) { in proxy_prepare()
103 proxy->alsa_config.period_count = 4; in proxy_prepare()
106 proxy->pcm = NULL; in proxy_prepare()
109 proxy->frame_size = format_byte_size_map[config->format] * proxy->alsa_config.channels; in proxy_prepare()
111 proxy->frame_size = 1; in proxy_prepare()
117 int max_rate_index = proxy_scan_rates(proxy, profile->sample_rates); in proxy_prepare()
119 if (proxy->alsa_config.rate > profile->sample_rates[max_rate_index]) { in proxy_prepare()
121 proxy->alsa_config.rate, profile->sample_rates[max_rate_index]); in proxy_prepare()
122 proxy->alsa_config.rate = profile->sample_rates[max_rate_index]; in proxy_prepare()
129 int proxy_open(alsa_device_proxy * proxy) in proxy_open() argument
131 const alsa_device_profile* profile = proxy->profile; in proxy_open()
139 proxy->pcm = pcm_open(profile->card, profile->device, in proxy_open()
140 profile->direction | PCM_MONOTONIC, &proxy->alsa_config); in proxy_open()
141 if (proxy->pcm == NULL) { in proxy_open()
145 if (!pcm_is_ready(proxy->pcm)) { in proxy_open()
146 ALOGE(" proxy_open() pcm_is_ready() failed: %s", pcm_get_error(proxy->pcm)); in proxy_open()
148 log_pcm_config(&proxy->alsa_config, "config"); in proxy_open()
150 pcm_close(proxy->pcm); in proxy_open()
151 proxy->pcm = NULL; in proxy_open()
158 void proxy_close(alsa_device_proxy * proxy) in proxy_close() argument
160 ALOGV("proxy_close() [pcm:%p]", proxy->pcm); in proxy_close()
162 if (proxy->pcm != NULL) { in proxy_close()
163 pcm_close(proxy->pcm); in proxy_close()
164 proxy->pcm = NULL; in proxy_close()
171 unsigned proxy_get_sample_rate(const alsa_device_proxy * proxy) in proxy_get_sample_rate() argument
173 return proxy->alsa_config.rate; in proxy_get_sample_rate()
179 enum pcm_format proxy_get_format(const alsa_device_proxy * proxy) in proxy_get_format() argument
181 return proxy->alsa_config.format; in proxy_get_format()
187 unsigned proxy_get_channel_count(const alsa_device_proxy * proxy) in proxy_get_channel_count() argument
189 return proxy->alsa_config.channels; in proxy_get_channel_count()
195 unsigned int proxy_get_period_size(const alsa_device_proxy * proxy) in proxy_get_period_size() argument
197 return proxy->alsa_config.period_size; in proxy_get_period_size()
200 unsigned int proxy_get_period_count(const alsa_device_proxy * proxy) in proxy_get_period_count() argument
202 return proxy->alsa_config.period_count; in proxy_get_period_count()
205 unsigned proxy_get_latency(const alsa_device_proxy * proxy) in proxy_get_latency() argument
207 return (proxy_get_period_size(proxy) * proxy_get_period_count(proxy) * 1000) in proxy_get_latency()
208 / proxy_get_sample_rate(proxy); in proxy_get_latency()
211 int proxy_get_presentation_position(const alsa_device_proxy * proxy, in proxy_get_presentation_position() argument
216 if (proxy->pcm != NULL in proxy_get_presentation_position()
217 && pcm_get_htimestamp(proxy->pcm, &avail, timestamp) == 0) { in proxy_get_presentation_position()
219 proxy->alsa_config.period_size * proxy->alsa_config.period_count; in proxy_get_presentation_position()
223 int64_t signed_frames = proxy->transferred - kernel_buffer_size + avail; in proxy_get_presentation_position()
236 int proxy_get_capture_position(const alsa_device_proxy * proxy, in proxy_get_capture_position() argument
243 if (proxy->pcm != NULL in proxy_get_capture_position()
244 && pcm_get_htimestamp(proxy->pcm, &avail, &timestamp) == 0) { in proxy_get_capture_position()
246 proxy->alsa_config.period_size * proxy->alsa_config.period_count; in proxy_get_capture_position()
250 *frames = proxy->transferred + avail; in proxy_get_capture_position()
261 int proxy_write(alsa_device_proxy * proxy, const void *data, unsigned int count) in proxy_write() argument
263 int ret = pcm_write(proxy->pcm, data, count); in proxy_write()
265 proxy->transferred += count / proxy->frame_size; in proxy_write()
270 int proxy_read(alsa_device_proxy * proxy, void *data, unsigned int count) in proxy_read() argument
272 int ret = pcm_read(proxy->pcm, data, count); in proxy_read()
274 proxy->transferred += count / proxy->frame_size; in proxy_read()
282 void proxy_dump(const alsa_device_proxy* proxy, int fd) in proxy_dump() argument
284 if (proxy != NULL) { in proxy_dump()
285 dprintf(fd, " channels: %d\n", proxy->alsa_config.channels); in proxy_dump()
286 dprintf(fd, " rate: %d\n", proxy->alsa_config.rate); in proxy_dump()
287 dprintf(fd, " period_size: %d\n", proxy->alsa_config.period_size); in proxy_dump()
288 dprintf(fd, " period_count: %d\n", proxy->alsa_config.period_count); in proxy_dump()
289 dprintf(fd, " format: %d\n", proxy->alsa_config.format); in proxy_dump()
293 int proxy_scan_rates(alsa_device_proxy * proxy, const unsigned sample_rates[]) { in proxy_scan_rates() argument
294 const alsa_device_profile* profile = proxy->profile; in proxy_scan_rates()
300 memcpy(&alsa_config, &proxy->alsa_config, sizeof(alsa_config)); in proxy_scan_rates()