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); }
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. */ } }