整理一些格式
This commit is contained in:
		@@ -1,369 +1,359 @@
 | 
				
			|||||||
 | 
					#include "avi.h"
 | 
				
			||||||
 | 
					#include "dac.h"
 | 
				
			||||||
 | 
					#include "ff.h"
 | 
				
			||||||
 | 
					#include "lcd_rgb.h"
 | 
				
			||||||
 | 
					#include "mjpeg.h"
 | 
				
			||||||
 | 
					#include "mymem.h"
 | 
				
			||||||
 | 
					#include "timer.h"
 | 
				
			||||||
#include "touch_043.h"
 | 
					#include "touch_043.h"
 | 
				
			||||||
#include "usart.h"
 | 
					#include "usart.h"
 | 
				
			||||||
#include "timer.h"
 | 
					 | 
				
			||||||
#include "avi.h"
 | 
					 | 
				
			||||||
#include "mjpeg.h"
 | 
					 | 
				
			||||||
#include "lcd_rgb.h"
 | 
					 | 
				
			||||||
#include "mymem.h"
 | 
					 | 
				
			||||||
#include "ff.h"
 | 
					 | 
				
			||||||
#include "dac.h"
 | 
					 | 
				
			||||||
//////////////////////////////////////////////////////////////////////////////////
 | 
					//////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
 | 
					// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD>ѧϰʹ<EFBFBD>ã<EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD>;
 | 
				
			||||||
//ALIENTEK STM32F407<30><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					// ALIENTEK STM32F407<30><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
//AVI<56><49>Ƶ<EFBFBD><C6B5>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>	   
 | 
					// AVI<EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
 | 
					// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD>@ALIENTEK
 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
 | 
					// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2014/7/20
 | 
					// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2014/7/20
 | 
				
			||||||
//<2F>汾<EFBFBD><E6B1BE>V1.0
 | 
					// <EFBFBD>汾<EFBFBD><EFBFBD>V1.0
 | 
				
			||||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
 | 
					// <EFBFBD><EFBFBD>Ȩ<EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2009-2019
 | 
					// Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2009-2019
 | 
				
			||||||
//All rights reserved									  
 | 
					// All rights reserved
 | 
				
			||||||
//*******************************************************************************
 | 
					//*******************************************************************************
 | 
				
			||||||
//<2F><EFBFBD><DEB8><EFBFBD>Ϣ
 | 
					// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
 | 
				
			||||||
//<2F><>
 | 
					// <EFBFBD><EFBFBD>
 | 
				
			||||||
//////////////////////////////////////////////////////////////////////////////////
 | 
					//////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
AVI_INFO avix;					//avi<76>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ 
 | 
					AVI_INFO avix; // avi<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
 | 
				
			||||||
u8*const AVI_VIDS_FLAG_TBL[2]={"00dc","01dc"};//<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>,00dc/01dc
 | 
					u8 *const AVI_VIDS_FLAG_TBL[2] = {"00dc",
 | 
				
			||||||
u8*const AVI_AUDS_FLAG_TBL[2]={"00wb","01wb"};//<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>,00wb/01wb
 | 
					                                  "01dc"}; // <EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>,00dc/01dc
 | 
				
			||||||
 | 
					u8 *const AVI_AUDS_FLAG_TBL[2] = {"00wb",
 | 
				
			||||||
 | 
					                                  "01wb"}; // <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>,00wb/01wb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static vu8 g_i2splaybuf;	//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD>Ƶ֡<C6B5><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					static vu8 g_i2splaybuf; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><EFBFBD><EFBFBD>Ƶ֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
static u8* g_i2sbuf[4]; 			//<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>֡,<2C><>4֡,4*5K=20K
 | 
					static u8 *g_i2sbuf[4];  // <EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡,<2C><>4֡,4*5K=20K
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>I2S DMA<4D><41><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
 | 
					// <EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>I2S DMA<4D><41><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
