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
}
Beispiel #2
0
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;
   }
}