static void wavReadFromFC( int16 *buf, kal_uint32 msgData ) { int32 I, count; uint16 *pSrc; SAS_RecPcmRequestReadUlData_t *pcmBufPar = (SAS_RecPcmRequestReadUlData_t *)msgData; ASSERT( pcmBufPar->u4Len == 320 || pcmBufPar->u4Len == 640 ); if ( pcmBufPar->u4Wb == 1 ){ count = 320; } else { count = 160; } #if defined(__DUAL_MIC_SUPPORT__) && defined(__HQA_AUDIO__) if(wav.ctrl->is_stereo){ //need interleave pSrc = (uint16 *)pcmBufPar->pucBufPtr; for( I = 0 ; I < count ; I++ ) buf[I*2] = *pSrc++; //need interleave pSrc = (uint16 *)pcmBufPar->pucNxtStrPtr; for( I = 0 ; I < count ; I++ ) buf[I*2+1] = *pSrc++; buf += (uint32)count * 2; } else { pSrc = (uint16 *)pcmBufPar->pucBufPtr; for (I = count; I>0; I--) *buf++ = *pSrc++; } #else pSrc = (uint16 *)pcmBufPar->pucBufPtr; #if defined(TEMP_SOLUTION_FOR_WB_SPEECH_RECORD_NB_PCM) if( wav.dedicated_mode && pcmBufPar->u4Wb == 1 ){ count = 160; for ( I = 0 ; I < count ; I++ ) *buf++ = pSrc[I*2]; } else #endif #if !(defined(MED_MODEM) || defined(MED_NOT_PRESENT) || defined(__SMART_PHONE_MODEM__)) if(Media_IsRecordSilence()) { for (I = count; I>0; I--) { *buf++ = 0; } } else #endif { for (I = count; I>0; I--) { *buf++ = *pSrc++; } } #endif }
static void pcmReadFromDSP( void ) { #if defined(MT6260) #ifndef UPPER_BOUND #define UPPER_BOUND(in,up) ((in) > (up) ? (up) : (in)) #endif kal_uint16 *rb_addr, *rb_end; kal_int32 write_count = 0; kal_int32 count = mediaGetFreeSpace(); kal_int32 I = (kal_int32)Pseudo_SAL_PcmEx_GetBufLen(PSEUDO_SAL_PCMEX_BUF_IDLE_SE);; count = UPPER_BOUND(count, I); if (count == 0) { return; } rb_end = &pcm.ctrl->rb_base[pcm.ctrl->rb_size]; rb_addr = &pcm.ctrl->rb_base[pcm.ctrl->write]; if (Media_IsRecordSilence()) { for (I = 0; I < count; I++) { if (pcm.PutSample(&rb_addr, 0)) { write_count++; if (rb_addr == rb_end) { rb_addr = &pcm.ctrl->rb_base[0]; } } } } else #ifdef L1AUDIO_IDMA_ALL_ADDRESS_MODE { volatile kal_uint16 *dspAddr = Pseudo_SAL_PcmEx_GetBuf(PSEUDO_SAL_PCMEX_BUF_SE); for (I = 0; I < count; I++) { if( pcm.PutSample( &rb_addr, *dspAddr++ ) ) { write_count++; if( rb_addr == rb_end ) { rb_addr = &pcm.ctrl->rb_base[0]; } } } } #else { volatile kal_uint16 *dspAddr = Pseudo_SAL_PcmEx_GetBuf(PSEUDO_SAL_PCMEX_BUF_SE); kal_uint16 dummy = *dspAddr; for (I = 0; I < count; I++) { if (pcm.PutSample(&rb_addr, *IDMA_SHORT_ADDR)) { write_count++; if (rb_addr == rb_end) { rb_addr = &pcm.ctrl->rb_base[0]; } } } } #endif #else // chip compile option #ifdef L1AUDIO_IDMA_ALL_ADDRESS_MODE volatile kal_uint16* idmaPtr; #endif kal_int32 I, count, write_count = 0; kal_uint16 *rb_addr, *rb_end, ptr_addr; count = mediaGetFreeSpace(); if ( pcm.ctrl->format == MEDIA_FORMAT_PCM_16K ) I = DSP_PCM_16K_REC_LEN; else I = (kal_int32)(*DSP_PCM_REC_LEN); if( I < count ) count = I; if( count == 0 ) return; rb_end = &pcm.ctrl->rb_base[pcm.ctrl->rb_size]; rb_addr = &pcm.ctrl->rb_base[pcm.ctrl->write]; if(Media_IsRecordSilence()) { for( I = 0; I < count; I++ ) { if( pcm.PutSample( &rb_addr, 0 ) ) { write_count++; if( rb_addr == rb_end ) { rb_addr = &pcm.ctrl->rb_base[0]; } } } } else #ifdef L1AUDIO_IDMA_ALL_ADDRESS_MODE { if ( pcm.ctrl->format == MEDIA_FORMAT_PCM_16K ) { ptr_addr = *DSP2_DM_ADDR(PAGE_NUM, DSP_PCM_16K_REC_PTR); idmaPtr=DSP2_DM_ADDR(PAGE_NUM, ptr_addr); } else { idmaPtr=DSP_DM_ADDR(PAGE_NUM, *DSP_PCM_REC_ADDR); } for( I = 0; I < count; I++ ) { if( pcm.PutSample( &rb_addr, *idmaPtr++ ) ) { write_count++; if( rb_addr == rb_end ) { rb_addr = &pcm.ctrl->rb_base[0]; } } } } #else// L1AUDIO_IDMA_ALL_ADDRESS_MODE { kal_uint16 dummy; if ( pcm.ctrl->format == MEDIA_FORMAT_PCM_16K ) { ptr_addr = *DSP2_DM_ADDR(PAGE_NUM, DSP_PCM_16K_REC_PTR); dummy = *DSP2_DM_ADDR(PAGE_NUM, ptr_addr); } else { dummy = *DSP_DM_ADDR(PAGE_NUM, *DSP_PCM_REC_ADDR); } for( I = 0; I < count; I++ ) { if( pcm.PutSample( &rb_addr, *IDMA_SHORT_ADDR ) ) { write_count++; if( rb_addr == rb_end ) { rb_addr = &pcm.ctrl->rb_base[0]; } } } } #endif #endif // chip compile option pcm.MIC1_framesize = write_count; pcm.ctrl->write += write_count; if( pcm.ctrl->write >= pcm.ctrl->rb_size ) { pcm.ctrl->write -= pcm.ctrl->rb_size; } }