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

📄 avirecord.c

📁 dz3000_51.0.0.4.rar
💻 C
📖 第 1 页 / 共 3 页
字号:
        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 + -