uint32 DACA_GetFromSD(uint16 *dl_buf)
{
   uint32 I;   
   uint32 fsize = dacaEx.frame_size;
	
	if(SP_IsSpeakerMute()){
		  memset(dl_buf, 0, fsize * sizeof(uint16));
	} else { 
   	volatile uint16* ptr = SAL_PcmEx_GetBuf(SAL_PCMEX_DACA_BUF_DL);
	   *dl_buf = *ptr;   // dummy read
   	for( I = fsize ; I > 0; I-- )
      	*dl_buf++ = *ptr++;
	}
   return fsize;
}
uint32 DACA_GetFromSD(uint16 *dl_buf)
{
    uint32 I;
    uint32 fsize = dacaEx.frame_size;

    if(SP_IsSpeakerMute()) {
        memset(dl_buf, 0, fsize * sizeof(uint16));
    } else {
        volatile int16* ptr = SAL_PcmEx_GetBuf(SAL_PCMEX_DACA_BUF_DL);
        int16 *out_buf = dl_buf;

        int32 gain = AM_DSP_GetSpeechDigitalGain();
        ASSERT(gain > 0 && gain <= 4096);

        for( I = 0 ; I < fsize; I++ ) {
            // tmp = *ptr++;
            //tmp = (tmp * gain) >> 12;
            //*out_buf++ = tmp;
            *out_buf++ = (*ptr++ * gain) >> 12;
        }
    }
    return fsize;
}