📄 aavilib.c
字号:
//=============================================================================
//Header file
//=============================================================================
// WWW1 start
#include "general.h"
#if ( K_File_HaveVideo == 1 )
#if ( AUDIO_OPTION == 1 )
#include "cardimpt.h"
#include "cardlink.h"
#include "libfunc.h"
#include "libvar.h"
// WWW1 end
//=============================================================================
//Symbol
//=============================================================================
//-----------------------------------------------------------------------------
//Constant
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//Variable
//-----------------------------------------------------------------------------
idata ULONG G_File_AudioSize = 0;
xdata ULONG G_File_SDRAM_AudioBufAddr;
//-------------------------------------
//File_AviAudioSetHeader
//-------------------------------------
ULONG File_AviAudioSetHeader(void) USING_0
{
ULONG size;
USHORT remSize;
USHORT jnkSize;
//total size (BYTE)
size = G_File_AudioSize << 1;
//SizeField = audio sample total size
File_AviAudioSetChunk(size - 0x0008);
//JUNK size (BYTE)
remSize = K_Card_PageSize - (WORD) (size % K_Card_PageSize);
if (remSize < 0x0008)
{
jnkSize = remSize + K_Card_PageSize;
size += jnkSize;
jnkSize -= 0x0008;
}
else
{
jnkSize = remSize - 0x0008;
size += remSize;
}
//SizeField = JUNK size
File_AviAudioSetJunk(jnkSize);
return (size);
}
//-------------------------------------
//File_AviAudioSetJunk
//-------------------------------------
void File_AviAudioSetJunk(USHORT size) USING_0
{
//Id = "JUNK"
G_ucStorData[0] = 'J';
G_ucStorData[1] = 'U';
G_ucStorData[2] = 'N';
G_ucStorData[3] = 'K';
//Size
G_ucStorData[4] = size;
G_ucStorData[5] = size >> 8;
G_ucStorData[6] = 0x00;
G_ucStorData[7] = 0x00;
#if 0 //don't care JUNK data
//Data (0) of junk chunk
for (i = 0; i < size; i += 1)
G_ucStorData[8+i] = 0x00;
#endif
SDRAM_Sram2Dram(G_ucStorData, G_File_SDRAM_AudioBufAddr + G_File_AudioSize, 8);
}
//-------------------------------------
//File_AviAudioSetChunk
//-------------------------------------
void File_AviAudioSetChunk(ULONG size) USING_0
{
//Id = "01wb"
G_ucStorData[0] = '0';
G_ucStorData[1] = '1';
G_ucStorData[2] = 'w';
G_ucStorData[3] = 'b';
//Size
G_ucStorData[4] = size;
G_ucStorData[5] = size >> 8;
G_ucStorData[6] = size >> 16;
G_ucStorData[7] = size >> 24;
SDRAM_Sram2Dram(G_ucStorData, G_File_SDRAM_AudioBufAddr, 8);
}
//-----------------------------------------------------------------------------
//File_AviAudioWriteData
//-----------------------------------------------------------------------------
BYTE File_AviAudioWriteData(ULONG size) USING_0
{
UCHAR sts = TRUE;
size = ( (size+K_Card_PageSize-1) >> K_Card_PageSizeShift ) << K_Card_PageSizeShift;
L2_DRAMSetStartAddr(G_File_SDRAM_AudioBufAddr, K_SDRAM_Prefetch);
M_Card_File_Write(1, K_File_SrcDataDram2Card,size,G_File_SDRAM_AudioBufAddr,0);
return TRUE;
}
//-------------------------------------
//File_AviAudioSetIndex
//-------------------------------------
void File_AviAudioSetIndex(ULONG size) USING_0
{
ULONG ramAddr;
//ckid = "01wb"
G_ucStorData[0] = '0';
G_ucStorData[1] = '1';
G_ucStorData[2] = 'w';
G_ucStorData[3] = 'b';
//dwFlags = AVIIF_KEYFRAME
G_ucStorData[4] = 0x10;
G_ucStorData[5] = 0x00;
G_ucStorData[6] = 0x00;
G_ucStorData[7] = 0x00;
//dwChunkOffset
G_ucStorData[8] = G_File_AviTotalSize;
G_ucStorData[9] = G_File_AviTotalSize >> 8;
G_ucStorData[10] = G_File_AviTotalSize >> 16;
G_ucStorData[11] = G_File_AviTotalSize >> 24;
//dwChunkLength
G_ucStorData[12] = size;
G_ucStorData[13] = size >> 8;
G_ucStorData[14] = size >> 16;
G_ucStorData[15] = size >> 24;
ramAddr = G_File_SDRAM_AviIdx1BufAddr+(((8 + G_File_AviVideoChunkCount) * 16) >> 1); // WWWW1
SDRAM_Sram2Dram(G_ucStorData, ramAddr, 16);
}
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -