📄 avirecord.c
字号:
if(SecNu != 0)
{
UsedDramAddr = fragmentAddr * 2 + SecNu;
SecNu = 512-SecNu;
L2_DoDRAMDMA(DramDMAaddr*2, UsedDramAddr, SecNu);
M_Card_File_Write(fHandle, K_File_SrcDataDram2Card, 512, fragmentAddr, 0);
if((i%2)==0)
DramDMAaddr = AvlcAddr + SecNu/2;
else
DramDMAaddr = BvlcAddr + SecNu/2;
SecAddr++;
L2_SetDRAMDMA(DramDMAaddr);
}
Compsize = Compsize + 260 - (ULONG)SecNu;
SecCnt = Compsize >> 9;
if(i == 0) //Copy the first frame and reserve a page for AVI header
M_Card_File_Write(fHandle, K_File_SrcDataDram2Card, SecCnt*512, DramDMAaddr, 1);
else
M_Card_File_Write(fHandle, K_File_SrcDataDram2Card, SecCnt*512, DramDMAaddr, 0);
DramDMAaddr = DramDMAaddr + (SecCnt*512)/2;
L2_SetDRAMDMA(DramDMAaddr);
SecAddr += SecCnt;
WriteVidIndex2Dram(MoviOfset, tmp0 , AVIIdxAddr);
AVIIdxAddr += 8;
MoviOfset = MoviOfset + 8 + tmp0;
VidChunkCnt++;
SecNu = Compsize % 512;
if(SecNu != 0)
L2_DoDRAMDMA(DramDMAaddr*2, fragmentAddr*2, SecNu);
// patch5.0@andrew@3a_avi
#if AAA_OPTION
// patch4.2@andrew@0523
// for AE/AWB
if(VidChunkCnt%(4)==1)
L1_AE(0);
if(VidChunkCnt%(8)==1)
{
L1_AWB();
#if DEBUG_COLOR
CMPGrGb(tmp);
if(tmp)
SetGrEqGb();//add for debug
#endif
}
#endif
#if (AVIAUDIO_OPTION == 1)
L2_ReadDRAMAudBufCnt(&DRAMAudBufCnt);// cclin
if(DRAMAudBufCnt>512) //cclin
{
WriteAudID2Dram(fragmentAddr+SecNu/2);
SecNu = SecNu + 8;
if(SecNu>=512)
{
M_Card_File_Write(fHandle, K_File_SrcDataDram2Card, 512, fragmentAddr, 0);
SecAddr++;
SecNu = SecNu - 512;
WriteAudID2Dram(fragmentAddr+SecNu/2-4);
}
if(SecNu != 0) {
if(AudDMACnt == 16)
AudDMACnt=0;
//patch4.4@yichang@change SRAM address begin
//CopyAudio2Sram512(AudioAddr+AudDMACnt*0x100, 0x0A00);
CopyAudio2Sram512(AudioAddr+AudDMACnt*0x100, 0x0C00);
//patch4.4@yichang@change SRAM address end
AudioPageLink(fHandle, fragmentAddr,SecNu);
SecAddr++;
AudDMACnt++;
WriteAudIndex2Dram(MoviOfset, AVIIdxAddr);
AVIIdxAddr += 8;
MoviOfset = MoviOfset + 520;
AudChunkCnt++;
totalChuck++;
if(DRAMAudBufCnt >= 1024)
{
WriteAudID2Dram(fragmentAddr+SecNu/2);
SecNu = SecNu + 8;
if(SecNu >= 512)
{
M_Card_File_Write(fHandle, K_File_SrcDataDram2Card, 512, fragmentAddr, 0);
SecAddr++;
SecNu = SecNu - 512;
WriteAudID2Dram(fragmentAddr+SecNu/2-4);
}
if(SecNu != 0)
{
if(AudDMACnt == 16)
AudDMACnt=0;
//copy 512 bytes audio data to SRAM
//patch4.4@yichang@change SRAM address begin
//CopyAudio2Sram512(AudioAddr+AudDMACnt*0x100, 0x0A00);
CopyAudio2Sram512(AudioAddr+AudDMACnt*0x100, 0x0C00);
//patch4.4@yichang@change SRAM address end
AudioPageLink(fHandle, fragmentAddr,SecNu);
AudDMACnt++;
SecAddr++;
}
else
{
if(AudDMACnt == 16)
AudDMACnt=0;
//patch4.4@yichang@change SRAM address begin
//CopyAudio2Sram512(AudioAddr+AudDMACnt*0x100, 0x0A00);
CopyAudio2Sram512(AudioAddr+AudDMACnt*0x100, 0x0C00);
//patch4.4@yichang@change SRAM address end
L2_SetDRAMDMA(fragmentAddr);
//patch4.4@yichang@change SRAM address begin
//L2_SetSRAMDMA(0x0A00);
L2_SetSRAMDMA(0x0C00);
//patch4.4@yichang@change SRAM address end
L2_DoDMA(1,0,512,0,0);
AudDMACnt++;
M_Card_File_Write(fHandle, K_File_SrcDataDram2Card, 512, fragmentAddr, 0);
SecAddr++;
}
//Add one audio index entry
WriteAudIndex2Dram(MoviOfset, AVIIdxAddr);
AVIIdxAddr += 8;
MoviOfset = MoviOfset + 520;
AudChunkCnt++;
totalChuck++;
} //endif(DRAMAudBufCnt >= 1024)
}
else {
if(AudDMACnt == 16)
AudDMACnt=0;
//copy 512 bytes audio data to SRAM
//patch4.4@yichang@change SRAM address begin
//CopyAudio2Sram512(AudioAddr+AudDMACnt*0x100, 0x0A00);
CopyAudio2Sram512(AudioAddr+AudDMACnt*0x100, 0x0C00);
//patch4.4@yichang@change SRAM address end
L2_SetDRAMDMA(fragmentAddr);
//patch4.4@yichang@change SRAM address begin
//L2_SetSRAMDMA(0x0A00);
L2_SetSRAMDMA(0x0C00);
//patch4.4@yichang@change SRAM address end
L2_DoDMA(1,0,512,0,0);
AudDMACnt++;
M_Card_File_Write(fHandle, K_File_SrcDataDram2Card, 512, fragmentAddr, 0);
SecAddr++;
WriteAudIndex2Dram(MoviOfset, AVIIdxAddr);
AVIIdxAddr += 8;
MoviOfset = MoviOfset + 520;
AudChunkCnt++;
totalChuck++;
if(DRAMAudBufCnt >= 1024)
{
WriteAudID2Dram(fragmentAddr);
SecNu = 8;
if(AudDMACnt == 16)
AudDMACnt=0;
//patch4.4@yichang@change SRAM address begin
//CopyAudio2Sram512(AudioAddr+AudDMACnt*0x100, 0x0A00);
CopyAudio2Sram512(AudioAddr+AudDMACnt*0x100, 0x0C00);
//patch4.4@yichang@change SRAM address end
AudioPageLink(fHandle, fragmentAddr,SecNu);
SecAddr++;
AudDMACnt++;
//Add one audio index entry
WriteAudIndex2Dram(MoviOfset, AVIIdxAddr);
AVIIdxAddr += 8;
MoviOfset = MoviOfset + 520;
AudChunkCnt++;
totalChuck++;
}
}
}
#endif
if((i%2)==0)
L2_ClrVLCRdy(0);
else
L2_ClrVLCRdy(1);
}
//Stop VideoClip
//patch4.4@yichang@OSD, begin
#if (AVIAUDIO_OPTION == 0)
//patch4.3@yichang@0612 for non-audio AVI
L2_ReadGTimer(&dwScale);
//L2_StopGTimer();
#endif
L2_StopGTimer();
//patch4.4@yichang@OSD, end
//Return to the preview mode
L2_ReadDRAMAudBufCnt(&DRAMAudBufCnt);
//printf("DRAMAudBufCnt1=%ld\n",DRAMAudBufCnt);
//patch5.0@richie@sdram mapping
L2_StopAud();
//patch5.0@richie@sdram mapping end
//Write back AVI idx from the SDRAM to the CFA
AVIIdxAddr = AVIHeadAddr+256;
tmp0 = (AudChunkCnt+VidChunkCnt)<<4;
FillDramLong(AVIIdxAddr+2, tmp0);
tmp0 += 8;
MoviSize = (ULONG)(SecAddr<<9) + (ULONG)SecNu -508;
AviSize = (ULONG)(SecAddr<<9) + tmp0 + (ULONG)SecNu -8;
if(SecNu != 0)
{
UsedDramAddr = fragmentAddr * 2 + SecNu;
SecNu = 512-SecNu;
L2_DoDRAMDMA(AVIIdxAddr * 2, UsedDramAddr, SecNu);
M_Card_File_Write(fHandle, K_File_SrcDataDram2Card, 512, fragmentAddr, 0);
SecAddr++;
AVIIdxAddr += (ULONG)SecNu/2;
if((ULONG)SecNu < tmp0)
tmp0 = tmp0 - (ULONG)SecNu;
else
tmp0 = 0;
}
if(tmp0 != 0)
{
SecCnt = tmp0>>9;
if(tmp0%512 != 0) SecCnt++;
M_Card_File_Write(fHandle, K_File_SrcDataDram2Card, SecCnt*512, AVIIdxAddr, 0);
SecAddr += SecCnt;
}
#if (AVIAUDIO_OPTION == 1)
dwRate = VidChunkCnt * 1000;
//dwScale = AudChunkCnt * 128;
//version4.0@yichang@0513 value of dwScale should be filled as follows
dwScale = AudChunkCnt * 1017 / 8; //patch3.2@yichang@For AVI sync on PC
#else
//dwRate = 1000000;
//dwScale = 66667;
//patch4.3@yichang@0612 for non-audio AVI
dwRate = VidChunkCnt * 1000;
#endif
TframeRate = (float)dwRate/(float)dwScale;
tmp0 = 1000000 / TframeRate;
//DbgPrint("dwRate=%ld,dwScale=%ld\n",dwRate,dwScale);
//DbgPrint("VidChunkCnt=%ld,AudChunkCnt=%ld\n",VidChunkCnt,AudChunkCnt);
#if (AVIAUDIO_OPTION == 0)
FillDramLong(AVIHeadAddr+28, 1);
#endif
FillDramLong(AVIHeadAddr+42, VidChunkCnt);
FillDramLong(AVIHeadAddr+70, VidChunkCnt);
FillDramLong(AVIHeadAddr+24, VidChunkCnt);
FillDramLong(AVIHeadAddr+224, AudChunkCnt);
FillDramLong(AVIHeadAddr+36, dwScale);
FillDramLong(AVIHeadAddr+64, dwScale);
FillDramLong(AVIHeadAddr+38, dwRate);
FillDramLong(AVIHeadAddr+66, dwRate);
FillDramLong(AVIHeadAddr+2, AviSize);
FillDramLong(AVIHeadAddr+16, tmp0);
FillDramLong(AVIHeadAddr+252, MoviSize);
//patch5.0@richie@sdram mapping begin
M_Card_LPDram2Card(G_File_HdrLogAddr, G_File_HdrPhyAddr, G_File_HdrLogBlock, AVIHeadAddr);
//Joe@2003.2.25 14:48 add begin
USR_UpdateRtcTime();
//Joe@2003.2.25 14:48 add end
File_Close(1, name, K_DOS_NewFile, AviSize + 8);
L1_InitPreview(1);
L2_WaitVD(0,1); //Wait VD low for one time
L2_SetCamMode(0);
L2_SetCamMode(1); // return to the preview mode
L2_TurnOnOffDisplay(1); //turn on the display device
//Joe@2003.2.21 16:02 add begin
if (G_usZoomX > 100)
//Joe@2003.2.21 16:03 add end
//patch4.3@richie@zo v begin
{
//UCHAR osdNum;
UCHAR osdStr[8];
G_usZoomOSDTimer = 7000;
osdStr[0] = 16;
osdStr[1] = 17;
osdStr[2] = (G_usZoomX / 100) + '0';
osdStr[3] = '.';
osdStr[4] = ((G_usZoomX / 10) % 10) + '0';
osdStr[5] = (G_usZoomX % 10) + '0';
osdStr[6] = 'X';
osdStr[7] = '\0';
UI_PrintOSDString(osdStr, FOSD_H_num/2-3, FOSD_V_num/2, 2);
}
//patch4.3@richie@zo v end
G_CamMode = 0;
//ada@0401 For Multi-Frame Play Back
G_USR_NewFileSizeInFdb = AviSize + 8;
//DbgPrint("Frame Rate=%f\n",TframeRate);
L2_WriteQTable(K_QWriteTable, K_Qxx, NULL);
G_Image_QTableIndex = XBYTE[0x2880];
//patch4.2@andrew@0523
//patch 4.5@andrew@WB_1
AE_START = 1; // run AEAW warm start
VIDEO=0;
// patch5.0@andrew@3a_avi
#if AAA_OPTION
L2_InitAEAW( 0 ); // return to preview AE, initialize again
#endif
//patch4.4@yichang@OSD begin
// UI_PrintOSDString(" ", 0, 2, UI_MENU_HIGHLIGHT_COLOR);
//patch4.4@yichang@OSD end
return L1K_SUCCESS;
//patch5.0@richie@sdram mapping end;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -