📄 aviplay1.c
字号:
L2_SetDRAMAudDMACnt(0);
if (((VidFrameTime-playAudTime) >= 110) || (AudBufCnt < 200) )
FeedData = 1;
if (AudBufCnt > 7000)
FeedData = 0;
}
}
}
if( ((FeedData == 1) || (!PlayAudio_Flag)) && (!AudDone) )
{
firstVidblock = 1;
if(PlayAudio_Flag)
{
G_DOS_FileCurrCluster = lastAudCluster;
G_DOS_FileClusterIndex = lastAudFileIdx;
}
if(!PlayAudio_Flag)
{
//yichang@0410 for non-audio AVI
if(G_playObject.mediaType == K_PLAYBACK_TYPE_VIDONLY)
AudDone = 1;
else
{
//Audio playback initial
L2_PlayAud(AudioAddr, 0x03, 0x40, 0x02);
L2_SetEmbAudCodecVol(0x03);
L2_SetDRAMAudDMACnt(0);
AudBufIdx = AudioAddr;
}
PlayAudio_Flag = 1;
//Timer start
L2_ConfigGTimer(5); //up count and timebase 1 ms
L2_WriteGTimer(0);
L2_StartGTimer();
}
//for(i=0;i<4;i++)
for(i=0;i<1;i++)
{
if(AudDone)
break;
NextAudIdx = SearchAVIIndex(AVIIdxAddr, lastAudIdx, ChunkCnt, 1);
lastAudIdx = NextAudIdx;
if(MediaType == 1) //audio chuncks only, scale up audio ICON
{
lastAudIdx = NextAudIdx = 0; //if audio only, 0th idx == 01wb, else 0th is 00dc
G_playObject.mediaType = K_PLAYBACK_TYPE_WAV;
CopyAudioIcon(1);
}
if(NextAudIdx || (MediaType == 1)) //if audio only, 0th chunck == 01wb
{
L1_PBAudioChunck(AVIIdxAddr,AudBufIdx,fHandle, NextAudIdx);
AudBufIdx = AudBufIdx+256;
if(AudBufIdx == (AudioAddr + 4096))
AudBufIdx = AudioAddr;
if(MediaType == 1)
MediaType = 3;//avoid re-enter last if(MediaType == 1)
}
else
{
AudDone = 1;
}
}
L2_ReadGTimer(&VidFrameTime);
playAudTime = VidFrameTime;
FeedData = 0;
lastAudCluster = G_DOS_FileCurrCluster;
lastAudFileIdx = G_DOS_FileClusterIndex;
} //end if
} //end while
L2_StopGTimer();
File_Close(fHandle, name, K_DOS_ReadFile, 0);
L2_SetDRAMAudDMACnt(1);
do
{
L2_ReadDRAMAudBufCnt(&AudBufCnt);
}
while (AudBufCnt > 0);
L2_SetDRAMAudDMACnt(0);
L2_StopAud();
G_playObject.mediaType = K_PLAYBACK_TYPE_AVI;
L2_WriteQTable(K_QWriteTable, K_Qxx, NULL);
G_Image_QTableIndex = XBYTE[0x2880];
//DbgPrint("End Play Video\n");
//yichang@0626 test
//Davis:patch5.0.0.3_2005/Jun/30 L2_ConfigGPIOBit(40, 1);
//Davis:patch5.0.0.3_2005/Jun/30 L2_SetGPIOBit(40, 0);
return L1K_SUCCESS;
}
//patch5.0@richie@avi window begin
//-----------------------------------------------------------------------------
//L1_SetAviDisplaySrcImgSize
//-----------------------------------------------------------------------------
// return value
// 0: no error
// 1: parameter error
UCHAR L1_SetAviDisplaySrcImgSize(USHORT hsize, USHORT vsize, UCHAR type) USING_0
{
UCHAR imghzfac, imgvzfac;
USHORT imggrp, dsphsize, dspvsize;
UCHAR LCD_status = 0;
//UCHAR tmp;
//patch4.4@richie@tv begin
//adjust for lcdtv start point
UCHAR tmp1,tmp2;
USHORT lcdtvX0,lcdtvY0;
USHORT lcdtvX1,lcdtvY1;
tmp1 = XBYTE[0x2D09];
tmp2 = XBYTE[0x2D08];
lcdtvX0 = ( ((USHORT)tmp1 << 8) | ((USHORT)tmp2) );
tmp1 = XBYTE[0x2D0B];
tmp2 = XBYTE[0x2D0A];
lcdtvY0 = ( ((USHORT)tmp1 << 8) | ((USHORT)tmp2) );
tmp1 = XBYTE[0x2D0D];
tmp2 = XBYTE[0x2D0C];
lcdtvX1 = ( ((USHORT)tmp1 << 8) | ((USHORT)tmp2) );
tmp1 = XBYTE[0x2D0F];
tmp2 = XBYTE[0x2D0E];
lcdtvY1 = ( ((USHORT)tmp1 << 8) | ((USHORT)tmp2) );
//printf("L2 lcdtv = (%d,%d) (%d,%d)\n",lcdtvX0,lcdtvY0,lcdtvX1,lcdtvY1);
//printf("L2 width = %d,height = %d\n",(lcdtvX1 - lcdtvX0 + 1),(lcdtvY1 - lcdtvY0 + 1));
//patch4.4@richie@tv end
// tmp = MemStretch;
// MemStretch = 0x01;
if(hsize%16==0) imggrp = (hsize >> 4);
else imggrp = (hsize >> 4) + 1;
//patch5.2.1@cwh@Toppoly TC015TREB1; add G_DisplayType == 17 option
if(type==0||type==2||type==4||type==6||type==17) // NTSC display size
//patch4.3@yichang@0612 to fit TV screen
{
//patch4.4@richie@tv begin
//dsphsize = 640;dspvsize = 216;
dsphsize = (lcdtvX1 - lcdtvX0 + 1);
//patch4.4@yichang@tv begin
dspvsize = (lcdtvY1 - lcdtvY0 + 1);
if((G_DSPVsize/dspvsize) != 2)
{
G_DSPVsize = 2 * dspvsize;
vsize = G_DSPVsize;
}
//patch4.4@yichang@tv end
//patch4.4@richie@tv end
}
//{dsphsize = 720;dspvsize = 240;}
//{dsphsize = 800;dspvsize = 600;}
else if(type==1||type==3||type==5||type==7) // PAL display size
{
//patch4.4@richie@tv begin
//dsphsize = 720;dspvsize = 288;
dsphsize = (lcdtvX1 - lcdtvX0 + 1);
//patch4.4@yichang@tv begin
dspvsize = (lcdtvY1 - lcdtvY0 + 1);
if((G_DSPVsize/dspvsize) != 2)
{
G_DSPVsize = 2 * dspvsize;
vsize = G_DSPVsize;
}
//patch4.4@yichang@tv end
//patch4.4@richie@tv end
}
else if(type==8) // UPS051
{dsphsize = 288;dspvsize = 220;}
else if(type==9) // EPSON LCD panel
{dsphsize = 312;dspvsize = 230;}
else if(type==10) // CASIO LCD panel
{dsphsize = 356;dspvsize = 240;}
else if(type==11) // GiantPlus STN LCD panel
{dsphsize = 240;dspvsize = 160;}
else if(type==12) // PrimeView TFT LCD panel
{dsphsize = 640;dspvsize = 480;}
else if(type==13) // AU015AN02
{dsphsize = 312;dspvsize = 220;}
else if(type==14) // STNLCD160
//patch4.2@richie@0523
{dsphsize = 161;dspvsize = 120;}
else if(type==15) // PrimeView TFT LCD panel
{dsphsize = 800;dspvsize = 600;}
else if(type==16) // AU015BL01 //patch5.2.1@cwh@AU015BL01;2003/08/08
{dsphsize = 520;dspvsize = 250;}
// patch 5.2.1_28@mattwang@rename CASIO2G to CASIO2G1181 beg
else if(type==18) // Casio2G1181 //patch5.2.1@cwh@CASIO2G;2003/09/24
{dsphsize = 480;dspvsize = 240;}
// patch 5.2.1_28@mattwang@rename CASIO2G to CASIO2G1181 end
// patch 5.2.1_28@mattwang@add CASIO2G1163 LCD pannel beg
else if(type==19) // Casio2G1163
{dsphsize = 280;dspvsize = 220;}
// patch 5.2.1_28@mattwang@add CASIO2G1163 LCD pannel end
// patch 5.2.1_30@mattwang@add STNLCD128 LCD pannel beg
else if(type==20) // STNLCD128
{dsphsize = 128;dspvsize = 128;}
// patch 5.2.1_30@mattwang@add STNLCD128 LCD pannel end
// patch 5.2.1_33@mattwang@add AU015AN04 LCD pannel beg
else if(type==21) // AU015AN04
{dsphsize = 340;dspvsize = 220;}
// patch 5.2.1_33@mattwang@add AU015AN04 LCD pannel end
else LCD_status = 1;
/*
printf("dsphsize=%x\n",dsphsize);
printf("dspvsize=%x\n",dspvsize);
printf("hsize=%x\n",hsize);
printf("vsize=%x\n",vsize);
*/
if ((dsphsize > hsize) && (dspvsize > vsize))
{
//patch5.2.1@richie@tv avi begin
//patch5.2.1@cwh@Toppoly TC015TREB1; add G_DisplayType == 17 option
if((type >= 8) && (type!=17))
{
if(type==16) //patch5.2.1@cwh@AU015BL01;2003/08/08
{
XBYTE[0x2D19] = 0x20;
XBYTE[0x2D1A] = 0x51;
XBYTE[0x2D1B] = 0x00;
XBYTE[0x2D1C] = 0x00;
XBYTE[0x2D1D] = 0x00;
XBYTE[0x2D1E] = 0x00;
XBYTE[0x2D1F] = 0x14;
L2_SetOSDSelWindow(0, 0, 520, 240, 10);
}
else if(type==18) //patch5.2.1@cwh@CASIO2G;2003/09/24
{
XBYTE[0x2D19] = 0x1f;
XBYTE[0x2D1A] = 0x55;
XBYTE[0x2D1B] = 0x00;
XBYTE[0x2D1C] = 0x00;
XBYTE[0x2D1D] = 0x00;
XBYTE[0x2D1E] = 0x00;
XBYTE[0x2D1F] = 0x14;
L2_SetOSDSelWindow(0, 0, 480, 240, 10);
}
// patch 5.2.1_28@mattwang@add CASIO2G1163 LCD pannel beg
else if(type==19)
{
XBYTE[0x2D19] = 0x1f;
XBYTE[0x2D1A] = 0x55;
XBYTE[0x2D1B] = 0x00;
XBYTE[0x2D1C] = 0x00;
XBYTE[0x2D1D] = 0x00;
XBYTE[0x2D1E] = 0x00;
XBYTE[0x2D1F] = 0x14;
L2_SetOSDSelWindow(0, 0, 480, 240, 10);
}
// patch 5.2.1_28@mattwang@add CASIO2G1163 LCD pannel end
else
{
//set
XBYTE[0x2D19] = 0x20;
XBYTE[0x2D1A] = 0x80;
XBYTE[0x2D1B] = 0x00;
XBYTE[0x2D1C] = 0x00;
XBYTE[0x2D1D] = 0x00;
XBYTE[0x2D1E] = 0x00;
XBYTE[0x2D1F] = 0x14;
L2_SetOSDSelWindow((dsphsize - hsize) / 2,
(dspvsize - vsize) / 2,
(dsphsize - hsize) / 2 + hsize - 1,
//patch5.1@ada@cut the error row at the bottom while playing 192 x 144 AVI begin
//(dspvsize - vsize) / 2 + vsize - 1, 10);
(dspvsize - vsize) / 2 + vsize - 2, 10);
//patch5.1@ada@cut the error row at the bottom while playing 192 x 144 AVI end
}
}
//patch5.2.1@cwh@Toppoly TC015TREB1; add G_DisplayType == 17 option
else if(type==0||type==2||type==4||type==6||type==17)
{
if((hsize==320)&&(vsize==240))
{
imgvzfac = ((ULONG)vsize*32)/dspvsize;
imghzfac = ((ULONG)hsize*128)/dsphsize;
XBYTE[0x2D19] = imgvzfac-1;
XBYTE[0x2D1A] = imghzfac;
XBYTE[0x2D1F] = imggrp;
}
else
{
XBYTE[0x2D19] = 0x1a;
XBYTE[0x2D1A] = 0x2a;
XBYTE[0x2D1B] = 0x00;
XBYTE[0x2D1C] = 0x00;
XBYTE[0x2D1D] = 0x00;
XBYTE[0x2D1E] = 0x00;
XBYTE[0x2D1F] = 0x14;
L2_SetOSDSelWindow((dsphsize - hsize*3) / 2,
(dspvsize - vsize*1.2) / 2,
(dsphsize - hsize*3) / 2 + hsize*3 - 1,
(dspvsize - vsize*1.2) / 2 + vsize*1.2 - 2, 10);
}
}
else if(type==1||type==3||type==5||type==7)
{
if((hsize==320)&&(vsize==240))
{
imgvzfac = ((ULONG)vsize*32)/dspvsize;
imghzfac = ((ULONG)hsize*128)/dsphsize;
XBYTE[0x2D19] = imgvzfac;
XBYTE[0x2D1A] = imghzfac;
XBYTE[0x2D1F] = imggrp;
}
else
{
XBYTE[0x2D19] = 0x15;
XBYTE[0x2D1A] = 0x2a;
XBYTE[0x2D1B] = 0x00;
XBYTE[0x2D1C] = 0x00;
XBYTE[0x2D1D] = 0x00;
XBYTE[0x2D1E] = 0x00;
XBYTE[0x2D1F] = 0x14;
L2_SetOSDSelWindow((dsphsize - hsize*3) / 2,
(dspvsize - vsize*1.5) / 2,
(dsphsize - hsize*3) / 2 + hsize*3 - 1,
(dspvsize - vsize*1.5) / 2 + vsize*1.5 - 2, 10);
}
}
}
else
{
//patch5.2.1@cwh@Toppoly TC015TREB1; add G_DisplayType == 17 option
if((type >= 8) && (type!=17))
{
imgvzfac = ((ULONG)vsize*32)/dspvsize;
imghzfac = ((ULONG)hsize*128)/dsphsize;
//printf("hsizec=%d, vsize=%d\n",hsize,vsize);
//printf("dsphsize=%d, dspvsize=%d\n",dsphsize,dspvsize);
//printf("imghzfac=%bx, imgvzfac=%bx\n",imghzfac,imgvzfac);
XBYTE[0x2D19] = imgvzfac;
XBYTE[0x2D1A] = imghzfac;
XBYTE[0x2D1F] = imggrp;
L2_SetOSDSelWindow(0,
0,
dsphsize - 1,
dspvsize - 1, 10);
}
//patch5.2.1@cwh@Toppoly TC015TREB1; add G_DisplayType == 17 option
else if(type==0||type==2||type==4||type==6||type==17)
{
imgvzfac = ((ULONG)vsize*32)/dspvsize;
imghzfac = ((ULONG)hsize*128)/dsphsize;
XBYTE[0x2D19] = imgvzfac-1;
XBYTE[0x2D1A] = imghzfac;
XBYTE[0x2D1F] = imggrp;
}
else if(type==1||type==3||type==5||type==7)
{
}
//patch5.2.1@richie@tv avi end
}
//MemStretch = tmp;
return(LCD_status);
}
//patch5.0@richie@avi window end
//~patch3.2@yichang@0401 AVI playback on demo kit (re-write)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -