Lines Matching refs:audio

53 static rt_err_t _audio_send_replay_frame(struct rt_audio_device *audio)  in _audio_send_replay_frame()  argument
61 RT_ASSERT(audio != RT_NULL); in _audio_send_replay_frame()
63 buf_info = &audio->replay->buf_info; in _audio_send_replay_frame()
65 position = audio->replay->pos; in _audio_send_replay_frame()
69 if (rt_data_queue_peek(&audio->replay->queue, (const void **)&data, &src_size) != RT_EOK) in _audio_send_replay_frame()
72 if (audio->replay->event & REPLAY_EVT_STOP) in _audio_send_replay_frame()
73 rt_completion_done(&audio->replay->cmp); in _audio_send_replay_frame()
76 rt_memset(&buf_info->buffer[audio->replay->pos], 0, dst_size); in _audio_send_replay_frame()
78 audio->replay->pos += dst_size; in _audio_send_replay_frame()
79 audio->replay->pos %= buf_info->total_size; in _audio_send_replay_frame()
83 rt_memset(&buf_info->buffer[audio->replay->pos], 0, dst_size); in _audio_send_replay_frame()
88 result = rt_data_queue_peek(&audio->replay->queue, (const void **)&data, &src_size); in _audio_send_replay_frame()
91 LOG_D("under run %d, remain %d", audio->replay->pos, remain_bytes); in _audio_send_replay_frame()
92 audio->replay->pos -= remain_bytes; in _audio_send_replay_frame()
93 audio->replay->pos += dst_size; in _audio_send_replay_frame()
94 audio->replay->pos %= buf_info->total_size; in _audio_send_replay_frame()
95 audio->replay->read_index = 0; in _audio_send_replay_frame()
100 remain_bytes = MIN((dst_size - index), (src_size - audio->replay->read_index)); in _audio_send_replay_frame()
101 rt_memcpy(&buf_info->buffer[audio->replay->pos], in _audio_send_replay_frame()
102 &data[audio->replay->read_index], remain_bytes); in _audio_send_replay_frame()
105 audio->replay->read_index += remain_bytes; in _audio_send_replay_frame()
106 audio->replay->pos += remain_bytes; in _audio_send_replay_frame()
107 audio->replay->pos %= buf_info->total_size; in _audio_send_replay_frame()
109 if (audio->replay->read_index == src_size) in _audio_send_replay_frame()
112 audio->replay->read_index = 0; in _audio_send_replay_frame()
113 … rt_data_queue_pop(&audio->replay->queue, (const void **)&data, &src_size, RT_WAITING_NO); in _audio_send_replay_frame()
117 if (audio->parent.tx_complete != RT_NULL) in _audio_send_replay_frame()
118 audio->parent.tx_complete(&audio->parent, (void *)data); in _audio_send_replay_frame()
123 if (audio->ops->transmit != RT_NULL) in _audio_send_replay_frame()
125 if (audio->ops->transmit(audio, &buf_info->buffer[position], RT_NULL, dst_size) != dst_size) in _audio_send_replay_frame()
139 static rt_err_t _audio_flush_replay_frame(struct rt_audio_device *audio) in _audio_flush_replay_frame() argument
143 if (audio->replay->write_index) in _audio_flush_replay_frame()
145 result = rt_data_queue_push(&audio->replay->queue, in _audio_flush_replay_frame()
146 (const void **)audio->replay->write_data, in _audio_flush_replay_frame()
147 audio->replay->write_index, in _audio_flush_replay_frame()
150 audio->replay->write_index = 0; in _audio_flush_replay_frame()
163 static rt_err_t _aduio_replay_start(struct rt_audio_device *audio) in _aduio_replay_start() argument
167 if (audio->replay->activated != RT_TRUE) in _aduio_replay_start()
170 if (audio->ops->start) in _aduio_replay_start()
171 result = audio->ops->start(audio, AUDIO_STREAM_REPLAY); in _aduio_replay_start()
173 audio->replay->activated = RT_TRUE; in _aduio_replay_start()
190 static rt_err_t _aduio_replay_stop(struct rt_audio_device *audio) in _aduio_replay_stop() argument
194 if (audio->replay->activated == RT_TRUE) in _aduio_replay_stop()
197 _audio_flush_replay_frame(audio); in _aduio_replay_stop()
200 audio->replay->event |= REPLAY_EVT_STOP; in _aduio_replay_stop()
203 rt_completion_init(&audio->replay->cmp); in _aduio_replay_stop()
204 rt_completion_wait(&audio->replay->cmp, RT_WAITING_FOREVER); in _aduio_replay_stop()
205 audio->replay->event &= ~REPLAY_EVT_STOP; in _aduio_replay_stop()
208 if (audio->ops->stop) in _aduio_replay_stop()
209 result = audio->ops->stop(audio, AUDIO_STREAM_REPLAY); in _aduio_replay_stop()
211 audio->replay->activated = RT_FALSE; in _aduio_replay_stop()
225 static rt_err_t _audio_record_start(struct rt_audio_device *audio) in _audio_record_start() argument
229 if (audio->record->activated != RT_TRUE) in _audio_record_start()
232 rt_device_open(RT_DEVICE(&audio->record->pipe), RT_DEVICE_OFLAG_RDONLY); in _audio_record_start()
235 if (audio->ops->start) in _audio_record_start()
236 result = audio->ops->start(audio, AUDIO_STREAM_RECORD); in _audio_record_start()
238 audio->record->activated = RT_TRUE; in _audio_record_start()
252 static rt_err_t _audio_record_stop(struct rt_audio_device *audio) in _audio_record_stop() argument
256 if (audio->record->activated == RT_TRUE) in _audio_record_stop()
259 if (audio->ops->stop) in _audio_record_stop()
260 result = audio->ops->stop(audio, AUDIO_STREAM_RECORD); in _audio_record_stop()
263 rt_device_close(RT_DEVICE(&audio->record->pipe)); in _audio_record_stop()
265 audio->record->activated = RT_FALSE; in _audio_record_stop()
289 struct rt_audio_device *audio; in _audio_dev_init() local
292 audio = (struct rt_audio_device *) dev; in _audio_dev_init()
295 audio->replay = RT_NULL; in _audio_dev_init()
296 audio->record = RT_NULL; in _audio_dev_init()
323 audio->replay = replay; in _audio_dev_init()
350 audio->record = record; in _audio_dev_init()
354 if (audio->ops->init) in _audio_dev_init()
355 audio->ops->init(audio); in _audio_dev_init()
358 if (audio->ops->buffer_info) in _audio_dev_init()
359 audio->ops->buffer_info(audio, &audio->replay->buf_info); in _audio_dev_init()
375 struct rt_audio_device *audio; in _audio_dev_open() local
378 audio = (struct rt_audio_device *) dev; in _audio_dev_open()
392 if (audio->replay->activated != RT_TRUE) in _audio_dev_open()
395 audio->replay->write_index = 0; in _audio_dev_open()
396 audio->replay->read_index = 0; in _audio_dev_open()
397 audio->replay->pos = 0; in _audio_dev_open()
398 audio->replay->event = REPLAY_EVT_NONE; in _audio_dev_open()
406 if (audio->record->activated != RT_TRUE) in _audio_dev_open()
410 _audio_record_start(audio); in _audio_dev_open()
411 audio->record->activated = RT_TRUE; in _audio_dev_open()
428 struct rt_audio_device *audio; in _audio_dev_close() local
430 audio = (struct rt_audio_device *) dev; in _audio_dev_close()
435 _aduio_replay_stop(audio); in _audio_dev_close()
442 _audio_record_stop(audio); in _audio_dev_close()
466 struct rt_audio_device *audio; in _audio_dev_read() local
468 audio = (struct rt_audio_device *) dev; in _audio_dev_read()
470 if (!(dev->open_flag & RT_DEVICE_OFLAG_RDONLY) || (audio->record == RT_NULL)) in _audio_dev_read()
473 return rt_device_read(RT_DEVICE(&audio->record->pipe), pos, buffer, size); in _audio_dev_read()
494 struct rt_audio_device *audio; in _audio_dev_write() local
499 audio = (struct rt_audio_device *) dev; in _audio_dev_write()
501 if (!(dev->open_flag & RT_DEVICE_OFLAG_WRONLY) || (audio->replay == RT_NULL)) in _audio_dev_write()
508 rt_mutex_take(&audio->replay->lock, RT_WAITING_FOREVER); in _audio_dev_write()
512 if (audio->replay->write_index % block_size == 0) in _audio_dev_write()
514 audio->replay->write_data = rt_mp_alloc(audio->replay->mp, RT_WAITING_FOREVER); in _audio_dev_write()
515 rt_memset(audio->replay->write_data, 0, block_size); in _audio_dev_write()
519 remain_bytes = MIN((block_size - audio->replay->write_index), (size - index)); in _audio_dev_write()
520 … rt_memcpy(&audio->replay->write_data[audio->replay->write_index], &ptr[index], remain_bytes); in _audio_dev_write()
523 audio->replay->write_index += remain_bytes; in _audio_dev_write()
524 audio->replay->write_index %= block_size; in _audio_dev_write()
526 if (audio->replay->write_index == 0) in _audio_dev_write()
528 rt_data_queue_push(&audio->replay->queue, in _audio_dev_write()
529 audio->replay->write_data, in _audio_dev_write()
534 rt_mutex_release(&audio->replay->lock); in _audio_dev_write()
537 if (audio->replay->activated != RT_TRUE) in _audio_dev_write()
539 _aduio_replay_start(audio); in _audio_dev_write()
540 audio->replay->activated = RT_TRUE; in _audio_dev_write()
560 struct rt_audio_device *audio; in _audio_dev_control() local
562 audio = (struct rt_audio_device *) dev; in _audio_dev_control()
572 if (audio->ops->getcaps != RT_NULL) in _audio_dev_control()
574 result = audio->ops->getcaps(audio, caps); in _audio_dev_control()
585 if (audio->ops->configure != RT_NULL) in _audio_dev_control()
587 result = audio->ops->configure(audio, caps); in _audio_dev_control()
600 result = _aduio_replay_start(audio); in _audio_dev_control()
604 result = _audio_record_start(audio); in _audio_dev_control()
617 result = _aduio_replay_stop(audio); in _audio_dev_control()
621 result = _audio_record_stop(audio); in _audio_dev_control()
659 rt_err_t rt_audio_register(struct rt_audio_device *audio, const char *name, rt_uint32_t flag, void … in rt_audio_register() argument
664 RT_ASSERT(audio != RT_NULL); in rt_audio_register()
665 device = &(audio->parent); in rt_audio_register()
757 void rt_audio_tx_complete(struct rt_audio_device *audio) in rt_audio_tx_complete() argument
760 _audio_send_replay_frame(audio); in rt_audio_tx_complete()
774 void rt_audio_rx_done(struct rt_audio_device *audio, rt_uint8_t *pbuf, rt_size_t len) in rt_audio_rx_done() argument
777 rt_device_write(RT_DEVICE(&audio->record->pipe), 0, pbuf, len); in rt_audio_rx_done()
780 if (audio->parent.rx_indicate != RT_NULL) in rt_audio_rx_done()
781 audio->parent.rx_indicate(&audio->parent, len); in rt_audio_rx_done()