📄 audiorw.c
字号:
//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 + -