void audio_i2s_dma_callback(DAC_UserStruct *dac) 
 | 
					void audio_i2s_dma_callback(DAC_UserStruct *dac) {
 | 
				
			||||||
{      
 | 
					  g_i2splaybuf++;
 | 
				
			||||||
	g_i2splaybuf++;
 | 
					  if (g_i2splaybuf > 3)
 | 
				
			||||||
	if(g_i2splaybuf>3)g_i2splaybuf=0;
 | 
					    g_i2splaybuf = 0;
 | 
				
			||||||
	if(dac->buff_useing==1)
 | 
					  if (dac->buff_useing == 1) {
 | 
				
			||||||
	{	 
 | 
					    DMA_MemoryTargetConfig(DMA1_Stream5, (u32)g_i2sbuf[g_i2splaybuf],
 | 
				
			||||||
		DMA_MemoryTargetConfig(DMA1_Stream5,(u32)g_i2sbuf[g_i2splaybuf], DMA_Memory_0);
 | 
					                           DMA_Memory_0);
 | 
				
			||||||
	}
 | 
					  } else {
 | 
				
			||||||
	else 
 | 
					    DMA_MemoryTargetConfig(DMA1_Stream5, (u32)g_i2sbuf[g_i2splaybuf],
 | 
				
			||||||
	{  
 | 
					                           DMA_Memory_1);
 | 
				
			||||||
    DMA_MemoryTargetConfig(DMA1_Stream5,(u32)g_i2sbuf[g_i2splaybuf], DMA_Memory_1); 		
 | 
					  }
 | 
				
			||||||
	} 
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// avi<76><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
 | 
				
			||||||
 | 
					// buf:<3A><><EFBFBD>뻺<EFBFBD><EBBBBA><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					// size:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
 | 
				
			||||||
 | 
					// <20><><EFBFBD><EFBFBD>ֵ:AVI_OK,avi<76>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
 | 
				
			||||||
 | 
					//          <20><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					AVISTATUS avi_init(u8 *buf, int size) {
 | 
				
			||||||
 | 
					  u16 offset;
 | 
				
			||||||
 | 
					  u8 *tbuf;
 | 
				
			||||||
 | 
					  AVISTATUS res = AVI_OK;
 | 
				
			||||||
 | 
					  AVI_HEADER *aviheader;
 | 
				
			||||||
 | 
					  LIST_HEADER *listheader;
 | 
				
			||||||
 | 
					  AVIH_HEADER *avihheader;
 | 
				
			||||||
 | 
					  STRH_HEADER *strhheader;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//avi<76><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
 | 
					  STRF_BMPHEADER *bmpheader;
 | 
				
			||||||
//buf:<3A><><EFBFBD>뻺<EFBFBD><EBBBBA><EFBFBD><EFBFBD>
 | 
					  STRF_WAVHEADER *wavheader;
 | 
				
			||||||
//size:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
 | 
					 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD>ֵ:AVI_OK,avi<76>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
 | 
					 | 
				
			||||||
//         <20><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					 | 
				
			||||||
AVISTATUS avi_init(u8 *buf,int size)		 
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	u16 offset;
 | 
					 | 
				
			||||||
	u8 *tbuf;
 | 
					 | 
				
			||||||
	AVISTATUS res=AVI_OK;
 | 
					 | 
				
			||||||
	AVI_HEADER *aviheader;
 | 
					 | 
				
			||||||
	LIST_HEADER *listheader;
 | 
					 | 
				
			||||||
	AVIH_HEADER *avihheader; 
 | 
					 | 
				
			||||||
	STRH_HEADER *strhheader; 
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	STRF_BMPHEADER *bmpheader; 
 | 
					  tbuf = buf;
 | 
				
			||||||
	STRF_WAVHEADER *wavheader; 
 | 
					  aviheader = (AVI_HEADER *)buf;
 | 
				
			||||||
	
 | 
					  if (aviheader->RiffID != AVI_RIFF_ID)
 | 
				
			||||||
	tbuf=buf;
 | 
					    return AVI_RIFF_ERR; // RIFF ID<49><44><EFBFBD><EFBFBD>
 | 
				
			||||||
	aviheader=(AVI_HEADER*)buf; 
 | 
					  if (aviheader->AviID != AVI_AVI_ID)
 | 
				
			||||||
	if(aviheader->RiffID!=AVI_RIFF_ID)return AVI_RIFF_ERR;		//RIFF ID<49><44><EFBFBD><EFBFBD>
 | 
					    return AVI_AVI_ERR;      // AVI ID<49><44><EFBFBD><EFBFBD>
 | 
				
			||||||
	if(aviheader->AviID!=AVI_AVI_ID)return AVI_AVI_ERR;			//AVI ID<49><44><EFBFBD><EFBFBD>
 | 
					  buf += sizeof(AVI_HEADER); // ƫ<EFBFBD><EFBFBD>
 | 
				
			||||||
	buf+=sizeof(AVI_HEADER);									//ƫ<><C6AB>
 | 
					  listheader = (LIST_HEADER *)(buf);
 | 
				
			||||||
	listheader=(LIST_HEADER*)(buf);						
 | 
					  if (listheader->ListID != AVI_LIST_ID)
 | 
				
			||||||
	if(listheader->ListID!=AVI_LIST_ID)return AVI_LIST_ERR;		//LIST ID<49><44><EFBFBD><EFBFBD> 
 | 
					    return AVI_LIST_ERR; // LIST ID<49><44><EFBFBD><EFBFBD>
 | 
				
			||||||
	if(listheader->ListType!=AVI_HDRL_ID)return AVI_HDRL_ERR;	//HDRL ID<49><44><EFBFBD><EFBFBD> 
 | 
					  if (listheader->ListType != AVI_HDRL_ID)
 | 
				
			||||||
	buf+=sizeof(LIST_HEADER);									//ƫ<EFBFBD><EFBFBD>
 | 
					    return AVI_HDRL_ERR;      // HDRL ID<49><44><EFBFBD><EFBFBD>
 | 
				
			||||||
	avihheader=(AVIH_HEADER*)(buf);
 | 
					  buf += sizeof(LIST_HEADER); // ƫ<><C6AB>
 | 
				
			||||||
	if(avihheader->BlockID!=AVI_AVIH_ID)return AVI_AVIH_ERR;	//AVIH ID<49><44><EFBFBD><EFBFBD> 
 | 
					  avihheader = (AVIH_HEADER *)(buf);
 | 
				
			||||||
	avix.SecPerFrame=avihheader->SecPerFrame;					//<2F>õ<EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
 | 
					  if (avihheader->BlockID != AVI_AVIH_ID)
 | 
				
			||||||
	avix.TotalFrame=avihheader->TotalFrame;						//<2F>õ<EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><EFBFBD>  
 | 
					    return AVI_AVIH_ERR;                      // AVIH ID<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
	buf+=avihheader->BlockSize+8;								//ƫ<EFBFBD><EFBFBD>
 | 
					  avix.SecPerFrame = avihheader->SecPerFrame; // <20>õ<EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
 | 
				
			||||||
	listheader=(LIST_HEADER*)(buf);
 | 
					  avix.TotalFrame = avihheader->TotalFrame;   // <20>õ<EFBFBD><C3B5><EFBFBD>֡<EFBFBD><D6A1>
 | 
				
			||||||
	if(listheader->ListID!=AVI_LIST_ID)return AVI_LIST_ERR;		//LIST ID<49><44><EFBFBD><EFBFBD> 
 | 
					  buf += avihheader->BlockSize + 8;           // ƫ<EFBFBD><EFBFBD>
 | 
				
			||||||
	if(listheader->ListType!=AVI_STRL_ID)return AVI_STRL_ERR;	//STRL ID<49><44><EFBFBD><EFBFBD>  
 | 
					  listheader = (LIST_HEADER *)(buf);
 | 
				
			||||||
	strhheader=(STRH_HEADER*)(buf+12);
 | 
					  if (listheader->ListID != AVI_LIST_ID)
 | 
				
			||||||
	if(strhheader->BlockID!=AVI_STRH_ID)return AVI_STRH_ERR;	//STRH ID<49><44><EFBFBD><EFBFBD> 
 | 
					    return AVI_LIST_ERR; // LIST ID<49><44><EFBFBD><EFBFBD>
 | 
				
			||||||
 	if(strhheader->StreamType==AVI_VIDS_STREAM)					//<2F><>Ƶ֡<C6B5><D6A1>ǰ
 | 
					  if (listheader->ListType != AVI_STRL_ID)
 | 
				
			||||||
	{
 | 
					    return AVI_STRL_ERR; // STRL ID<49><44><EFBFBD><EFBFBD>
 | 
				
			||||||
		if(strhheader->Handler!=AVI_FORMAT_MJPG)return AVI_FORMAT_ERR;	//<2F><>MJPG<50><47>Ƶ<EFBFBD><C6B5>,<2C><>֧<EFBFBD><D6A7>
 | 
					  strhheader = (STRH_HEADER *)(buf + 12);
 | 
				
			||||||
		avix.VideoFLAG=(u8*)AVI_VIDS_FLAG_TBL[0];					//<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>  "00dc"
 | 
					  if (strhheader->BlockID != AVI_STRH_ID)
 | 
				
			||||||
		avix.AudioFLAG=(u8*)AVI_AUDS_FLAG_TBL[1];					//<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>  "01wb"
 | 
					    return AVI_STRH_ERR;                         // STRH ID<49><44><EFBFBD><EFBFBD>
 | 
				
			||||||
		bmpheader=(STRF_BMPHEADER*)(buf+12+strhheader->BlockSize+8);//strf
 | 
					  if (strhheader->StreamType == AVI_VIDS_STREAM) // <20><>Ƶ֡<C6B5><D6A1>ǰ
 | 
				
			||||||
		if(bmpheader->BlockID!=AVI_STRF_ID)return AVI_STRF_ERR;		//STRF ID<49><44><EFBFBD><EFBFBD>  
 | 
					  {
 | 
				
			||||||
		avix.Width=bmpheader->bmiHeader.Width;
 | 
					    if (strhheader->Handler != AVI_FORMAT_MJPG)
 | 
				
			||||||
		avix.Height=bmpheader->bmiHeader.Height; 
 | 
					      return AVI_FORMAT_ERR;                     // <20><>MJPG<50><47>Ƶ<EFBFBD><C6B5>,<2C><>֧<EFBFBD><D6A7>
 | 
				
			||||||
		buf+=listheader->BlockSize+8;								//ƫ<EFBFBD><EFBFBD>
 | 
					    avix.VideoFLAG = (u8 *)AVI_VIDS_FLAG_TBL[0]; // <EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>  "00dc"
 | 
				
			||||||
		listheader=(LIST_HEADER*)(buf);
 | 
					    avix.AudioFLAG = (u8 *)AVI_AUDS_FLAG_TBL[1]; // <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>  "01wb"
 | 
				
			||||||
		if(listheader->ListID!=AVI_LIST_ID)//<2F>Dz<EFBFBD><C7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ֡<C6B5><D6A1><EFBFBD><EFBFBD>Ƶ<EFBFBD>ļ<EFBFBD>
 | 
					    bmpheader =
 | 
				
			||||||
		{
 | 
					        (STRF_BMPHEADER *)(buf + 12 + strhheader->BlockSize + 8); // strf
 | 
				
			||||||
			avix.SampleRate=0;						//<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					    if (bmpheader->BlockID != AVI_STRF_ID)
 | 
				
			||||||
			avix.Channels=0;						//<2F><>Ƶͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					      return AVI_STRF_ERR; // STRF ID<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
			avix.AudioType=0;						//<2F><>Ƶ<EFBFBD><C6B5>ʽ
 | 
					    avix.Width = bmpheader->bmiHeader.Width;
 | 
				
			||||||
			
 | 
					    avix.Height = bmpheader->bmiHeader.Height;
 | 
				
			||||||
		}else
 | 
					    buf += listheader->BlockSize + 8; // ƫ<><C6AB>
 | 
				
			||||||
		{			
 | 
					    listheader = (LIST_HEADER *)(buf);
 | 
				
			||||||
			if(listheader->ListType!=AVI_STRL_ID)return AVI_STRL_ERR;	//STRL ID<49><44><EFBFBD><EFBFBD>   
 | 
					    if (listheader->ListID != AVI_LIST_ID) // <20>Dz<EFBFBD><C7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ֡<C6B5><D6A1><EFBFBD><EFBFBD>Ƶ<EFBFBD>ļ<EFBFBD>
 | 
				
			||||||
			strhheader=(STRH_HEADER*)(buf+12);
 | 
					    {
 | 
				
			||||||
			if(strhheader->BlockID!=AVI_STRH_ID)return AVI_STRH_ERR;	//STRH ID<49><44><EFBFBD><EFBFBD> 
 | 
					      avix.SampleRate = 0; // <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
			if(strhheader->StreamType!=AVI_AUDS_STREAM)return AVI_FORMAT_ERR;//<2F><>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					      avix.Channels = 0;   // <EFBFBD><EFBFBD>Ƶͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
			wavheader=(STRF_WAVHEADER*)(buf+12+strhheader->BlockSize+8);//strf
 | 
					      avix.AudioType = 0;  // <20><>Ƶ<EFBFBD><C6B5>ʽ
 | 
				
			||||||
			if(wavheader->BlockID!=AVI_STRF_ID)return AVI_STRF_ERR;		//STRF ID<49><44><EFBFBD><EFBFBD>   
 | 
					    } else {
 | 
				
			||||||
			avix.SampleRate=wavheader->SampleRate;						//<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					      if (listheader->ListType != AVI_STRL_ID)
 | 
				
			||||||
			avix.Channels=wavheader->Channels;							//<2F><>Ƶͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					        return AVI_STRL_ERR; // STRL ID<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
			avix.AudioType=wavheader->FormatTag;						//<2F><>Ƶ<EFBFBD><C6B5>ʽ
 | 
					      strhheader = (STRH_HEADER *)(buf + 12);
 | 
				
			||||||
		}
 | 
					      if (strhheader->BlockID != AVI_STRH_ID)
 | 
				
			||||||
	}else if(strhheader->StreamType==AVI_AUDS_STREAM)		 		//<2F><>Ƶ֡<EFBFBD><EFBFBD>ǰ
 | 
					        return AVI_STRH_ERR; // STRH ID<49><44><EFBFBD><EFBFBD>
 | 
				
			||||||
	{ 
 | 
					      if (strhheader->StreamType != AVI_AUDS_STREAM)
 | 
				
			||||||
		avix.VideoFLAG=(u8*)AVI_VIDS_FLAG_TBL[1];					//<2F><>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>  "01dc"
 | 
					        return AVI_FORMAT_ERR; // <EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
		avix.AudioFLAG=(u8*)AVI_AUDS_FLAG_TBL[0];					//<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>  "00wb"
 | 
					      wavheader =
 | 
				
			||||||
		wavheader=(STRF_WAVHEADER*)(buf+12+strhheader->BlockSize+8);//strf
 | 
					          (STRF_WAVHEADER *)(buf + 12 + strhheader->BlockSize + 8); // strf
 | 
				
			||||||
		if(wavheader->BlockID!=AVI_STRF_ID)return AVI_STRF_ERR;		//STRF ID<49><44><EFBFBD><EFBFBD> 
 | 
					      if (wavheader->BlockID != AVI_STRF_ID)
 | 
				
			||||||
		avix.SampleRate=wavheader->SampleRate;						//<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					        return AVI_STRF_ERR;                   // STRF ID<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
		avix.Channels=wavheader->Channels;							//<2F><>Ƶͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					      avix.SampleRate = wavheader->SampleRate; // <EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
		avix.AudioType=wavheader->FormatTag;						//<2F><>Ƶ<EFBFBD><C6B5>ʽ
 | 
					      avix.Channels = wavheader->Channels;     // <EFBFBD><EFBFBD>Ƶͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
		buf+=listheader->BlockSize+8;								//ƫ<><C6AB>
 | 
					      avix.AudioType = wavheader->FormatTag;   // <20><>Ƶ<EFBFBD><C6B5>ʽ
 | 
				
			||||||
		listheader=(LIST_HEADER*)(buf);
 | 
					    }
 | 
				
			||||||
		if(listheader->ListID!=AVI_LIST_ID)return AVI_LIST_ERR;		//LIST ID<49><44><EFBFBD><EFBFBD> 
 | 
					  } else if (strhheader->StreamType == AVI_AUDS_STREAM) // <20><>Ƶ֡<EFBFBD><EFBFBD>ǰ
 | 
				
			||||||
		if(listheader->ListType!=AVI_STRL_ID)return AVI_STRL_ERR;	//STRL ID<49><44><EFBFBD><EFBFBD>   
 | 
					  {
 | 
				
			||||||
		strhheader=(STRH_HEADER*)(buf+12);
 | 
					    avix.VideoFLAG = (u8 *)AVI_VIDS_FLAG_TBL[1]; // <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>  "01dc"
 | 
				
			||||||
		if(strhheader->BlockID!=AVI_STRH_ID)return AVI_STRH_ERR;	//STRH ID<49><44><EFBFBD><EFBFBD> 
 | 
					    avix.AudioFLAG = (u8 *)AVI_AUDS_FLAG_TBL[0]; // <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>  "00wb"
 | 
				
			||||||
		if(strhheader->StreamType!=AVI_VIDS_STREAM)return AVI_FORMAT_ERR;//<2F><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>  
 | 
					    wavheader =
 | 
				
			||||||
		bmpheader=(STRF_BMPHEADER*)(buf+12+strhheader->BlockSize+8);//strf
 | 
					        (STRF_WAVHEADER *)(buf + 12 + strhheader->BlockSize + 8); // strf
 | 
				
			||||||
		if(bmpheader->BlockID!=AVI_STRF_ID)return AVI_STRF_ERR;		//STRF ID<49><44><EFBFBD><EFBFBD>  
 | 
					    if (wavheader->BlockID != AVI_STRF_ID)
 | 
				
			||||||
		if(bmpheader->bmiHeader.Compression!=AVI_FORMAT_MJPG)return AVI_FORMAT_ERR;//<2F><>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>  
 | 
					      return AVI_STRF_ERR;                   // STRF ID<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
		avix.Width=bmpheader->bmiHeader.Width;
 | 
					    avix.SampleRate = wavheader->SampleRate; // <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
		avix.Height=bmpheader->bmiHeader.Height; 	
 | 
					    avix.Channels = wavheader->Channels;     // <20><>Ƶͨ<C6B5><CDA8><EFBFBD><EFBFBD>
 | 
				
			||||||
	}
 | 
					    avix.AudioType = wavheader->FormatTag;   // <20><>Ƶ<EFBFBD><C6B5>ʽ
 | 
				
			||||||
	offset=avi_srarch_id(tbuf,size,"movi");					//<2F><><EFBFBD><EFBFBD>movi ID
 | 
					    buf += listheader->BlockSize + 8;        // ƫ<><C6AB>
 | 
				
			||||||
	if(offset==0)return AVI_MOVI_ERR;						//MOVI ID<49><44><EFBFBD><EFBFBD>
 | 
					    listheader = (LIST_HEADER *)(buf);
 | 
				
			||||||
	if(avix.SampleRate)//<2F><><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>,<2C>Ų<EFBFBD><C5B2><EFBFBD>
 | 
					    if (listheader->ListID != AVI_LIST_ID)
 | 
				
			||||||
	{
 | 
					      return AVI_LIST_ERR; // LIST ID<49><44><EFBFBD><EFBFBD>
 | 
				
			||||||
		tbuf+=offset;
 | 
					    if (listheader->ListType != AVI_STRL_ID)
 | 
				
			||||||
		offset=avi_srarch_id(tbuf,size,avix.AudioFLAG);			//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					      return AVI_STRL_ERR; // STRL ID<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
		if(offset==0)return AVI_STREAM_ERR;						//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					    strhheader = (STRH_HEADER *)(buf + 12);
 | 
				
			||||||
		tbuf+=offset+4;
 | 
					    if (strhheader->BlockID != AVI_STRH_ID)
 | 
				
			||||||
		avix.AudioBufSize=*((u16*)tbuf);						//<2F>õ<EFBFBD><C3B5><EFBFBD>Ƶ<EFBFBD><C6B5>buf<75><66>С.
 | 
					      return AVI_STRH_ERR; // STRH ID<49><44><EFBFBD><EFBFBD>
 | 
				
			||||||
	}		
 | 
					    if (strhheader->StreamType != AVI_VIDS_STREAM)
 | 
				
			||||||
//	printf("avi init ok\r\n");
 | 
					      return AVI_FORMAT_ERR; // <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
 | 
				
			||||||
//	printf("avix.SecPerFrame:%d\r\n",avix.SecPerFrame);
 | 
					    bmpheader =
 | 
				
			||||||
//	printf("avix.TotalFrame:%d\r\n",avix.TotalFrame);
 | 
					        (STRF_BMPHEADER *)(buf + 12 + strhheader->BlockSize + 8); // strf
 | 
				
			||||||
//	printf("avix.Width:%d\r\n",avix.Width);
 | 
					    if (bmpheader->BlockID != AVI_STRF_ID)
 | 
				
			||||||
//	printf("avix.Height:%d\r\n",avix.Height);
 | 
					      return AVI_STRF_ERR; // STRF ID<49><44><EFBFBD><EFBFBD>
 | 
				
			||||||
//	printf("avix.AudioType:%d\r\n",avix.AudioType);
 | 
					    if (bmpheader->bmiHeader.Compression != AVI_FORMAT_MJPG)
 | 
				
			||||||
//	printf("avix.SampleRate:%d\r\n",avix.SampleRate);
 | 
					      return AVI_FORMAT_ERR; // <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
 | 
				
			||||||
//	printf("avix.Channels:%d\r\n",avix.Channels);
 | 
					    avix.Width = bmpheader->bmiHeader.Width;
 | 
				
			||||||
//	printf("avix.AudioBufSize:%d\r\n",avix.AudioBufSize);
 | 
					    avix.Height = bmpheader->bmiHeader.Height;
 | 
				
			||||||
//	printf("avix.VideoFLAG:%s\r\n",avix.VideoFLAG); 
 | 
					  }
 | 
				
			||||||
//	printf("avix.AudioFLAG:%s\r\n",avix.AudioFLAG); 
 | 
					  offset = avi_srarch_id(tbuf, size, "movi"); // <20><><EFBFBD><EFBFBD>movi ID
 | 
				
			||||||
	return res;
 | 
					  if (offset == 0)
 | 
				
			||||||
 | 
					    return AVI_MOVI_ERR; // MOVI ID<49><44><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  if (avix.SampleRate)   // <20><><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>,<2C>Ų<EFBFBD><C5B2><EFBFBD>
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    tbuf += offset;
 | 
				
			||||||
 | 
					    offset = avi_srarch_id(tbuf, size, avix.AudioFLAG); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					    if (offset == 0)
 | 
				
			||||||
 | 
					      return AVI_STREAM_ERR; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					    tbuf += offset + 4;
 | 
				
			||||||
 | 
					    avix.AudioBufSize = *((u16 *)tbuf); // <20>õ<EFBFBD><C3B5><EFBFBD>Ƶ<EFBFBD><C6B5>buf<75><66>С.
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  //	printf("avi init ok\r\n");
 | 
				
			||||||
 | 
					  //	printf("avix.SecPerFrame:%d\r\n",avix.SecPerFrame);
 | 
				
			||||||
 | 
					  //	printf("avix.TotalFrame:%d\r\n",avix.TotalFrame);
 | 
				
			||||||
 | 
					  //	printf("avix.Width:%d\r\n",avix.Width);
 | 
				
			||||||
 | 
					  //	printf("avix.Height:%d\r\n",avix.Height);
 | 
				
			||||||
 | 
					  //	printf("avix.AudioType:%d\r\n",avix.AudioType);
 | 
				
			||||||
 | 
					  //	printf("avix.SampleRate:%d\r\n",avix.SampleRate);
 | 
				
			||||||
 | 
					  //	printf("avix.Channels:%d\r\n",avix.Channels);
 | 
				
			||||||
 | 
					  //	printf("avix.AudioBufSize:%d\r\n",avix.AudioBufSize);
 | 
				
			||||||
 | 
					  //	printf("avix.VideoFLAG:%s\r\n",avix.VideoFLAG);
 | 
				
			||||||
 | 
					  //	printf("avix.AudioFLAG:%s\r\n",avix.AudioFLAG);
 | 
				
			||||||
 | 
					  return res;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD> ID
 | 
					// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID
 | 
				
			||||||
//buf:<3A><><EFBFBD>黺<EFBFBD><E9BBBA><EFBFBD><EFBFBD>
 | 
					// buf:<3A><><EFBFBD>黺<EFBFBD><E9BBBA><EFBFBD><EFBFBD>
 | 
				
			||||||
//size:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
 | 
					// size:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
 | 
				
			||||||
//id:Ҫ<><D2AA><EFBFBD>ҵ<EFBFBD>id,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD>ֽڳ<D6BD><DAB3><EFBFBD>
 | 
					// id:Ҫ<><D2AA><EFBFBD>ҵ<EFBFBD>id,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD>ֽڳ<D6BD><DAB3><EFBFBD>
 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>,<2C><><EFBFBD><EFBFBD>:movi IDƫ<44><C6AB><EFBFBD><EFBFBD>
 | 
					// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ:0,<2C><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>,<2C><><EFBFBD><EFBFBD>:movi IDƫ<44><C6AB><EFBFBD><EFBFBD>
 | 
				
			||||||
u16 avi_srarch_id(u8* buf,int size,u8 *id)
 | 
					u16 avi_srarch_id(u8 *buf, int size, u8 *id) {
 | 
				
			||||||
{
 | 
					  u16 i;
 | 
				
			||||||
	u16 i;
 | 
					  size -= 4;
 | 
				
			||||||
	size-=4;
 | 
					  for (i = 0; i < size; i++) {
 | 
				
			||||||
	for(i=0;i<size;i++)
 | 
					    if (buf[i] == id[0])
 | 
				
			||||||
	{
 | 
					      if (buf[i + 1] == id[1])
 | 
				
			||||||
	   	if(buf[i]==id[0])
 | 
					        if (buf[i + 2] == id[2])
 | 
				
			||||||
			if(buf[i+1]==id[1])
 | 
					          if (buf[i + 3] == id[3])
 | 
				
			||||||
				if(buf[i+2]==id[2])	
 | 
					            return i; // <20>ҵ<EFBFBD>"id"<22><><EFBFBD>ڵ<EFBFBD>λ<EFBFBD><CEBB>
 | 
				
			||||||
					if(buf[i+3]==id[3])return i;//<2F>ҵ<EFBFBD>"id"<22><><EFBFBD>ڵ<EFBFBD>λ<EFBFBD><CEBB>	
 | 
					  }
 | 
				
			||||||
	}
 | 
					  return 0;
 | 
				
			||||||
	return 0;		
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
//<2F>õ<EFBFBD>stream<61><6D><EFBFBD><EFBFBD>Ϣ
 | 
					// <EFBFBD>õ<EFBFBD>stream<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
 | 
				
			||||||
//buf:<3A><><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>01wb/00wb/01dc/00dc<64><63>ͷ)
 | 
					// buf:<3A><><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>01wb/00wb/01dc/00dc<64><63>ͷ)
 | 
				
			||||||
AVISTATUS avi_get_streaminfo(u8* buf)
 | 
					AVISTATUS avi_get_streaminfo(u8 *buf) {
 | 
				
			||||||
{
 | 
					  int offset = 0;
 | 
				
			||||||
	int offset=0;
 | 
					  avix.StreamID = MAKEWORD(buf + 2);    // <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
	avix.StreamID=MAKEWORD(buf+2);			//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					  avix.StreamSize = MAKEDWORD(buf + 4); // <EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
 | 
				
			||||||
	avix.StreamSize=MAKEDWORD(buf+4);		//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>С 
 | 
					  if (avix.StreamSize % 2)
 | 
				
			||||||
	if(avix.StreamSize%2)avix.StreamSize++;	//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1(avix.StreamSize,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ż<EFBFBD><C5BC>)
 | 
					    avix.StreamSize++; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1(avix.StreamSize,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ż<EFBFBD><C5BC>)
 | 
				
			||||||
	if(avix.StreamID==AVI_VIDS_FLAG||avix.StreamID==AVI_AUDS_FLAG)return AVI_OK;
 | 
					  if (avix.StreamID == AVI_VIDS_FLAG || avix.StreamID == AVI_AUDS_FLAG)
 | 
				
			||||||
	return AVI_STREAM_ERR;	
 | 
					    return AVI_OK;
 | 
				
			||||||
 | 
					  return AVI_STREAM_ERR;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static vu8 g_frame_en = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void avi_timer_irq(void) { g_frame_en = 1; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>avix.SecPerFrame
 | 
				
			||||||
 | 
					void avi_timer_init(u32 t) {
 | 
				
			||||||
 | 
					  TIMER_InitStruct timer_init = {0};
 | 
				
			||||||
static  vu8 g_frame_en=0;
 | 
					  timer_init.Cycle = t / 1;
 | 
				
			||||||
 | 
					  timer_init.Tim = TIM3;
 | 
				
			||||||
 | 
					  timer_init.UpdataCall = avi_timer_irq;
 | 
				
			||||||
void avi_timer_irq (void)
 | 
					  TIMER_InitNormal(&timer_init);
 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	g_frame_en=1;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>avix.SecPerFrame
 | 
					void avi_tiemr_delete(void) { TIMER_DeInit(TIM3); }
 | 
				
			||||||
void avi_timer_init (u32 t)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	TIMER_InitStruct timer_init={0};
 | 
					 | 
				
			||||||
	timer_init.Cycle=t/1;
 | 
					 | 
				
			||||||
	timer_init.Tim=TIM3;
 | 
					 | 
				
			||||||
	timer_init.UpdataCall=avi_timer_irq;
 | 
					 | 
				
			||||||
	TIMER_InitNormal(&timer_init);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define AVI_AUDIO_BUF_SIZE 1024 * 5   // <20><><EFBFBD><EFBFBD>avi<76><69><EFBFBD><EFBFBD>ʱ,<2C><>Ƶbuf<75><66>С.
 | 
				
			||||||
 | 
					#define AVI_VIDEO_BUF_SIZE 1024 * 200 // <20><><EFBFBD><EFBFBD>avi<76><69><EFBFBD><EFBFBD>ʱ,<2C><>Ƶbuf<75><66>С.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void avi_tiemr_delete (void)
 | 
					// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ
 | 
				
			||||||
{
 | 
					int video_play(char *pname, int loop) {
 | 
				
			||||||
	TIMER_DeInit (TIM3);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  u8 listhead[8] = {0}; // <20><><EFBFBD><EFBFBD>ͷ
 | 
				
			||||||
 | 
					  u32 fresh = 0;
 | 
				
			||||||
 | 
					  u8 *framebuf; // <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>buf
 | 
				
			||||||
 | 
					  u8 *pbuf;     // bufָ<66><D6B8>
 | 
				
			||||||
 | 
					  FIL *favi;
 | 
				
			||||||
 | 
					  u8 res = 0;
 | 
				
			||||||
 | 
					  u16 offset = 0;
 | 
				
			||||||
 | 
					  UINT nr;
 | 
				
			||||||
 | 
					  u8 key;
 | 
				
			||||||
#define AVI_AUDIO_BUF_SIZE    1024*5		//<2F><><EFBFBD><EFBFBD>avi<76><69><EFBFBD><EFBFBD>ʱ,<2C><>Ƶbuf<75><66>С.
 | 
					 | 
				
			||||||
#define AVI_VIDEO_BUF_SIZE    1024*200		//<2F><><EFBFBD><EFBFBD>avi<76><69><EFBFBD><EFBFBD>ʱ,<2C><>Ƶbuf<75><66>С.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ
 | 
					 | 
				
			||||||
int video_play (char *pname,int loop)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	 
 | 
					 | 
				
			||||||
	u8 listhead[8]={0};//<2F><><EFBFBD><EFBFBD>ͷ
 | 
					 | 
				
			||||||
	u32 fresh=0;
 | 
					 | 
				
			||||||
	u8* framebuf;	//<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>buf	 
 | 
					 | 
				
			||||||
	u8* pbuf;		//bufָ<66><D6B8>  
 | 
					 | 
				
			||||||
	FIL *favi;
 | 
					 | 
				
			||||||
	u8  res=0;
 | 
					 | 
				
			||||||
	u16 offset=0; 
 | 
					 | 
				
			||||||
	UINT	nr; 
 | 
					 | 
				
			||||||
	u8 key;   
 | 
					 | 
				
			||||||
  u8 i2ssavebuf;
 | 
					  u8 i2ssavebuf;
 | 
				
			||||||
	DAC_UserStruct dac={0};
 | 
					  DAC_UserStruct dac = {0};
 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	u8 *audio_buff=mymalloc (AVI_AUDIO_BUF_SIZE);	
 | 
					 | 
				
			||||||
	framebuf=mymalloc(AVI_VIDEO_BUF_SIZE);	//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶbuf
 | 
					 | 
				
			||||||
	favi=(FIL*)mymalloc(sizeof(FIL));		//<2F><><EFBFBD><EFBFBD>favi<76>ڴ<EFBFBD> 
 | 
					 | 
				
			||||||
	g_i2sbuf[0]=mymalloc(AVI_AUDIO_BUF_SIZE);	//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>ڴ<EFBFBD>
 | 
					 | 
				
			||||||
	g_i2sbuf[1]=mymalloc(AVI_AUDIO_BUF_SIZE);	//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>ڴ<EFBFBD>
 | 
					 | 
				
			||||||
	g_i2sbuf[2]=mymalloc(AVI_AUDIO_BUF_SIZE);	//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>ڴ<EFBFBD>
 | 
					 | 
				
			||||||
	g_i2sbuf[3]=mymalloc(AVI_AUDIO_BUF_SIZE);	//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>ڴ<EFBFBD> 
 | 
					 | 
				
			||||||
	mymemset(g_i2sbuf[0],0,AVI_AUDIO_BUF_SIZE);
 | 
					 | 
				
			||||||
	mymemset(g_i2sbuf[1],0,AVI_AUDIO_BUF_SIZE); 
 | 
					 | 
				
			||||||
	mymemset(g_i2sbuf[2],0,AVI_AUDIO_BUF_SIZE);
 | 
					 | 
				
			||||||
	mymemset(g_i2sbuf[3],0,AVI_AUDIO_BUF_SIZE); 
 | 
					 | 
				
			||||||
	while(res==0)
 | 
					 | 
				
			||||||
	{ 
 | 
					 | 
				
			||||||
		res=f_open(favi,(char *)pname,FA_READ);
 | 
					 | 
				
			||||||
		if(res==0)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			pbuf=framebuf;			
 | 
					 | 
				
			||||||
			res=f_read(favi,pbuf,AVI_VIDEO_BUF_SIZE,&nr);//<2F><>ʼ<EFBFBD><CABC>ȡ	
 | 
					 | 
				
			||||||
			if(res)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				break;
 | 
					 | 
				
			||||||
			} 	 
 | 
					 | 
				
			||||||
			//<2F><>ʼavi<76><69><EFBFBD><EFBFBD>
 | 
					 | 
				
			||||||
			res=avi_init(pbuf,AVI_VIDEO_BUF_SIZE);	//avi<76><69><EFBFBD><EFBFBD> 
 | 
					 | 
				
			||||||
			if(res)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				break;
 | 
					 | 
				
			||||||
			} 	
 | 
					 | 
				
			||||||
			//avi_timer_init (avix.SecPerFrame);
 | 
					 | 
				
			||||||
			offset=avi_srarch_id(pbuf,AVI_VIDEO_BUF_SIZE,(u8*)"movi");//Ѱ<><D1B0>movi ID	   
 | 
					 | 
				
			||||||
			avi_get_streaminfo(pbuf+offset+4);			//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>Ϣ 
 | 
					 | 
				
			||||||
			f_lseek(favi,offset+12-8);					//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־ID,<2C><><EFBFBD><EFBFBD>ַƫ<D6B7>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>ʼ<EFBFBD><CABC>	 
 | 
					 | 
				
			||||||
			extern void jdmerge_setvideo_xsize (int xsize,int lcd_xsize);
 | 
					 | 
				
			||||||
			jdmerge_setvideo_xsize (avix.Width,LCD_GetLcdSizeX());//<2F><><EFBFBD>õ<EFBFBD>ַ<EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
 | 
					 | 
				
			||||||
			res=mjpegdec_init((LCD_GetLcdSizeX()-avix.Width)/2,(LCD_GetLcdSizeY()-avix.Height)/2);//JPG<50><47><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC> 
 | 
					 | 
				
			||||||
			if(avix.SampleRate)							//<2F><><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>Ϣ,<2C>ų<EFBFBD>ʼ<EFBFBD><CABC>
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				//<2F><>ʼ<EFBFBD><CABC>DAC
 | 
					 | 
				
			||||||
				dac.buff1=(u32 *)g_i2sbuf[1];
 | 
					 | 
				
			||||||
				dac.buff2=(u32 *)g_i2sbuf[2];
 | 
					 | 
				
			||||||
				dac.buff_size=avix.AudioBufSize;
 | 
					 | 
				
			||||||
				dac.rate=DAC_GetRate(avix.SampleRate);
 | 
					 | 
				
			||||||
				dac.call_back=audio_i2s_dma_callback;
 | 
					 | 
				
			||||||
				DAC_NormalInit (&dac);
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 			while(1)//<2F><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>
 | 
					 | 
				
			||||||
			{					
 | 
					 | 
				
			||||||
				f_read(favi,listhead,8,&nr);
 | 
					 | 
				
			||||||
				if(avi_get_streaminfo(listhead))//<2F><>ȡ<EFBFBD><C8A1>һ֡ <20><><EFBFBD><EFBFBD>־
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					break; 
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
				if (Touch_GetState()->x[1]!=0) break;		//<2F><>Ļ<EFBFBD><C4BB><EFBFBD>㴥<EFBFBD><E3B4A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					 | 
				
			||||||
				if (USART3_GetKeyPressed()&(0x08)) break;//<2F><><EFBFBD>·<EFBFBD><C2B7>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD>
 | 
					 | 
				
			||||||
				if(avix.StreamID==AVI_VIDS_FLAG)	//<2F><>Ƶ<EFBFBD><C6B5>
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					pbuf=framebuf;
 | 
					 | 
				
			||||||
					//mymemset (pbuf,0,AVI_VIDEO_BUF_SIZE);
 | 
					 | 
				
			||||||
					f_read(favi,pbuf,avix.StreamSize+8-8,&nr);		//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡+<2B><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID<49><44>Ϣ
 | 
					 | 
				
			||||||
					//<2F>ȴ<EFBFBD>֡ʱ<D6A1><CAB1>
 | 
					 | 
				
			||||||
					//while (g_frame_en==0){} g_frame_en=0;
 | 
					 | 
				
			||||||
					while (LCD_GetLayerUpdataStat ()==0);
 | 
					 | 
				
			||||||
					LCD_SwitchLayerBuff();
 | 
					 | 
				
			||||||
					res=mjpegdec_decode(pbuf,avix.StreamSize);
 | 
					 | 
				
			||||||
					if (res==0) 
 | 
					 | 
				
			||||||
					{
 | 
					 | 
				
			||||||
						LCD_ExitLayerBuff();
 | 
					 | 
				
			||||||
					}
 | 
					 | 
				
			||||||
					if(res)
 | 
					 | 
				
			||||||
					{
 | 
					 | 
				
			||||||
						//break;
 | 
					 | 
				
			||||||
					} 
 | 
					 | 
				
			||||||
				}else 	//<2F><>Ƶ<EFBFBD><C6B5>
 | 
					 | 
				
			||||||
				{		  
 | 
					 | 
				
			||||||
//					f_read(favi,audio_buff,avix.StreamSize+8-8,&nr);//<2F><><EFBFBD><EFBFBD>i2sbuf	 
 | 
					 | 
				
			||||||
//					pbuf=audio_buff;  
 | 
					 | 
				
			||||||
					i2ssavebuf++;
 | 
					 | 
				
			||||||
					if(i2ssavebuf>3)i2ssavebuf=0;
 | 
					 | 
				
			||||||
					do
 | 
					 | 
				
			||||||
					{
 | 
					 | 
				
			||||||
						nr=g_i2splaybuf;
 | 
					 | 
				
			||||||
						if(nr)nr--;
 | 
					 | 
				
			||||||
						else nr=3; 
 | 
					 | 
				
			||||||
					}while(i2ssavebuf==nr);//<2F><>ײ<EFBFBD>ȴ<EFBFBD>. 
 | 
					 | 
				
			||||||
					f_read(favi,g_i2sbuf[i2ssavebuf],avix.StreamSize,&nr);//<2F><><EFBFBD><EFBFBD>i2sbuf	
 | 
					 | 
				
			||||||
					u16 *p=(u16 *)g_i2sbuf[i2ssavebuf];
 | 
					 | 
				
			||||||
					for (int i=0;i<avix.StreamSize/2;i++)
 | 
					 | 
				
			||||||
						p[i]=(p[i]+0x8000)>>4;
 | 
					 | 
				
			||||||
					pbuf=g_i2sbuf[i2ssavebuf];  
 | 
					 | 
				
			||||||
				} 
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			//avi_tiemr_delete();
 | 
					 | 
				
			||||||
			mjpegdec_free();	//<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
 | 
					 | 
				
			||||||
			f_close(favi); 
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if (loop==0)
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	myfree(framebuf);
 | 
					 | 
				
			||||||
	myfree(favi);
 | 
					 | 
				
			||||||
	myfree(audio_buff);
 | 
					 | 
				
			||||||
	myfree(g_i2sbuf[0]);
 | 
					 | 
				
			||||||
	myfree(g_i2sbuf[1]);
 | 
					 | 
				
			||||||
	myfree(g_i2sbuf[2]);
 | 
					 | 
				
			||||||
	myfree(g_i2sbuf[3]);
 | 
					 | 
				
			||||||
	DAC_NormalDeInit (&dac);
 | 
					 | 
				
			||||||
	return (int)res;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  u8 *audio_buff = mymalloc(AVI_AUDIO_BUF_SIZE);
 | 
				
			||||||
 | 
					  framebuf = mymalloc(AVI_VIDEO_BUF_SIZE);    // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶbuf
 | 
				
			||||||
 | 
					  favi = (FIL *)mymalloc(sizeof(FIL));        // <20><><EFBFBD><EFBFBD>favi<76>ڴ<EFBFBD>
 | 
				
			||||||
 | 
					  g_i2sbuf[0] = mymalloc(AVI_AUDIO_BUF_SIZE); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>ڴ<EFBFBD>
 | 
				
			||||||
 | 
					  g_i2sbuf[1] = mymalloc(AVI_AUDIO_BUF_SIZE); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>ڴ<EFBFBD>
 | 
				
			||||||
 | 
					  g_i2sbuf[2] = mymalloc(AVI_AUDIO_BUF_SIZE); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>ڴ<EFBFBD>
 | 
				
			||||||
 | 
					  g_i2sbuf[3] = mymalloc(AVI_AUDIO_BUF_SIZE); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>ڴ<EFBFBD>
 | 
				
			||||||
 | 
					  mymemset(g_i2sbuf[0], 0, AVI_AUDIO_BUF_SIZE);
 | 
				
			||||||
 | 
					  mymemset(g_i2sbuf[1], 0, AVI_AUDIO_BUF_SIZE);
 | 
				
			||||||
 | 
					  mymemset(g_i2sbuf[2], 0, AVI_AUDIO_BUF_SIZE);
 | 
				
			||||||
 | 
					  mymemset(g_i2sbuf[3], 0, AVI_AUDIO_BUF_SIZE);
 | 
				
			||||||
 | 
					  while (res == 0) {
 | 
				
			||||||
 | 
					    res = f_open(favi, (char *)pname, FA_READ);
 | 
				
			||||||
 | 
					    if (res == 0) {
 | 
				
			||||||
 | 
					      pbuf = framebuf;
 | 
				
			||||||
 | 
					      res = f_read(favi, pbuf, AVI_VIDEO_BUF_SIZE, &nr); // <20><>ʼ<EFBFBD><CABC>ȡ
 | 
				
			||||||
 | 
					      if (res) {
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      // <20><>ʼavi<76><69><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					      res = avi_init(pbuf, AVI_VIDEO_BUF_SIZE); // avi<76><69><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					      if (res) {
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      // avi_timer_init (avix.SecPerFrame);
 | 
				
			||||||
 | 
					      offset =
 | 
				
			||||||
 | 
					          avi_srarch_id(pbuf, AVI_VIDEO_BUF_SIZE, (u8 *)"movi"); // Ѱ<><D1B0>movi ID
 | 
				
			||||||
 | 
					      avi_get_streaminfo(pbuf + offset + 4);                     // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>Ϣ
 | 
				
			||||||
 | 
					      f_lseek(favi, offset + 12 - 8); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־ID,<2C><><EFBFBD><EFBFBD>ַƫ<D6B7>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>ʼ<EFBFBD><CABC>
 | 
				
			||||||
 | 
					      extern void jdmerge_setvideo_xsize(int xsize, int lcd_xsize);
 | 
				
			||||||
 | 
					      jdmerge_setvideo_xsize(avix.Width, LCD_GetLcdSizeX()); // <20><><EFBFBD>õ<EFBFBD>ַ<EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					      res =
 | 
				
			||||||
 | 
					          mjpegdec_init((LCD_GetLcdSizeX() - avix.Width) / 2,
 | 
				
			||||||
 | 
					                        (LCD_GetLcdSizeY() - avix.Height) / 2); // JPG<50><47><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
 | 
				
			||||||
 | 
					      if (avix.SampleRate) // <20><><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>Ϣ,<2C>ų<EFBFBD>ʼ<EFBFBD><CABC>
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        // <20><>ʼ<EFBFBD><CABC>DAC
 | 
				
			||||||
 | 
					        dac.buff1 = (u32 *)g_i2sbuf[1];
 | 
				
			||||||
 | 
					        dac.buff2 = (u32 *)g_i2sbuf[2];
 | 
				
			||||||
 | 
					        dac.buff_size = avix.AudioBufSize;
 | 
				
			||||||
 | 
					        dac.rate = DAC_GetRate(avix.SampleRate);
 | 
				
			||||||
 | 
					        dac.call_back = audio_i2s_dma_callback;
 | 
				
			||||||
 | 
					        DAC_NormalInit(&dac);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      while (1) // <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        f_read(favi, listhead, 8, &nr);
 | 
				
			||||||
 | 
					        if (avi_get_streaminfo(listhead)) // <20><>ȡ<EFBFBD><C8A1>һ֡ <20><><EFBFBD><EFBFBD>־
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (Touch_GetState()->x[1] != 0)
 | 
				
			||||||
 | 
					          break; // <20><>Ļ<EFBFBD><C4BB><EFBFBD>㴥<EFBFBD><E3B4A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					        if (USART3_GetKeyPressed() & (0x08))
 | 
				
			||||||
 | 
					          break;                            // <20><><EFBFBD>·<EFBFBD><C2B7>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					        if (avix.StreamID == AVI_VIDS_FLAG) // <20><>Ƶ<EFBFBD><C6B5>
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          pbuf = framebuf;
 | 
				
			||||||
 | 
					          // mymemset (pbuf,0,AVI_VIDEO_BUF_SIZE);
 | 
				
			||||||
 | 
					          f_read(favi, pbuf, avix.StreamSize + 8 - 8,
 | 
				
			||||||
 | 
					                 &nr); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡+<2B><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID<49><44>Ϣ
 | 
				
			||||||
 | 
					          // <20>ȴ<EFBFBD>֡ʱ<D6A1><CAB1>
 | 
				
			||||||
 | 
					          // while (g_frame_en==0){} g_frame_en=0;
 | 
				
			||||||
 | 
					          while (LCD_GetLayerUpdataStat() == 0)
 | 
				
			||||||
 | 
					            ;
 | 
				
			||||||
 | 
					          LCD_SwitchLayerBuff();
 | 
				
			||||||
 | 
					          res = mjpegdec_decode(pbuf, avix.StreamSize);
 | 
				
			||||||
 | 
					          if (res == 0) {
 | 
				
			||||||
 | 
					            LCD_ExitLayerBuff();
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          if (res) {
 | 
				
			||||||
 | 
					            // break;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        } else // <20><>Ƶ<EFBFBD><C6B5>
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          //					f_read(favi,audio_buff,avix.StreamSize+8-8,&nr);//<2F><><EFBFBD><EFBFBD>i2sbuf
 | 
				
			||||||
 | 
					          //					pbuf=audio_buff;
 | 
				
			||||||
 | 
					          i2ssavebuf++;
 | 
				
			||||||
 | 
					          if (i2ssavebuf > 3)
 | 
				
			||||||
 | 
					            i2ssavebuf = 0;
 | 
				
			||||||
 | 
					          do {
 | 
				
			||||||
 | 
					            nr = g_i2splaybuf;
 | 
				
			||||||
 | 
					            if (nr)
 | 
				
			||||||
 | 
					              nr--;
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					              nr = 3;
 | 
				
			||||||
 | 
					          } while (i2ssavebuf == nr); // <20><>ײ<EFBFBD>ȴ<EFBFBD>.
 | 
				
			||||||
 | 
					          f_read(favi, g_i2sbuf[i2ssavebuf], avix.StreamSize,
 | 
				
			||||||
 | 
					                 &nr); // <20><><EFBFBD><EFBFBD>i2sbuf
 | 
				
			||||||
 | 
					          u16 *p = (u16 *)g_i2sbuf[i2ssavebuf];
 | 
				
			||||||
 | 
					          for (int i = 0; i < avix.StreamSize / 2; i++)
 | 
				
			||||||
 | 
					            p[i] = (p[i] + 0x8000) >> 4;
 | 
				
			||||||
 | 
					          pbuf = g_i2sbuf[i2ssavebuf];
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      // avi_tiemr_delete();
 | 
				
			||||||
 | 
					      mjpegdec_free(); // <20>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
 | 
				
			||||||
 | 
					      f_close(favi);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (loop == 0)
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  myfree(framebuf);
 | 
				
			||||||
 | 
					  myfree(favi);
 | 
				
			||||||
 | 
					  myfree(audio_buff);
 | 
				
			||||||
 | 
					  myfree(g_i2sbuf[0]);
 | 
				
			||||||
 | 
					  myfree(g_i2sbuf[1]);
 | 
				
			||||||
 | 
					  myfree(g_i2sbuf[2]);
 | 
				
			||||||
 | 
					  myfree(g_i2sbuf[3]);
 | 
				
			||||||
 | 
					  DAC_NormalDeInit(&dac);
 | 
				
			||||||
 | 
					  return (int)res;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,226 +2,204 @@
 | 
				
			|||||||
#define __AVI_H
 | 
					#define __AVI_H
 | 
				
			||||||
#include <stm32f4xx.h>
 | 
					#include <stm32f4xx.h>
 | 
				
			||||||
//////////////////////////////////////////////////////////////////////////////////
 | 
					//////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
 | 
					// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD>ѧϰʹ<EFBFBD>ã<EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD>;
 | 
				
			||||||
//ALIENTEK STM32F407<30><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					// ALIENTEK STM32F407<30><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
//AVI<56><49>Ƶ<EFBFBD><C6B5>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>	   
 | 
					// AVI<EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
 | 
					// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD>@ALIENTEK
 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
 | 
					// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2014/7/20
 | 
					// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2014/7/20
 | 
				
			||||||
//<2F>汾<EFBFBD><E6B1BE>V1.0
 | 
					// <EFBFBD>汾<EFBFBD><EFBFBD>V1.0
 | 
				
			||||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
 | 
					// <EFBFBD><EFBFBD>Ȩ<EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2009-2019
 | 
					// Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2009-2019
 | 
				
			||||||
//All rights reserved									  
 | 
					// All rights reserved
 | 
				
			||||||
//*******************************************************************************
 | 
					//*******************************************************************************
 | 
				
			||||||
//<2F><EFBFBD><DEB8><EFBFBD>Ϣ
 | 
					// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
 | 
				
			||||||
//<2F><>
 | 
					// <EFBFBD><EFBFBD>
 | 
				
			||||||
//////////////////////////////////////////////////////////////////////////////////
 | 
					//////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
typedef enum {
 | 
					typedef enum {
 | 
				
			||||||
	AVI_OK=0,				//0,<2C>ɹ<EFBFBD>
 | 
					  AVI_OK = 0,     // 0,<2C>ɹ<EFBFBD>
 | 
				
			||||||
	AVI_RIFF_ERR,			//1,RIFF ID<49><44>ȡʧ<C8A1><CAA7>
 | 
					  AVI_RIFF_ERR,   // 1,RIFF ID<49><44>ȡʧ<C8A1><CAA7>
 | 
				
			||||||
	AVI_AVI_ERR,			//2,AVI ID<49><44>ȡʧ<C8A1><CAA7>
 | 
					  AVI_AVI_ERR,    // 2,AVI ID<49><44>ȡʧ<C8A1><CAA7>
 | 
				
			||||||
	AVI_LIST_ERR,			//3,LIST ID<49><44>ȡʧ<C8A1><CAA7>
 | 
					  AVI_LIST_ERR,   // 3,LIST ID<49><44>ȡʧ<C8A1><CAA7>
 | 
				
			||||||
	AVI_HDRL_ERR,			//4,HDRL ID<49><44>ȡʧ<C8A1><CAA7>
 | 
					  AVI_HDRL_ERR,   // 4,HDRL ID<49><44>ȡʧ<C8A1><CAA7>
 | 
				
			||||||
	AVI_AVIH_ERR,			//5,AVIH ID<49><44>ȡʧ<C8A1><CAA7>
 | 
					  AVI_AVIH_ERR,   // 5,AVIH ID<49><44>ȡʧ<C8A1><CAA7>
 | 
				
			||||||
	AVI_STRL_ERR,			//6,STRL ID<49><44>ȡʧ<C8A1><CAA7>
 | 
					  AVI_STRL_ERR,   // 6,STRL ID<49><44>ȡʧ<C8A1><CAA7>
 | 
				
			||||||
	AVI_STRH_ERR,			//7,STRH ID<49><44>ȡʧ<C8A1><CAA7>
 | 
					  AVI_STRH_ERR,   // 7,STRH ID<49><44>ȡʧ<C8A1><CAA7>
 | 
				
			||||||
	AVI_STRF_ERR,			//8,STRF ID<49><44>ȡʧ<C8A1><CAA7>
 | 
					  AVI_STRF_ERR,   // 8,STRF ID<49><44>ȡʧ<C8A1><CAA7>
 | 
				
			||||||
	AVI_MOVI_ERR,			//9,MOVI ID<49><44>ȡʧ<C8A1><CAA7>
 | 
					  AVI_MOVI_ERR,   // 9,MOVI ID<49><44>ȡʧ<C8A1><CAA7>
 | 
				
			||||||
	AVI_FORMAT_ERR,			//10,<2C><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
 | 
					  AVI_FORMAT_ERR, // 10,<2C><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
 | 
				
			||||||
	AVI_STREAM_ERR,			//11,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					  AVI_STREAM_ERR, // 11,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
}AVISTATUS;
 | 
					} AVISTATUS;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define AVI_RIFF_ID 0X46464952
 | 
				
			||||||
 | 
					#define AVI_AVI_ID 0X20495641
 | 
				
			||||||
 | 
					#define AVI_LIST_ID 0X5453494C
 | 
				
			||||||
 | 
					#define AVI_HDRL_ID 0X6C726468 // <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>־
 | 
				
			||||||
 | 
					#define AVI_MOVI_ID 0X69766F6D // <20><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>־
 | 
				
			||||||
 | 
					#define AVI_STRL_ID 0X6C727473 // strl<72><6C>־
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define AVI_AVIH_ID 0X68697661 // avih<69>ӿ<EFBFBD><D3BF><EFBFBD>AVI_HDRL_ID
 | 
				
			||||||
 | 
					#define AVI_STRH_ID 0X68727473 // strh(<28><>ͷ)<29>ӿ<EFBFBD><D3BF><EFBFBD>AVI_STRL_ID
 | 
				
			||||||
 | 
					#define AVI_STRF_ID 0X66727473 // strf(<28><><EFBFBD><EFBFBD>ʽ)<29>ӿ<EFBFBD><D3BF><EFBFBD>AVI_STRL_ID
 | 
				
			||||||
 | 
					#define AVI_STRD_ID 0X64727473 // strd<72>ӿ<EFBFBD><D3BF><EFBFBD>AVI_STRL_ID (<28><>ѡ<EFBFBD><D1A1>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define AVI_RIFF_ID			0X46464952  
 | 
					#define AVI_VIDS_STREAM 0X73646976 // <20><>Ƶ<EFBFBD><C6B5>
 | 
				
			||||||
#define AVI_AVI_ID			0X20495641
 | 
					#define AVI_AUDS_STREAM 0X73647561 // <20><>Ƶ<EFBFBD><C6B5>
 | 
				
			||||||
#define AVI_LIST_ID			0X5453494C  
 | 
					 | 
				
			||||||
#define AVI_HDRL_ID			0X6C726468		//<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>־
 | 
					 | 
				
			||||||
#define AVI_MOVI_ID			0X69766F6D 		//<2F><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>־
 | 
					 | 
				
			||||||
#define AVI_STRL_ID			0X6C727473		//strl<72><6C>־
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define AVI_AVIH_ID			0X68697661 		//avih<69>ӿ<EFBFBD><D3BF><EFBFBD>AVI_HDRL_ID
 | 
					#define AVI_VIDS_FLAG 0X6463 // <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>־
 | 
				
			||||||
#define AVI_STRH_ID			0X68727473		//strh(<28><>ͷ)<29>ӿ<EFBFBD><D3BF><EFBFBD>AVI_STRL_ID
 | 
					#define AVI_AUDS_FLAG 0X7762 // <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>־
 | 
				
			||||||
#define AVI_STRF_ID			0X66727473 		//strf(<28><><EFBFBD><EFBFBD>ʽ)<29>ӿ<EFBFBD><D3BF><EFBFBD>AVI_STRL_ID
 | 
					 | 
				
			||||||
#define AVI_STRD_ID			0X64727473 		//strd<72>ӿ<EFBFBD><D3BF><EFBFBD>AVI_STRL_ID (<28><>ѡ<EFBFBD><D1A1>)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AVI_VIDS_STREAM		0X73646976		//<2F><>Ƶ<EFBFBD><C6B5>
 | 
					 | 
				
			||||||
#define AVI_AUDS_STREAM		0X73647561 		//<2F><>Ƶ<EFBFBD><C6B5>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define AVI_VIDS_FLAG		0X6463			//<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>־
 | 
					 | 
				
			||||||
#define AVI_AUDS_FLAG		0X7762 			//<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>־
 | 
					 | 
				
			||||||
//////////////////////////////////////////////////////////////////////////////////////////
 | 
					//////////////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define AVI_FORMAT_MJPG		0X47504A4D  
 | 
					#define AVI_FORMAT_MJPG 0X47504A4D
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// AVI <20><>Ϣ<EFBFBD>ṹ<EFBFBD><E1B9B9>
 | 
				
			||||||
 | 
					// <20><>һЩ<D2BB><D0A9>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					typedef struct __packed {
 | 
				
			||||||
 | 
					  u32 SecPerFrame;  // <20><>Ƶ֡<C6B5><D6A1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>(<28><>λΪus)
 | 
				
			||||||
 | 
					  u32 TotalFrame;   // <20>ļ<EFBFBD><C4BC><EFBFBD>֡<EFBFBD><D6A1>
 | 
				
			||||||
 | 
					  u32 Width;        // ͼ<><CDBC><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  u32 Height;       // ͼ<><CDBC><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  u32 SampleRate;   // <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  u16 Channels;     // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,һ<><D2BB>Ϊ2,<2C><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  u16 AudioBufSize; // <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
 | 
				
			||||||
 | 
					  u16 AudioType;    // <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>:0X0001=PCM;0X0050=MP2;0X0055=MP3;0X2000=AC3;
 | 
				
			||||||
 | 
					  u16 StreamID;     // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID,StreamID=='dc'==0X6463 /StreamID=='wb'==0X7762
 | 
				
			||||||
 | 
					  u32 StreamSize;   // <20><><EFBFBD><EFBFBD>С,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ż<EFBFBD><C5BC>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>1.<2E><>Ϊż<CEAA><C5BC>.
 | 
				
			||||||
 | 
					  u8 *VideoFLAG;    // <20><>Ƶ֡<C6B5><D6A1><EFBFBD><EFBFBD>,VideoFLAG="00dc"/"01dc"
 | 
				
			||||||
 | 
					  u8 *AudioFLAG;    // <20><>Ƶ֡<C6B5><D6A1><EFBFBD><EFBFBD>,AudioFLAG="00wb"/"01wb"
 | 
				
			||||||
 | 
					} AVI_INFO;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//AVI <20><>Ϣ<EFBFBD>ṹ<EFBFBD><E1B9B9>
 | 
					// extern AVI_INFO avix;		//avi<76>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
 | 
				
			||||||
//<2F><>һЩ<D2BB><D0A9>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					 | 
				
			||||||
typedef struct __packed
 | 
					 | 
				
			||||||
{	  
 | 
					 | 
				
			||||||
	u32 SecPerFrame;		//<2F><>Ƶ֡<C6B5><D6A1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>(<28><>λΪus)
 | 
					 | 
				
			||||||
	u32 TotalFrame;			//<2F>ļ<EFBFBD><C4BC><EFBFBD>֡<EFBFBD><D6A1>
 | 
					 | 
				
			||||||
	u32 Width;				//ͼ<><CDBC><EFBFBD><EFBFBD>
 | 
					 | 
				
			||||||
	u32 Height;				//ͼ<><CDBC><EFBFBD><EFBFBD>
 | 
					 | 
				
			||||||
	u32 SampleRate; 		//<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					 | 
				
			||||||
	u16 Channels;	  		//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,һ<><D2BB>Ϊ2,<2C><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 
 | 
					 | 
				
			||||||
	u16 AudioBufSize;		//<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
 | 
					 | 
				
			||||||
	u16 AudioType;	  		//<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>:0X0001=PCM;0X0050=MP2;0X0055=MP3;0X2000=AC3;
 | 
					 | 
				
			||||||
	u16 StreamID;			//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID,StreamID=='dc'==0X6463 /StreamID=='wb'==0X7762
 | 
					 | 
				
			||||||
	u32 StreamSize;			//<2F><><EFBFBD><EFBFBD>С,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ż<EFBFBD><C5BC>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>1.<2E><>Ϊż<CEAA><C5BC>.
 | 
					 | 
				
			||||||
	u8* VideoFLAG;			//<2F><>Ƶ֡<C6B5><D6A1><EFBFBD><EFBFBD>,VideoFLAG="00dc"/"01dc"
 | 
					 | 
				
			||||||
	u8* AudioFLAG;			//<2F><>Ƶ֡<C6B5><D6A1><EFBFBD><EFBFBD>,AudioFLAG="00wb"/"01wb"
 | 
					 | 
				
			||||||
}AVI_INFO;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//extern AVI_INFO avix;		//avi<76>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
//////////////////////////////////////////////////////////////////////////////////////////
 | 
					//////////////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
//AVI <20><><EFBFBD><EFBFBD>Ϣ
 | 
					// AVI <20><><EFBFBD><EFBFBD>Ϣ
 | 
				
			||||||
typedef struct
 | 
					typedef struct {
 | 
				
			||||||
{	
 | 
					  u32 RiffID;   // RiffID=='RIFF'==0X61766968
 | 
				
			||||||
	u32 RiffID;				//RiffID=='RIFF'==0X61766968
 | 
					  u32 FileSize; // AVI<56>ļ<EFBFBD><C4BC><EFBFBD>С(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8<EFBFBD>ֽ<EFBFBD>,ҲRIFFID<49><44>FileSize<7A><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
 | 
				
			||||||
	u32 FileSize;			//AVI<56>ļ<EFBFBD><C4BC><EFBFBD>С(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8<EFBFBD>ֽ<EFBFBD>,ҲRIFFID<49><44>FileSize<7A><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
 | 
					  u32 AviID;    // AviID=='AVI '==0X41564920
 | 
				
			||||||
	u32 AviID;				//AviID=='AVI '==0X41564920 
 | 
					} AVI_HEADER;
 | 
				
			||||||
}AVI_HEADER;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
//AVI <20><><EFBFBD><EFBFBD>Ϣ
 | 
					// AVI <20><><EFBFBD><EFBFBD>Ϣ
 | 
				
			||||||
typedef struct
 | 
					typedef struct {
 | 
				
			||||||
{	
 | 
					  u32 FrameID;   // ֡ID,FrameID=='RIFF'==0X61766968
 | 
				
			||||||
	u32 FrameID;			//֡ID,FrameID=='RIFF'==0X61766968
 | 
					  u32 FrameSize; // ֡<><D6A1>С
 | 
				
			||||||
	u32 FrameSize;			//֡<><D6A1>С 
 | 
					} FRAME_HEADER;
 | 
				
			||||||
}FRAME_HEADER;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// LIST <20><><EFBFBD><EFBFBD>Ϣ
 | 
				
			||||||
 | 
					typedef struct {
 | 
				
			||||||
 | 
					  u32 ListID;    // ListID=='LIST'==0X4c495354
 | 
				
			||||||
 | 
					  u32 BlockSize; // <20><><EFBFBD><EFBFBD>С(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8<EFBFBD>ֽ<EFBFBD>,ҲListID<49><44>BlockSize<7A><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
 | 
				
			||||||
 | 
					  u32 ListType; // LIST<53>ӿ<EFBFBD><D3BF><EFBFBD><EFBFBD><EFBFBD>:hdrl(<28><>Ϣ<EFBFBD><CFA2>)/movi(<28><><EFBFBD>ݿ<EFBFBD>)/idxl(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C>DZ<EFBFBD><C7B1><EFBFBD>,<2C>ǿ<EFBFBD>ѡ<EFBFBD><D1A1>)
 | 
				
			||||||
 | 
					} LIST_HEADER;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//LIST <20><><EFBFBD><EFBFBD>Ϣ
 | 
					// avih <20>ӿ<EFBFBD><EFBFBD><EFBFBD>Ϣ
 | 
				
			||||||
typedef struct
 | 
					typedef struct {
 | 
				
			||||||
{	
 | 
					  u32 BlockID;   // <20><><EFBFBD><EFBFBD>־:avih==0X61766968
 | 
				
			||||||
	u32 ListID;				//ListID=='LIST'==0X4c495354
 | 
					  u32 BlockSize; // <20><><EFBFBD><EFBFBD>С(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8<EFBFBD>ֽ<EFBFBD>,Ҳ<><D2B2><EFBFBD><EFBFBD>BlockID<49><44>BlockSize<7A><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
 | 
				
			||||||
	u32 BlockSize;			//<2F><><EFBFBD><EFBFBD>С(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8<EFBFBD>ֽ<EFBFBD>,ҲListID<49><44>BlockSize<7A><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
 | 
					  u32 SecPerFrame;        // <20><>Ƶ֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>(<28><>λΪus)
 | 
				
			||||||
	u32 ListType;			//LIST<53>ӿ<EFBFBD><D3BF><EFBFBD><EFBFBD><EFBFBD>:hdrl(<28><>Ϣ<EFBFBD><CFA2>)/movi(<28><><EFBFBD>ݿ<EFBFBD>)/idxl(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C>DZ<EFBFBD><C7B1><EFBFBD>,<2C>ǿ<EFBFBD>ѡ<EFBFBD><D1A1>)
 | 
					  u32 MaxByteSec;         // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>,<2C>ֽ<EFBFBD>/<2F><>
 | 
				
			||||||
}LIST_HEADER;
 | 
					  u32 PaddingGranularity; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  u32 Flags;              // AVI<56>ļ<EFBFBD><C4BC><EFBFBD>ȫ<EFBFBD>ֱ<EFBFBD><D6B1>ǣ<EFBFBD><C7A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  u32 TotalFrame;         // <20>ļ<EFBFBD><C4BC><EFBFBD>֡<EFBFBD><D6A1>
 | 
				
			||||||
 | 
					  u32 InitFrames;         // Ϊ<><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽָ<CABD><D6B8><EFBFBD><EFBFBD>ʼ֡<CABC><D6A1><EFBFBD><EFBFBD><EFBFBD>ǽ<EFBFBD><C7BD><EFBFBD><EFBFBD><EFBFBD>ʽӦ<CABD><D3A6>ָ<EFBFBD><D6B8>Ϊ0<CEAA><30>
 | 
				
			||||||
 | 
					  u32 Streams;            // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ͨ<><CDA8>Ϊ2
 | 
				
			||||||
 | 
					  u32 RefBufSize; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ飩Ĭ<E9A3A9>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD><EFBFBD>1M<31>ֽ<EFBFBD>!!!
 | 
				
			||||||
 | 
					  u32 Width;      // ͼ<><CDBC><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  u32 Height;     // ͼ<><CDBC><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  u32 Reserved[4]; // <20><><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					} AVIH_HEADER;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//avih <20>ӿ<EFBFBD><D3BF><EFBFBD>Ϣ
 | 
					// strh <20><>ͷ<EFBFBD>ӿ<EFBFBD><D3BF><EFBFBD>Ϣ(strh<72><68>strl)
 | 
				
			||||||
typedef struct
 | 
					typedef struct {
 | 
				
			||||||
{	
 | 
					  u32 BlockID;   // <20><><EFBFBD><EFBFBD>־:strh==0X73747268
 | 
				
			||||||
	u32 BlockID;			//<2F><><EFBFBD><EFBFBD>־:avih==0X61766968
 | 
					  u32 BlockSize; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>С(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8<EFBFBD>ֽ<EFBFBD>,Ҳ<><D2B2><EFBFBD><EFBFBD>BlockID<49><44>BlockSize<7A><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
 | 
				
			||||||
	u32 BlockSize;			//<2F><><EFBFBD><EFBFBD>С(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8<EFBFBD>ֽ<EFBFBD>,Ҳ<><D2B2><EFBFBD><EFBFBD>BlockID<49><44>BlockSize<7A><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
 | 
					  u32 StreamType; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>࣬vids(0X73646976):<3A><>Ƶ;auds(0X73647561):<EFBFBD><EFBFBD>Ƶ
 | 
				
			||||||
	u32 SecPerFrame;		//<2F><>Ƶ֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>(<28><>λΪus)
 | 
					  u32 Handler;  // ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD>ǽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>MJPG/H264֮<34><D6AE><EFBFBD><EFBFBD>.
 | 
				
			||||||
	u32 MaxByteSec; 		//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>,<2C>ֽ<EFBFBD>/<EFBFBD><EFBFBD>
 | 
					  u32 Flags;    // <20><><EFBFBD>ǣ<EFBFBD><C7A3>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD>Ƿ<EFBFBD><C7B7>仯<EFBFBD><EFBFBD>
 | 
				
			||||||
	u32 PaddingGranularity; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					  u16 Priority; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ΪĬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
	u32 Flags;				//AVI<56>ļ<EFBFBD><C4BC><EFBFBD>ȫ<EFBFBD>ֱ<EFBFBD><D6B1>ǣ<EFBFBD><C7A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					  u16 Language; // <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
	u32 TotalFrame;			//<2F>ļ<EFBFBD><C4BC><EFBFBD>֡<EFBFBD><EFBFBD>
 | 
					  u32 InitFrames; // Ϊ<><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽָ<CABD><D6B8><EFBFBD><EFBFBD>ʼ֡<EFBFBD><EFBFBD>
 | 
				
			||||||
	u32 InitFrames;  		//Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽӦ<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>Ϊ0<EFBFBD><EFBFBD>
 | 
					  u32 Scale;      // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><>Ƶÿ<C6B5><C3BF><EFBFBD>Ĵ<EFBFBD>С<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
 | 
				
			||||||
	u32 Streams;			//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ͨ<><CDA8>Ϊ2
 | 
					  u32 Rate;       // Scale/Rate=ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
	u32 RefBufSize;			//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ飩Ĭ<EFBFBD>Ͽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1M<EFBFBD>ֽ<EFBFBD>!!!
 | 
					  u32 Start;      // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>λ<EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD>λΪScale
 | 
				
			||||||
	u32 Width;				//ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					  u32 Length;     // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λΪScale
 | 
				
			||||||
	u32 Height;				//ͼ<><CDBC><EFBFBD><EFBFBD>
 | 
					  u32 RefBufSize; // <20><><EFBFBD><EFBFBD>ʹ<EFBFBD>õĻ<C3B5><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
 | 
				
			||||||
	u32 Reserved[4];		//<2F><><EFBFBD><EFBFBD>
 | 
					  u32 Quality;    // <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵԽ<D6B5><D4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><EFBFBD>
 | 
				
			||||||
}AVIH_HEADER;
 | 
					  u32 SampleSize; // <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
 | 
				
			||||||
 | 
					  struct          // <20><>Ƶ֡<C6B5><D6A1>ռ<EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    short Left;
 | 
				
			||||||
 | 
					    short Top;
 | 
				
			||||||
 | 
					    short Right;
 | 
				
			||||||
 | 
					    short Bottom;
 | 
				
			||||||
 | 
					  } Frame;
 | 
				
			||||||
 | 
					} STRH_HEADER;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//strh <20><>ͷ<EFBFBD>ӿ<EFBFBD><D3BF><EFBFBD>Ϣ(strh<72><68>strl)
 | 
					// BMP<4D>ṹ<EFBFBD><E1B9B9>
 | 
				
			||||||
typedef struct
 | 
					typedef struct {
 | 
				
			||||||
{	
 | 
					  u32 BmpSize;       // bmp<6D>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD>С,<2C><><EFBFBD><EFBFBD>(BmpSize<7A><65><EFBFBD><EFBFBD>)
 | 
				
			||||||
	u32 BlockID;			//<2F><><EFBFBD><EFBFBD>־:strh==0X73747268
 | 
					  long Width;        // ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
	u32 BlockSize;			//<2F><><EFBFBD><EFBFBD>С(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8<EFBFBD>ֽ<EFBFBD>,Ҳ<><D2B2><EFBFBD><EFBFBD>BlockID<49><44>BlockSize<7A><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
 | 
					  long Height;       // ͼ<><CDBC><EFBFBD><EFBFBD>
 | 
				
			||||||
	u32 StreamType;			//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>࣬vids(0X73646976):<3A><>Ƶ;auds(0X73647561):<3A><>Ƶ
 | 
					  u16 Planes;        // ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ1
 | 
				
			||||||
	u32 Handler;			//ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>˵<EFBFBD><CBB5><EFBFBD>ǽ<EFBFBD><C7BD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>MJPG/H264֮<34><D6AE><EFBFBD><EFBFBD>.
 | 
					  u16 BitCount;      // <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>,0X0018<31><38>ʾ24λ
 | 
				
			||||||
	u32 Flags;  			//<2F><><EFBFBD>ǣ<EFBFBD><C7A3>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD>仯<EFBFBD><EFBFBD>
 | 
					  u32 Compression;   // ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:MJPG/H264<EFBFBD><EFBFBD>
 | 
				
			||||||
	u16 Priority;			//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD>ߵ<EFBFBD>ΪĬ<CEAA><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					  u32 SizeImage;     // ͼ<><CDBC><EFBFBD><EFBFBD>С
 | 
				
			||||||
	u16 Language;			//<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD>
 | 
					  long XpixPerMeter; // ˮƽ<CBAE>ֱ<EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
	u32 InitFrames;  		//Ϊ<><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽָ<CABD><D6B8><EFBFBD><EFBFBD>ʼ֡<EFBFBD><EFBFBD>
 | 
					  long YpixPerMeter; // <20><>ֱ<EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
	u32 Scale;				//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><>Ƶÿ<C6B5><C3BF><EFBFBD>Ĵ<EFBFBD>С<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
 | 
					  u32 ClrUsed;       // ʵ<EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD>,ѹ<><D1B9><EFBFBD><EFBFBD>ʽ<EFBFBD>в<EFBFBD>ʹ<EFBFBD><EFBFBD>
 | 
				
			||||||
	u32 Rate; 				//Scale/Rate=ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					  u32 ClrImportant;  // <EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
 | 
				
			||||||
	u32 Start;				//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>ŵ<EFBFBD>λ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD>λΪScale
 | 
					} BMP_HEADER;
 | 
				
			||||||
	u32 Length;				//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λΪScale
 | 
					 | 
				
			||||||
 	u32 RefBufSize;  		//<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD>õĻ<C3B5><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
 | 
					 | 
				
			||||||
    u32 Quality;			//<2F><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵԽ<D6B5><D4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>
 | 
					 | 
				
			||||||
	u32 SampleSize;			//<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
 | 
					 | 
				
			||||||
	struct					//<2F><>Ƶ֡<C6B5><D6A1>ռ<EFBFBD>ľ<EFBFBD><C4BE><EFBFBD> 
 | 
					 | 
				
			||||||
	{				
 | 
					 | 
				
			||||||
	   	short Left;
 | 
					 | 
				
			||||||
		short Top;
 | 
					 | 
				
			||||||
		short Right;
 | 
					 | 
				
			||||||
		short Bottom;
 | 
					 | 
				
			||||||
	}Frame;				
 | 
					 | 
				
			||||||
}STRH_HEADER;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
//BMP<EFBFBD>ṹ<EFBFBD><EFBFBD>
 | 
					// <20><>ɫ<EFBFBD><EFBFBD>
 | 
				
			||||||
typedef struct
 | 
					typedef struct {
 | 
				
			||||||
{
 | 
					  u8 rgbBlue;     // <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(ֵ<><D6B5>ΧΪ0-255)
 | 
				
			||||||
	u32	 BmpSize;			//bmp<6D>ṹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>С,<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(BmpSize<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
 | 
					  u8 rgbGreen;    // <EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(ֵ<EFBFBD><EFBFBD>ΧΪ0-255)
 | 
				
			||||||
 	long Width;				//ͼ<><CDBC><EFBFBD><EFBFBD>
 | 
					  u8 rgbRed;      // <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(ֵ<><D6B5>ΧΪ0-255)
 | 
				
			||||||
	long Height;			//ͼ<><CDBC><EFBFBD><EFBFBD>
 | 
					  u8 rgbReserved; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0
 | 
				
			||||||
	u16  Planes;			//ƽ<><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ1
 | 
					} AVIRGBQUAD;
 | 
				
			||||||
	u16  BitCount;			//<2F><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>,0X0018<31><38>ʾ24λ
 | 
					 | 
				
			||||||
	u32  Compression;		//ѹ<><D1B9><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>:MJPG/H264<36><34>
 | 
					 | 
				
			||||||
	u32  SizeImage;			//ͼ<><CDBC><EFBFBD><EFBFBD>С
 | 
					 | 
				
			||||||
	long XpixPerMeter;		//ˮƽ<CBAE>ֱ<EFBFBD><D6B1><EFBFBD>
 | 
					 | 
				
			||||||
	long YpixPerMeter;		//<2F><>ֱ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>
 | 
					 | 
				
			||||||
	u32  ClrUsed;			//ʵ<><CAB5>ʹ<EFBFBD><CAB9><EFBFBD>˵<EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD>е<EFBFBD><D0B5><EFBFBD>ɫ<EFBFBD><C9AB>,ѹ<><D1B9><EFBFBD><EFBFBD>ʽ<EFBFBD>в<EFBFBD>ʹ<EFBFBD><CAB9>
 | 
					 | 
				
			||||||
	u32  ClrImportant;		//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>ɫ
 | 
					 | 
				
			||||||
}BMP_HEADER;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
//<2F><>ɫ<EFBFBD><EFBFBD>
 | 
					// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>strh,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>,strf(<28><><EFBFBD><EFBFBD>ʽ)ʹSTRH_BMPHEADER<EFBFBD><EFBFBD>
 | 
				
			||||||
typedef struct 
 | 
					typedef struct {
 | 
				
			||||||
{
 | 
					  u32 BlockID;   // <20><><EFBFBD><EFBFBD>־,strf==0X73747266
 | 
				
			||||||
	u8  rgbBlue;			//<2F><>ɫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(ֵ<><D6B5>ΧΪ0-255)
 | 
					  u32 BlockSize; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>С(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8<EFBFBD>ֽ<EFBFBD>,Ҳ<><D2B2><EFBFBD><EFBFBD>BlockID<49>ͱ<EFBFBD>BlockSize<7A><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
 | 
				
			||||||
	u8  rgbGreen; 			//<2F><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(ֵ<><D6B5>ΧΪ0-255)
 | 
					  BMP_HEADER bmiHeader;   // λͼ<CEBB><CDBC>Ϣͷ
 | 
				
			||||||
	u8  rgbRed; 			//<2F><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(ֵ<><D6B5>ΧΪ0-255)
 | 
					  AVIRGBQUAD bmColors[1]; // <EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD>
 | 
				
			||||||
	u8  rgbReserved;		//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0
 | 
					} STRF_BMPHEADER;
 | 
				
			||||||
}AVIRGBQUAD;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD>strh,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>,strf(<28><><EFBFBD><EFBFBD>ʽ)ʹSTRH_BMPHEADER<45><52>
 | 
					 | 
				
			||||||
typedef struct 
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	u32 BlockID;			//<2F><><EFBFBD><EFBFBD>־,strf==0X73747266
 | 
					 | 
				
			||||||
	u32 BlockSize;			//<2F><><EFBFBD><EFBFBD>С(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8<EFBFBD>ֽ<EFBFBD>,Ҳ<><D2B2><EFBFBD><EFBFBD>BlockID<49>ͱ<EFBFBD>BlockSize<7A><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
 | 
					 | 
				
			||||||
	BMP_HEADER bmiHeader;  	//λͼ<CEBB><CDBC>Ϣͷ
 | 
					 | 
				
			||||||
	AVIRGBQUAD bmColors[1];	//<2F><>ɫ<EFBFBD><C9AB>
 | 
					 | 
				
			||||||
}STRF_BMPHEADER;  
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD>strh,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>,strf(<28><><EFBFBD><EFBFBD>ʽ)ʹSTRH_WAVHEADER<45><52>
 | 
					 | 
				
			||||||
typedef struct 
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	u32 BlockID;			//<2F><><EFBFBD><EFBFBD>־,strf==0X73747266
 | 
					 | 
				
			||||||
	u32 BlockSize;			//<2F><><EFBFBD><EFBFBD>С(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8<EFBFBD>ֽ<EFBFBD>,Ҳ<><D2B2><EFBFBD><EFBFBD>BlockID<49>ͱ<EFBFBD>BlockSize<7A><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
 | 
					 | 
				
			||||||
   	u16 FormatTag;			//<2F><>ʽ<EFBFBD><CABD>־:0X0001=PCM,0X0055=MP3...
 | 
					 | 
				
			||||||
	u16 Channels;	  		//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,һ<><D2BB>Ϊ2,<2C><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					 | 
				
			||||||
	u32 SampleRate; 		//<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					 | 
				
			||||||
	u32 BaudRate;   		//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 
 | 
					 | 
				
			||||||
	u16 BlockAlign; 		//<2F><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
 | 
					 | 
				
			||||||
	u16 Size;				//<2F>ýṹ<C3BD><E1B9B9>С
 | 
					 | 
				
			||||||
}STRF_WAVHEADER;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define	 MAKEWORD(ptr)	(u16)(((u16)*((u8*)(ptr))<<8)|(u16)*(u8*)((ptr)+1))
 | 
					 | 
				
			||||||
#define  MAKEDWORD(ptr)	(u32)(((u16)*(u8*)(ptr)|(((u16)*(u8*)(ptr+1))<<8)|\
 | 
					 | 
				
			||||||
						(((u16)*(u8*)(ptr+2))<<16)|(((u16)*(u8*)(ptr+3))<<24))) 
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
AVISTATUS avi_init(u8 *buf,int size);		//<2F><>ʼ<EFBFBD><CABC>avi<76><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					 | 
				
			||||||
u16 avi_srarch_id(u8* buf,int size,u8* id);	//<2F><><EFBFBD><EFBFBD>ID,ID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD><34><EFBFBD>ֽڳ<D6BD><DAB3><EFBFBD>
 | 
					 | 
				
			||||||
AVISTATUS avi_get_streaminfo(u8* buf);		//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>Ϣ
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ,loop==1,ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					 | 
				
			||||||
int video_play (char *pname,int loop);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// <20><><EFBFBD><EFBFBD>strh,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>,strf(<28><><EFBFBD><EFBFBD>ʽ)ʹSTRH_WAVHEADER<45><52>
 | 
				
			||||||
 | 
					typedef struct {
 | 
				
			||||||
 | 
					  u32 BlockID;   // <20><><EFBFBD><EFBFBD>־,strf==0X73747266
 | 
				
			||||||
 | 
					  u32 BlockSize; // <20><><EFBFBD><EFBFBD>С(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8<EFBFBD>ֽ<EFBFBD>,Ҳ<><D2B2><EFBFBD><EFBFBD>BlockID<49>ͱ<EFBFBD>BlockSize<7A><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
 | 
				
			||||||
 | 
					  u16 FormatTag;  // <20><>ʽ<EFBFBD><CABD>־:0X0001=PCM,0X0055=MP3...
 | 
				
			||||||
 | 
					  u16 Channels;   // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,һ<><D2BB>Ϊ2,<2C><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  u32 SampleRate; // <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  u32 BaudRate;   // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  u16 BlockAlign; // <20><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
 | 
				
			||||||
 | 
					  u16 Size;       // <20>ýṹ<C3BD><E1B9B9>С
 | 
				
			||||||
 | 
					} STRF_WAVHEADER;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define MAKEWORD(ptr)                                                          \
 | 
				
			||||||
 | 
					  (u16)(((u16) * ((u8 *)(ptr)) << 8) | (u16) * (u8 *)((ptr) + 1))
 | 
				
			||||||
 | 
					#define MAKEDWORD(ptr)                                                         \
 | 
				
			||||||
 | 
					  (u32)(((u16) * (u8 *)(ptr) | (((u16) * (u8 *)(ptr + 1)) << 8) |              \
 | 
				
			||||||
 | 
					         (((u16) * (u8 *)(ptr + 2)) << 16) |                                   \
 | 
				
			||||||
 | 
					         (((u16) * (u8 *)(ptr + 3)) << 24)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					AVISTATUS avi_init(u8 *buf, int size);        // <20><>ʼ<EFBFBD><CABC>avi<76><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					u16 avi_srarch_id(u8 *buf, int size, u8 *id); // <20><><EFBFBD><EFBFBD>ID,ID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD><34><EFBFBD>ֽڳ<D6BD><DAB3><EFBFBD>
 | 
				
			||||||
 | 
					AVISTATUS avi_get_streaminfo(u8 *buf);        // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>Ϣ
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ,loop==1,ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					int video_play(char *pname, int loop);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
u8 Avih_Parser(u8 *buffer);
 | 
					u8 Avih_Parser(u8 *buffer);
 | 
				
			||||||
u8 Strl_Parser(u8 *buffer);
 | 
					u8 Strl_Parser(u8 *buffer);
 | 
				
			||||||
u8 Strf_Parser(u8 *buffer);
 | 
					u8 Strf_Parser(u8 *buffer);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					u16 Search_Movi(u8 *buffer);
 | 
				
			||||||
 | 
					u16 Search_Fram(u8 *buffer);
 | 
				
			||||||
u16 Search_Movi(u8* buffer);
 | 
					u32 ReadUnit(u8 *buffer, u8 index, u8 Bytes, u8 Format);
 | 
				
			||||||
u16 Search_Fram(u8* buffer);
 | 
					 | 
				
			||||||
u32 ReadUnit(u8 *buffer,u8 index,u8 Bytes,u8 Format);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,223 +1,186 @@
 | 
				
			|||||||
#include "mjpeg.h"
 | 
					#include "mjpeg.h"
 | 
				
			||||||
#include "mymem.h"
 | 
					 | 
				
			||||||
#include "ff.h"
 | 
					#include "ff.h"
 | 
				
			||||||
#include "lcd_rgb.h"
 | 
					#include "lcd_rgb.h"
 | 
				
			||||||
 | 
					#include "mymem.h"
 | 
				
			||||||
//////////////////////////////////////////////////////////////////////////////////
 | 
					//////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
 | 
					// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD>ѧϰʹ<EFBFBD>ã<EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD>;
 | 
				
			||||||
//ALIENTEK STM32F407<30><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					// ALIENTEK STM32F407<30><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
//MJPEG<45><47>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>	   
 | 
					// MJPEG<EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
 | 
					// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD>@ALIENTEK
 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
 | 
					// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2014/7/20
 | 
					// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2014/7/20
 | 
				
			||||||
//<2F>汾<EFBFBD><E6B1BE>V1.0
 | 
					// <EFBFBD>汾<EFBFBD><EFBFBD>V1.0
 | 
				
			||||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
 | 
					// <EFBFBD><EFBFBD>Ȩ<EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2009-2019
 | 
					// Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2009-2019
 | 
				
			||||||
//All rights reserved									  
 | 
					// All rights reserved
 | 
				
			||||||
//*******************************************************************************
 | 
					//*******************************************************************************
 | 
				
			||||||
//<2F><EFBFBD><DEB8><EFBFBD>Ϣ
 | 
					// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
 | 
				
			||||||
//<2F><>
 | 
					// <EFBFBD><EFBFBD>
 | 
				
			||||||
//////////////////////////////////////////////////////////////////////////////////
 | 
					//////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
struct jpeg_decompress_struct *cinfo;
 | 
					struct jpeg_decompress_struct *cinfo;
 | 
				
			||||||
struct my_error_mgr *jerr;
 | 
					struct my_error_mgr *jerr;
 | 
				
			||||||
u8 *jpegbuf;			//jpeg<65><67><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD>ָ<EFBFBD><D6B8>
 | 
					u8 *jpegbuf;          // jpeg<EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
 | 
				
			||||||
u32 jbufsize;			//jpeg buf<75><66>С
 | 
					u32 jbufsize;         // jpeg buf<75><66>С
 | 
				
			||||||
u16 imgoffx,imgoffy;	//ͼ<><CDBC><EFBFBD><EFBFBD>x,y<><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
 | 
					u16 imgoffx, imgoffy; // ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>x,y<><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
////////////////////////////////////////////////////////////////////////////////
 | 
					////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
//<2F><EFBFBD><F2B5A5BF>ٵ<EFBFBD><D9B5>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
 | 
					// <EFBFBD><EFBFBD><EFBFBD>ٵ<EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
 | 
				
			||||||
#define MJPEG_MAX_MALLOC_SIZE 		38*1024			//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><D4B7><EFBFBD>38K<38>ֽ<EFBFBD>
 | 
					#define MJPEG_MAX_MALLOC_SIZE 38 * 1024 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><EFBFBD><EFBFBD>38K<EFBFBD>ֽ<EFBFBD>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					u8 *jmembuf; // mjpeg<65><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڴ<EFBFBD><DAB4><EFBFBD>
 | 
				
			||||||
 | 
					u32 jmempos; // <20>ڴ<EFBFBD><DAB4><EFBFBD>ָ<EFBFBD><D6B8>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
u8 *jmembuf;			//mjpeg<65><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڴ<EFBFBD><DAB4><EFBFBD>
 | 
					// mjpeg<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
 | 
				
			||||||
u32 jmempos;			//<2F>ڴ<EFBFBD><DAB4><EFBFBD>ָ<EFBFBD><D6B8>
 | 
					void *mjpeg_malloc(u32 num) {
 | 
				
			||||||
 | 
					  u32 curpos = jmempos; // <20>˴η<CBB4><CEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
 | 
				
			||||||
//mjpeg<65><67><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
 | 
					  jmempos += num;       // <20><>һ<EFBFBD>η<EFBFBD><CEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
 | 
				
			||||||
void* mjpeg_malloc(u32 num)
 | 
					  if (jmempos > MJPEG_MAX_MALLOC_SIZE) {
 | 
				
			||||||
{
 | 
					    printf("mem error:%d,%d", curpos, num);
 | 
				
			||||||
	u32 curpos=jmempos; //<2F>˴η<CBB4><CEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
 | 
					  }
 | 
				
			||||||
 	jmempos+=num;		//<2F><>һ<EFBFBD>η<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ַ 
 | 
					  return (void *)&jmembuf[curpos]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뵽<EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>ַ
 | 
				
			||||||
	if(jmempos>MJPEG_MAX_MALLOC_SIZE) 
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		printf("mem error:%d,%d",curpos,num);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return (void *)&jmembuf[curpos];	//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뵽<EFBFBD><EBB5BD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>ַ
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
////////////////////////////////////////////////////////////////////////////////
 | 
					////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>
 | 
					// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>
 | 
				
			||||||
static void my_error_exit(j_common_ptr cinfo)
 | 
					static void my_error_exit(j_common_ptr cinfo) {
 | 
				
			||||||
{ 
 | 
					  my_error_ptr myerr = (my_error_ptr)cinfo->err;
 | 
				
			||||||
	my_error_ptr myerr=(my_error_ptr) cinfo->err; 
 | 
					  (*cinfo->err->output_message)(cinfo);
 | 
				
			||||||
	(*cinfo->err->output_message) (cinfo);	 
 | 
					  longjmp(myerr->setjmp_buffer, 1);
 | 
				
			||||||
	longjmp(myerr->setjmp_buffer, 1);	  
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
METHODDEF(void) my_emit_message(j_common_ptr cinfo, int msg_level)
 | 
					METHODDEF(void)
 | 
				
			||||||
{
 | 
					my_emit_message(j_common_ptr cinfo, int msg_level) {
 | 
				
			||||||
	my_error_ptr myerr=(my_error_ptr) cinfo->err;  
 | 
					  my_error_ptr myerr = (my_error_ptr)cinfo->err;
 | 
				
			||||||
    if(msg_level<0)
 | 
					  if (msg_level < 0) {
 | 
				
			||||||
	{
 | 
					    printf("emit msg:%d\r\n", msg_level);
 | 
				
			||||||
		printf("emit msg:%d\r\n",msg_level); 
 | 
					    longjmp(myerr->setjmp_buffer, 1);
 | 
				
			||||||
		longjmp(myerr->setjmp_buffer, 1);		
 | 
					  }
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Դ,<2C><>ִ<EFBFBD><D6B4><EFBFBD>κβ<CEBA><CEB2><EFBFBD>
 | 
					// <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ,<2C><>ִ<EFBFBD><D6B4><EFBFBD>κβ<CEBA><CEB2><EFBFBD>
 | 
				
			||||||
static void init_source(j_decompress_ptr cinfo)
 | 
					static void init_source(j_decompress_ptr cinfo) {
 | 
				
			||||||
{
 | 
					  // <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD>.
 | 
				
			||||||
    //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD>.
 | 
					  return;
 | 
				
			||||||
    return;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뻺<EFBFBD><EBBBBA><EFBFBD><EFBFBD>,һ<><D2BB><EFBFBD>Զ<EFBFBD>ȡ<EFBFBD><C8A1>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>
 | 
					// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뻺<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,һ<><D2BB><EFBFBD>Զ<EFBFBD>ȡ<EFBFBD><C8A1>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>
 | 
				
			||||||
static boolean fill_input_buffer(j_decompress_ptr cinfo)
 | 
					static boolean fill_input_buffer(j_decompress_ptr cinfo) {
 | 
				
			||||||
{  
 | 
					  if (jbufsize == 0) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
	if(jbufsize==0)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					  {
 | 
				
			||||||
	{
 | 
					    // printf("jd read off\r\n");
 | 
				
			||||||
		//printf("jd read off\r\n");
 | 
					    // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
        //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					    jpegbuf[0] = (u8)0xFF;
 | 
				
			||||||
        jpegbuf[0] = (u8) 0xFF;
 | 
					    jpegbuf[1] = (u8)JPEG_EOI;
 | 
				
			||||||
        jpegbuf[1] = (u8) JPEG_EOI;
 | 
					    cinfo->src->next_input_byte = jpegbuf;
 | 
				
			||||||
  		cinfo->src->next_input_byte =jpegbuf;
 | 
					    cinfo->src->bytes_in_buffer = 2;
 | 
				
			||||||
		cinfo->src->bytes_in_buffer = 2; 
 | 
					  } else {
 | 
				
			||||||
	}else
 | 
					    cinfo->src->next_input_byte = jpegbuf;
 | 
				
			||||||
	{
 | 
					    cinfo->src->bytes_in_buffer = jbufsize;
 | 
				
			||||||
		cinfo->src->next_input_byte =jpegbuf;
 | 
					    jbufsize -= jbufsize;
 | 
				
			||||||
		cinfo->src->bytes_in_buffer = jbufsize;
 | 
					  }
 | 
				
			||||||
		jbufsize-=jbufsize;
 | 
					  return TRUE;
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
    return TRUE;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
//<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>num_bytes<65><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					// <EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>num_bytes<65><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
static void skip_input_data(j_decompress_ptr cinfo, long num_bytes)
 | 
					static void skip_input_data(j_decompress_ptr cinfo, long num_bytes) {
 | 
				
			||||||
{ 
 | 
					  /* Just a dumb implementation for now.  Could use fseek() except
 | 
				
			||||||
    /* Just a dumb implementation for now.  Could use fseek() except
 | 
					   * it doesn't work on pipes.  Not clear that being smart is worth
 | 
				
			||||||
    * it doesn't work on pipes.  Not clear that being smart is worth
 | 
					   * any trouble anyway --- large skips are infrequent.
 | 
				
			||||||
    * any trouble anyway --- large skips are infrequent.
 | 
					   */
 | 
				
			||||||
    */
 | 
					  if (num_bytes > 0) {
 | 
				
			||||||
    if (num_bytes > 0)
 | 
					    while (num_bytes > (long)cinfo->src->bytes_in_buffer) {
 | 
				
			||||||
    {
 | 
					      num_bytes -= (long)cinfo->src->bytes_in_buffer;
 | 
				
			||||||
        while(num_bytes>(long) cinfo->src->bytes_in_buffer)
 | 
					      (void)cinfo->src->fill_input_buffer(cinfo);
 | 
				
			||||||
        {
 | 
					      /* note we assume that fill_input_buffer will never
 | 
				
			||||||
            num_bytes-=(long)cinfo->src->bytes_in_buffer;
 | 
					       * return FALSE, so suspension need not be handled.
 | 
				
			||||||
            (void)cinfo->src->fill_input_buffer(cinfo);
 | 
					       */
 | 
				
			||||||
            /* note we assume that fill_input_buffer will never
 | 
					 | 
				
			||||||
            * return FALSE, so suspension need not be handled.
 | 
					 | 
				
			||||||
            */
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        cinfo->src->next_input_byte += (size_t) num_bytes;
 | 
					 | 
				
			||||||
        cinfo->src->bytes_in_buffer -= (size_t) num_bytes;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    cinfo->src->next_input_byte += (size_t)num_bytes;
 | 
				
			||||||
 | 
					    cinfo->src->bytes_in_buffer -= (size_t)num_bytes;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
//<2F>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>jpeg_finish_decompress<73><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					// <EFBFBD>ڽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>jpeg_finish_decompress<73><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
static void term_source(j_decompress_ptr cinfo)
 | 
					static void term_source(j_decompress_ptr cinfo) {
 | 
				
			||||||
{
 | 
					  // <20><><EFBFBD><EFBFBD><EFBFBD>κδ<CEBA><CEB4><EFBFBD>
 | 
				
			||||||
    //<2F><><EFBFBD><EFBFBD><EFBFBD>κδ<CEBA><CEB4><EFBFBD>
 | 
					  return;
 | 
				
			||||||
    return;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
//<2F><>ʼ<EFBFBD><CABC>jpeg<65><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
 | 
					// <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>jpeg<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
 | 
				
			||||||
static void jpeg_filerw_src_init(j_decompress_ptr cinfo)
 | 
					static void jpeg_filerw_src_init(j_decompress_ptr cinfo) {
 | 
				
			||||||
{ 
 | 
					  if (cinfo->src == NULL) /* first time for this JPEG object? */
 | 
				
			||||||
    if (cinfo->src == NULL)     /* first time for this JPEG object? */
 | 
					  {
 | 
				
			||||||
    {
 | 
					    cinfo->src = (struct jpeg_source_mgr *)(*cinfo->mem->alloc_small)(
 | 
				
			||||||
        cinfo->src = (struct jpeg_source_mgr *)
 | 
					        (j_common_ptr)cinfo, JPOOL_PERMANENT, sizeof(struct jpeg_source_mgr));
 | 
				
			||||||
                     (*cinfo->mem->alloc_small)((j_common_ptr) cinfo, JPOOL_PERMANENT,
 | 
					  }
 | 
				
			||||||
                                              sizeof(struct jpeg_source_mgr)); 
 | 
					  cinfo->src->init_source = init_source;
 | 
				
			||||||
    } 
 | 
					  cinfo->src->fill_input_buffer = fill_input_buffer;
 | 
				
			||||||
    cinfo->src->init_source = init_source;
 | 
					  cinfo->src->skip_input_data = skip_input_data;
 | 
				
			||||||
    cinfo->src->fill_input_buffer = fill_input_buffer;
 | 
					  cinfo->src->resync_to_restart =
 | 
				
			||||||
    cinfo->src->skip_input_data = skip_input_data;
 | 
					      jpeg_resync_to_restart; /* use default method */
 | 
				
			||||||
    cinfo->src->resync_to_restart = jpeg_resync_to_restart; /* use default method */
 | 
					  cinfo->src->term_source = term_source;
 | 
				
			||||||
    cinfo->src->term_source = term_source;
 | 
					  cinfo->src->bytes_in_buffer = 0; /* forces fill_input_buffer on first read */
 | 
				
			||||||
    cinfo->src->bytes_in_buffer = 0; /* forces fill_input_buffer on first read */
 | 
					  cinfo->src->next_input_byte = NULL; /* until buffer loaded */
 | 
				
			||||||
    cinfo->src->next_input_byte = NULL; /* until buffer loaded */
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// mjpeg <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
 | 
				
			||||||
//mjpeg <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
 | 
					// offx,offy:x,y<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><EFBFBD>
 | 
				
			||||||
//offx,offy:x,y<><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
 | 
					// <20><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>;
 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>;
 | 
					//        1,ʧ<EFBFBD><EFBFBD>
 | 
				
			||||||
//       1,ʧ<><CAA7>
 | 
					u8 mjpegdec_init(u16 offx, u16 offy) {
 | 
				
			||||||
u8 mjpegdec_init(u16 offx,u16 offy)
 | 
					  cinfo = mymalloc(sizeof(struct jpeg_decompress_struct));
 | 
				
			||||||
{
 | 
					  jerr = mymalloc(sizeof(struct my_error_mgr));
 | 
				
			||||||
	cinfo=mymalloc(sizeof(struct jpeg_decompress_struct));
 | 
					  // <20><><EFBFBD><EFBFBD>sram<61><6D><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>--2020.6.2
 | 
				
			||||||
	jerr=mymalloc(sizeof(struct my_error_mgr));
 | 
					  jmembuf = mymalloc_fast(MJPEG_MAX_MALLOC_SIZE); // MJPEG<45><47><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
	//<2F><><EFBFBD><EFBFBD>sram<61><6D><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>--2020.6.2
 | 
					  if (cinfo == 0 || jerr == 0 || jmembuf == 0) {
 | 
				
			||||||
	jmembuf=mymalloc_fast(MJPEG_MAX_MALLOC_SIZE);//MJPEG<45><47><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					    mjpegdec_free();
 | 
				
			||||||
	if(cinfo==0||jerr==0||jmembuf==0)
 | 
					    return 1;
 | 
				
			||||||
	{
 | 
					  }
 | 
				
			||||||
		mjpegdec_free();
 | 
					  // <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>x,y<><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
 | 
				
			||||||
		return 1;
 | 
					  imgoffx = offx;
 | 
				
			||||||
	}
 | 
					  imgoffy = offy;
 | 
				
			||||||
	//<2F><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>x,y<><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
 | 
					  return 0;
 | 
				
			||||||
	imgoffx=offx;
 | 
					 | 
				
			||||||
	imgoffy=offy; 
 | 
					 | 
				
			||||||
	return 0;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
//mjpeg<65><67><EFBFBD><EFBFBD>,<2C>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
 | 
					// mjpeg<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
 | 
				
			||||||
void mjpegdec_free(void)
 | 
					void mjpegdec_free(void) {
 | 
				
			||||||
{    
 | 
					  myfree(cinfo);
 | 
				
			||||||
	myfree(cinfo);
 | 
					  myfree(jerr);
 | 
				
			||||||
	myfree(jerr);
 | 
					  myfree(jmembuf);
 | 
				
			||||||
	myfree(jmembuf);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>JPEGͼƬ
 | 
					// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>JPEGͼƬ
 | 
				
			||||||
//buf:jpeg<65><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					// buf:jpeg<65><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
//bsize:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
 | 
					// bsize:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>
 | 
					// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>
 | 
				
			||||||
//    <20><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>
 | 
					//     <EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>
 | 
				
			||||||
u8 mjpegdec_decode(u8* buf,u32 bsize)
 | 
					u8 mjpegdec_decode(u8 *buf, u32 bsize) {
 | 
				
			||||||
{
 | 
					  JSAMPARRAY buffer;
 | 
				
			||||||
    JSAMPARRAY buffer;		
 | 
					  if (bsize == 0)
 | 
				
			||||||
	if(bsize==0)return 1;
 | 
					    return 1;
 | 
				
			||||||
	jpegbuf=buf;
 | 
					  jpegbuf = buf;
 | 
				
			||||||
	jbufsize=bsize;	   
 | 
					  jbufsize = bsize;
 | 
				
			||||||
	jmempos=0;//MJEPG<50><47><EFBFBD><EFBFBD>,<2C><><EFBFBD>´<EFBFBD>0<EFBFBD><30>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
 | 
					  jmempos = 0; // MJEPG<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>´<EFBFBD>0<EFBFBD><30>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cinfo->err=jpeg_std_error(&jerr->pub); 
 | 
					  cinfo->err = jpeg_std_error(&jerr->pub);
 | 
				
			||||||
	jerr->pub.error_exit = my_error_exit; 
 | 
					  jerr->pub.error_exit = my_error_exit;
 | 
				
			||||||
	jerr->pub.emit_message = my_emit_message; 
 | 
					  jerr->pub.emit_message = my_emit_message;
 | 
				
			||||||
	//if(bsize>20*1024)printf("s:%d\r\n",bsize); 
 | 
					  // if(bsize>20*1024)printf("s:%d\r\n",bsize);
 | 
				
			||||||
	if (setjmp(jerr->setjmp_buffer)) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					  if (setjmp(jerr->setjmp_buffer)) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
	{ 
 | 
					  {
 | 
				
			||||||
 		jpeg_abort_decompress(cinfo);
 | 
					    jpeg_abort_decompress(cinfo);
 | 
				
			||||||
		jpeg_destroy_decompress(cinfo); 
 | 
					    jpeg_destroy_decompress(cinfo);
 | 
				
			||||||
		return 2;
 | 
					    return 2;
 | 
				
			||||||
	} 
 | 
					  }
 | 
				
			||||||
	jpeg_create_decompress(cinfo); 
 | 
					  jpeg_create_decompress(cinfo);
 | 
				
			||||||
	jpeg_filerw_src_init(cinfo);  
 | 
					  jpeg_filerw_src_init(cinfo);
 | 
				
			||||||
	jpeg_read_header(cinfo, TRUE); 
 | 
					  jpeg_read_header(cinfo, TRUE);
 | 
				
			||||||
	cinfo->dct_method = JDCT_IFAST;
 | 
					  cinfo->dct_method = JDCT_IFAST;
 | 
				
			||||||
	cinfo->do_fancy_upsampling = 0;  
 | 
					  cinfo->do_fancy_upsampling = 0;
 | 
				
			||||||
	jpeg_start_decompress(cinfo); 
 | 
					  jpeg_start_decompress(cinfo);
 | 
				
			||||||
	extern void jdmerge_setlcdaddr (unsigned short *addr);
 | 
					  extern void jdmerge_setlcdaddr(unsigned short *addr);
 | 
				
			||||||
	unsigned short *lcd_addr=(unsigned short *)LCD_GetDrawAddr();
 | 
					  unsigned short *lcd_addr = (unsigned short *)LCD_GetDrawAddr();
 | 
				
			||||||
//	lcd_addr+=LCD_GetLcdSizeX()*LCD_GetLcdSizeY()-1-(imgoffx+imgoffy*LCD_GetLcdSizeX());
 | 
					  //	lcd_addr+=LCD_GetLcdSizeX()*LCD_GetLcdSizeY()-1-(imgoffx+imgoffy*LCD_GetLcdSizeX());
 | 
				
			||||||
	jdmerge_setlcdaddr(lcd_addr);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾλ<CABE><CEBB>
 | 
					  jdmerge_setlcdaddr(lcd_addr); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾλ<EFBFBD><EFBFBD>
 | 
				
			||||||
	while (cinfo->output_scanline < cinfo->output_height) 
 | 
					  while (cinfo->output_scanline < cinfo->output_height) {
 | 
				
			||||||
	{ 
 | 
					    jpeg_read_scanlines(cinfo, buffer, 1);
 | 
				
			||||||
		jpeg_read_scanlines(cinfo, buffer, 1);
 | 
					  }
 | 
				
			||||||
	} 
 | 
					  jpeg_finish_decompress(cinfo);
 | 
				
			||||||
	jpeg_finish_decompress(cinfo); 
 | 
					  jpeg_destroy_decompress(cinfo);
 | 
				
			||||||
	jpeg_destroy_decompress(cinfo);  
 | 
					  return 0;
 | 
				
			||||||
	return 0;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,36 +1,33 @@
 | 
				
			|||||||
#ifndef __MJPEG_H
 | 
					#ifndef __MJPEG_H
 | 
				
			||||||
#define __MJPEG_H
 | 
					#define __MJPEG_H
 | 
				
			||||||
#include "stdio.h"
 | 
					#include "stdio.h"
 | 
				
			||||||
#include <cdjpeg.h> 
 | 
					 | 
				
			||||||
#include "stm32f4xx.h"
 | 
					#include "stm32f4xx.h"
 | 
				
			||||||
 | 
					#include <cdjpeg.h>
 | 
				
			||||||
#include <setjmp.h>
 | 
					#include <setjmp.h>
 | 
				
			||||||
//////////////////////////////////////////////////////////////////////////////////
 | 
					//////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
 | 
					// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD>ѧϰʹ<EFBFBD>ã<EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD>;
 | 
				
			||||||
//ALIENTEK STM32F407<30><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					// ALIENTEK STM32F407<30><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
//MJPEG<45><47>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>	   
 | 
					// MJPEG<EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
 | 
					// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD>@ALIENTEK
 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
 | 
					// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2014/7/20
 | 
					// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2014/7/20
 | 
				
			||||||
//<2F>汾<EFBFBD><E6B1BE>V1.0
 | 
					// <EFBFBD>汾<EFBFBD><EFBFBD>V1.0
 | 
				
			||||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
 | 
					// <EFBFBD><EFBFBD>Ȩ<EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2009-2019
 | 
					// Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2009-2019
 | 
				
			||||||
//All rights reserved									  
 | 
					// All rights reserved
 | 
				
			||||||
//*******************************************************************************
 | 
					//*******************************************************************************
 | 
				
			||||||
//<2F><EFBFBD><DEB8><EFBFBD>Ϣ
 | 
					// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
 | 
				
			||||||
//<2F><>
 | 
					// <EFBFBD><EFBFBD>
 | 
				
			||||||
//////////////////////////////////////////////////////////////////////////////////
 | 
					//////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
struct my_error_mgr {
 | 
					struct my_error_mgr {
 | 
				
			||||||
  struct jpeg_error_mgr pub;
 | 
					  struct jpeg_error_mgr pub;
 | 
				
			||||||
  jmp_buf setjmp_buffer;		//for return to caller 
 | 
					  jmp_buf setjmp_buffer; // for return to caller
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
typedef struct my_error_mgr * my_error_ptr;
 | 
					typedef struct my_error_mgr *my_error_ptr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
u8 mjpegdec_init(u16 offx,u16 offy);
 | 
					u8 mjpegdec_init(u16 offx, u16 offy);
 | 
				
			||||||
void mjpegdec_free(void);
 | 
					void mjpegdec_free(void);
 | 
				
			||||||
u8 mjpegdec_decode(u8* buf,u32 bsize);
 | 
					u8 mjpegdec_decode(u8 *buf, u32 bsize);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,186 +1,151 @@
 | 
				
			|||||||
#ifndef __MP3PLAY_H__
 | 
					#ifndef __MP3PLAY_H__
 | 
				
			||||||
#define __MP3PLAY_H__
 | 
					#define __MP3PLAY_H__
 | 
				
			||||||
#include <stm32f4xx.h>
 | 
					 | 
				
			||||||
#include <mp3dec.h>
 | 
					#include <mp3dec.h>
 | 
				
			||||||
 | 
					#include <stm32f4xx.h>
 | 
				
			||||||
//////////////////////////////////////////////////////////////////////////////////
 | 
					//////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2>helix MP3<50><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><EFBFBD>helix MP3<50><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
//ALIENTEK STM32F407<30><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					// ALIENTEK STM32F407<30><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
//MP3 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>	   
 | 
					// MP3 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
 | 
					// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD>@ALIENTEK
 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
 | 
					// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
 | 
				
			||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2014/6/29
 | 
					// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2014/6/29
 | 
				
			||||||
//<2F>汾<EFBFBD><E6B1BE>V1.0
 | 
					// <EFBFBD>汾<EFBFBD><EFBFBD>V1.0
 | 
				
			||||||
//********************************************************************************
 | 
					//********************************************************************************
 | 
				
			||||||
//V1.0 ˵<><CBB5>
 | 
					// V1.0 ˵<><CBB5>
 | 
				
			||||||
//1,֧<><D6A7>16λ<36><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MP3<50>Ľ<EFBFBD><C4BD><EFBFBD>
 | 
					// 1,֧<><D6A7>16λ<36><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MP3<50>Ľ<EFBFBD><C4BD><EFBFBD>
 | 
				
			||||||
//2,֧<><D6A7>CBR/VBR<42><52>ʽMP3<50><33><EFBFBD><EFBFBD>
 | 
					// 2,֧<><D6A7>CBR/VBR<42><52>ʽMP3<50><33><EFBFBD><EFBFBD>
 | 
				
			||||||
//3,֧<><D6A7>ID3V1<56><31>ID3V2<56><32>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD>
 | 
					// 3,֧<><D6A7>ID3V1<56><31>ID3V2<56><32>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD>
 | 
				
			||||||
//4,֧<><D6A7><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>(MP3<50><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>320Kbps)<29><><EFBFBD><EFBFBD>
 | 
					// 4,֧<><D6A7><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>(MP3<50><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>320Kbps)<29><><EFBFBD><EFBFBD>
 | 
				
			||||||
//////////////////////////////////////////////////////////////////////////////////
 | 
					//////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define MP3_TITSIZE_MAX		40		//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					#define MP3_TITSIZE_MAX 40        // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
#define MP3_ARTSIZE_MAX		40		//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					#define MP3_ARTSIZE_MAX 40        // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
#define MP3_FILE_BUF_SZ   20*1024	//MP3<50><33><EFBFBD><EFBFBD>ʱ,<2C>ļ<EFBFBD>buf<75><66>С
 | 
					#define MP3_FILE_BUF_SZ 20 * 1024 // MP3<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ,<2C>ļ<EFBFBD>buf<75><66>С
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
					// ȡ2<C8A1><32>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD>Сֵ.
 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
//ȡ2<C8A1><32>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD>Сֵ.
 | 
					 | 
				
			||||||
#ifndef AUDIO_MIN
 | 
					#ifndef AUDIO_MIN
 | 
				
			||||||
#define AUDIO_MIN(x,y)	((x)<(y)? (x):(y))
 | 
					#define AUDIO_MIN(x, y) ((x) < (y) ? (x) : (y))
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ID3V1 <20><>ǩ
 | 
				
			||||||
 | 
					typedef struct __packed {
 | 
				
			||||||
 | 
					  u8 id[3];       // ID,TAG<41><47><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ
 | 
				
			||||||
 | 
					  u8 title[30];   // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  u8 artist[30];  // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  u8 year[4];     // <20><><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					  u8 comment[30]; // <20><>ע
 | 
				
			||||||
 | 
					  u8 genre;       // <20><><EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					} ID3V1_Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ID3V2 <20><>ǩͷ
 | 
				
			||||||
 | 
					typedef struct __packed {
 | 
				
			||||||
 | 
					  u8 id[3];    // ID
 | 
				
			||||||
 | 
					  u8 mversion; // <20><><EFBFBD>汾<EFBFBD><E6B1BE>
 | 
				
			||||||
 | 
					  u8 sversion; // <20>Ӱ汾<D3B0><E6B1BE>
 | 
				
			||||||
 | 
					  u8 flags;    // <20><>ǩͷ<C7A9><CDB7>־
 | 
				
			||||||
 | 
					  u8 size[4];  // <20><>ǩ<EFBFBD><C7A9>Ϣ<EFBFBD><CFA2>С(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǩͷ10<31>ֽ<EFBFBD>).<2E><><EFBFBD><EFBFBD>,<2C><>ǩ<EFBFBD><C7A9>С=size+10.
 | 
				
			||||||
 | 
					} ID3V2_TagHead;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ID3V2.3 <20>汾֡ͷ
 | 
				
			||||||
 | 
					typedef struct __packed {
 | 
				
			||||||
 | 
					  u8 id[4];   // ֡ID
 | 
				
			||||||
 | 
					  u8 size[4]; // ֡<><D6A1>С
 | 
				
			||||||
 | 
					  u16 flags;  // ֡<><D6A1>־
 | 
				
			||||||
 | 
					} ID3V23_FrameHead;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//ID3V1 <20><>ǩ 
 | 
					// MP3 Xing֡<67><D6A1>Ϣ(û<><C3BB>ȫ<EFBFBD><C8AB><EFBFBD>г<EFBFBD><D0B3><EFBFBD>,<2C><><EFBFBD>г<EFBFBD><D0B3><EFBFBD><EFBFBD>õIJ<C3B5><C4B2><EFBFBD>)
 | 
				
			||||||
typedef struct __packed
 | 
					typedef struct __packed {
 | 
				
			||||||
{
 | 
					  u8 id[4];     // ֡ID,ΪXing/Info
 | 
				
			||||||
    u8 id[3];		   	//ID,TAG<41><47><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ
 | 
					  u8 flags[4];  // <20><><EFBFBD>ű<EFBFBD>־
 | 
				
			||||||
    u8 title[30];		//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					  u8 frames[4]; // <EFBFBD><EFBFBD>֡<EFBFBD><EFBFBD>
 | 
				
			||||||
    u8 artist[30];		//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					  u8 fsize[4];  // <20>ļ<EFBFBD><C4BC>ܴ<EFBFBD>С(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID3)
 | 
				
			||||||
	u8 year[4];			//<2F><><EFBFBD><EFBFBD>
 | 
					} MP3_FrameXing;
 | 
				
			||||||
	u8 comment[30];		//<2F><>ע
 | 
					 | 
				
			||||||
	u8 genre;			//<2F><><EFBFBD><EFBFBD> 
 | 
					 | 
				
			||||||
}ID3V1_Tag;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
//ID3V2 <20><>ǩͷ 
 | 
					// MP3 VBRI֡<49><D6A1>Ϣ(û<><C3BB>ȫ<EFBFBD><C8AB><EFBFBD>г<EFBFBD><D0B3><EFBFBD>,<2C><><EFBFBD>г<EFBFBD><D0B3><EFBFBD><EFBFBD>õIJ<C3B5><C4B2><EFBFBD>)
 | 
				
			||||||
typedef struct __packed
 | 
					typedef struct __packed {
 | 
				
			||||||
{
 | 
					  u8 id[4];      // ֡ID,ΪXing/Info
 | 
				
			||||||
    u8 id[3];		   	//ID
 | 
					  u8 version[2]; // <20>汾<EFBFBD><E6B1BE>
 | 
				
			||||||
    u8 mversion;		//<2F><><EFBFBD>汾<EFBFBD><EFBFBD>
 | 
					  u8 delay[2];   // <20>ӳ<EFBFBD>
 | 
				
			||||||
    u8 sversion;		//<EFBFBD>Ӱ汾<EFBFBD><EFBFBD>
 | 
					  u8 quality[2]; // <20><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>,0~100,Խ<><D4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><EFBFBD>
 | 
				
			||||||
    u8 flags;			//<2F><>ǩͷ<C7A9><CDB7>־
 | 
					  u8 fsize[4];   // <20>ļ<EFBFBD><C4BC>ܴ<EFBFBD>С
 | 
				
			||||||
    u8 size[4];			//<2F><>ǩ<EFBFBD><C7A9>Ϣ<EFBFBD><CFA2>С(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǩͷ10<31>ֽ<EFBFBD>).<2E><><EFBFBD><EFBFBD>,<2C><>ǩ<EFBFBD><C7A9>С=size+10.
 | 
					  u8 frames[4];  // <20>ļ<EFBFBD><C4BC><EFBFBD>֡<EFBFBD><D6A1>
 | 
				
			||||||
}ID3V2_TagHead;
 | 
					} MP3_FrameVBRI;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//ID3V2.3 <20>汾֡ͷ
 | 
					// MP3<50><33><EFBFBD>ƽṹ<C6BD><E1B9B9>
 | 
				
			||||||
typedef struct __packed
 | 
					typedef struct __packed {
 | 
				
			||||||
{
 | 
					  u8 title[MP3_TITSIZE_MAX];  // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
    u8 id[4];		   	//֡ID
 | 
					  u8 artist[MP3_ARTSIZE_MAX]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
    u8 size[4];			//֡<EFBFBD><EFBFBD>С
 | 
					  u32 totsec;                 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>,<2C><>λ:<3A><>
 | 
				
			||||||
    u16 flags;			//֡<EFBFBD><EFBFBD>־
 | 
					  u32 cursec;                 // <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
 | 
				
			||||||
}ID3V23_FrameHead;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
//MP3 Xing֡<67><D6A1>Ϣ(û<EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD>г<EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>г<EFBFBD><D0B3><EFBFBD><EFBFBD>õIJ<C3B5><C4B2><EFBFBD>)
 | 
					  u8 *jpeg_data; // ר<><D7A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
typedef struct __packed
 | 
					  u32 jpeg_len;  // ר<><D7A8><EFBFBD><EFBFBD><EFBFBD>泤<EFBFBD><E6B3A4>
 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    u8 id[4];		   	//֡ID,ΪXing/Info
 | 
					 | 
				
			||||||
    u8 flags[4];		//<2F><><EFBFBD>ű<EFBFBD>־
 | 
					 | 
				
			||||||
    u8 frames[4];		//<2F><>֡<EFBFBD><D6A1>
 | 
					 | 
				
			||||||
	u8 fsize[4];		//<2F>ļ<EFBFBD><C4BC>ܴ<EFBFBD>С(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID3)
 | 
					 | 
				
			||||||
}MP3_FrameXing;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
//MP3 VBRI֡<49><D6A1>Ϣ(û<EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD>г<EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>г<EFBFBD><D0B3><EFBFBD><EFBFBD>õIJ<C3B5><C4B2><EFBFBD>)
 | 
					  u32 bitrate;    // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
typedef struct __packed
 | 
					  u32 samplerate; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
{
 | 
					  u16 outsamples; // PCM<43><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С(<28><>16λΪ<CEBB><CEAA>λ),<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MP3,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*2(<28><><EFBFBD><EFBFBD>DAC<41><43><EFBFBD><EFBFBD>)
 | 
				
			||||||
    u8 id[4];		   	//֡ID,ΪXing/Info
 | 
					 | 
				
			||||||
	u8 version[2];		//<2F>汾<EFBFBD><E6B1BE>
 | 
					 | 
				
			||||||
	u8 delay[2];		//<2F>ӳ<EFBFBD>
 | 
					 | 
				
			||||||
	u8 quality[2];		//<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>,0~100,Խ<><D4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>
 | 
					 | 
				
			||||||
	u8 fsize[4];		//<2F>ļ<EFBFBD><C4BC>ܴ<EFBFBD>С
 | 
					 | 
				
			||||||
	u8 frames[4];		//<2F>ļ<EFBFBD><C4BC><EFBFBD>֡<EFBFBD><D6A1> 
 | 
					 | 
				
			||||||
}MP3_FrameVBRI;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  u32 datastart; // <20><><EFBFBD><EFBFBD>֡<EFBFBD><D6A1>ʼ<EFBFBD><CABC>λ<EFBFBD><CEBB>(<28><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>)
 | 
				
			||||||
 | 
					} __mp3ctrl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//MP3<EFBFBD><EFBFBD><EFBFBD>ƽṹ<EFBFBD><EFBFBD>
 | 
					// extern __mp3ctrl * mp3ctrl;
 | 
				
			||||||
typedef struct __packed
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	u8 title[MP3_TITSIZE_MAX];	//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					 | 
				
			||||||
	u8 artist[MP3_ARTSIZE_MAX];	//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					 | 
				
			||||||
	u32 totsec ;				//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,<2C><>λ:<3A><>
 | 
					 | 
				
			||||||
	u32 cursec ;				//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	u8 *jpeg_data;			//ר<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					// <20><><EFBFBD>ֲ<EFBFBD><D6B2>Ų<EFBFBD><C5B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
	u32 jpeg_len;				//ר<><D7A8><EFBFBD><EFBFBD><EFBFBD>泤<EFBFBD><E6B3A4>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	u32 bitrate;	   			//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					 | 
				
			||||||
	u32 samplerate;				//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					 | 
				
			||||||
	u16 outsamples;				//PCM<43><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С(<28><>16λΪ<CEBB><CEAA>λ),<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MP3,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*2(<28><><EFBFBD><EFBFBD>DAC<41><43><EFBFBD><EFBFBD>)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	u32 datastart;				//<2F><><EFBFBD><EFBFBD>֡<EFBFBD><D6A1>ʼ<EFBFBD><CABC>λ<EFBFBD><CEBB>(<28><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>)
 | 
					 | 
				
			||||||
}__mp3ctrl;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//extern __mp3ctrl * mp3ctrl;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
//<2F><><EFBFBD>ֲ<EFBFBD><D6B2>Ų<EFBFBD><C5B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					 | 
				
			||||||
typedef enum {
 | 
					typedef enum {
 | 
				
			||||||
	AP_OK=0X00,				//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					  AP_OK = 0X00,  // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
	AP_NEXT,				//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
 | 
					  AP_NEXT,       // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>
 | 
				
			||||||
	AP_PREV,				//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
 | 
					  AP_PREV,       // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>
 | 
				
			||||||
	AP_ERR=0X80,			//<2F><><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>(û<><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>) 
 | 
					  AP_ERR = 0X80, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>(û<><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>)
 | 
				
			||||||
}APRESULT;
 | 
					} APRESULT;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//<2F><><EFBFBD>ֲ<EFBFBD><D6B2>ſ<EFBFBD><C5BF><EFBFBD><EFBFBD><EFBFBD>
 | 
					// <EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><EFBFBD>ſ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
typedef struct __packed
 | 
					typedef struct __packed {
 | 
				
			||||||
{  
 | 
					  // 2<><32>I2S<32><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>BUF
 | 
				
			||||||
	//2<><32>I2S<32><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>BUF
 | 
					  u8 *i2sbuf1;
 | 
				
			||||||
	u8 *i2sbuf1;
 | 
					  u8 *i2sbuf2;
 | 
				
			||||||
	u8 *i2sbuf2; 
 | 
					  u8 *tbuf;              // <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
 | 
				
			||||||
	u8 *tbuf;			//<2F><>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					  u32 (*file_seek)(u32); // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
	u32(*file_seek)(u32);//<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD><CBBA><EFBFBD> 
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	vu8 status;			//bit0:0,<2C><>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>;1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					  vu8 status; // bit0:0,<2C><>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>;1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
						//bit1:0,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>  
 | 
					              // bit1:0,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
						//bit2~3:<3A><><EFBFBD><EFBFBD>
 | 
					              // bit2~3:<3A><><EFBFBD><EFBFBD>
 | 
				
			||||||
						//bit4:0,<2C><><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD>;1,<2C><><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)		
 | 
					              // bit4:0,<2C><><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD>;1,<2C><><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
 | 
				
			||||||
						//bit5:0,<2C><EFBFBD><DEB6><EFBFBD>;1,ִ<><D6B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>и<EFBFBD><D0B8><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
 | 
					              // bit5:0,<2C><EFBFBD><DEB6><EFBFBD>;1,ִ<><D6B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>и<EFBFBD><D0B8><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
 | 
				
			||||||
						//bit6:0,<2C><EFBFBD><DEB6><EFBFBD>;1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>(<28><><EFBFBD>Dz<EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>),<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
 | 
					              // bit6:0,<2C><EFBFBD><DEB6><EFBFBD>;1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>(<28><><EFBFBD>Dz<EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>),<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
 | 
				
			||||||
 						//bit7:0,<2C><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE>/<2F><><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE>;1,<2C><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>)
 | 
					              // bit7:0,<2C><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE>/<2F><><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE>;1,<2C><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	u8 mode;			//<2F><><EFBFBD><EFBFBD>ģʽ
 | 
					  u8 mode; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
 | 
				
			||||||
						//0,ȫ<><C8AB>ѭ<EFBFBD><D1AD>;1,<2C><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>;2,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
 | 
					           // 0,ȫ<><C8AB>ѭ<EFBFBD><D1AD>;1,<2C><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>;2,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	u8 *name;			//<2F><>ǰ<EFBFBD><C7B0><EFBFBD>ŵ<EFBFBD>MP3<50><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					  u8 *name;       // <EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>MP3<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
	u16 namelen;		//name<6D><65>ռ<EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>.
 | 
					  u16 namelen;    // name<EFBFBD><EFBFBD>ռ<EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD>.
 | 
				
			||||||
	u16 curnamepos;		//<2F><>ǰ<EFBFBD><C7B0>ƫ<EFBFBD><C6AB>
 | 
					  u16 curnamepos; // <EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD>ƫ<EFBFBD><EFBFBD>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    u32 totsec ;		//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,<2C><>λ:<3A><>
 | 
					  u32 totsec;     // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>,<2C><>λ:<3A><>
 | 
				
			||||||
    u32 cursec ;		//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> 
 | 
					  u32 cursec;     // <EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
 | 
				
			||||||
    u32 bitrate;	   	//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(λ<><CEBB>)
 | 
					  u32 bitrate;    // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(λ<><CEBB>)
 | 
				
			||||||
	u32 samplerate;		//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 
 | 
					  u32 samplerate; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
	u16 bps;			//λ<><CEBB>,<2C><><EFBFBD><EFBFBD>16bit,24bit,32bit
 | 
					  u16 bps;        // λ<EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>16bit,24bit,32bit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} __audiodev;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}__audiodev; 
 | 
					u16 GetRBIT16(u16);
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
u16 GetRBIT16 (u16);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void mp3_i2s_dma_tx_callback(void) ;
 | 
					 | 
				
			||||||
void mp3_fill_buffer(u16* buf,u16 size,u8 nch);
 | 
					 | 
				
			||||||
u8 mp3_id3v1_decode(u8* buf,__mp3ctrl *pctrl);
 | 
					 | 
				
			||||||
u8 mp3_id3v2_decode(u8* buf,u32 size,__mp3ctrl *pctrl);
 | 
					 | 
				
			||||||
u8 mp3_get_info(u8 *data,u32 size,__mp3ctrl* pctrl);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__audiodev *mp3_getAudiodev (void);
 | 
					 | 
				
			||||||
__mp3ctrl *mp3_getMp3Info (void);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void mp3_i2s_dma_tx_callback(void);
 | 
				
			||||||
 | 
					void mp3_fill_buffer(u16 *buf, u16 size, u8 nch);
 | 
				
			||||||
 | 
					u8 mp3_id3v1_decode(u8 *buf, __mp3ctrl *pctrl);
 | 
				
			||||||
 | 
					u8 mp3_id3v2_decode(u8 *buf, u32 size, __mp3ctrl *pctrl);
 | 
				
			||||||
 | 
					u8 mp3_get_info(u8 *data, u32 size, __mp3ctrl *pctrl);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__audiodev *mp3_getAudiodev(void);
 | 
				
			||||||
 | 
					__mp3ctrl *mp3_getMp3Info(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// <20><><EFBFBD><EFBFBD>0 ֧<>֣<EFBFBD><D6A3><EFBFBD>0 <20><>֧<EFBFBD><D6A7>
 | 
					// <20><><EFBFBD><EFBFBD>0 ֧<>֣<EFBFBD><D6A3><EFBFBD>0 <20><>֧<EFBFBD><D6A7>
 | 
				
			||||||
int mp3_get_support (u8* data,u32 size) ;
 | 
					int mp3_get_support(u8 *data, u32 size);
 | 
				
			||||||
int mp3_get_support_name (const char *name);
 | 
					int mp3_get_support_name(const char *name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// <20><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>е<EFBFBD>mp3<70>ļ<EFBFBD>
 | 
					// <20><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>е<EFBFBD>mp3<70>ļ<EFBFBD>
 | 
				
			||||||
u8 mp3_play_song(u8* data,u32 size);
 | 
					u8 mp3_play_song(u8 *data, u32 size);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD>0<EFBFBD>ɹ<EFBFBD>
 | 
					// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD>0<EFBFBD>ɹ<EFBFBD>
 | 
				
			||||||
char *mp3_get_name(void);
 | 
					char *mp3_get_name(void);
 | 
				
			||||||
@@ -189,11 +154,11 @@ char *mp3_get_name(void);
 | 
				
			|||||||
char *mp3_get_artist(void);
 | 
					char *mp3_get_artist(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD>ŵ<EFBFBD>ʱ<EFBFBD>䣬<EFBFBD><E4A3AC><EFBFBD><EFBFBD>1<EFBFBD>ɹ<EFBFBD>
 | 
					// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD>ŵ<EFBFBD>ʱ<EFBFBD>䣬<EFBFBD><E4A3AC><EFBFBD><EFBFBD>1<EFBFBD>ɹ<EFBFBD>
 | 
				
			||||||
int mp3_get_time(int *totsec,int *cursec);
 | 
					int mp3_get_time(int *totsec, int *cursec);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void mp3_stop (void);
 | 
					void mp3_stop(void);
 | 
				
			||||||
void mp3_play (void);
 | 
					void mp3_play(void);
 | 
				
			||||||
void mp3_suspend (void);
 | 
					void mp3_suspend(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
				
			||||||
int mp3_set_vol(int vol);
 | 
					int mp3_set_vol(int vol);
 | 
				
			||||||
@@ -208,31 +173,3 @@ int mp3_sub_val(int vol);
 | 
				
			|||||||
int mp3_get_vol(void);
 | 
					int mp3_get_vol(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user