Lines Matching refs:er
74 struct echo_reference *er; in echo_reference_get_next_buffer() local
80 er = (struct echo_reference *)((char *)buffer_provider - in echo_reference_get_next_buffer()
83 if (er->wr_src_buf == NULL || er->wr_frames_in == 0) { in echo_reference_get_next_buffer()
89 buffer->frame_count = (buffer->frame_count > er->wr_frames_in) ? in echo_reference_get_next_buffer()
90 er->wr_frames_in : buffer->frame_count; in echo_reference_get_next_buffer()
92 buffer->i16 = (int16_t *)er->wr_src_buf + (er->wr_curr_frame_size - er->wr_frames_in) * in echo_reference_get_next_buffer()
93 er->rd_channel_count; in echo_reference_get_next_buffer()
101 struct echo_reference *er; in echo_reference_release_buffer() local
107 er = (struct echo_reference *)((char *)buffer_provider - in echo_reference_release_buffer()
110 er->wr_frames_in -= buffer->frame_count; in echo_reference_release_buffer()
113 static void echo_reference_reset_l(struct echo_reference *er) in echo_reference_reset_l() argument
116 free(er->buffer); in echo_reference_reset_l()
117 er->buffer = NULL; in echo_reference_reset_l()
118 er->buf_size = 0; in echo_reference_reset_l()
119 er->frames_in = 0; in echo_reference_reset_l()
120 free(er->wr_buf); in echo_reference_reset_l()
121 er->wr_buf = NULL; in echo_reference_reset_l()
122 er->wr_buf_size = 0; in echo_reference_reset_l()
123 er->wr_render_time.tv_sec = 0; in echo_reference_reset_l()
124 er->wr_render_time.tv_nsec = 0; in echo_reference_reset_l()
125 er->delta_count = 0; in echo_reference_reset_l()
126 er->prev_delta_sign = 0; in echo_reference_reset_l()
137 struct echo_reference *er = (struct echo_reference *)echo_reference; in echo_reference_write() local
140 if (er == NULL) { in echo_reference_write()
144 pthread_mutex_lock(&er->lock); in echo_reference_write()
148 er->state &= ~ECHOREF_WRITING; in echo_reference_write()
149 echo_reference_reset_l(er); in echo_reference_write()
156 (int)buffer->time_stamp.tv_nsec, er->playback_delay); in echo_reference_write()
162 (er->wr_render_time.tv_sec == 0) && (er->wr_render_time.tv_nsec == 0)) { in echo_reference_write()
166 if ((er->state & ECHOREF_WRITING) == 0) { in echo_reference_write()
168 if (er->resampler != NULL) { in echo_reference_write()
169 er->resampler->reset(er->resampler); in echo_reference_write()
171 er->state |= ECHOREF_WRITING; in echo_reference_write()
174 if ((er->state & ECHOREF_READING) == 0) { in echo_reference_write()
178 er->wr_render_time.tv_sec = buffer->time_stamp.tv_sec; in echo_reference_write()
179 er->wr_render_time.tv_nsec = buffer->time_stamp.tv_nsec; in echo_reference_write()
181 er->playback_delay = buffer->delay_ns; in echo_reference_write()
184 er->wr_curr_frame_size = buffer->frame_count; in echo_reference_write()
189 if (er->rd_channel_count != er->wr_channel_count || in echo_reference_write()
190 er->rd_sampling_rate != er->wr_sampling_rate) { in echo_reference_write()
195 if (er->rd_sampling_rate != er->wr_sampling_rate) { in echo_reference_write()
196 inFrames = (buffer->frame_count * er->rd_sampling_rate) / er->wr_sampling_rate + in echo_reference_write()
205 if (er->wr_buf_size < wrBufSize) { in echo_reference_write()
207 er->wr_buf_size, wrBufSize); in echo_reference_write()
208 er->wr_buf_size = wrBufSize; in echo_reference_write()
209 void *new_buf = realloc(er->wr_buf, er->wr_buf_size * er->rd_frame_size); in echo_reference_write()
214 er->wr_buf = new_buf; in echo_reference_write()
218 if (er->rd_channel_count != er->wr_channel_count) { in echo_reference_write()
221 int16_t *dst16 = (int16_t *)er->wr_buf; in echo_reference_write()
228 if (er->wr_sampling_rate != er->rd_sampling_rate) { in echo_reference_write()
229 if (er->resampler == NULL) { in echo_reference_write()
232 er->wr_sampling_rate, er->rd_sampling_rate); in echo_reference_write()
233 er->provider.get_next_buffer = echo_reference_get_next_buffer; in echo_reference_write()
234 er->provider.release_buffer = echo_reference_release_buffer; in echo_reference_write()
235 rc = create_resampler(er->wr_sampling_rate, in echo_reference_write()
236 er->rd_sampling_rate, in echo_reference_write()
237 er->rd_channel_count, in echo_reference_write()
239 &er->provider, in echo_reference_write()
240 &er->resampler); in echo_reference_write()
242 er->resampler = NULL; in echo_reference_write()
250 if (er->rd_channel_count != er->wr_channel_count) { in echo_reference_write()
251 er->wr_src_buf = er->wr_buf; in echo_reference_write()
253 er->wr_src_buf = buffer->raw; in echo_reference_write()
255 er->wr_frames_in = buffer->frame_count; in echo_reference_write()
259 er->wr_sampling_rate, er->rd_sampling_rate); in echo_reference_write()
260 er->resampler->resample_from_provider(er->resampler, in echo_reference_write()
261 (int16_t *)er->wr_buf, &inFrames); in echo_reference_write()
262 ALOGV_IF(er->wr_frames_in != 0, in echo_reference_write()
264 er->wr_frames_in); in echo_reference_write()
266 srcBuf = er->wr_buf; in echo_reference_write()
272 if (er->frames_in + inFrames > er->buf_size) { in echo_reference_write()
274 er->buf_size, er->frames_in + inFrames); in echo_reference_write()
275 er->buf_size = er->frames_in + inFrames; in echo_reference_write()
276 void *new_buf = realloc(er->buffer, er->buf_size * er->rd_frame_size); in echo_reference_write()
281 er->buffer = new_buf; in echo_reference_write()
284 memcpy((char *)er->buffer + er->frames_in * er->rd_frame_size, in echo_reference_write()
286 inFrames * er->rd_frame_size); in echo_reference_write()
287 er->frames_in += inFrames; in echo_reference_write()
291 inFrames, er->frames_in, er->buf_size, in echo_reference_write()
292 (int)er->wr_render_time.tv_sec, (int)er->wr_render_time.tv_nsec, er->playback_delay); in echo_reference_write()
294 pthread_cond_signal(&er->cond); in echo_reference_write()
296 pthread_mutex_unlock(&er->lock); in echo_reference_write()
311 struct echo_reference *er = (struct echo_reference *)echo_reference; in echo_reference_read() local
314 if (er == NULL) { in echo_reference_read()
318 pthread_mutex_lock(&er->lock); in echo_reference_read()
322 er->state &= ~ECHOREF_READING; in echo_reference_read()
328 buffer->delay_ns, er->frames_in, buffer->frame_count); in echo_reference_read()
330 if ((er->state & ECHOREF_READING) == 0) { in echo_reference_read()
332 echo_reference_reset_l(er); in echo_reference_read()
333 er->state |= ECHOREF_READING; in echo_reference_read()
336 if ((er->state & ECHOREF_WRITING) == 0) { in echo_reference_read()
337 memset(buffer->raw, 0, er->rd_frame_size * buffer->frame_count); in echo_reference_read()
345 if (er->frames_in < buffer->frame_count) { in echo_reference_read()
346 uint32_t timeoutMs = (uint32_t)((1000 * buffer->frame_count) / er->rd_sampling_rate / 2); in echo_reference_read()
358 pthread_cond_timedwait(&er->cond, &er->lock, &ts); in echo_reference_read()
360 ALOGV_IF((er->frames_in < buffer->frame_count), in echo_reference_read()
363 timeoutMs, er->frames_in, buffer->frame_count); in echo_reference_read()
369 if ((er->wr_render_time.tv_sec == 0 && er->wr_render_time.tv_nsec == 0) || in echo_reference_read()
375 if (buffer->time_stamp.tv_nsec < er->wr_render_time.tv_nsec) { in echo_reference_read()
376 tmp.tv_sec = buffer->time_stamp.tv_sec - er->wr_render_time.tv_sec - 1; in echo_reference_read()
377 tmp.tv_nsec = 1000000000 + buffer->time_stamp.tv_nsec - er->wr_render_time.tv_nsec; in echo_reference_read()
379 tmp.tv_sec = buffer->time_stamp.tv_sec - er->wr_render_time.tv_sec; in echo_reference_read()
380 tmp.tv_nsec = buffer->time_stamp.tv_nsec - er->wr_render_time.tv_nsec; in echo_reference_read()
384 int64_t expectedDelayNs = er->playback_delay + buffer->delay_ns - timeDiff; in echo_reference_read()
386 if (er->resampler != NULL) { in echo_reference_read()
388 int32_t rsmp_delay = er->resampler->delay_ns(er->resampler); in echo_reference_read()
395 expectedDelayNs, er->playback_delay, buffer->delay_ns, timeDiff); in echo_reference_read()
398 int64_t delayNs = ((int64_t)er->frames_in * 1000000000) / er->rd_sampling_rate; in echo_reference_read()
409 if (delay_sign == er->prev_delta_sign) { in echo_reference_read()
410 er->delta_count++; in echo_reference_read()
412 er->delta_count = 1; in echo_reference_read()
414 er->prev_delta_sign = delay_sign; in echo_reference_read()
416 if (er->delta_count > MIN_DELTA_NUM) { in echo_reference_read()
417 size_t previousFrameIn = er->frames_in; in echo_reference_read()
418 er->frames_in = (size_t)((expectedDelayNs * er->rd_sampling_rate)/1000000000); in echo_reference_read()
419 int offset = er->frames_in - previousFrameIn; in echo_reference_read()
423 delay_sign ? "positive" : "negative", er->frames_in, previousFrameIn); in echo_reference_read()
427 if (er->frames_in > er->buf_size) { in echo_reference_read()
428 er->buf_size = er->frames_in; in echo_reference_read()
430 er->buf_size); in echo_reference_read()
431 void *new_buf = realloc(er->buffer, er->buf_size * er->rd_frame_size); in echo_reference_read()
436 er->buffer = new_buf; in echo_reference_read()
441 memset((char *)er->buffer + previousFrameIn * er->rd_frame_size, in echo_reference_read()
442 0, offset * er->rd_frame_size); in echo_reference_read()
449 memcpy(er->buffer, (char *)er->buffer + (offset * er->rd_frame_size), in echo_reference_read()
450 er->frames_in * er->rd_frame_size); in echo_reference_read()
452 er->frames_in); in echo_reference_read()
457 er->delta_count = 0; in echo_reference_read()
458 er->prev_delta_sign = 0; in echo_reference_read()
466 expectedDelayNs, er->playback_delay, buffer->delay_ns, timeDiff); in echo_reference_read()
470 if (er->frames_in < buffer->frame_count) { in echo_reference_read()
471 if (buffer->frame_count > er->buf_size) { in echo_reference_read()
472 er->buf_size = buffer->frame_count; in echo_reference_read()
473 ALOGV("echo_reference_read(): increasing buffer size to %zu", er->buf_size); in echo_reference_read()
474 void *new_buf = realloc(er->buffer, er->buf_size * er->rd_frame_size); in echo_reference_read()
479 er->buffer = new_buf; in echo_reference_read()
483 memset((char *)er->buffer + er->frames_in * er->rd_frame_size, in echo_reference_read()
484 0, (buffer->frame_count - er->frames_in) * er->rd_frame_size); in echo_reference_read()
485 er->frames_in = buffer->frame_count; in echo_reference_read()
489 (char *)er->buffer, in echo_reference_read()
490 buffer->frame_count * er->rd_frame_size); in echo_reference_read()
492 er->frames_in -= buffer->frame_count; in echo_reference_read()
493 memcpy(er->buffer, in echo_reference_read()
494 (char *)er->buffer + buffer->frame_count * er->rd_frame_size, in echo_reference_read()
495 er->frames_in * er->rd_frame_size); in echo_reference_read()
501 buffer->frame_count, er->frames_in); in echo_reference_read()
503 pthread_cond_signal(&er->cond); in echo_reference_read()
506 pthread_mutex_unlock(&er->lock); in echo_reference_read()
519 struct echo_reference *er; in create_echo_reference() local
541 er = (struct echo_reference *)calloc(1, sizeof(struct echo_reference)); in create_echo_reference()
543 er->itfe.read = echo_reference_read; in create_echo_reference()
544 er->itfe.write = echo_reference_write; in create_echo_reference()
546 er->state = ECHOREF_IDLE; in create_echo_reference()
547 er->rd_format = rdFormat; in create_echo_reference()
548 er->rd_channel_count = rdChannelCount; in create_echo_reference()
549 er->rd_sampling_rate = rdSamplingRate; in create_echo_reference()
550 er->wr_format = wrFormat; in create_echo_reference()
551 er->wr_channel_count = wrChannelCount; in create_echo_reference()
552 er->wr_sampling_rate = wrSamplingRate; in create_echo_reference()
553 er->rd_frame_size = audio_bytes_per_sample(rdFormat) * rdChannelCount; in create_echo_reference()
554 er->wr_frame_size = audio_bytes_per_sample(wrFormat) * wrChannelCount; in create_echo_reference()
555 *echo_reference = &er->itfe; in create_echo_reference()
560 struct echo_reference *er = (struct echo_reference *)echo_reference; in release_echo_reference() local
562 if (er == NULL) { in release_echo_reference()
567 echo_reference_reset_l(er); in release_echo_reference()
568 if (er->resampler != NULL) { in release_echo_reference()
569 release_resampler(er->resampler); in release_echo_reference()
571 free(er); in release_echo_reference()