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

📄 aviplay.c

📁 台湾凌阳方案300万数码相机源代码
💻 C
📖 第 1 页 / 共 3 页
字号:

								while(((XBYTE[0x2DA0] &	0x04) == 0x04))
								{
										L2_CtrlScreen(1);
								}

								showBG_flag	= 0;
						 }
						 //patch4.4@yichang@for	valid signal end

					  }


					if(MediaType ==	0)
						 MediaType = 2;		//for play 0th chunck of 00dc
			   }
			   else
			   {
					VidDone	= 1;

			   }



		  }//video chuck process



		  if(!AudDone)
		  {
			   L2_ReadGTimer(&VidFrameTime);

			   if((VidFrameTime-playAudTime) >=	100)
			   {

					L2_SetDRAMAudDMACnt(1);
					L2_ReadDRAMAudBufCnt(&AudBufCnt);
					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
	/*
	L2_ConfigGPIOBit(40, 1);
	L2_SetGPIOBit(40, 0);
	*/
L2_SetGPIOBit(40,0);	//AUDIO_CTRL//liliuhai

	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;

	if(type==0||type==2||type==4||type==6)	// 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)	// AU020BL01	//patch5.2.1@lirw@AU020BL01;2005/07/14
		{dsphsize = 640/*502*/;dspvsize =240 /*240*/;	}	//lirw add@0714
	else LCD_status	= 1;

	if ((dsphsize >	hsize) && (dspvsize	> vsize))
	{
//herb for TVoutput debug @03/04/18 start
		if(type >= 8)
		{
			if(type==16)		//patch5.2.1@lirw@AU020BL01;2005/07/14
			{
				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
			{
				//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
			}
		}
		else if(type==0||type==2||type==4||type==6)
		{
			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
	{
		if(type >= 8)
		{
		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);
		}
		else if(type==0||type==2||type==4||type==6)
		{
			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)
		{
		}
//herb for TVoutput debug @03/04/18 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 + -