⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 audiorw.c

📁 台湾凌阳方案300万数码相机源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
//RecordWave()
//-----------------------------------------------------------------------------
//patch3.2@yichang@0401 for audio record
UCHAR RecordWave() USING_0
{

  USHORT i;
  ULONG  SecAddr;
  USHORT SecNu;
  ULONG  AudChunkCnt;
  BYTE   name[12];
  BYTE   sts;
  USHORT freeCluster;
  USHORT usedCluster;
  USHORT fHandle;
  ULONG  fragmentAddr;
  UCHAR  AudDMACnt;
  ULONG  usedSize;
  ULONG  UsedDramAddr;//patch3.2@yichang@0401 for audio record
  ULONG  DRAMAudBufCnt;
  WORD   headerSize;
  WORD   dataSizeOffset;
  BYTE   *pHeader;
  ULONG  audioSize;
  ULONG  AudioAddr;
  ULONG  AVIHeadAddr;
  //patch4.4@yichang@OSD, begin
  ULONG time;
  //patch4.4@yichang@OSD, end

//patch5.0@richie@sdram mapping begin
	L2_SetCamMode(0);

//Joe@2003.3.21 20:25 add begin
	UI_ClearFOSD(25, 8, 0x00);
	UI_PreviewStatusOSD();
//Joe@2003.3.21 20:25 add end

	L2_SetCamMode(5);      // return to the preview mode
/*
	L2_SetDisplayMode(0x00, 0x10);
//patch5.0@richie@avi size begin
	L2_SetBFBSize(G_usVideoClip_Width,G_usVideoClip_Height);
	L2_SetDisplaySrcImgSize(G_usVideoClip_Width,G_usVideoClip_Height,G_DisplayType);
	L2_CopyImage(K_SDRAM_GrafFontBufAddr, K_GRAFFONT_Width, K_GRAFFONT_Height, 0, 30, 100, 72, K_SDRAM_AviPvwBufAddrA, 100, 72, 0, 0);
	L2_ScaleUpImage(K_SDRAM_AviPvwBufAddrA, 100, 72, K_SDRAM_AviPvwBufAddrA, G_usVideoClip_Width, G_usVideoClip_Height, K_SDRAM_AviPvwBufAddrB);
	L2_SetBFBAddr(K_SDRAM_AviPvwBufAddrA);
//patch5.0@richie@avi size end
//*/
  DRAMAudBufCnt = 0;
  AudDMACnt = 0;
  AudChunkCnt = 0;
  fragmentAddr = K_SDRAM_AviCapFragBufAddr;
  AudioAddr = K_SDRAM_AviCapAudioBufAddr;
  AVIHeadAddr = K_SDRAM_AviCapHeaderBufAddr;
//patch5.0@richie@sdram mapping end

  /*
  printf("K_SDRAM_JPG_FdbParameterBufAddr=%lx\n",K_SDRAM_JPG_FdbParameterBufAddr);
  printf("fragmentAddr=%lx\n",fragmentAddr);
  printf("AudioAddr=%lx\n",AudioAddr);
  printf("AVIHeadAddr=%lx\n",AVIHeadAddr);
  */
  USR_SetWaveName(name, G_USR_FileIndex);



  freeCluster = DOS_GetDiskSpace();
  sts = FALSE;

  usedCluster = 1 + ((ULONG)700L*1024L)/(ULONG)G_DOS_ClusterSize;

  if (freeCluster > usedCluster)
  {
     freeCluster -= usedCluster;
     usedCluster = (500L*1024L)/G_DOS_ClusterSize;//500L*1024L
     if (usedCluster <= freeCluster)
          sts = TRUE;
  }
  if ( sts == FALSE )
  {
     //M_DOS_SetError(K_DOS_DiskFullErr);

     //Joe@2003.3.3 19:45 add begin
     UI_ShowMemoryFull();
	 UI_Buzzer();
     //Joe@2003.3.3 19:45 add end
//Davis:patch3.1 close     L1_InitPreview(1);

     return 1;//1FALSE;
  }


  fHandle = File_Open(0,K_DOS_NewFile,freeCluster);
  if ( fHandle == 0 )
     return 1;//FALSE;

  /*
  else
  {
     G_USR_FileIndex++;
     G_USR_FileCount++;
  }
  */
  SecAddr = 1;    // 512 byte is reserved for AVI header

  L2_StopAud();
/*
#ifdef ICM107B
  	XBYTE[0x21ac] = 0; 			// disable color saturation boost
#endif

  L2_InitSDRAM(3);
*/
  DbgPrint("Start to record audio\n");
  headerSize = sizeof(G_IMA_WAVE_Header);

  dataSizeOffset = 0x38;
  pHeader = &G_IMA_WAVE_Header[0];


  L2_RecordAud(AudioAddr, 0x03, 0x62);
  L2_SetDRAMAudDMACnt(0); // disable DRAMAuddMACnt

  G_CamMode = 3;

  SecNu = headerSize; //WAV Header

  for(i=0;i<headerSize;i++)
     XBYTE[0x1C00+i] = G_IMA_WAVE_Header[i];

  L2_SetDRAMDMA(AVIHeadAddr);
  L2_SetSRAMDMA(0x0C00);
  L2_DoDMA(1,0,headerSize,0,0);

  SecAddr = 0;

  //patch4.4@yichang@OSD begin
  L2_ConfigGTimer(5); //up count and timebase 1 ms
  L2_WriteGTimer(0);
  L2_StartGTimer();
  UI_PrintOSDString("      ", 0, 0, 0x00);
  //patch4.4@yichang@OSD end

//patch3.2@yichang@0401 for audio record
  while(1)
  {

     //patch4.4@yichang@OSD, begin
     L2_ReadGTimer(&time);
     UI_UpdateFOSDTime(0,0,UI_MENU_DEHIGHLIGHT_COLOR,time);
     //patch4.4@yichang@OSD, end
	 // 	     UI_PowerOnOffDetect(0);//wendy@2004/9/9

     UI_Keypad_Scan();
 	//Davis:patch2.01
	if(G_KeyState == K_UI_BUTTON_SNAP2)

     {
     		//davis2004/11/26 add----------------------------
     		if (G_SensorPowerOnOff == 0)
		  {
		  	UI_SensorPowerOnOff(1);
		  	DELAY_100ms();//davis2004/11/4
		  	XBYTE[0x2080] = 0x01; //power on TGPLL
		  	L2_InitFront(0);
		  	L2_InitAEAW(0);
		  }
		//---------------------------
	//Joe@2003.3.4 20:04 add begin
	UI_Buzzer();
	//Joe@2003.3.4 20:05 add end
	break;
     }

     usedSize = (SecAddr + 1) * 512 + G_DOS_ClusterSize;
     usedCluster = usedSize / G_DOS_ClusterSize;

     if(usedCluster > freeCluster)
     {
          //DbgPrint("usedCluster=%d\n",usedCluster);

          //Joe@2003.3.3 19:46 add begin
          UI_ShowMemoryFull();
          //Joe@2003.3.3 19:46 add end
          break;
     }

     L2_ReadDRAMAudBufCnt(&DRAMAudBufCnt);

     if(DRAMAudBufCnt > 512)
     {

      UsedDramAddr = fragmentAddr + SecNu/2;
      SecNu = 512-SecNu;

      if(AudDMACnt == 16)
      	AudDMACnt=0;

      L2_SetDRAMDMA(AudioAddr+AudDMACnt*0x100);
      L2_SetSRAMDMA(0x0C00);
      L2_SetDRAMAudDMACnt(1); // Enable DRAMAuddMACnt
      L2_DoDMA(0,1,512,0,0);
      L2_SetDRAMAudDMACnt(0);

      if(SecAddr == 0)
      {

          L2_SetDRAMDMA(AVIHeadAddr+headerSize/2);
          L2_SetSRAMDMA(0x0C00);
          L2_DoDMA(1,0,SecNu,0,0);

      }
      else
      {
          L2_SetDRAMDMA(UsedDramAddr);
          L2_SetSRAMDMA(0x0C00);
          L2_DoDMA(1,0,SecNu,0,0);

      }

      if(SecAddr)
      {
          if(SecAddr == 1)
               M_Card_File_Write(fHandle, K_File_SrcDataDram2Card, 512, fragmentAddr, 1);
          else
               M_Card_File_Write(fHandle, K_File_SrcDataDram2Card, 512, fragmentAddr, 0);

          //patch4.5@yichang@fix a bug of audio recording begin
          AudChunkCnt++;
          //patch4.5@yichang@fix a bug of audio recording end
      }

      SecAddr++;

      UsedDramAddr = 0x0C00+SecNu;
      SecNu = 512-SecNu;
      L2_SetSRAMDMA(UsedDramAddr);
      L2_SetDRAMDMA(fragmentAddr);
      L2_DoDMA(1,0,SecNu,0,0);
      AudDMACnt++;

      //patch4.5@yichang@fix a bug of audio recording begin
      //AudChunkCnt++;
      //patch4.5@yichang@fix a bug of audio recording end

     }//end audio > 512

  }
  //~patch3.2@yichang@0401 for audio record

  G_CamMode = 0;
  L2_StopAud();
  //patch4.4@yichang@OSD begin
  L2_StopGTimer();
  //patch4.4@yichang@OSD end

  audioSize = AudChunkCnt*512;
  FillDramLong(AVIHeadAddr+dataSizeOffset/2, audioSize);
  audioSize += ( headerSize - 8 );
  FillDramLong(AVIHeadAddr+2, audioSize);


  M_Card_LPDram2Card(G_File_HdrLogAddr, G_File_HdrPhyAddr, G_File_HdrLogBlock, AVIHeadAddr);
  File_Close(1, name, K_DOS_NewFile, audioSize + 8);
  G_USR_NewFileSizeInFdb = audioSize + 8;


//patch5.0@richie@sdram mapping begin
//L2_SetCamMode(0);
//L2_SetCamMode(1);      // return to the preview mode
L1_InitPreview(1);
//patch5.0@richie@sdram mapping end

  //DbgPrint("Total AudioChunck=%ld\n",AudChunkCnt);
  //DbgPrint("End record audio\n");
  return L1K_SUCCESS;


}


#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -