- Visual C++源码
- Visual Basic源码
- C++ Builder源码
- Java源码
- Delphi源码
- C/C++源码
- PHP源码
- Perl源码
- Python源码
- Asm源码
- Pascal源码
- Borland C++源码
- Others源码
- SQL源码
- VBScript源码
- JavaScript源码
- ASP/ASPX源码
- C#源码
- Flash/ActionScript源码
- matlab源码
- PowerBuilder源码
- LabView源码
- Flex源码
- MathCAD源码
- VBA源码
- IDL源码
- Lisp/Scheme源码
- VHDL源码
- Objective-C源码
- Fortran源码
- tcl/tk源码
- QT源码
Video.c
资源名称:SDK_M5661.rar [点击查看]
上传用户:hjhsjcl
上传日期:2020-09-25
资源大小:11378k
文件大小:61k
源码类别:
压缩解压
开发平台:
C++ Builder
- /*==========================================================================
- Copyright (c) 2004 ALi Corporation. All Rights Reserved
- File: Video.c
- content:
- History: Created by Walace 2005
- ==========================================================================*/
- #define _VIDEO_H_
- #include <DP8051XP.H>
- #include "TypeDef.h"
- #include "Const.h"
- #include "Reg5661.h"
- #include "Common.h"
- #include "OledString.h"
- #include "Key.h"
- #include "Idma.h"
- #include "FileSystem.h"
- #include "IconDefine.h"
- #include "OLED.h"
- #include "VideoDsp.h"
- #include "Video.h"
- #include "NandFlash.h"
- #include "IntCodec.h"
- #include "UiVideoCommon.h"
- #include "SaveSetting.h" //Walace060926#1 VideoResume
- #include "UiVideo.h" //Walace060907#7
- //Walace060309#3
- #define DSP_VIDEO_START_FLAG 0x0000
- #define DSP_VIDEO_SCALE_ADDR 0x1FC2//Horry060315#2
- #define DSP_VIDEO_FADE_ADDR 0x1FCC//Horry060307
- #define DSP_VIDEO_TOTAL_TIME 0x1FCF
- #define DSP_VIDEO_SEC_ADDR 0x1FD6
- #define DSP_VIDEO_FRAME_NUM_L_ADDR 0x1FD7 //Horry060313#1 start
- #define DSP_VIDEO_FRAME_NUM_H_ADDR 0x1FCA
- #define DSP_VIDEO_TOTAL_FRAME_NUM_L_ADDR 0x1FD9
- #define DSP_VIDEO_TOTAL_FRAME_NUM_H_ADDR 0x1FC9 //Horry060313#1 end
- #define DSP_VIDEO_10MS_H_ADDR 0x1FDB
- #define DSP_VIDEO_10MS_L_ADDR 0x1FDC
- #define DSP_VIDEO_FB_EN_ADDR 0x1FDD//horry
- #define DSP_VIDEO_FB_PLAY_NUM_ADDR 0x1FDE
- #define DSP_VIDEO_FB_PLAYDONE_FLAG 0x1FDF
- #define DSP_VIDEO_AUD_OUT_RDINDEX 0x1FE2//Horry060307
- #define DSP_VIDEO_AUD_OUT_WRINDEX 0x1FE3//Horry060307
- #define DSP_VIDEO_AB_EN_ADDR 0x1FE7
- #define DSP_VIDEO_WIDTH_SIZE 0x1FF3 // set lcd width size
- #define DSP_VIDEO_HEIGHT_SIZE 0x1FF4 // set lcd height size
- #define DSP_VIDEO_LCD_TYPE 0x1FF5 // 0:STN 1:OLED
- #define DSP_VIDEO_ERR_MSG 0x1FF6 // 0:Baseline format 1:not support other jpg format
- #define DSP_VIDEO_INPUT_ADDR 0x1FF7
- #define DSP_VIDEO_INPUT_FLAG 0x1FF8 // 1:FW write 512 bytes to DSP 2: FW write complete
- #define DSP_VIDEO_OUTPUT_ADDR 0x1FF9
- #define DSP_VIDEO_OUTPUT_FLAG 0x1FFA // 1:FW could get 512 bytes form dsp 2: get data complete
- #define DSP_VIDEO_DEC_FINISH 0x1FFB // 0: image decode not finish 1:image decode finish
- #define DSP_VIDEO_BLOCK_WIDTH 0x1FFC // MCU width
- #define DSP_VIDEO_BLOCK_HEIGHT 0x1FFD // MCU Height
- #define DSP_VIDEO_BLOCK_COLS 0x1FFE // Image total coloumns
- #define DSP_VIDEO_BLOCK_PAGES 0x1FFF // Image total pages
- #define DSP_VIDEO_DEC_FINISH 0x1FFB // 0: image decode not finish 1:image decode finish
- #define DSP_VIDEO_GET_CONFIG 0x1FC7 // 0: image decode not finish 1:image decode finish
- #define DSP_VIDEO_AV_IN_ERRFLAG 0x1FD3 //Walace061012 inbuffer empty flag
- #define DSP_VIDEO_AUD_OUT_ERRFLAG 0x1FD4 //Walace061019#3 outbuffer empty flag
- #define DSP_VIDEO_AVI_ERR_FLAG 0x1FE1 //Walace061019#3
- #define DSP_VIDEO_AVI_IN_RD_INDEX 0x0000 //Walace060717#1
- #define DSP_VIDEO_AVI_IN_WR_INDEX DSP_VIDEO_INPUT_ADDR //Walace060717#1
- #define DSP_VIDEO_VD_OUT_RD_INDEX DSP_VIDEO_OUTPUT_ADDR
- #define DSP_VIDEO_VD_OUT_WD_INDEX 0x1FCE
- #define DSP_BLOCK_SIZE 256
- #define DSP_VIDEO_LCD_TYPE_STN 0
- #define DSP_VIDEO_LCD_TYPE_OLED 1
- /* //Walace060912#1
- Const value remove to Video.h
- */
- //1 == Dsp command ===============
- #define DSP_REQ_START 0x01
- #define DSP_REQ_END 0x02
- #define CDC_I2S_INT_DIS() (obSYSINT0MASK &= (~(CDC_INT_EN|I2S_INT_EN)))
- void VdEgInit(void);
- BOOL VdEgStart(void);
- void VdEgPlay(void);
- void VideoDspInit(void);
- void VdEgStop(void); //Walace060912#1
- BOOL VideoShow(void); //Walace060926#1 VideoResume
- #define VF_F_INIT 0x00
- #define VF_FF_START 0x01
- #define VF_FB_START 0x02
- #define VF_FB_PLAY 0x03
- #define VF_F_STOP 0x04
- #define VF_F_UPDATE 0x05
- void VdFastCtrl(BYTE bFastCmd);
- //BOOL DownloadVideoDsp(BYTE bVideoType); //Walace061101#1
- #define DSP_TIME_OUT_CONST 0xFFFF//0x08FF //Walace070115#2
- CBYTE cbMTVSyncWord[] = {'A','L','I','A','V','I'}; //Walace060926#1 VideoResume
- void VideoMCUSpeedUp(void);
- void VideoMCUNormalSpeed(void);
- void VideoGetVideoFromDsp(void); //Walace061121#2
- BOOL VideoGetHeader(void);
- void VdDspDataUpdate(void);
- #if(VIDEO_FADE_MODE==1) //Horry060315#2
- void VdDspFade(WORD wDspFadeCmd,BOOL fWait);//Horry060307
- #endif
- //BOOL VdCheckOutBufEmpty(void);//Horry060307
- BOOL VdEgPlayNext(void);
- //void VideoGetgxbFBPlayNumConst(void);//horry test //Walace060117#
- void VideoGetFrameRate(BYTE bVideoMode);
- BOOL VideoFillDataToDsp(void);
- //Walace061019#3
- //--- CheckDspBuffer Command ---
- #define WAIT_AUD_OUT_BUFF_EMPTY 0x01
- #define GET_AV_IN_BUFF_DATA_SIZE 0x02 //Walace060717#1
- #define GET_AUD_OUT_BUFF_DATA_SIZE 0x03 //Walace060829#2
- #define GET_AV_IN_ERR_FLAG 0x04
- #define GET_AUD_OUT_ERR_FLAG 0x05
- #define GET_AVI_ERR_FLAG 0x06
- // Latched Signal
- // bit 0: AVI Inbuffer Empty
- // bit 1: AUD Outbuffer Empty
- // bit 2: VEO Outbuffer Empty
- // bit 3: Audio Bitstream Format Error
- // bit 4: Vedio Bitstream Format Error
- #define DSP_ERR_AVI_INBUF_EMPTY 0x01
- #define DSP_ERR_AUD_OUTBUF_EMPTY 0x02
- #define DSP_ERR_VEO_OUTBUF_EMPTY 0x04
- #define DSP_ERR_AUD_BITSTREAM_ERR 0x08
- #define DSP_ERR_VEO_BITSTREAM_ERR 0x10
- WORD CheckDspBuffer(BYTE bCheckCmd) large; //Walace060717#1
- //Walace061019#3 end
- void GetSectorNumFromSec(void); //Walace060926#1 VideoResume
- void VideoUpdateInfoFromDsp(void); //Walace060717#1
- ///BOOL gfGetImageConfig; //Walace060831#3
- #if 1 //Walace061121#2 start
- XBYTE gxbBlockHeight;
- XBYTE gxbBlockWidth;
- XBYTE gxbBlockColNum;
- XBYTE gxbBlockRowNum;
- //BOOL gfCutBlockDisplay;
- #else
- XBYTE gxbBlockHeight;
- XBYTE gxbBlockWidth;
- XBYTE gxbBlockColNum;
- XBYTE gxbBlockPageNum;
- XWORD gxwMcuSize;
- #endif //Walace061121#2 end
- XBYTE gxbFFSkipConst;
- XBYTE gxbFBPlayNumConst;
- XBYTE gxbFrameRate;//horry test //Walace060117
- XWORD gxwFBSkipSector;//Walace060117
- XDWORD gxdwTotalFrameNum;
- XDWORD gxdwKeepFBLastSector; //Walace061122#1
- XDWORD dwTimeSamplesPerPacket; //Walace061122#1
- BOOL VdEgVideoConfig(void); //Walace060912#1
- void VdWaitDspConfigReady(void); //Walace060926#1 VideoResume
- void VdWaitDspResumeReady(void); //Walace070116#4
- void VdWaitDspConfigReadyForMP3V1(void); //Walace070329#1
- BOOL GetImageFromDsp(void); //Walace060926#1 VideoResume
- //void VideoFillDspBuff(void); //Walace060926#1 VideoResume
- #define NO_DISPLAY_UNTIL_BUFF_EMPTY FALSE
- #define NO_DISPLAY_UNTIL_FRAME_COMPLETE TRUE
- extern XBYTE xbShowInfoFlag;//Tony070125
- void VdEgPlayWithouDisplay(BOOL fFrameComplete)
- {
- BYTE bKeepMask;
- bKeepMask=gxbVideoMask;
- gxbVideoMask=0;
- if(!fFrameComplete)
- {
- while(CheckDspBuffer(GET_AV_IN_BUFF_DATA_SIZE)||CheckDspBuffer(GET_AUD_OUT_BUFF_DATA_SIZE))
- {
- if(GetImageFromDsp())
- VideoShow();
- VideoUpdateInfoFromDsp();
- UiMessageCtrl();
- }
- }
- else
- {
- while(gxwCurrentBlockNum)
- {
- VdEgPlay();
- }
- }
- gxbVideoMask=bKeepMask;
- }
- BOOL VideoEngine(void) //Walace060912#1
- {
- //BYTE bKeepClkDiv; //Walace061017#2
- //bKeepClkDiv = obCLKMCUDIVF; //Walace061017#2
- //SetSysSpeed(VIDEO_ENGINE_SPEED); //Walace061017#2
- if(gxbErrCode!=ERR_NO_ERROR) //Walace070507#1
- return FALSE;
- CdcSetPaGainTask(PA_TASK_UNIMMEDIATE|PA_TASK_DELAY); //Walace060525#4 //tne 2006/12/26 #1
- switch(gxbVdCommand) //Walace060912#1
- {
- case VIDEO_CMD_NOP:
- break;
- case VIDEO_CMD_VOL_UPDATE:
- CdcSetPaGain(gxbVolume); //tne 2006/12/26 #1
- break;
- case VIDEO_CMD_INIT:
- gxbVideoState=VIDEO_STATE_IDLE;
- VdEgInit();
- break;
- case VIDEO_CMD_START:
- switch(gxbVideoState)
- {
- case VIDEO_STATE_IDLE:
- gxbVideoState = VIDEO_STATE_CONFIG; //Walace060912#1
- break;
- default:
- gxbVideoState = VIDEO_STATE_STOP_TO_CONFIG; //Walace060912#1
- break;
- }
- break;
- case VIDEO_CMD_PAUSE_TO_START:
- VdDspFade((DSP_FADE_IN_EN|(DSP_FADE_1_UNIT<<4)),TRUE);
- VdEgPlayWithouDisplay(NO_DISPLAY_UNTIL_FRAME_COMPLETE);
- gxbVideoState = VIDEO_STATE_PLAY;
- break;
- case VIDEO_CMD_PAUSE:
- if(gxbVideoState==VIDEO_STATE_PLAY)
- {
- VdDspFade((DSP_FADE_OUT_EN|(DSP_FADE_1_UNIT<<4)),TRUE);
- VdEgPlayWithouDisplay(NO_DISPLAY_UNTIL_BUFF_EMPTY);
- gxbVideoState=VIDEO_STATE_PAUSE;
- }
- break;
- case VIDEO_CMD_STOP:
- if(gxbVideoState>VIDEO_STATE_START) //Walace060926#1 VideoResume
- {
- gxbVideoState = VIDEO_STATE_STOP; //Walace060912#1
- } //Walace060807#2 end
- else //Walace060926#1 VideoResume start
- {
- gxbVideoState = VIDEO_STATE_IDLE;
- } //Walace060926#1 VideoResume end
- break;
- case VIDEO_CMD_FF_START:
- if(gxbVideoState==VIDEO_STATE_PAUSE) //Walace061120#2
- {
- VdEgPlayWithouDisplay(NO_DISPLAY_UNTIL_FRAME_COMPLETE);
- }
- else
- {
- #if(VIDEO_FF_MUTE)
- VdDspFade((DSP_FADE_OUT_EN|(DSP_FADE_1_UNIT<<4)),TRUE);
- #endif
- }
- VdFastCtrl(VF_FF_START);
- gxbVideoState =VIDEO_STATE_PLAY; //Walace060831#5
- break;
- case VIDEO_CMD_FB_START:
- if(gxbVideoState==VIDEO_STATE_PAUSE) //Walace061120#2
- {
- VdEgPlayWithouDisplay(NO_DISPLAY_UNTIL_FRAME_COMPLETE);
- }
- else
- {
- #if(VIDEO_FF_MUTE)
- VdDspFade((DSP_FADE_OUT_EN|(DSP_FADE_1_UNIT<<4)),TRUE);
- #endif
- } //Walace060831#5
- VdFastCtrl(VF_FB_START);
- gxbVideoState = VIDEO_STATE_FB_PLAY;
- break;
- case VIDEO_CMD_F_STOP:
- gxbVideoState = VIDEO_STATE_F_PLAY_STOP; //Walace060912#1
- break;
- case VIDEO_CMD_SPEED_UPDATE:
- VdFastCtrl(VF_F_UPDATE);
- break;
- }
- switch(gxbVideoState)
- {
- case VIDEO_STATE_IDLE:
- break;
- //Walace060912#1 start
- case VIDEO_STATE_STOP_TO_CONFIG:
- VdEgStop();
- case VIDEO_STATE_CONFIG:
- if(VdEgVideoConfig())
- gxbVideoState = VIDEO_STATE_START;
- else
- gxbVideoState = VIDEO_STATE_IDLE;
- break;
- case VIDEO_STATE_START:
- //Walace060926#1 VideoResume start
- if(VdEgStart())
- {
- if(gxbVideoFormat != VIDEO_TYPE_MP3_V1) //Walace070329#1
- {
- VdWaitDspConfigReady();
- }
- else //Walace070329#1
- {
- gfFirstResume=FALSE;
- } //Walace070329#1
- gxbVideoState = VIDEO_STATE_PLAY; //Walace070116#4
- VdWaitDspResumeReady(); //Walace070116#4
- if((gxbVESpeed&VE_FAST_STATE)==VE_FAST_NORMAL)
- VdDspFade((DSP_FADE_IN_EN|(DSP_FADE_1_UNIT<<4)),TRUE);
- if(gxbVideoFormat == VIDEO_TYPE_MP3_V1) //Walace070329#1
- {
- VdWaitDspConfigReadyForMP3V1();
- }
- }
- else
- {
- gxbVideoState = VIDEO_STATE_IDLE;
- }
- //Walace060926#1 VideoResume end
- break;
- //case VIDEO_STATE_FF_PAUSE_PLAY: //Walace061219#2 Remove
- // VdEgPlay();
- // break;
- //Walace060912#1 end
- case VIDEO_STATE_FB_PLAY:
- VdFastCtrl(VF_FB_PLAY);
- //if(gdwFileSector==0&&gxbFrameRate==1)
- if(gdwFileSector==0) //tne 2006/11/17 #3
- {
- /* //Walace061220#1 start
- TimeOutCtrl(50); //Walace060831#1
- while(gxwCurrentPlayTime!=0)
- {
- if(TimeOutCtrl(CHECK_TIME_OUT)) //Walace060831#1
- break;
- VideoFillDataToDsp();
- VideoUpdateInfoFromDsp(); //Walace060717#1
- }
- */
- gxwCurrentPlayTime=0;
- UiMessageCtrl();
- //Walace061220#1 end
- gxbVideoState=VIDEO_STATE_PAUSE;
- }
- else
- {
- VdEgPlay();
- }
- break;
- case VIDEO_STATE_F_PLAY_STOP: //Walace060912#1
- VdFastCtrl(VF_F_STOP);
- VdEgPlay();
- if(gxbVESpeed==(VE_FAST_NORMAL|VE_FAST_X1))
- {
- #if(VIDEO_FF_MUTE)
- VdDspFade((DSP_FADE_IN_EN|(DSP_FADE_1_UNIT<<5)),TRUE);
- #endif
- gxbVideoState = VIDEO_STATE_PLAY;
- }
- break;
- case VIDEO_STATE_PLAY:
- VdEgPlay();
- break;
- case VIDEO_STATE_PAUSE:
- break;
- //Walace060912#1 start
- case VIDEO_STATE_STOP:
- VdEgStop();
- gxbVideoState=VIDEO_STATE_IDLE;
- break;
- //Walace060912#1 end
- }
- //SetSysSpeed(bKeepClkDiv); //Walace061017#2
- gxbVdCommand = VIDEO_CMD_NOP; //Walace060912#1
- return TRUE;
- }
- void VideoDspInit(void)
- {
- IDMA_READY_EN(); //IDMA ready EN
- #if(VIDEO_DSP_HIGH_CLOCK) //Walace061226#1
- if(gxbVideoFormat==VIDEO_TYPE_ADPCM_HQ) //Walace070116#1
- {
- obMODSEL3 |= MOD_USB_EN; //USB Clock EN
- obCLKDSPDIVF=0x00;
- obCLKDSPCTRL=0x10; //80MHz
- }
- else
- {
- DSP_CLK_SET_73(); //dsp clock for motion jpg //Walace060804#2
- }
- //obCLKDSPCTRL=0x00; //120MHz
- #else
- DSP_CLK_SET_73(); //dsp clock for motion jpg //Walace060804#2
- #endif
- DSP_RESET();
- DSP_ENABLE();
- }
- void SetFBNextSectorNumber(void)
- {
- gxwFBSkipSector=(WORD)(
- (((DWORD)(stPhoFileInf.dwFileTotalSector*gxbFBPlayNumConst)
- *((gxbVESpeed&VE_FAST_VALUE)+2)+(gxdwTotalFrameNum-1)))
- /gxdwTotalFrameNum);
- //Walace060717#1 start
- gxwFBSkipSector=gxwFBSkipSector+
- ((CheckDspBuffer(GET_AV_IN_BUFF_DATA_SIZE)+511)>>9);
- //Walace060717#1 end
- gdwFileSector=gxdwKeepFBLastSector; //Walace061122#1
- if(gdwFileSector>gxwFBSkipSector)
- gdwFileSector-=gxwFBSkipSector;
- else
- gdwFileSector=0;
- gxdwKeepFBLastSector=gdwFileSector; //Walace061122#1
- }
- #undef DSP_IN_BUFF_REMAIN_DATA_SIZE
- #undef MAX_PACKET_SIZE
- //Walace070116#4 start
- void VdWaitDspResumeReady(void)
- {
- WORD wDspVal;
- if(gfFirstResume)
- {
- gdwFileSector=gxdwLastPlayFileSector;
- gxwCurrentPlayTime=gxwVideoLastPlayTime;
- GetSectorNumFromSec();
- #if 0
- wDspVal=0;
- IdmaPioDmxW(&wDspVal,DSP_VIDEO_SEC_ADDR,1,DSP_W16);
- gxwCurrentPlayTime=0;
- TimeOutCtrl(100);
- while(gxwCurrentPlayTime<gxwVideoLastPlayTime)
- {
- VideoFillDataToDsp();
- VideoUpdateInfoFromDsp();
- if(TimeOutCtrl(CHECK_TIME_OUT))
- break;
- }
- #else
- wDspVal=gxwCurrentPlayTime;
- IdmaPioDmxW(&wDspVal,DSP_VIDEO_SEC_ADDR,1,DSP_W16);
- #endif
- }
- else
- {
- gdwFileSector=0;
- }
- gxdwLastPlayFileSector=0;
- gxwVideoLastPlayTime=0;
- gfFirstResume=FALSE;
- }
- //Walace070116#4 end
- //Walace070116#2 start
- //Walace060926#1 VideoResume start
- void VdWaitDspConfigReady(void)
- {
- WORD wDspVal;
- TimeOutCtrl(200);
- while(TRUE)
- {
- VideoFillDataToDsp();
- IdmaPioDmxR(DSP_VIDEO_DEC_FINISH,&wDspVal,1,DSP_W16);// jpg_dec_finish
- if(wDspVal==0)
- break;
- if(TimeOutCtrl(CHECK_TIME_OUT))
- {
- VIDEO_ANNORMAL_DEBUG(9001);
- break;
- }
- }
- VideoGetVideoFromDsp(); //Walace061120#1
- wDspVal=TRUE;
- IdmaPioDmxW(&wDspVal, DSP_VIDEO_AB_EN_ADDR, 1, DSP_W16);//ABON=1
- TimeOutCtrl(50);
- while(TRUE)
- {
- IdmaPioDmxR(DSP_VIDEO_AB_EN_ADDR,&wDspVal,1,DSP_W16);
- if(wDspVal==0)
- break;
- if(TimeOutCtrl(CHECK_TIME_OUT))
- {
- VIDEO_ANNORMAL_DEBUG(9002);
- break;
- }
- }
- }
- //Walace060926#1 VideoResume end
- //Walace070116#2 end
- //Walace070329#1 start
- void VdWaitDspConfigReadyForMP3V1(void)
- {
- TimeOutCtrl(200);
- while(TRUE)
- {
- IdmaPioDmxR(DSP_VIDEO_TOTAL_TIME, &gxwTotalPlayTime, 1,DSP_W16);
- if(gxwTotalPlayTime!=0)
- break;
- VdEgPlay();
- }
- }
- //Walace070329#1 end
- void VdFastCtrl(BYTE bFastCmd)
- {
- WORD wDspVal,wTimeOut;;
- switch(bFastCmd)
- {
- case VF_F_INIT:
- gxbVESpeed=(VE_FAST_NORMAL|VE_FAST_X1);
- break;
- case VF_FF_START:
- gxbVESpeed=(VE_FAST_FF|VE_FAST_X2);
- wDspVal=gxbFFSkipConst;
- IdmaPioDmxW(&wDspVal, DSP_FF_PLAY_NUM_ADDR, 1, DSP_W16);
- wDspVal=((WORD)((gxbVESpeed&VE_FAST_VALUE)*gxbFFSkipConst));
- IdmaPioDmxW(&wDspVal, DSP_FF_SKIP_NUM_ADDR, 1, DSP_W16);
- wDspVal=TRUE;
- IdmaPioDmxW(&wDspVal, DSP_FF_EN_ADDR, 1, DSP_W16);
- break;
- case VF_FB_START:
- wDspVal=(WORD)gxbFBPlayNumConst;
- IdmaPioDmxW(&wDspVal, DSP_VIDEO_FB_PLAY_NUM_ADDR, 1, DSP_W16);//N
- wDspVal=FALSE;
- IdmaPioDmxW(&wDspVal, DSP_VIDEO_FB_PLAYDONE_FLAG, 1, DSP_W16);//PLAYDONE=0
- wDspVal=TRUE;
- IdmaPioDmxW(&wDspVal, DSP_VIDEO_AB_EN_ADDR, 1, DSP_W16);//ABON=1
- wDspVal=TRUE;
- IdmaPioDmxW(&wDspVal, DSP_VIDEO_FB_EN_ADDR, 1, DSP_W16);//FBON=1
- gxbVESpeed=(VE_FAST_FB|VE_FAST_X2);
- gxdwKeepFBLastSector=gdwFileSector; //Walace061122#1
- SetFBNextSectorNumber();
- wTimeOut=DSP_TIME_OUT_CONST;//Horry060213
- wDspVal=TRUE;
- while((wDspVal)&(wTimeOut))
- {
- IdmaPioDmxR(DSP_VIDEO_AB_EN_ADDR,&wDspVal,1,DSP_W16);
- wTimeOut--;
- }
- break;
- case VF_FB_PLAY:
- IdmaPioDmxR(DSP_VIDEO_FB_PLAYDONE_FLAG,&wDspVal,1,DSP_W16);
- if(wDspVal)
- {
- wDspVal=FALSE;
- IdmaPioDmxW(&wDspVal, DSP_VIDEO_FB_PLAYDONE_FLAG, 1, DSP_W16);//PLAYDONE=0
- SetFBNextSectorNumber(); //Walace060712#1
- wDspVal=TRUE;
- IdmaPioDmxW(&wDspVal, DSP_VIDEO_AB_EN_ADDR, 1, DSP_W16);//ABON=1
- }
- break;
- case VF_F_UPDATE:
- if((gxbVESpeed&VE_FAST_STATE)==VE_FAST_FF)
- {
- wDspVal=((WORD)(gxbVESpeed&VE_FAST_VALUE)*gxbFFSkipConst);
- IdmaPioDmxW(&wDspVal, DSP_FF_SKIP_NUM_ADDR, 1, DSP_W16);
- }
- break;
- case VF_F_STOP:
- if((gxbVESpeed&VE_FAST_STATE)==VE_FAST_FF)
- {
- wDspVal=FALSE;
- IdmaPioDmxW(&wDspVal, DSP_FF_EN_ADDR, 1, DSP_W16);
- gxbVESpeed=VE_FAST_NORMAL|VE_FAST_X1;
- }
- else if((gxbVESpeed&VE_FAST_STATE)==VE_FAST_FB)
- {
- //Walace060831#4 start
- //IdmaPioDmxR(DSP_VIDEO_FB_PLAYDONE_FLAG,&wDspVal,1,DSP_W16);
- //if(wDspVal)
- {
- wDspVal=FALSE;
- IdmaPioDmxW(&wDspVal, DSP_VIDEO_FB_EN_ADDR, 1, DSP_W16);//FBON=0
- wDspVal=TRUE;
- IdmaPioDmxW(&wDspVal, DSP_VIDEO_AB_EN_ADDR, 1, DSP_W16);//ABON=1
- TimeOutCtrl(50);
- while(wDspVal)
- {
- if(TimeOutCtrl(CHECK_TIME_OUT))
- break;
- IdmaPioDmxR(DSP_VIDEO_AB_EN_ADDR,&wDspVal,1,DSP_W16);
- }
- wDspVal=FALSE;
- IdmaPioDmxW(&wDspVal, DSP_VIDEO_FB_PLAYDONE_FLAG, 1, DSP_W16);//PLAYDONE=0
- gxbVESpeed=VE_FAST_NORMAL|VE_FAST_X1;
- }
- //Walace060831#4 end
- }
- break;
- }
- }
- void VdEgInit(void)
- {
- //Walace060926#1 VideoResume start
- gxbVideoState=VIDEO_STATE_IDLE;
- // gfDspCtrlCdc=FALSE;
- // gfCdcAlreadyInit=FALSE;
- //Walace060926#1 VideoResume end
- CdcSetPaGain(VIDEO_FADE_OUT_VOL); //tne 2006/12/26 #1
- VdFastCtrl(VF_F_INIT);
- gxbVideoMask=VIDEO_DISPLAY_NO_MASK;
- }
- void VideoSetLcdSizeType(BYTE bWidth,BYTE bHeight,BYTE bLcdType)
- {
- WORD wDspVal;
- wDspVal = (WORD)bWidth;
- IdmaPioDmxW(&wDspVal, DSP_VIDEO_WIDTH_SIZE, 1, DSP_W16); //Set finish data transfer
- wDspVal = (WORD)bHeight;
- IdmaPioDmxW(&wDspVal, DSP_VIDEO_HEIGHT_SIZE, 1, DSP_W16); //Set finish data transfer
- wDspVal = (WORD)bLcdType;
- IdmaPioDmxW(&wDspVal, DSP_VIDEO_LCD_TYPE, 1, DSP_W16); //Set finish data transfer
- }
- //Walace060828#2
- #if(VIDEO_DISP_IN_CENTER)
- void VideoShowCenterGetStartPos(void)
- {
- //if(!fRotDisp)//Walace070122#1 //Tony070124
- {
- if(VIDEO_DISPLAY_MAX_ROW>gxbVideoWidth)
- gxbVideoStartX =( (VIDEO_DISPLAY_MAX_ROW-gxbVideoWidth)>>1);
- else
- gxbVideoStartX=0;
- if(VIDEO_DISPLAY_MAX_COL>=gxbVideoHeight)
- gxbVideoStartY =(VIDEO_DISPLAY_MAX_COL-gxbVideoHeight)>>1;
- else
- gxbVideoStartY=0;
- }
- /*else //Walace070122#1 start//Tony070124
- {
- gxbVideoStartX=16+11;
- gxbVideoStartY=0;
- }
- *///Walace070122#1 end
- }
- #endif
- void VideoGetVideoFromDsp(void) //Walace061121#2
- {
- //#define gxwTemp gxwBlockTotalNum
- #if 0 //Walace061121#2
- IdmaPioDmxR(DSP_VIDEO_BLOCK_PAGES, &gxwTemp, 1,DSP_W16);
- gxbBlockPageNum = (BYTE)gxwTemp;
- IdmaPioDmxR(DSP_VIDEO_BLOCK_COLS, &gxwTemp, 1,DSP_W16);
- gxbBlockColNum = (BYTE)gxwTemp;
- IdmaPioDmxR(DSP_VIDEO_BLOCK_WIDTH, &gxwTemp, 1,DSP_W16);
- gxbBlockWidth = (BYTE)gxwTemp;
- IdmaPioDmxR(DSP_VIDEO_BLOCK_HEIGHT, &gxwTemp, 1,DSP_W16);
- gxbBlockHeight = (BYTE)gxwTemp;
- gxwBlockTotalNum = (WORD)gxbBlockPageNum*(WORD)gxbBlockColNum;
- gxwMcuSize = (WORD)gxbBlockWidth*(WORD)gxbBlockHeight;
- gxbVideoWidth = gxbBlockColNum*gxbBlockWidth;
- gxbVideoHeight = gxbBlockPageNum*gxbBlockHeight;
- #if(VIDEO_DISP_IN_CENTER)
- VideoShowCenterGetStartPos();
- #else
- gxbVideoStartX = 0;
- gxbVideoStartY = 0;
- #endif
- #endif
- //Walace070116#2 start
- TimeOutCtrl(200);
- while(TRUE)
- {
- IdmaPioDmxR(DSP_VIDEO_TOTAL_TIME, &gxwTotalPlayTime, 1,DSP_W16);
- if(gxwTotalPlayTime!=0)
- break;
- if(TimeOutCtrl(CHECK_TIME_OUT))
- {
- #if(VIDEO_ABNORMAL_DEBUG)
- IdmaPioDmxR(0x1fd7, &gxwTotalPlayTime, 1,DSP_W16);
- OledShowNumber(gxwTotalPlayTime,WORD2,LINE0,4);
- IdmaPioDmxR(0x1fca, &gxwTotalPlayTime, 1,DSP_W16);
- OledShowNumber(gxwTotalPlayTime,WORD2,LINE1,4);
- IdmaPioDmxR(0x1fcb, &gxwTotalPlayTime, 1,DSP_W16);
- OledShowNumber(gxwTotalPlayTime,WORD2,LINE2,4);
- IdmaPioDmxR(0x1fc9, &gxwTotalPlayTime, 1,DSP_W16);
- OledShowNumber(gxwTotalPlayTime,WORD2,LINE3,4);
- IdmaPioDmxR(0x1fd9, &gxwTotalPlayTime, 1,DSP_W16);
- OledShowNumber(gxwTotalPlayTime,WORD2,LINE4,4);
- VIDEO_ANNORMAL_DEBUG(9003);
- #else
- break;
- #endif
- }
- }
- //Walace070116#2 end
- gxwFadeOutSector=(stPhoFileInf.dwFileTotalSector*7)/(gxwTotalPlayTime*10); //Walace060803#7
- }
- //Walace061122#2 start
- // cwADPCMSampleTable[SampleRateIndex][FrameRate]
- /* //Walace070115#1
- CWORD cwADPCMSampleTable[][6]={
- {1329, 1833, 1993, 2665, 3673, 3993}, //FR 1
- {265, 361, 393, 529, 729, 793}, //FR 5
- {129, 177, 193, 265, 361, 393}, //FR 10
- {89, 129, 137, 177, 273, 273} //FR 15
- };
- */
- //Walace070115#1 start
- // 16k,22k,24k,
- CWORD cwHQ208VideoADPCMSample[3]={217,305,329}; //Walace070128#2 //For 208*176 (13 fps)
- CWORD cwHQ176VideoADPCMSample[3]={161,217,233}; //Walace070128#2 // For 176*144 (17 fps)
- CWORD cwHQ160VideoADPCMSample[3]={137,185,201}; //Walace070128#2 //For 160*128 (20 fps)
- // 8k,11k,12k,16k,22k,24k,
- CWORD cwVideoADPCMSample[6]={89,129,137,177,273,273};
- //Walace070115#1 end
- BOOL VideoGetHeader(void) //Walace061122#2
- {
- WORD wOffset;
- BYTE bData;
- BYTE bSRIndex;
- BYTE bAudioFramNum;
- //BYTE bVideoSizeCode; //Walace070128#2
- #if(VIDEO_AP_VERSION_DISPLAY) //Walace070110#3
- //Walace061207#4 start
- gxbVideoSupportVersion[0]='0';
- gxbVideoSupportVersion[1]='1';
- gxbVideoSupportVersion[2]='.';
- gxbVideoSupportVersion[3]='1';
- gxbVideoSupportVersion[4]='2';
- gxbVideoSupportVersion[5]='.';
- gxbVideoSupportVersion[6]='1';
- gxbVideoSupportVersion[7]='0';
- gxbVideoFileVersion[0]='?';
- gxbVideoFileVersion[1]='?';
- gxbVideoFileVersion[2]='.';
- gxbVideoFileVersion[3]='?';
- gxbVideoFileVersion[4]='?';
- gxbVideoFileVersion[5]='.';
- gxbVideoFileVersion[6]='?';
- gxbVideoFileVersion[7]='?';
- //Walace061207#4 end
- #endif
- gpstFileIndex=&stPhoFileInf;
- gdwFileSector=0;
- //4 Force parser get field refresh
- wOffset=512;
- //4 AVI_H_SUPPORT_SYNC(0x00,6)
- #define bIndex bSRIndex
- for(bIndex=0;bIndex<sizeof(cbMTVSyncWord);bIndex++)
- {
- ParserGetField(&bData,1,&wOffset, FIRST_SEARCH, NORMAL_DATA);
- if(cbMTVSyncWord[bIndex]!=bData)
- {
- //gxbUiErrorCode=1;
- gxbUiErrorCode=VIDEO_ERR_UNKNOW_FORMAT; //Walace061207#4
- return FALSE;
- //goto GET_HEADER_ERR;
- }
- }
- #undef bIndex
- //4 AVI_H_PACKET_SEQ(0x06,4)
- wOffset+=4;
- //4 AVI_H_PACKET_COUNT(0x0A,4)
- ParserGetField(&gxdwTotalFrameNum,4,&wOffset, FIRST_SEARCH, NORMAL_DATA);
- //4 AVI_H_PACKET_SIZE(0x0E,4)
- wOffset+=2;
- //4 AVI_H_FRAME_RATE (0x10,1)
- ParserGetField(&gxbFrameRate,1,&wOffset, FIRST_SEARCH, NORMAL_DATA);
- if(gxbFrameRate>=20)
- gxbFBPlayNumConst=4;
- else if(gxbFrameRate>=7)
- gxbFBPlayNumConst=2;
- else
- gxbFBPlayNumConst=1;
- /*
- switch(gxbFrameRate) //Walace060117
- {
- case 1:
- case 5:
- gxbFBPlayNumConst=1;
- break;
- case 7:
- case 10:
- case 13:
- gxbFBPlayNumConst=2;
- break;
- case 20:
- gxbFBPlayNumConst=4;
- break;
- default:
- //gxbUiErrorCode=2;
- goto GET_HEADER_ERR;
- }
- */
- //4 AVI_H_SAMPLE_RATE(0x11,1)
- //Walace061122#2
- ParserGetField(&bData,1, &wOffset, FIRST_SEARCH, NORMAL_DATA); //Walace061122#2
- switch(bData) //Walace061122#2
- {
- case 8:
- gxwSampleRate = 8000;
- bSRIndex=0;
- break;
- case 11:
- gxwSampleRate = 11025;
- bSRIndex=1;
- break;
- case 12:
- gxwSampleRate = 12000;
- bSRIndex=2;
- break;
- case 16://Horry060213
- gxwSampleRate = 16000;
- bSRIndex=3;
- break;
- case 22:
- gxwSampleRate = 22050;
- bSRIndex=4;
- break;
- case 24:
- gxwSampleRate = 24000;
- bSRIndex=5;
- break;
- case 32:
- gxwSampleRate = 32000;
- bSRIndex=6;
- break;
- //default: //Walace060912#1 //Walace060912#1
- case 44:
- gxwSampleRate = 44100;
- bSRIndex=7;
- break;
- case 48:
- gxwSampleRate = 48000;
- bSRIndex=8;
- break;
- default: //Walace060912#1
- //gxbUiErrorCode=3;
- gxbErrCode=ERR_VIDEO_NOT_SUPPORT_FORMAT; //Walace061207#4 //Walace070507#1
- break; //Walace061228#1
- //goto GET_HEADER_ERR; //Walace061207#4
- }
- //Walace061122#2
- //3 Get the audio frame number in one mtv packet
- ParserGetField(&bAudioFramNum,1, &wOffset, FIRST_SEARCH, NORMAL_DATA);//Walace061120#1
- //4 AVI_H_IMAGE_INFO(0x13,1)
- ParserGetField(&bData,1, &wOffset, FIRST_SEARCH, NORMAL_DATA);
- xbShowInfoFlag &=0x0f;//Tony070125
- switch(bData&AVI_H_IMAGE_SIZE_MASK)
- {
- case VIDEO_SIZE_96_64:
- gxbVideoWidth = 96;
- gxbVideoHeight = 64;
- fRotDisp=TRUE; //Tony070124 #1 //all rot
- break;
- case VIDEO_SIZE_128_96:
- gxbVideoWidth = 128;
- gxbVideoHeight = 96;
- fRotDisp=TRUE; //Tony070124 #1
- break;
- case VIDEO_SIZE_160_128:
- gxbVideoWidth = 160;
- gxbVideoHeight = 128;
- fRotDisp=TRUE; //Tony070124 #1
- xbShowInfoFlag|=0xf0;//Tony070125
- break;
- case VIDEO_SIZE_128_128: //Walace060912#2
- gxbVideoWidth = 128;
- gxbVideoHeight = 128;
- fRotDisp=TRUE; //Tony070124 #1
- break;
- case VIDEO_SIZE_176_144: //Walace060912#2
- gxbVideoWidth = 176;
- gxbVideoHeight = 144;
- fRotDisp=TRUE; //Tony070124 #1
- break;
- case VIDEO_SIZE_160_112: //Walace061114#1
- gxbVideoWidth = 160;
- gxbVideoHeight = 112;
- fRotDisp=TRUE; //Tony070124 #1
- break;
- case VIDEO_SIZE_208_176: //Walace061126#2
- case VIDEO_SIZE_DEBUG:
- gxbVideoWidth = 208;
- gxbVideoHeight = 176;
- fRotDisp=TRUE; //Walace070122#1
- xbShowInfoFlag|=0xf0;//Tony070125
- break;
- default:
- gxbErrCode=ERR_VIDEO_NOT_SUPPORT_FORMAT; //Walace061207#4 //Walace070507#1
- break; //Walace061228#1
- //gxbUiErrorCode=4;
- //goto GET_HEADER_ERR;
- }
- #define MP3_TIME_SAMPLE_PER_FRAME1 1152 //Walace070115#1
- #define MP3_TIME_SAMPLE_PER_FRAME2 576 //Walace070115#1
- //4 AVI_H_VIDEO_VERSION(0x14,1)
- //Walace061101#1 start
- ParserGetField(&gxbFormatVersion,1, &wOffset, FIRST_SEARCH, NORMAL_DATA); //Walace070110#3
- //Walace061226#1 start
- switch(gxbFormatVersion)
- {
- //Walace070329#1 start
- case AVI_H_SUPPORT_SYNC:
- case AVI_H_SUPPORT_128_128: //0xFF for old sync word, 0xEE for new sync word //Walace060912#1
- gxbVideoFormat = VIDEO_TYPE_MP3_V1;
- break;
- //Walace070329#1 end
- case AVI_H_SUPPORT_NEW_SYNC_MP3:
- gxbVideoFormat = VIDEO_TYPE_MP3;
- if(bSRIndex>=6) // >= Samplerate 32khz //Walace070115#1
- {
- dwTimeSamplesPerPacket = MP3_TIME_SAMPLE_PER_FRAME1*(DWORD)bAudioFramNum;
- }
- else
- {
- dwTimeSamplesPerPacket = MP3_TIME_SAMPLE_PER_FRAME2*(DWORD)bAudioFramNum;
- }
- break;
- case AVI_H_SUPPORT_ADPCM_176_144:
- #if(VIDEO_ABNORMAL_DEBUG)
- if((bSRIndex>5)||(bSRIndex<3))
- VIDEO_ANNORMAL_DEBUG(9005);
- #endif
- gxbVideoFormat = VIDEO_TYPE_ADPCM;
- //OledShowNumber(bAudioFramNum,WORD0,LINE1,3); //WalaceDebug
- dwTimeSamplesPerPacket=cwVideoADPCMSample[bSRIndex]*(DWORD)bAudioFramNum;
- break;
- case AVI_H_SUPPORT_ADPCM_208_176:
- #if(VIDEO_ABNORMAL_DEBUG)
- if(bSRIndex>5)
- VIDEO_ANNORMAL_DEBUG(9004);
- #endif
- gxbVideoFormat = VIDEO_TYPE_ADPCM_HQ;
- //OledShowNumber(bAudioFramNum,WORD0,LINE1,3); //WalaceDebug
- dwTimeSamplesPerPacket=cwHQ208VideoADPCMSample[bSRIndex-3]*(DWORD)bAudioFramNum;
- break;
- //Walace070128#2 start
- case AVI_H_SUPPORT_HQ_ADPCM_176144_160128:
- #if(VIDEO_ABNORMAL_DEBUG)
- if(bSRIndex>5)
- VIDEO_ANNORMAL_DEBUG(9005);
- #endif
- gxbVideoFormat = VIDEO_TYPE_ADPCM_HQ;
- //OledShowNumber(bAudioFramNum,WORD0,LINE1,3); //WalaceDebug
- if(gxbVideoWidth==176)
- dwTimeSamplesPerPacket=cwHQ176VideoADPCMSample[bSRIndex-3]*(DWORD)bAudioFramNum;
- else
- dwTimeSamplesPerPacket=cwHQ160VideoADPCMSample[bSRIndex-3]*(DWORD)bAudioFramNum;
- break;
- //Walace070128#2 end
- default:
- //goto GET_HEADER_ERR;
- gxbErrCode=ERR_VIDEO_NOT_SUPPORT_FORMAT; //Walace061207#4 //Walace070507#1
- //return FALSE;
- break; //Walace061228#1
- }
- //Walace061226#1 end
- #undef MP3_TIME_SAMPLE_PER_FRAME1 //Walace070115#1
- #undef MP3_TIME_SAMPLE_PER_FRAME2 //Walace070115#1
- //Walace061207#2 start
- //4 Reserve 3 bytes (0x15,3)
- wOffset+=3;
- if(gxbVideoFormat == VIDEO_TYPE_MP3_V1) //Walace070329#1
- goto GET_CONFIG_END;
- #if(VIDEO_AP_VERSION_DISPLAY) //Walace061207#4 start
- //4 Reserve 2 bytes (0x18,1)
- wOffset+=2;
- //4 AVI_H_VIDEO_AP_VERSION (0x15,6) format in ASCII
- ParserGetField(&gxbVideoFileVersion,2, &wOffset, FIRST_SEARCH, NORMAL_DATA);
- ParserGetField((&gxbVideoFileVersion)+3,2, &wOffset, FIRST_SEARCH, NORMAL_DATA);
- ParserGetField((&gxbVideoFileVersion)+6,2, &wOffset, FIRST_SEARCH, NORMAL_DATA);
- #else //Walace070110#3
- wOffset+=8;
- #endif
- if(gxbErrCode==ERR_VIDEO_NOT_SUPPORT_FORMAT) //Walace070507#1
- return FALSE;
- //4 Mp3 format check sync word
- if(gxbVideoFormat == VIDEO_TYPE_MP3)
- {
- ParserGetField(&bData,1, &wOffset, FIRST_SEARCH, NORMAL_DATA);
- if(bData!=0xEE) //NewSyncWord
- {
- gxbErrCode=ERR_VIDEO_NOT_SUPPORT_FORMAT; //Walace061207#4//Walace070507#1
- return FALSE;
- }
- }
- //Walace061207#2 end
- /* //Walace070115#1 start
- //Walace061122#2 start
- #define MP3_TIME_SAMPLE_PER_FRAME1 1152
- #define MP3_TIME_SAMPLE_PER_FRAME2 576
- //3 Determine time samples per avi packet
- if(gxbVideoFormat==VIDEO_TYPE_MP3)
- {
- if(bSRIndex>=6) // >= Samplerate 32khz
- {
- dwTimeSamplesPerPacket = MP3_TIME_SAMPLE_PER_FRAME1*(DWORD)bAudioFramNum;
- }
- else
- {
- dwTimeSamplesPerPacket = MP3_TIME_SAMPLE_PER_FRAME2*(DWORD)bAudioFramNum;
- }
- }
- else //gxbVideoFormat==VIDEO_TYPE_ADPCM
- {
- //if(bSRIndex>4)
- // goto GET_HEADER_ERR;
- dwTimeSamplesPerPacket=cwADPCMSampleTable[(gxbFrameRate/5)][bSRIndex]*(DWORD)bAudioFramNum;
- }
- #undef MP3_TIME_SAMPLE_PER_FRAME1
- #undef MP3_TIME_SAMPLE_PER_FRAME2
- */ //Walace070115#1 end
- //Walace061122#2 end
- //Walace061101#1 end
- GET_CONFIG_END: //Walace070329#1
- gxbFFSkipConst=1;//(frame)
- /* //Walace070122#1
- if(gxbVideoWidth>VIDEO_DISPLAY_MAX_COL||gxbVideoHeight>VIDEO_DISPLAY_MAX_ROW)
- {
- gxbUiErrorCode=VIDEO_ERR_OVER_SCREEN;
- //gxbUiErrorCode=6;
- return FALSE;
- }
- */
- gxbErrCode=ERR_NO_ERROR; //Walace070507#1
- return TRUE;
- /*GET_HEADER_ERR: //Walace061207#4
- gxbUiErrorCode=VIDEO_ERR_UNKNOW_FORMAT;
- return FALSE;
- */
- }
- //Walace060912#1 start
- //Walace060926#1 VideoResume start //Walace061121#3 //Walace061122#2
- void GetSectorNumFromSec(void)
- {
- WORD wOffset;
- BYTE bIndex;
- BYTE bData;
- BYTE bSearchState;
- DWORD dwPacketNum;
- WORD wPacketSize;
- WORD wSectorPerPacket;
- BYTE bSearchCount;
- DWORD gxdwTargetPacketNum;
- //gxdwTargetPacketNum = ((DWORD)gxwCurrentPlayTime*gxwSampleRate+(dwTimeSamplesPerPacket-1))/dwTimeSamplesPerPacket;
- gxdwTargetPacketNum = ((DWORD)gxwCurrentPlayTime*gxwSampleRate)/dwTimeSamplesPerPacket;//Walace070115#1
- //WalaceDebug start
- /*
- OledShowNumber(gxdwTargetPacketNum,WORD2,PAGE0,5); //54
- OledShowNumber((gxdwTargetPacketNum>>16),WORD2,PAGE1,5); //0
- OledShowNumber(gxwCurrentPlayTime,WORD2,PAGE2,5);// 4
- OledShowNumber(dwTimeSamplesPerPacket,WORD2,PAGE3,5); //1638
- OledShowNumber(dwTimeSamplesPerPacket>>16,WORD2,PAGE4,5); //0
- OledShowNumber(gxwSampleRate,WORD2,PAGE5,5); // 22k
- */
- // //WalaceDebug end
- wSectorPerPacket=stPhoFileInf.dwFileTotalSector/gxdwTotalFrameNum; //Walace061122#2
- #define COMPARE_SYNC_WORD 0x01
- #define GET_AVI_HEADER 0x02
- #define SEARCH_COMPLETE 0x03
- #define SEARCH_BACK 0x04 //Walace061114#2
- bSearchState = SEARCH_BACK; //Walace061114#2
- bSearchCount=2; //Walace061114#2
- wOffset=512;
- while(TRUE)
- {
- switch(bSearchState)
- {
- case SEARCH_BACK:
- if(gdwFileSector<(wSectorPerPacket*bSearchCount))
- gdwFileSector=0;
- else
- gdwFileSector=gdwFileSector-(wSectorPerPacket*bSearchCount);
- bSearchState=COMPARE_SYNC_WORD;
- break;
- case COMPARE_SYNC_WORD:
- ParserGetField(&bData, 1,&wOffset, FIRST_SEARCH, NORMAL_DATA);
- COMPARE_FIRST_CHAR:
- if(bData==cbMTVSyncWord[0])
- {
- for(bIndex=1;bIndex<sizeof(cbMTVSyncWord);bIndex++)
- {
- ParserGetField(&bData, 1,&wOffset, FIRST_SEARCH, NORMAL_DATA);
- if(cbMTVSyncWord[bIndex]!=bData)
- goto COMPARE_FIRST_CHAR;
- }
- bSearchState=GET_AVI_HEADER;
- }
- break;
- case GET_AVI_HEADER:
- ParserGetField(&dwPacketNum, 4,&wOffset, FIRST_SEARCH, NORMAL_DATA);
- if(dwPacketNum==gxdwTargetPacketNum)
- {
- bSearchState=SEARCH_COMPLETE;
- }
- else if(dwPacketNum>gxdwTargetPacketNum)
- {
- bSearchCount= (dwPacketNum-gxdwTargetPacketNum)+2;
- bSearchState=SEARCH_BACK;
- }
- else
- {
- wOffset+=4;
- ParserGetField(&wPacketSize, 2,&wOffset, FIRST_SEARCH, NORMAL_DATA);
- //wOffset+=(wPacketSize-(6+4+4+2)); //Walace070115#1
- wOffset+=(wPacketSize-(AVI_HEADER_SIZE-0x10)); //Walace070115#1
- bSearchState=COMPARE_SYNC_WORD;
- }
- break;
- case SEARCH_COMPLETE:
- gdwFileSector--; //Walace070115#1
- //WalaceDebug
- //OledShowNumber(gdwFileSector,WORD2,LINE6,5); // 840
- //WalaceDebug
- return;
- }
- }
- #undef COMPARE_SYNC_WORD
- #undef GET_AVI_HEADER
- #undef SEARCH_COMPLETE
- #undef SEARCH_BACK
- }
- //Walace060926#1 VideoResume end
- BOOL VdEgVideoConfig(void) //Walace061121#1 //Walace061121#2
- {
- #if(FSCLUINDEX_KEEP) //Walace061121#1
- BYTE bI;
- DWORD dwSecTemp;
- #endif
- gxbBlockColNum=VIDEO_UNKNOW_DATA;
- gxbBlockRowNum=VIDEO_UNKNOW_DATA;
- gxwBlockTotalNum =VIDEO_UNKNOW_DATA;
- gxwCurrentBlockNum=VIDEO_UNKNOW_DATA;
- #if(VIDEO_DEBUG_SAVE_BLOCK_DATA)
- gxwCurrentFrameNum=VIDEO_UNKNOW_DATA;
- #endif
- gxwFadeOutSector=VIDEO_UNKNOW_DATA;
- gfFadeState = FADE_STATE_FADE_OUT;
- gxbErrCode=ERR_NO_ERROR; //Walace070507#1
- fRotDisp = FALSE ; //Walace070122#1
- VideoGetHeader();
- gdwFileSector=VIDEO_UNKNOW_DATA;
- //Vicky060605#1 //Walace061121#1
- #if(FSCLUINDEX_KEEP)
- for(bI=0;bI<FSCLUINDEX_NUM;bI++)
- {
- gxdwCluIndex[bI]=0;
- }
- #endif
- //Vicky060605#1
- #if(FSCLUINDEX_KEEP)
- for(bI=0;bI<FSCLUINDEX_NUM;bI++)
- {
- dwSecTemp=(gpstFileIndex->dwFileTotalSector)/(FSCLUINDEX_NUM+1)*(FSCLUINDEX_NUM-bI);
- dwSecTemp=gpstFileIndex->dwFileTotalSector-dwSecTemp;
- if(dwSecTemp>=gpstFileIndex->dwFileTotalSector) //vicky061129#1 Avoid EOF Error
- break;
- FsReadFileSectorNew(dwSecTemp, FS_DATA_0_0);
- gxdwCluIndex[bI]=gpstFileIndex->dwFileCurClu;
- }
- #endif
- //End
- gdwFileSector=VIDEO_UNKNOW_DATA;
- gxwCurrentPlayTime=VIDEO_UNKNOW_DATA;
- /*
- if(gxbVideoWidth==224&&gxbVideoHeight==192)
- {
- gxbBlockWidth = 32;
- gxbBlockHeight = 32;
- gfCutBlockDisplay=TRUE;
- }
- else
- {
- */
- gxbBlockWidth = 16;
- gxbBlockHeight = 16;
- //gfCutBlockDisplay=FALSE;
- //}
- gxbBlockColNum= gxbVideoWidth/gxbBlockWidth;
- gxbBlockRowNum= gxbVideoHeight/gxbBlockHeight;
- gxwBlockTotalNum=(WORD)gxbBlockRowNum*(WORD)gxbBlockColNum;
- #if(VIDEO_DISP_IN_CENTER)
- VideoShowCenterGetStartPos();
- #else
- gxbVideoStartX = 0;
- gxbVideoStartY = 0;
- #endif
- #if(HEADER_INFO_CHECK)
- OledShowNumber(gxdwTotalFrameNum&0xFFFF,WORD0,PAGE0,6);
- OledShowNumber((gxdwTotalFrameNum>>16)&0xFFFF,WORD0,PAGE1,6);
- OledShowNumber(gxbBlockWidth,WORD0,PAGE2,3);
- OledShowNumber(gxbBlockHeight,WORD0,PAGE3,3);
- OledShowNumber(gxbVideoWidth,WORD0,PAGE4,3);
- OledShowNumber(gxbVideoHeight,WORD0,PAGE5,3);
- OledShowNumber(gxbUiErrorCode,WORD0,PAGE6,3);
- //OledShowNumber(gfCutBlockDisplay,WORD2,PAGE2,3);
- OledShowNumber(gxbVideoFormat,WORD2,PAGE3,3);
- OledShowNumber(gxbVideoWidth,WORD2,PAGE4,3);
- OledShowNumber(gxbVideoHeight,WORD2,PAGE5,3);
- KEY_PRESS_WAIT();
- #endif
- #if(VIDEO_OVERSCREEN_NO_DISPLAY)
- if(gxbErrCode!=ERR_NO_ERROR) //Walace070507#1
- #else
- if(gxbErrCode!=ERR_NO_ERROR&&gxbErrCode!=ERR_VIDEO_OVER_SCREEN) //Walace070507#1
- #endif
- return FALSE;
- return TRUE;
- }
- //Walace060912#1 end
- BOOL VdEgStart(void)
- {
- WORD wDspVal;
- CDC_I2S_INT_DIS();
- VideoDspInit();
- ClkDspEn();
- CommonDelay(0xFFFF); //Walace070102#2
- //Walace061101#1 start
- if(!DownloadVideoDsp(gxbVideoFormat)) //Walace061101#1
- return FALSE;
- #if(FADE_IN_OUT_MODE==1)
- CdcCtrl(CDC_PLAY_START);
- #endif
- #if(VIDEO_FADE_MODE==1)
- CdcSetPaGain(gxbVolume); //tne 2006/12/26 #1
- CdcSetPaGainTask(PA_TASK_IMMEDIATE); //Walace060525#4 //tne 2006/12/26 #1
- #endif
- SetSysSpeed(VIDEO_ENGINE_PLAY_SPEED); //Walace061207#3
- //end
- #if(OLED_COLOR_FIELD_TYPE==OLED_FILED_RGB565)
- VideoSetLcdSizeType(VIDEO_DISPLAY_MAX_COL,VIDEO_DISPLAY_MAX_ROW,DSP_VIDEO_LCD_TYPE_STN);
- #else
- VideoSetLcdSizeType(VIDEO_DISPLAY_MAX_COL,VIDEO_DISPLAY_MAX_ROW,DSP_VIDEO_LCD_TYPE_OLED);
- #endif
- if(gxbVideoFormat != VIDEO_TYPE_MP3_V1) //Walace070329#1
- {
- wDspVal=TRUE;
- IdmaPioDmxW(&wDspVal, DSP_VIDEO_GET_CONFIG, 1, DSP_W16);//resume
- } //Walace070329#1
- if(!SetDspStart()) //Walace070507#1
- return FALSE;
- gfDspCtrlCdc=TRUE;
- #if(FADE_IN_OUT_MODE==0)
- CdcCtrl(CDC_PLAY_START);
- #endif
- //Walace060803#7 start //Walace060831#3 start
- gxwTotalPlayTime=VIDEO_UNKNOW_DATA;
- IdmaPioDmxW(&gxwTotalPlayTime,DSP_VIDEO_TOTAL_TIME,1,DSP_W16);
- //Walace060803#7 end //Walace060831#3 end
- return TRUE;
- }
- BYTE CheckVideoIn(void) large
- {
- WORD wDspVal;
- IdmaPioDmxR(DSP_VIDEO_INPUT_FLAG, &wDspVal, 1,DSP_W16);
- return (BYTE)wDspVal;
- }
- //==============================================================
- BYTE CheckVideoOut(void) large
- {
- WORD wDspVal;
- IdmaPioDmxR(DSP_VIDEO_OUTPUT_FLAG, &wDspVal, 1,DSP_W16);
- return (BYTE)wDspVal;
- }
- /*
- void VideoFillDspBuff(void)
- {
- BYTE bI;
- bI=0;
- while(TRUE)
- {
- if(CheckVideoIn()==DSP_REQ_START)
- {
- VideoFillDataToDsp();
- bI=0;
- }
- else
- {
- bI++;
- if(bI>30)
- break;
- }
- }
- }
- */
- BOOL VideoFillDataToDsp(void)
- {
- WORD wDspVal;
- //2 fill sram buffer from file with 512 bytes
- // gdwFileSectory : current sector number send to dsp
- gpstFileIndex=&stPhoFileInf;
- //VideoGetAudioConfig(); //Walace060803#7
- //VideoUpdateInfoFromDsp(); //Walace070116#4
- if(gdwFileSector>=(gpstFileIndex->dwFileTotalSector))
- return TRUE;
- if(CheckVideoIn()!=DSP_REQ_START) //check dsp request data
- return TRUE;
- if(FsReadFileSectorNew(gdwFileSector,FS_DATA_0_0)) //read a sector
- {
- gdwFileSector++;
- //Walace060712#1
- IdmaPioDmxR(DSP_VIDEO_INPUT_ADDR,&wDspVal,1,DSP_W16); //get DSP write index
- //Send 512 bytes to DSP
- obRACTL |= RA_INIT;
- obSOURCEPATHCTRL &= 0xef; //source buffer disable
- obTARGETPATHCTRL &= 0xef; //target buffer disable
- obRACTL &= RA_NORMAL_J;
- obRACTL |= RA_COPY_MODE_EN;
- obRAINIADRL = (SRAM_DATA_ADDR+gxwOffsetDataSec) & 0xFF; //set RA sddress
- obRAINIADRH = (((SRAM_DATA_ADDR+gxwOffsetDataSec) >> 8) & 0x1F);
- obRAINIADRH |= 0x80;
- obTARGETPATHCTRL=0x36; //set Target IDMA, buffer EN
- IdmaDmxW(wDspVal,256,DSP_W16); //IDMA from SRAM to DSP
- obRACTL |= 0x80; //DMA EN
- while(obIDMAREQ) //polling IDMA request inactive
- {;}
- obRACTL &= 0x7F; //DMA Dis
- obRACTL &= RA_COPY_MODE_DIS;
- wDspVal=DSP_REQ_END;
- IdmaPioDmxW(&wDspVal, DSP_VIDEO_INPUT_FLAG, 1, DSP_W16); //Set finish data transfer
- return TRUE;
- }
- else
- {
- return FALSE;
- }
- return TRUE;
- }
- //Walace061126#2 start
- BOOL DMAIDMADmxRead(WORD wDmxAddress,WORD wSramAdd,WORD wGetSize)
- {
- //Get 512 bytes from DSP
- obRACTL = RA_INIT;
- //obSOURCEPATHCTRL &= 0xef; //source buffer disable
- //obTARGETPATHCTRL &= 0xef; //target buffer disable
- obRACTL &= RA_NORMAL_J;
- obRAINIADRL = wSramAdd & 0xFF; //set RA address
- obRAINIADRH = ((wSramAdd >> 8) & 0x1F);
- obRAINIADRH |= 0x80;
- obRABANKSIZEL=0x00; //Set RA size 512B
- //obRABANKSIZEH=0x02;
- obRABANKSIZEH=(wGetSize>>8);
- obMODSEL3 &= NOTBYPASS_RAJ; //allen050601: force NotBypassRa
- obSOURCEPATHCTRL=0x36; //set Source IDMA, buffer EN
- // obTARGETPATHCTRL=0x37; //Target SRAM
- obTARGETPATHCTRL=0x00;
- // obDOWNLOADADDRL=(SramAddr>>3)&0xFF; //SRAM Address
- // obDOWNLOADADDRH=(SramAddr>>11)&0x3f;
- // obDOWNLOADADDRH |= 0xc0;//to sram, reload address
- // obDOWNLOADADDRH&=0xBF; //normal
- // obTARGETPATHCTRL=0x37; //set Target RA, buffer EN
- IdmaDmxR(wDmxAddress,(wGetSize>>1));
- //IdmaDmxR(wDspVal,256); //IDMA from DSP to SRAM //Walace061122#1
- obRACTL |= 0x80; //DMA EN
- while(obIDMAREQ) //polling IDMA request inactive
- {;}
- //OledShowNumber(50,WORD1,LINE3,2); //OK
- // obRACTL |= 0x10; //DMA SEND
- // while(!(obRASTATUS & 0x80))
- // {;}
- obRACTL &= 0x7F; //DMA Dis
- obIDMACTRL&=IDMA_ACT_DIS;
- return TRUE;
- }
- //Walace061126#2end
- //#define WALACEDEBUG //WalaceDebug
- #ifdef WALACEDEBUG
- XWORD gxwDebugKeep=0xFFFF;
- #endif
- BOOL GetImageFromDsp(void)
- {
- //2 Get image data from dsp 512 bytes to Sram
- WORD wDspVal;
- if(CheckVideoOut()==DSP_REQ_START) //DSP request send out a sector
- {
- IdmaPioDmxR(DSP_VIDEO_OUTPUT_ADDR,&wDspVal,1,DSP_W16);
- #ifdef WALACEDEBUG
- OledShowNumber(wDspVal,WORD6,PAGE0,5);
- if((wDspVal>=gxwDebugKeep))
- OledShowNumber((wDspVal-gxwDebugKeep),WORD6,PAGE1,5);
- else
- OledShowNumber(9999,WORD6,PAGE1,5);
- gxwDebugKeep=wDspVal;
- OledShowNumber(gxbBlockWidth,WORD6,PAGE2,5);
- OledShowNumber(gxbBlockHeight,WORD6,PAGE3,5);
- #endif
- //Walace061126#2
- DMAIDMADmxRead(wDspVal,SRAM_DMA_ADDRESS,((WORD)gxbBlockHeight*(WORD)gxbBlockWidth*2));
- wDspVal=DSP_REQ_END;
- IdmaPioDmxW(&wDspVal, DSP_VIDEO_OUTPUT_FLAG, 1,DSP_W16); //Set finish data transfer
- #ifdef WALACEDEBUG
- OledCtrlEn();
- TftSetWindow(0,0,gxbBlockWidth,gxbBlockHeight);
- TFT_MEMORY_WRITE_START();
- OLED_SET_DAT();
- for(wDspVal=0;wDspVal<((WORD)gxbBlockHeight*(WORD)gxbBlockWidth*2);wDspVal++)
- {
- LCD_WRITE(*(PXBYTE)(SRAM_DMA_ADDRESS+wDspVal));
- }
- OLED_SET_CMD();
- OledCtrlDis();
- #endif
- return TRUE;
- }
- return FALSE;
- }
- #if(VIDEO_BYTE_REVERSE_TEST)
- void SwapSectorHL(void)
- {
- WORD wIndex;
- BYTE bBuff;
- PXBYTE pData;
- pData = (PXBYTE)0xC800;
- for(wIndex=0;wIndex<(DSP_BLOCK_SIZE<<1);wIndex+=2)
- {
- bBuff=*(pData+wIndex);
- *(pData+wIndex) = *(pData+wIndex+1);
- *(pData+wIndex+1) = bBuff;
- }
- }
- #endif
- #if(VIDEO_DEBUG_SAVE_BLOCK_DATA)
- void SaveCurrentBlockToPrivate(BYTE bSecNum)
- {
- WORD wCounter;
- OledCtrlDis();
- for(wCounter=0;wCounter<512;wCounter++)
- *((PXBYTE)SRAM_FONT_ADDR+wCounter)=*((PXBYTE)SRAM_LYRICS_ADDR+wCounter);//*((PXBYTE)(0xC800+wCounter));
- LoadExtendMemCode();
- NandPrivateEn();
- FsRead((DWORD)bSecNum, 1, FS_DATA_0_0);
- for(wCounter=0;wCounter<512;wCounter++)
- gxbFsData[gxwOffsetDataSec+wCounter]=*((PXBYTE)SRAM_FONT_ADDR+wCounter);//*((PXBYTE)(0xC800+wCounter));
- FsWrite((DWORD)bSecNum, 1 , FS_DATA_0_0);
- NandFinishJob();
- NandPrivateDis();
- }
- #endif
- BOOL VideoShow(void) //Walace061126#2
- {
- //2 2 Send Sram data to OLED
- BYTE bXStart,bYStart;
- WORD wRemainLength;
- WORD wTransferLen;
- WORD wDmaAddress;
- BYTE bCurrentBlockWidth;
- BYTE bCurrentBlockHeight;
- BYTE bTemp;
- #if(VIDEO_ENGINE_SHOW_SPEED!= VIDEO_ENGINE_PLAY_SPEED)
- BYTE bKeepClkDiv;
- bKeepClkDiv = obCLKMCUDIVF;
- SetSysSpeed(VIDEO_ENGINE_SHOW_SPEED);
- #endif
- OledCtrlEn();
- #if(VIDEO_BYTE_REVERSE_TEST)
- SwapSectorHL();
- #endif
- // #if(LCD_TYPE==TFT_ORISE||LCD_TYPE==TFT_SOLOMON)//Jim#TftSolomn //Walace070122#1 mark
- if(fRotDisp) //Walace070122#1
- LCD_ROT90_DISPLAY_EN();
- // #endif
- bXStart = (gxwCurrentBlockNum%gxbBlockColNum)*gxbBlockWidth+gxbVideoStartX;
- bYStart = (gxwCurrentBlockNum/gxbBlockColNum)*gxbBlockHeight+gxbVideoStartY;
- //OledShowNumber(bXStart,WORD0,PAGE0,3);
- //OledShowNumber(bYStart,WORD0,PAGE1,3);
- //CommonDelay(0xFFFF);
- bCurrentBlockWidth=gxbBlockWidth;
- bCurrentBlockHeight=gxbBlockHeight;
- /*
- if(gfCutBlockDisplay)
- {
- if((bXStart+gxbBlockWidth)>VIDEO_DISPLAY_MAX_COL)
- {
- bCurrentBlockWidth=VIDEO_DISPLAY_MAX_COL-bXStart;
- }
- if((bYStart+gxbBlockHeight)>VIDEO_DISPLAY_MAX_ROW)
- {
- bCurrentBlockHeight=VIDEO_DISPLAY_MAX_ROW-bYStart;
- }
- }
- */
- #if(VIDEO_OFFSET_TO_PANEL_SIZE)
- bXStart = bXStart%OLED_MAX_COL;
- bYStart = bYStart%OLED_MAX_ROW;
- #endif
- #if(VIDEO_CUT_BLOCK_TO_PANEL_SIZE) //Walace060421#2 //Video debug flag for big size burn-in test
- if((bXStart<=(VIDEO_DISPLAY_MAX_COL-bCurrentBlockWidth))&&(bYStart<=(VIDEO_DISPLAY_MAX_ROW-bCurrentBlockHeight)))
- #endif
- //if(bXStart<(220-80)) //WalaceDebug
- {
- #if(LCD_TYPE==OLED_SOLOMON)
- if(bYStart<gxbVideoMask)
- #endif
- #if(LCD_TYPE==TFT_TOPPOLY||LCD_TYPE==TFT_ORISE)
- if(xbShowInfoFlag&0x0f)//Tony070125
- bTemp = 112;
- else
- bTemp = 128;
- if((bYStart<bTemp))
- #endif
- {
- #if(LCD_TYPE==TFT_ORISE)
- TftSetWindow(bXStart,bYStart,bCurrentBlockWidth,bCurrentBlockHeight);
- TFT_MEMORY_WRITE_START();
- #elif(LCD_TYPE==TFT_TOPPOLY)
- if(fRotDisp) //Walace070122#1 start // Jeff070125#2
- {
- TftSetWindow(bYStart,OLED_MAX_ROW-bXStart-1,bCurrentBlockWidth,bCurrentBlockHeight);
- DISP_CMD_OUT(0x8);
- DISP_DATA_OUT(OLED_MAX_ROW-bXStart-2+bCurrentBlockWidth);
- }
- else
- {
- TftSetWindow(bXStart,bYStart,bCurrentBlockWidth,bCurrentBlockHeight);
- } //Walace070122#1 end
- TFT_MEMORY_WRITE_START();
- #elif(LCD_TYPE==TFT_SOLOMON) //Jim#TftSolomn
- TftSetWindow(bYStart,bXStart,bCurrentBlockHeight,bCurrentBlockWidth);
- TFT_MEMORY_WRITE_START();
- #else
- OLED_WRITE(OLED_CMD_SET_COL_ADDR) ;
- OLED_WRITE(bXStart);
- OLED_WRITE(bXStart+bCurrentBlockWidth-1);
- OLED_WRITE(OLED_CMD_SET_ROW_ADDR) ;
- OLED_WRITE(bYStart);
- OLED_WRITE(bYStart+bCurrentBlockHeight-1);
- #endif
- //CommonDelay(0xFFFF);
- OLED_SET_DAT();
- wRemainLength = ((WORD)bCurrentBlockHeight*(WORD)bCurrentBlockWidth*2);
- wDmaAddress=(SRAM_DMA_ADDRESS-0xc000);
- while(wRemainLength)
- {
- if(wRemainLength<1024)
- wTransferLen=wRemainLength;
- else
- wTransferLen=1024;
- OledDMASramToSM(wDmaAddress, wTransferLen);
- wRemainLength-=wTransferLen;
- wDmaAddress+=wTransferLen;
- }
- OLED_SET_CMD();
- }
- }
- #if(VIDEO_DEBUG_SAVE_BLOCK_DATA)
- if((gxwCurrentBlockNum==4)&&(gxwCurrentFrameNum==13))
- {
- SaveCurrentBlockToPrivate(3);
- OledShowNumber(999,WORD0,LINE0,3);
- while(1){;}
- }
- #endif
- gxwCurrentBlockNum++;
- //#if(LCD_TYPE==TFT_ORISE||LCD_TYPE==TFT_SOLOMON) //Jim#TftSolomn //Walace070122#1 mark
- //LCD_ROT90_DISPLAY_DIS();
- //#endif
- if(fRotDisp) //Walace070122#1
- OledDrawDirection(OLED_RAM_ACCESS_MODE_COLUMN_FIRST); //Walace070122#1
- if(gxwCurrentBlockNum>=gxwBlockTotalNum)
- {
- gxwCurrentBlockNum = 0;
- #if(VIDEO_DEBUG_SAVE_BLOCK_DATA)
- gxwCurrentFrameNum++;
- #endif
- OledCtrlDis();
- #if(VIDEO_ENGINE_SHOW_SPEED!= VIDEO_ENGINE_PLAY_SPEED)//Walace060801#1
- SetSysSpeed(bKeepClkDiv);
- #endif
- return TRUE;
- }
- OledCtrlDis();
- #if(VIDEO_ENGINE_SHOW_SPEED!= VIDEO_ENGINE_PLAY_SPEED)
- SetSysSpeed(bKeepClkDiv);
- #endif
- return FALSE;
- }
- #define WAIT_1_PACKET_COMPLETE 1
- //Walace051218
- #if(!VIDEO_FULLY_SERVICE_TO_DSP_DEBUG)
- void VdEgPlay(void)
- {
- #if(WAIT_1_PACKET_COMPLETE)
- WORD wTimeOut;
- #endif
- /*
- if(obCLKMCUDIVF!=VIDEO_ENGINE_PLAY_SPEED)
- {
- OledShowNumber(obCLKMCUDIVF,WORD0,LINE0,6);
- while(1){}
- }
- */
- //Walace061017#2 start //Walace061207#3 start
- /* //WalaceDebug mark
- #if(VIDEO_ENGINE_SHOW_SPEED!= VIDEO_ENGINE_PLAY_SPEED)
- BYTE bKeepSpeed;
- bKeepSpeed=obCLKMCUDIVF;
- SetSysSpeed(VIDEO_ENGINE_PLAY_SPEED);
- #endif
- */
- VideoFillDataToDsp();
- VideoUpdateInfoFromDsp(); //Walace070116#4
- VideoDebugShow();
- if(GetImageFromDsp())
- {
- VideoShow();
- #if(WAIT_1_PACKET_COMPLETE)
- wTimeOut=DSP_TIME_OUT_CONST;
- while(wTimeOut--)
- {
- VideoFillDataToDsp();
- VideoUpdateInfoFromDsp(); //Walace070116#4
- VideoDebugShow();
- if(GetImageFromDsp())
- {
- if(VideoShow())
- goto VIDEO_PLAY_END; //Walace060801#1
- }
- UiMessageCtrl();
- }
- #endif
- }
- //Walace060801#1 start
- VIDEO_PLAY_END:
- /* //WalaceDebug mark //Walace061207#3 start
- #if(VIDEO_ENGINE_SHOW_SPEED!= VIDEO_ENGINE_PLAY_SPEED)
- SetSysSpeed(bKeepSpeed); //Walace061017#1
- #endif
- */
- ;
- //Walace060801#1 end
- }
- #else
- XWORD gxwDspVal;
- void VdEgPlay(void)
- {
- WORD wTemp=0;
- SetSysSpeed(0x02);
- while(1)
- {
- if(wTemp>0)
- {
- VideoFillDataToDsp();
- VideoUpdateInfoFromDsp(); //Walace070116#4
- wTemp=0;
- }
- else
- {
- wTemp++;
- }
- if(CheckVideoOut()==DSP_REQ_START) //DSP request send out a sector
- {
- gxwDspVal=DSP_REQ_END;
- IdmaPioDmxW(&gxwDspVal, DSP_VIDEO_OUTPUT_FLAG, 1,DSP_W16); //Set finish data transfer
- }
- ShowDspErrMsg();
- }
- }
- #endif
- #if(VIDEO_FADE_MODE==0)
- void VdForceFadeOut(void)
- {
- CdcSetPaGain(VIDEO_FADE_OUT_VOL); //tne 2006/12/26 #1
- while(gdwFileSector<stPhoFileInf.dwFileTotalSector)
- {
- if(gxbTargetVolume==gxbLastVolume)
- return;
- //IntCdcSetPaGainTask(FALSE);
- CdcSetPaGainTask(PA_TASK_UNIMMEDIATE|PA_TASK_DELAY); //Walace060525#4 //tne 2006/12/26 #1
- VdEgPlay();
- }
- /*
- if(gxbTargetVolume!=gxbLastVolume)
- while(1){}
- */
- }
- #endif
- //Walace061020#1 start
- //Walace060630#3
- #define DSP_INBUFF_SIZE_MP3 1024
- #define DSP_INBUFF_SIZE_ADPCM 2048
- #define DSP_AUD_OUTBUFF_SIZE 4096
- /*
- 208x176 ADPCM
- .var/dm/abs=0x0800 InBuffer[2048];
- .var/dm/abs=0x0000 rd_in
- .var/dm/abs=0x1FF7 wr_in
- .var/dm/abs=0x2000 AUD_outbuf[4096];
- .var/dm/abs=0x1FE2 rd_out
- .var/dm/abs=0x1FE3 wr_out
- .var/dm/abs=0x1000 VEO_outbuf[2048];
- .var/dm/abs=0x1FF9 V_outbuf_rd
- .var/dm/abs=0x1FCE V_outbuf_wr
- 176x144 & 160x128ADPCM
- .var/dm/abs=0x0800 InBuffer[2048];
- .var/dm/abs=0x0000 rd_in
- .var/dm/abs=0x1FF7 wr_in
- .var/dm/abs=0x2000 AUD_outbuf[4096];
- .var/dm/abs=0x1FE2 rd_out
- .var/dm/abs=0x1FE3 wr_out
- .var/dm/abs=0x1000 VEO_outbuf[2048];
- .var/dm/abs=0x1FF9 V_outbuf_rd
- .var/dm/abs=0x1FCE V_outbuf_wr
- 160x144 mp3
- .var/dm/abs=0x0800 InBuffer[1024];
- .var/dm/abs=0x0000 rd_in
- .var/dm/abs=0x1FF7 wr_in
- .var/dm/abs=0x2000 AUD_outbuf[4096];
- .var/dm/abs=0x1FE2 rd_out
- .var/dm/abs=0x1FE3 wr_out
- .var/dm/abs=0x1000 VEO_outbuf[1024];
- .var/dm/abs=0x1FF9 V_outbuf_rd
- .var/dm/abs=0x1FCE V_outbuf_wr
- */
- WORD CheckDspBuffer(BYTE bCheckCmd) large
- {
- WORD wRDIndex,wWRIndex;
- WORD wTimeOut;
- WORD wBuffSize;
- switch(bCheckCmd)
- {
- case WAIT_AUD_OUT_BUFF_EMPTY:
- wTimeOut=0xFFFF;
- while(wTimeOut)
- {
- //IdmaPioDmxR(DSP_VIDEO_AUD_OUT_RDINDEX,&wRDIndex,1,DSP_W16);
- //IdmaPioDmxR(DSP_VIDEO_AUD_OUT_WRINDEX,&wWRIndex,1,DSP_W16);
- //if(wRDIndex==wWRIndex) //Outbuffer Empty
- // break;
- IdmaPioDmxR(DSP_VIDEO_AUD_OUT_ERRFLAG,&wRDIndex,1,DSP_W16);
- if(wRDIndex)
- break;
- wTimeOut--;
- }
- break;
- case GET_AV_IN_BUFF_DATA_SIZE:
- if((gxbVideoFormat==VIDEO_TYPE_MP3)) //Walace061226#1
- {
- wBuffSize=DSP_INBUFF_SIZE_MP3;
- }
- else
- {
- wBuffSize=DSP_INBUFF_SIZE_ADPCM;
- }
- IdmaPioDmxR(DSP_VIDEO_AVI_IN_RD_INDEX,&wRDIndex,1,DSP_W16);
- IdmaPioDmxR(DSP_VIDEO_AVI_IN_WR_INDEX,&wWRIndex,1,DSP_W16);
- if(wWRIndex>=wRDIndex)
- return (wWRIndex-wRDIndex)<<1; //Walace061226#1
- else
- return (wBuffSize+wWRIndex-wRDIndex)<<1; //Walace061226#1
- break;
- //Walace060829#2 start
- case GET_AUD_OUT_BUFF_DATA_SIZE:
- IdmaPioDmxR(DSP_VIDEO_AUD_OUT_RDINDEX,&wRDIndex,1,DSP_W16);
- IdmaPioDmxR(DSP_VIDEO_AUD_OUT_WRINDEX,&wWRIndex,1,DSP_W16);
- if(wWRIndex>=wRDIndex)
- return (wWRIndex-wRDIndex);
- else
- return (DSP_AUD_OUTBUFF_SIZE+wWRIndex-wRDIndex)<<1; //Walace061226#1
- break;
- //Walace060829#2 end
- //== Latched Signal==========
- // bit 0: AVI Inbuffer Empty
- // bit 1: AUD Outbuffer Empty
- // bit 2: VEO Outbuffer Empty
- // bit 3: Audio Bitstream Format Error
- // bit 4: Vedio Bitstream Format Error
- case GET_AVI_ERR_FLAG:
- IdmaPioDmxR(DSP_VIDEO_AVI_ERR_FLAG,&wRDIndex,1,DSP_W16);
- return wRDIndex;
- }
- }
- //Walace060717#1 end
- void VdEgStop(void) //Walace060912#1
- {
- #if(VIDEO_FADE_MODE==0)
- VdForceFadeOut();
- #elif(VIDEO_FADE_MODE==1)
- VdDspFade((DSP_FADE_OUT_EN|(DSP_FADE_1_UNIT<<4)),TRUE);//Horry060307
- #endif
- //Walace060630#3
- if(gdwFileSector >= (stPhoFileInf.dwFileTotalSector-gxwFadeOutSector)) //Fade Out and Auto Next File, Send All Data
- {
- while(gdwFileSector<stPhoFileInf.dwFileTotalSector)
- VdEgPlay();
- CheckDspBuffer(WAIT_AUD_OUT_BUFF_EMPTY); //Walace060807#2
- VideoUpdateInfoFromDsp(); //Walace060912#1
- }
- SetSysSpeed(VIDEO_ENGINE_LOW_SPEED); //Walace061207#3
- UiMessageCtrl();
- CommonDelay(0x9FFF);
- CDC_I2S_INT_DIS();
- #if(VIDEO_DSP_HIGH_CLOCK) //Walace061226#1
- if(gxbVideoFormat==VIDEO_TYPE_ADPCM_HQ) //Walace070116#1
- {
- DSP_CLK_SET_73(); //dsp clock for motion jpg //Walace060804#2
- obMODSEL3 &= MOD_USB_DISJ; //USB Clock EN
- }
- #endif
- ClkDspDis();
- gfDspCtrlCdc=FALSE;
- VdFastCtrl(VF_F_INIT);
- }
- /*--------------------------------------------------------------------------
- Description:
- Let DSP process fade out, wait it finish or not
- Arguments:
- wDspFadeCmd
- the command that send to dsp (check const.c "Dsp Fade in/out command" for details)
- fWait
- TRUE: wait until dsp finish
- FALSE: no waiting
- Global arguments:
- None
- Returns:
- None
- --------------------------------------------------------------------------*/
- //Horry060307 start refer to Vicky060112
- #if(VIDEO_FADE_MODE==1)
- void VdDspFade(WORD wDspFadeCmd,BOOL fWait)
- {
- WORD wTimeOut,wDspVal;
- //BYTE bClkDiv;
- //bClkDiv=obCLKMCUDIVF;
- //obCLKMCUDIVF=0x08;
- /*if(wDspFadeCmd&DSP_FADE_OUT_EN)
- {
- wDspVal=FALSE;
- IdmaPioDmxW(&wDspVal, DSP_MUTE_PA_ADDR, 1, DSP_W16);
- gxbRecOption|=PLAY_CHECK_MUTEPA;
- }*/
- if(gfFadeState==FADE_STATE_FADE_IN)
- {
- if(wDspFadeCmd&DSP_FADE_IN_EN)
- return;
- else
- gfFadeState=FADE_STATE_FADE_OUT;
- }
- else
- {
- if(wDspFadeCmd&DSP_FADE_OUT_EN)
- return;
- else
- gfFadeState=FADE_STATE_FADE_IN;
- }
- IdmaPioDmxW(&wDspFadeCmd,DSP_VIDEO_FADE_ADDR,1,DSP_W16);
- if(fWait)
- {
- //wTimeOut=0x8FFF;
- //0xA80=>measured with Scope [126ms: 48K domain (14.7Mhz)]; [137ms: 44.1k domain (13.6Mhz)]
- wTimeOut=0xFFFF;
- while((wTimeOut)&&(gdwFileSector<stPhoFileInf.dwFileTotalSector))
- {
- VdEgPlay();
- IdmaPioDmxR(DSP_VIDEO_FADE_ADDR,&wDspVal,1,DSP_W16);
- if((wDspVal & DSP_FADE_DONE)>>14)
- break;
- wTimeOut--;
- }
- }
- //obCLKMCUDIVF=bClkDiv; //Vicky060112#2
- }
- #endif
- //end
- /*BOOL VdCheckOutBufEmpty(void)//Horry060307
- {
- WORD wRDindex,wWRindex;
- IdmaPioDmxR(DSP_VIDEO_AUD_OUT_RDINDEX,&wRDindex,1,DSP_W16);
- IdmaPioDmxR(DSP_VIDEO_AUD_OUT_WRINDEX,&wWRindex,1,DSP_W16);
- return (wRDindex==wWRindex);
- }*/
- #if(VIDEO_USE_DEBUG)
- void VideoDebugShow(void)
- {
- WORD wTemp;
- // OledShowNumber(gdwFileSector&0xFFFF,SEG0,PAGE0,3);
- /*
- IdmaPioDmxR(DSP_VIDEO_AUD_OUT_RDINDEX,&wTemp,1,DSP_W16);
- OledShowNumber(wTemp,SEG0,PAGE1,3);
- IdmaPioDmxR(DSP_VIDEO_AUD_OUT_WRINDEX,&wTemp,1,DSP_W16);
- OledShowNumber(wTemp,SEG0,PAGE2,3);
- */
- // IdmaPioDmxR(DSP_VIDEO_SEC_ADDR,&wTemp,1,DSP_W16);
- // OledShowNumber(wTemp,SEG0,PAGE3,3);
- //OledShowNumber(gxwTotalPlayTime,SEG0,PAGE4,3);
- //IdmaPioDmxR(DSP_VIDEO_FRAME_NUM_L_ADDR,&wTemp,1,DSP_W16);
- //OledShowNumber(wTemp,SEG0,PAGE5,3);
- //IdmaPioDmxR(DSP_VIDEO_TOTAL_FRAME_NUM_L_ADDR,&wTemp,1,DSP_W16);
- //OledShowNumber(wTemp,SEG0,PAGE6,3);
- wTemp=5;
- }
- #endif
- //Walace060717#1 start
- void VideoUpdateInfoFromDsp(void)
- {
- WORD wDspTemp;
- IdmaPioDmxR(DSP_VIDEO_SEC_ADDR,&wDspTemp,1,DSP_W16);
- #if 0 //Walace070117#1 start
- if((gxbVESpeed&VE_FAST_STATE)==VE_FAST_FB) //Walace060712#1
- {
- if(wDspTemp>=gxwCurrentPlayTime)
- return;
- }
- gxwCurrentPlayTime=wDspTemp;
- #else
- if((gxbVESpeed&VE_FAST_STATE)!=VE_FAST_FB)
- {
- if(wDspTemp>gxwCurrentPlayTime)
- gxwCurrentPlayTime=wDspTemp;
- }
- else
- {
- if(wDspTemp<gxwCurrentPlayTime)
- gxwCurrentPlayTime=wDspTemp;
- }
- #endif //Walace070117#1 end
- }
- //Walace060717#1 end
- //Walace060829#3 start
- #if(VIDEO_SHOW_DSP_BUFF_ERR)
- XBYTE gxbLcdCounterKeep;
- void ShowDspErrMsg(void)
- {
- WORD wBufferSize;
- if(gdwFileSector<200||(gxbVideoState==VIDEO_STATE_IDLE))
- {
- wBufferSize=0;
- IdmaPioDmxW(&wBufferSize,DSP_VIDEO_AVI_ERR_FLAG,1,DSP_W16);
- gxbLcdCounterKeep = gxbLcdCounter;
- return;
- }
- #if 0
- wBufferSize=CheckDspBuffer(GET_AV_IN_BUFF_DATA_SIZE);
- if(wBufferSize==0)
- {
- OledShowNumber(0x0001,WORD0,LINE0,2);
- OledShowNumber(gdwFileSector,WORD0,LINE1,6);
- while(1){}
- }
- wBufferSize=CheckDspBuffer(GET_AUD_OUT_BUFF_DATA_SIZE);
- if(wBufferSize==0)
- {
- OledShowNumber(0x0002,WORD0,LINE0,2);
- OledShowNumber(gdwFileSector,WORD0,LINE1,6);
- while(1){}
- }
- wBufferSize=CheckDspBuffer(GET_AV_IN_ERR_FLAG);
- if(wBufferSize!=0)
- {
- OledShowNumber(0x0002,WORD0,LINE0,2);
- OledShowNumber(wBufferSize,WORD0,LINE1,6);
- while(1){}
- }
- #endif
- //CommonDelay(0xFFFF);
- //OledShowNumber(555,WORD0,PAGE3,6);
- //wBufferSize=CheckDspBuffer(GET_AV_IN_BUFF_DATA_SIZE);
- //OledShowNumber(wBufferSize,WORD0,PAGE0,5);
- // if(wBufferSize==0)
- // {
- //OledShowNumber(wBufferSize,WORD0,PAGE0,5);
- //while(1){}
- // }
- //wBufferSize=CheckDspBuffer(GET_AUD_OUT_BUFF_DATA_SIZE);
- //
- //OledShowNumber(wBufferSize,WORD0,PAGE1,5);
- //if(wBufferSize==0)
- //{
- //OledShowNumber(wBufferSize,WORD0,PAGE1,6);
- //while(1){}
- //}
- //== Latched Signal==========
- // bit 0: AVI Inbuffer Empty
- // bit 1: AUD Outbuffer Empty
- // bit 2: VEO Outbuffer Empty
- // bit 3: Audio Bitstream Format Error
- // bit 4: Vedio Bitstream Format Error
- /*
- #define DSP_ERR_AVI_INBUF_EMPTY 0x01
- #define DSP_ERR_AUD_OUTBUF_EMPTY 0x02
- #define DSP_ERR_VEO_OUTBUF_EMPTY 0x04
- #define DSP_ERR_AUD_BITSTREAM_ERR 0x08
- #define DSP_ERR_VEO_BITSTREAM_ERR 0x10
- */
- //CommonDelay(0xFFFF);
- //wBufferSize=CheckDspBuffer(GET_AV_IN_BUFF_DATA_SIZE);
- //OledShowNumber(wBufferSize,WORD0,PAGE0,5);
- wBufferSize=CheckDspBuffer(GET_AVI_ERR_FLAG);
- //if((wBufferSize&DSP_ERR_AVI_INBUF_EMPTY)||(wBufferSize&DSP_ERR_AUD_OUTBUF_EMPTY))
- if((wBufferSize&DSP_ERR_AVI_INBUF_EMPTY))
- //if(wBufferSize)
- {
- OledShowNumber(wBufferSize,WORD0,PAGE2,5);
- wBufferSize=CheckDspBuffer(GET_AV_IN_BUFF_DATA_SIZE);
- OledShowNumber(wBufferSize,WORD0,PAGE0,5);
- wBufferSize=CheckDspBuffer(GET_AUD_OUT_BUFF_DATA_SIZE);
- OledShowNumber(wBufferSize,WORD0,PAGE1,5);
- while(1){}
- }
- }
- #endif
- //Walace060829#3 end