Esempio n. 1
0
static void audio_in_get_dsp_frames(struct audio_in *audio)
{
	struct audio_frame *frame;
	uint32_t index;
	unsigned long flags;

		index = audio->in_head;

		/* XXX check for bogus frame size? */

		frame = (void *) (((char *)audio->in[index].data) -
				 sizeof(*frame));
		spin_lock_irqsave(&audio->dsp_lock, flags);
		audio->in[index].size = frame->bytes;

		audio->in_head = (audio->in_head + 1) & (FRAME_NUM - 1);

		/* If overflow, move the tail index foward. */
		if (audio->in_head == audio->in_tail)
			audio->in_tail = (audio->in_tail + 1) & (FRAME_NUM - 1);
		else
			audio->in_count++;

		audio_dsp_read_buffer(audio, audio->dsp_cnt++);
		spin_unlock_irqrestore(&audio->dsp_lock, flags);

		wake_up(&audio->wait);
}
Esempio n. 2
0
void audrec_get_dsp_frames(struct msm_audio *prtd)
{
	struct audio_frame *frame;
	uint32_t index = 0;
	unsigned long flag;

	if (prtd->type == AUDREC_CMD_TYPE_0_INDEX_WAV) {
		index = prtd->in_head;

		frame =
		    (void *)(((char *)prtd->in[index].data) - sizeof(*frame));

		spin_lock_irqsave(&the_locks.read_dsp_lock, flag);
		prtd->in[index].size = frame->bytes;

		prtd->in_head = (prtd->in_head + 1) & (FRAME_NUM - 1);

		/* If overflow, move the tail index foward. */
		if (prtd->in_head == prtd->in_tail)
			prtd->in_tail = (prtd->in_tail + 1) & (FRAME_NUM - 1);
		else
			prtd->in_count++;

		audio_dsp_read_buffer(prtd, prtd->dsp_cnt++);
		spin_unlock_irqrestore(&the_locks.read_dsp_lock, flag);

		wake_up(&the_locks.read_wait);
	} else {
		/* TODO AAC not supported yet. */
	}
}