Video.c
上传用户:hjhsjcl
上传日期:2020-09-25
资源大小:11378k
文件大小:61k
源码类别:

压缩解压

开发平台:

C++ Builder

  1. /*==========================================================================
  2. Copyright (c) 2004 ALi Corporation. All Rights Reserved
  3. File: Video.c
  4. content:
  5. History: Created by Walace 2005
  6. ==========================================================================*/
  7. #define _VIDEO_H_
  8. #include <DP8051XP.H>
  9. #include "TypeDef.h"
  10. #include "Const.h"
  11. #include "Reg5661.h"
  12. #include "Common.h"
  13. #include "OledString.h"
  14. #include "Key.h"
  15. #include "Idma.h"
  16. #include "FileSystem.h"
  17. #include "IconDefine.h"
  18. #include "OLED.h"
  19. #include "VideoDsp.h"
  20. #include "Video.h"
  21. #include "NandFlash.h"
  22. #include "IntCodec.h" 
  23. #include "UiVideoCommon.h"
  24. #include "SaveSetting.h" //Walace060926#1 VideoResume
  25. #include "UiVideo.h" //Walace060907#7
  26. //Walace060309#3 
  27. #define DSP_VIDEO_START_FLAG       0x0000 
  28. #define DSP_VIDEO_SCALE_ADDR                  0x1FC2//Horry060315#2
  29. #define DSP_VIDEO_FADE_ADDR                   0x1FCC//Horry060307
  30. #define DSP_VIDEO_TOTAL_TIME                  0x1FCF
  31. #define DSP_VIDEO_SEC_ADDR  0x1FD6
  32. #define DSP_VIDEO_FRAME_NUM_L_ADDR    0x1FD7    //Horry060313#1 start
  33. #define DSP_VIDEO_FRAME_NUM_H_ADDR    0x1FCA
  34. #define DSP_VIDEO_TOTAL_FRAME_NUM_L_ADDR    0x1FD9
  35. #define DSP_VIDEO_TOTAL_FRAME_NUM_H_ADDR    0x1FC9   //Horry060313#1 end
  36. #define DSP_VIDEO_10MS_H_ADDR  0x1FDB
  37. #define DSP_VIDEO_10MS_L_ADDR  0x1FDC
  38. #define DSP_VIDEO_FB_EN_ADDR  0x1FDD//horry
  39. #define DSP_VIDEO_FB_PLAY_NUM_ADDR  0x1FDE
  40. #define DSP_VIDEO_FB_PLAYDONE_FLAG      0x1FDF 
  41. #define DSP_VIDEO_AUD_OUT_RDINDEX                   0x1FE2//Horry060307
  42. #define DSP_VIDEO_AUD_OUT_WRINDEX                   0x1FE3//Horry060307
  43. #define DSP_VIDEO_AB_EN_ADDR               0x1FE7 
  44. #define DSP_VIDEO_WIDTH_SIZE          0x1FF3  // set lcd width size
  45. #define DSP_VIDEO_HEIGHT_SIZE         0x1FF4  // set lcd height size
  46. #define DSP_VIDEO_LCD_TYPE               0x1FF5  // 0:STN 1:OLED
  47. #define DSP_VIDEO_ERR_MSG        0x1FF6  // 0:Baseline format 1:not support other jpg format
  48. #define DSP_VIDEO_INPUT_ADDR     0x1FF7
  49. #define DSP_VIDEO_INPUT_FLAG       0x1FF8  // 1:FW write 512 bytes to DSP  2: FW write complete
  50. #define DSP_VIDEO_OUTPUT_ADDR    0x1FF9  
  51. #define DSP_VIDEO_OUTPUT_FLAG    0x1FFA  // 1:FW could get 512 bytes form dsp 2: get data complete
  52. #define DSP_VIDEO_DEC_FINISH           0x1FFB  // 0: image decode not finish 1:image decode finish
  53. #define DSP_VIDEO_BLOCK_WIDTH        0x1FFC  // MCU width
  54. #define DSP_VIDEO_BLOCK_HEIGHT 0x1FFD  // MCU Height
  55. #define DSP_VIDEO_BLOCK_COLS        0x1FFE  // Image total coloumns
  56. #define DSP_VIDEO_BLOCK_PAGES        0x1FFF  // Image total pages
  57. #define DSP_VIDEO_DEC_FINISH           0x1FFB  // 0: image decode not finish 1:image decode finish
  58. #define DSP_VIDEO_GET_CONFIG          0x1FC7  // 0: image decode not finish 1:image decode finish
  59. #define DSP_VIDEO_AV_IN_ERRFLAG  0x1FD3  //Walace061012 inbuffer empty flag
  60. #define DSP_VIDEO_AUD_OUT_ERRFLAG  0x1FD4  //Walace061019#3 outbuffer empty flag
  61. #define DSP_VIDEO_AVI_ERR_FLAG 0x1FE1 //Walace061019#3
  62. #define DSP_VIDEO_AVI_IN_RD_INDEX 0x0000 //Walace060717#1
  63. #define DSP_VIDEO_AVI_IN_WR_INDEX DSP_VIDEO_INPUT_ADDR //Walace060717#1
  64. #define DSP_VIDEO_VD_OUT_RD_INDEX DSP_VIDEO_OUTPUT_ADDR
  65. #define DSP_VIDEO_VD_OUT_WD_INDEX 0x1FCE
  66. #define DSP_BLOCK_SIZE 256
  67. #define DSP_VIDEO_LCD_TYPE_STN   0
  68. #define DSP_VIDEO_LCD_TYPE_OLED 1
  69. /* //Walace060912#1 
  70. Const value remove to Video.h
  71. */
  72. //1 == Dsp command ===============
  73. #define DSP_REQ_START      0x01
  74. #define DSP_REQ_END      0x02
  75. #define CDC_I2S_INT_DIS() (obSYSINT0MASK &= (~(CDC_INT_EN|I2S_INT_EN)))
  76. void VdEgInit(void);
  77. BOOL VdEgStart(void);
  78. void VdEgPlay(void);
  79. void VideoDspInit(void);
  80. void VdEgStop(void); //Walace060912#1 
  81. BOOL VideoShow(void); //Walace060926#1 VideoResume
  82. #define VF_F_INIT  0x00
  83. #define VF_FF_START 0x01
  84. #define VF_FB_START 0x02
  85. #define VF_FB_PLAY 0x03
  86. #define VF_F_STOP 0x04
  87. #define VF_F_UPDATE  0x05
  88. void VdFastCtrl(BYTE bFastCmd);
  89. //BOOL DownloadVideoDsp(BYTE bVideoType); //Walace061101#1
  90. #define DSP_TIME_OUT_CONST 0xFFFF//0x08FF //Walace070115#2
  91. CBYTE cbMTVSyncWord[] = {'A','L','I','A','V','I'}; //Walace060926#1 VideoResume
  92. void VideoMCUSpeedUp(void);
  93. void VideoMCUNormalSpeed(void);
  94. void VideoGetVideoFromDsp(void); //Walace061121#2
  95. BOOL VideoGetHeader(void);
  96. void VdDspDataUpdate(void);
  97. #if(VIDEO_FADE_MODE==1) //Horry060315#2
  98. void VdDspFade(WORD wDspFadeCmd,BOOL fWait);//Horry060307
  99. #endif
  100. //BOOL VdCheckOutBufEmpty(void);//Horry060307
  101. BOOL VdEgPlayNext(void);
  102. //void VideoGetgxbFBPlayNumConst(void);//horry test //Walace060117#
  103. void VideoGetFrameRate(BYTE bVideoMode);
  104. BOOL VideoFillDataToDsp(void); 
  105. //Walace061019#3
  106. //--- CheckDspBuffer Command ---
  107. #define WAIT_AUD_OUT_BUFF_EMPTY 0x01
  108. #define GET_AV_IN_BUFF_DATA_SIZE 0x02 //Walace060717#1
  109. #define GET_AUD_OUT_BUFF_DATA_SIZE 0x03 //Walace060829#2
  110. #define GET_AV_IN_ERR_FLAG 0x04
  111. #define GET_AUD_OUT_ERR_FLAG 0x05
  112. #define GET_AVI_ERR_FLAG 0x06
  113. // Latched Signal
  114. //   bit 0: AVI   Inbuffer Empty
  115. //   bit 1: AUD  Outbuffer Empty
  116. //   bit 2: VEO  Outbuffer Empty
  117. //   bit 3: Audio Bitstream Format Error
  118. //   bit 4: Vedio Bitstream Format Error
  119. #define DSP_ERR_AVI_INBUF_EMPTY 0x01
  120. #define DSP_ERR_AUD_OUTBUF_EMPTY 0x02
  121. #define DSP_ERR_VEO_OUTBUF_EMPTY 0x04
  122. #define DSP_ERR_AUD_BITSTREAM_ERR 0x08
  123. #define DSP_ERR_VEO_BITSTREAM_ERR 0x10
  124. WORD CheckDspBuffer(BYTE bCheckCmd) large; //Walace060717#1
  125. //Walace061019#3 end
  126. void GetSectorNumFromSec(void); //Walace060926#1 VideoResume
  127. void VideoUpdateInfoFromDsp(void); //Walace060717#1
  128. ///BOOL gfGetImageConfig; //Walace060831#3
  129. #if 1  //Walace061121#2 start
  130. XBYTE gxbBlockHeight; 
  131. XBYTE gxbBlockWidth; 
  132. XBYTE gxbBlockColNum;
  133. XBYTE gxbBlockRowNum;
  134. //BOOL gfCutBlockDisplay; 
  135. #else
  136. XBYTE gxbBlockHeight;
  137. XBYTE gxbBlockWidth;
  138. XBYTE gxbBlockColNum;
  139. XBYTE gxbBlockPageNum;
  140. XWORD gxwMcuSize;
  141. #endif //Walace061121#2 end
  142. XBYTE   gxbFFSkipConst;
  143. XBYTE   gxbFBPlayNumConst;
  144. XBYTE   gxbFrameRate;//horry test //Walace060117
  145. XWORD gxwFBSkipSector;//Walace060117
  146. XDWORD gxdwTotalFrameNum;
  147. XDWORD gxdwKeepFBLastSector; //Walace061122#1
  148. XDWORD dwTimeSamplesPerPacket; //Walace061122#1
  149. BOOL VdEgVideoConfig(void); //Walace060912#1
  150. void VdWaitDspConfigReady(void); //Walace060926#1 VideoResume
  151. void VdWaitDspResumeReady(void); //Walace070116#4
  152. void VdWaitDspConfigReadyForMP3V1(void); //Walace070329#1
  153. BOOL GetImageFromDsp(void); //Walace060926#1 VideoResume
  154. //void VideoFillDspBuff(void); //Walace060926#1 VideoResume
  155. #define NO_DISPLAY_UNTIL_BUFF_EMPTY FALSE
  156. #define NO_DISPLAY_UNTIL_FRAME_COMPLETE TRUE
  157. extern XBYTE xbShowInfoFlag;//Tony070125 
  158. void VdEgPlayWithouDisplay(BOOL fFrameComplete)
  159. {
  160. BYTE bKeepMask;
  161. bKeepMask=gxbVideoMask;
  162. gxbVideoMask=0;
  163. if(!fFrameComplete)
  164. {
  165. while(CheckDspBuffer(GET_AV_IN_BUFF_DATA_SIZE)||CheckDspBuffer(GET_AUD_OUT_BUFF_DATA_SIZE))
  166. {
  167. if(GetImageFromDsp())       
  168.         VideoShow();
  169. VideoUpdateInfoFromDsp(); 
  170. UiMessageCtrl();
  171. }
  172. }
  173. else
  174. {
  175. while(gxwCurrentBlockNum)
  176. {
  177. VdEgPlay();
  178. }
  179. }
  180. gxbVideoMask=bKeepMask;
  181. }
  182. BOOL VideoEngine(void) //Walace060912#1
  183. {
  184. //BYTE bKeepClkDiv;  //Walace061017#2
  185. //bKeepClkDiv = obCLKMCUDIVF;  //Walace061017#2
  186. //SetSysSpeed(VIDEO_ENGINE_SPEED); //Walace061017#2
  187. if(gxbErrCode!=ERR_NO_ERROR) //Walace070507#1
  188. return FALSE;
  189. CdcSetPaGainTask(PA_TASK_UNIMMEDIATE|PA_TASK_DELAY);  //Walace060525#4 //tne 2006/12/26 #1
  190. switch(gxbVdCommand) //Walace060912#1
  191. {
  192. case VIDEO_CMD_NOP:
  193. break;
  194.        case VIDEO_CMD_VOL_UPDATE:
  195. CdcSetPaGain(gxbVolume); //tne 2006/12/26 #1
  196. break;
  197. case VIDEO_CMD_INIT:
  198. gxbVideoState=VIDEO_STATE_IDLE;
  199. VdEgInit();
  200. break;
  201. case VIDEO_CMD_START:
  202. switch(gxbVideoState)
  203. {
  204. case VIDEO_STATE_IDLE:
  205. gxbVideoState = VIDEO_STATE_CONFIG;  //Walace060912#1
  206. break;
  207. default:
  208. gxbVideoState = VIDEO_STATE_STOP_TO_CONFIG; //Walace060912#1
  209. break;
  210. }
  211. break;
  212. case VIDEO_CMD_PAUSE_TO_START:
  213. VdDspFade((DSP_FADE_IN_EN|(DSP_FADE_1_UNIT<<4)),TRUE); 
  214. VdEgPlayWithouDisplay(NO_DISPLAY_UNTIL_FRAME_COMPLETE);
  215. gxbVideoState = VIDEO_STATE_PLAY;
  216. break;
  217. case VIDEO_CMD_PAUSE:
  218. if(gxbVideoState==VIDEO_STATE_PLAY)
  219. {
  220. VdDspFade((DSP_FADE_OUT_EN|(DSP_FADE_1_UNIT<<4)),TRUE);
  221. VdEgPlayWithouDisplay(NO_DISPLAY_UNTIL_BUFF_EMPTY);
  222. gxbVideoState=VIDEO_STATE_PAUSE;
  223. }
  224. break;
  225. case VIDEO_CMD_STOP:
  226. if(gxbVideoState>VIDEO_STATE_START) //Walace060926#1 VideoResume
  227. {
  228. gxbVideoState = VIDEO_STATE_STOP; //Walace060912#1
  229. }                                   //Walace060807#2 end
  230. else //Walace060926#1 VideoResume start
  231. {
  232. gxbVideoState = VIDEO_STATE_IDLE;
  233. } //Walace060926#1 VideoResume end
  234. break;
  235. case VIDEO_CMD_FF_START:
  236. if(gxbVideoState==VIDEO_STATE_PAUSE) //Walace061120#2 
  237. {
  238. VdEgPlayWithouDisplay(NO_DISPLAY_UNTIL_FRAME_COMPLETE);
  239. }
  240. else
  241. {
  242. #if(VIDEO_FF_MUTE)
  243. VdDspFade((DSP_FADE_OUT_EN|(DSP_FADE_1_UNIT<<4)),TRUE);
  244. #endif
  245. }
  246. VdFastCtrl(VF_FF_START);
  247. gxbVideoState =VIDEO_STATE_PLAY; //Walace060831#5
  248. break;
  249. case VIDEO_CMD_FB_START:
  250. if(gxbVideoState==VIDEO_STATE_PAUSE) //Walace061120#2 
  251. {
  252. VdEgPlayWithouDisplay(NO_DISPLAY_UNTIL_FRAME_COMPLETE);
  253. }
  254. else
  255. {
  256. #if(VIDEO_FF_MUTE)
  257. VdDspFade((DSP_FADE_OUT_EN|(DSP_FADE_1_UNIT<<4)),TRUE);
  258. #endif
  259. } //Walace060831#5
  260. VdFastCtrl(VF_FB_START);
  261. gxbVideoState = VIDEO_STATE_FB_PLAY;
  262. break;
  263. case VIDEO_CMD_F_STOP:
  264.         gxbVideoState = VIDEO_STATE_F_PLAY_STOP; //Walace060912#1
  265. break;
  266. case VIDEO_CMD_SPEED_UPDATE:
  267. VdFastCtrl(VF_F_UPDATE);
  268. break;
  269. }
  270. switch(gxbVideoState)
  271. {
  272. case VIDEO_STATE_IDLE:
  273. break;
  274.       //Walace060912#1 start
  275.               case VIDEO_STATE_STOP_TO_CONFIG: 
  276.  VdEgStop();
  277.  
  278. case VIDEO_STATE_CONFIG:
  279.  if(VdEgVideoConfig())
  280. gxbVideoState = VIDEO_STATE_START;
  281.  else  
  282.   gxbVideoState = VIDEO_STATE_IDLE;
  283.  break;
  284.  
  285. case VIDEO_STATE_START:
  286. //Walace060926#1 VideoResume start
  287. if(VdEgStart())
  288. {
  289. if(gxbVideoFormat != VIDEO_TYPE_MP3_V1) //Walace070329#1
  290. {
  291. VdWaitDspConfigReady();
  292. }
  293. else //Walace070329#1
  294. {
  295. gfFirstResume=FALSE; 
  296. } //Walace070329#1
  297. gxbVideoState = VIDEO_STATE_PLAY;  //Walace070116#4
  298. VdWaitDspResumeReady(); //Walace070116#4 
  299. if((gxbVESpeed&VE_FAST_STATE)==VE_FAST_NORMAL)         
  300. VdDspFade((DSP_FADE_IN_EN|(DSP_FADE_1_UNIT<<4)),TRUE);
  301. if(gxbVideoFormat == VIDEO_TYPE_MP3_V1) //Walace070329#1
  302. {
  303. VdWaitDspConfigReadyForMP3V1();
  304. }
  305. }
  306. else
  307. {
  308. gxbVideoState = VIDEO_STATE_IDLE;
  309. }
  310. //Walace060926#1 VideoResume end
  311.               break;
  312.  
  313. //case VIDEO_STATE_FF_PAUSE_PLAY: //Walace061219#2 Remove
  314. // VdEgPlay();
  315. // break;
  316. //Walace060912#1 end
  317. case VIDEO_STATE_FB_PLAY:
  318. VdFastCtrl(VF_FB_PLAY);
  319. //if(gdwFileSector==0&&gxbFrameRate==1)
  320. if(gdwFileSector==0) //tne 2006/11/17 #3
  321. {
  322. /* //Walace061220#1 start
  323. TimeOutCtrl(50); //Walace060831#1
  324. while(gxwCurrentPlayTime!=0)
  325. {
  326. if(TimeOutCtrl(CHECK_TIME_OUT)) //Walace060831#1
  327. break;
  328. VideoFillDataToDsp();
  329. VideoUpdateInfoFromDsp(); //Walace060717#1
  330. }
  331. */
  332. gxwCurrentPlayTime=0; 
  333. UiMessageCtrl();
  334. //Walace061220#1 end
  335. gxbVideoState=VIDEO_STATE_PAUSE;
  336. }
  337. else
  338. {
  339. VdEgPlay();
  340. }
  341. break;
  342. case VIDEO_STATE_F_PLAY_STOP: //Walace060912#1
  343. VdFastCtrl(VF_F_STOP);
  344. VdEgPlay();
  345. if(gxbVESpeed==(VE_FAST_NORMAL|VE_FAST_X1))
  346. {
  347. #if(VIDEO_FF_MUTE)
  348. VdDspFade((DSP_FADE_IN_EN|(DSP_FADE_1_UNIT<<5)),TRUE);
  349. #endif
  350. gxbVideoState = VIDEO_STATE_PLAY;
  351. }
  352. break;
  353. case VIDEO_STATE_PLAY:
  354. VdEgPlay();
  355. break;
  356. case VIDEO_STATE_PAUSE:
  357. break;
  358. //Walace060912#1 start
  359. case VIDEO_STATE_STOP: 
  360. VdEgStop();
  361. gxbVideoState=VIDEO_STATE_IDLE;
  362. break;
  363. //Walace060912#1 end
  364. }
  365. //SetSysSpeed(bKeepClkDiv);  //Walace061017#2
  366. gxbVdCommand = VIDEO_CMD_NOP; //Walace060912#1
  367. return TRUE;
  368. }
  369. void VideoDspInit(void) 
  370. {
  371. IDMA_READY_EN(); //IDMA ready EN
  372. #if(VIDEO_DSP_HIGH_CLOCK) //Walace061226#1
  373. if(gxbVideoFormat==VIDEO_TYPE_ADPCM_HQ) //Walace070116#1
  374. {
  375. obMODSEL3 |= MOD_USB_EN; //USB Clock EN
  376. obCLKDSPDIVF=0x00; 
  377. obCLKDSPCTRL=0x10;  //80MHz
  378. }
  379. else
  380. {
  381. DSP_CLK_SET_73(); //dsp clock for motion jpg  //Walace060804#2
  382. }
  383. //obCLKDSPCTRL=0x00;  //120MHz
  384. #else
  385. DSP_CLK_SET_73(); //dsp clock for motion jpg  //Walace060804#2
  386. #endif
  387.        DSP_RESET(); 
  388.        DSP_ENABLE();
  389. }
  390. void SetFBNextSectorNumber(void)
  391. {
  392. gxwFBSkipSector=(WORD)(
  393. (((DWORD)(stPhoFileInf.dwFileTotalSector*gxbFBPlayNumConst)
  394. *((gxbVESpeed&VE_FAST_VALUE)+2)+(gxdwTotalFrameNum-1)))
  395. /gxdwTotalFrameNum);
  396. //Walace060717#1 start
  397. gxwFBSkipSector=gxwFBSkipSector+ 
  398. ((CheckDspBuffer(GET_AV_IN_BUFF_DATA_SIZE)+511)>>9);
  399. //Walace060717#1 end
  400. gdwFileSector=gxdwKeepFBLastSector; //Walace061122#1
  401. if(gdwFileSector>gxwFBSkipSector)
  402. gdwFileSector-=gxwFBSkipSector; 
  403. else
  404. gdwFileSector=0; 
  405. gxdwKeepFBLastSector=gdwFileSector; //Walace061122#1
  406. }
  407. #undef DSP_IN_BUFF_REMAIN_DATA_SIZE
  408. #undef MAX_PACKET_SIZE
  409. //Walace070116#4 start
  410. void VdWaitDspResumeReady(void) 
  411. {
  412. WORD wDspVal;
  413. if(gfFirstResume)
  414. {
  415. gdwFileSector=gxdwLastPlayFileSector;
  416. gxwCurrentPlayTime=gxwVideoLastPlayTime;
  417. GetSectorNumFromSec();
  418. #if 0
  419. wDspVal=0;
  420. IdmaPioDmxW(&wDspVal,DSP_VIDEO_SEC_ADDR,1,DSP_W16);
  421. gxwCurrentPlayTime=0;
  422. TimeOutCtrl(100);
  423. while(gxwCurrentPlayTime<gxwVideoLastPlayTime) 
  424. {
  425.     VideoFillDataToDsp();
  426. VideoUpdateInfoFromDsp();
  427. if(TimeOutCtrl(CHECK_TIME_OUT))
  428. break;
  429. }
  430. #else
  431. wDspVal=gxwCurrentPlayTime;
  432. IdmaPioDmxW(&wDspVal,DSP_VIDEO_SEC_ADDR,1,DSP_W16);
  433. #endif
  434. }
  435. else
  436. {
  437. gdwFileSector=0;
  438. }
  439. gxdwLastPlayFileSector=0; 
  440. gxwVideoLastPlayTime=0;
  441. gfFirstResume=FALSE;  
  442. }
  443. //Walace070116#4 end
  444. //Walace070116#2 start
  445. //Walace060926#1 VideoResume start
  446. void VdWaitDspConfigReady(void)
  447. {
  448. WORD wDspVal;
  449. TimeOutCtrl(200);
  450. while(TRUE)
  451. {
  452. VideoFillDataToDsp();
  453. IdmaPioDmxR(DSP_VIDEO_DEC_FINISH,&wDspVal,1,DSP_W16);// jpg_dec_finish
  454. if(wDspVal==0) 
  455. break;
  456. if(TimeOutCtrl(CHECK_TIME_OUT))
  457. {
  458. VIDEO_ANNORMAL_DEBUG(9001);
  459. break;
  460. }
  461. }
  462. VideoGetVideoFromDsp();  //Walace061120#1
  463. wDspVal=TRUE;
  464. IdmaPioDmxW(&wDspVal, DSP_VIDEO_AB_EN_ADDR, 1, DSP_W16);//ABON=1
  465. TimeOutCtrl(50);
  466. while(TRUE)
  467. {
  468. IdmaPioDmxR(DSP_VIDEO_AB_EN_ADDR,&wDspVal,1,DSP_W16);
  469. if(wDspVal==0) 
  470. break;
  471. if(TimeOutCtrl(CHECK_TIME_OUT))
  472. {
  473. VIDEO_ANNORMAL_DEBUG(9002);
  474. break;
  475. }
  476. }
  477. }
  478. //Walace060926#1 VideoResume end
  479. //Walace070116#2 end
  480. //Walace070329#1 start
  481. void VdWaitDspConfigReadyForMP3V1(void)
  482. {
  483. TimeOutCtrl(200);
  484. while(TRUE)
  485. {
  486. IdmaPioDmxR(DSP_VIDEO_TOTAL_TIME, &gxwTotalPlayTime, 1,DSP_W16);     
  487. if(gxwTotalPlayTime!=0)
  488. break;
  489. VdEgPlay();
  490. }
  491. }
  492. //Walace070329#1 end
  493. void VdFastCtrl(BYTE bFastCmd)
  494. {
  495. WORD wDspVal,wTimeOut;;
  496.  
  497. switch(bFastCmd)
  498. {
  499. case VF_F_INIT:
  500. gxbVESpeed=(VE_FAST_NORMAL|VE_FAST_X1);
  501. break;
  502. case VF_FF_START:
  503. gxbVESpeed=(VE_FAST_FF|VE_FAST_X2);
  504. wDspVal=gxbFFSkipConst;
  505. IdmaPioDmxW(&wDspVal, DSP_FF_PLAY_NUM_ADDR, 1, DSP_W16);
  506. wDspVal=((WORD)((gxbVESpeed&VE_FAST_VALUE)*gxbFFSkipConst));
  507. IdmaPioDmxW(&wDspVal, DSP_FF_SKIP_NUM_ADDR, 1, DSP_W16);
  508. wDspVal=TRUE;
  509. IdmaPioDmxW(&wDspVal, DSP_FF_EN_ADDR, 1, DSP_W16);
  510. break;
  511. case VF_FB_START:
  512. wDspVal=(WORD)gxbFBPlayNumConst;
  513. IdmaPioDmxW(&wDspVal, DSP_VIDEO_FB_PLAY_NUM_ADDR, 1, DSP_W16);//N
  514. wDspVal=FALSE;
  515. IdmaPioDmxW(&wDspVal, DSP_VIDEO_FB_PLAYDONE_FLAG, 1, DSP_W16);//PLAYDONE=0
  516. wDspVal=TRUE;
  517. IdmaPioDmxW(&wDspVal, DSP_VIDEO_AB_EN_ADDR, 1, DSP_W16);//ABON=1
  518. wDspVal=TRUE;
  519. IdmaPioDmxW(&wDspVal, DSP_VIDEO_FB_EN_ADDR, 1, DSP_W16);//FBON=1
  520. gxbVESpeed=(VE_FAST_FB|VE_FAST_X2);
  521. gxdwKeepFBLastSector=gdwFileSector; //Walace061122#1
  522. SetFBNextSectorNumber();
  523. wTimeOut=DSP_TIME_OUT_CONST;//Horry060213
  524. wDspVal=TRUE;
  525. while((wDspVal)&(wTimeOut))
  526. {
  527. IdmaPioDmxR(DSP_VIDEO_AB_EN_ADDR,&wDspVal,1,DSP_W16);
  528. wTimeOut--;
  529. }
  530. break;
  531. case VF_FB_PLAY:
  532.        IdmaPioDmxR(DSP_VIDEO_FB_PLAYDONE_FLAG,&wDspVal,1,DSP_W16);
  533. if(wDspVal)
  534. {
  535. wDspVal=FALSE;
  536. IdmaPioDmxW(&wDspVal, DSP_VIDEO_FB_PLAYDONE_FLAG, 1, DSP_W16);//PLAYDONE=0
  537. SetFBNextSectorNumber();  //Walace060712#1
  538. wDspVal=TRUE;
  539. IdmaPioDmxW(&wDspVal, DSP_VIDEO_AB_EN_ADDR, 1, DSP_W16);//ABON=1
  540. }
  541. break;
  542. case VF_F_UPDATE:
  543. if((gxbVESpeed&VE_FAST_STATE)==VE_FAST_FF)
  544. {
  545. wDspVal=((WORD)(gxbVESpeed&VE_FAST_VALUE)*gxbFFSkipConst);
  546. IdmaPioDmxW(&wDspVal, DSP_FF_SKIP_NUM_ADDR, 1, DSP_W16);
  547. }
  548. break;
  549. case VF_F_STOP:
  550. if((gxbVESpeed&VE_FAST_STATE)==VE_FAST_FF)
  551. {
  552. wDspVal=FALSE;
  553. IdmaPioDmxW(&wDspVal, DSP_FF_EN_ADDR, 1, DSP_W16);
  554. gxbVESpeed=VE_FAST_NORMAL|VE_FAST_X1;
  555. }
  556. else if((gxbVESpeed&VE_FAST_STATE)==VE_FAST_FB)
  557. {
  558. //Walace060831#4 start
  559. //IdmaPioDmxR(DSP_VIDEO_FB_PLAYDONE_FLAG,&wDspVal,1,DSP_W16);
  560. //if(wDspVal)
  561. {
  562. wDspVal=FALSE;
  563. IdmaPioDmxW(&wDspVal, DSP_VIDEO_FB_EN_ADDR, 1, DSP_W16);//FBON=0
  564. wDspVal=TRUE;
  565. IdmaPioDmxW(&wDspVal, DSP_VIDEO_AB_EN_ADDR, 1, DSP_W16);//ABON=1
  566. TimeOutCtrl(50);
  567. while(wDspVal)
  568. {
  569. if(TimeOutCtrl(CHECK_TIME_OUT))
  570. break;
  571. IdmaPioDmxR(DSP_VIDEO_AB_EN_ADDR,&wDspVal,1,DSP_W16);
  572. }
  573. wDspVal=FALSE;
  574. IdmaPioDmxW(&wDspVal, DSP_VIDEO_FB_PLAYDONE_FLAG, 1, DSP_W16);//PLAYDONE=0
  575. gxbVESpeed=VE_FAST_NORMAL|VE_FAST_X1;
  576. }
  577. //Walace060831#4 end
  578. }
  579. break;
  580. }
  581. }
  582. void VdEgInit(void)
  583. {
  584. //Walace060926#1 VideoResume start
  585. gxbVideoState=VIDEO_STATE_IDLE;
  586. // gfDspCtrlCdc=FALSE;
  587. // gfCdcAlreadyInit=FALSE;    
  588. //Walace060926#1 VideoResume end
  589. CdcSetPaGain(VIDEO_FADE_OUT_VOL);      //tne 2006/12/26 #1
  590. VdFastCtrl(VF_F_INIT);
  591. gxbVideoMask=VIDEO_DISPLAY_NO_MASK;
  592. }
  593. void VideoSetLcdSizeType(BYTE bWidth,BYTE bHeight,BYTE bLcdType) 
  594. {
  595. WORD wDspVal;
  596. wDspVal = (WORD)bWidth;
  597. IdmaPioDmxW(&wDspVal, DSP_VIDEO_WIDTH_SIZE, 1, DSP_W16); //Set finish data transfer
  598. wDspVal = (WORD)bHeight;
  599. IdmaPioDmxW(&wDspVal, DSP_VIDEO_HEIGHT_SIZE, 1, DSP_W16); //Set finish data transfer
  600. wDspVal = (WORD)bLcdType;
  601. IdmaPioDmxW(&wDspVal, DSP_VIDEO_LCD_TYPE, 1, DSP_W16); //Set finish data transfer
  602. }
  603. //Walace060828#2 
  604. #if(VIDEO_DISP_IN_CENTER)
  605. void VideoShowCenterGetStartPos(void)
  606. {
  607. //if(!fRotDisp)//Walace070122#1 //Tony070124 
  608. {
  609. if(VIDEO_DISPLAY_MAX_ROW>gxbVideoWidth)
  610. gxbVideoStartX =( (VIDEO_DISPLAY_MAX_ROW-gxbVideoWidth)>>1);
  611. else
  612. gxbVideoStartX=0;
  613. if(VIDEO_DISPLAY_MAX_COL>=gxbVideoHeight)
  614. gxbVideoStartY =(VIDEO_DISPLAY_MAX_COL-gxbVideoHeight)>>1;
  615. else
  616. gxbVideoStartY=0;
  617. }
  618. /*else //Walace070122#1 start//Tony070124 
  619. {
  620. gxbVideoStartX=16+11; 
  621. gxbVideoStartY=0;
  622. }
  623. *///Walace070122#1 end
  624. }
  625. #endif
  626. void VideoGetVideoFromDsp(void) //Walace061121#2
  627. {
  628.     //#define gxwTemp gxwBlockTotalNum
  629.     #if 0 //Walace061121#2
  630.     IdmaPioDmxR(DSP_VIDEO_BLOCK_PAGES, &gxwTemp, 1,DSP_W16);
  631.     gxbBlockPageNum = (BYTE)gxwTemp;
  632.     IdmaPioDmxR(DSP_VIDEO_BLOCK_COLS, &gxwTemp, 1,DSP_W16);
  633.     gxbBlockColNum = (BYTE)gxwTemp;
  634.     IdmaPioDmxR(DSP_VIDEO_BLOCK_WIDTH, &gxwTemp, 1,DSP_W16);
  635.     gxbBlockWidth = (BYTE)gxwTemp;
  636.     IdmaPioDmxR(DSP_VIDEO_BLOCK_HEIGHT, &gxwTemp, 1,DSP_W16);
  637.     gxbBlockHeight = (BYTE)gxwTemp;
  638.     gxwBlockTotalNum = (WORD)gxbBlockPageNum*(WORD)gxbBlockColNum;
  639.     gxwMcuSize = (WORD)gxbBlockWidth*(WORD)gxbBlockHeight;
  640.     gxbVideoWidth =  gxbBlockColNum*gxbBlockWidth;
  641.     gxbVideoHeight =  gxbBlockPageNum*gxbBlockHeight;
  642.     #if(VIDEO_DISP_IN_CENTER)
  643.     VideoShowCenterGetStartPos();
  644.     #else
  645.     gxbVideoStartX = 0;
  646.     gxbVideoStartY = 0; 
  647.     #endif
  648.     #endif
  649. //Walace070116#2 start
  650. TimeOutCtrl(200);
  651. while(TRUE)
  652. {
  653.     IdmaPioDmxR(DSP_VIDEO_TOTAL_TIME, &gxwTotalPlayTime, 1,DSP_W16);
  654.     
  655.     if(gxwTotalPlayTime!=0)
  656. break;
  657.     if(TimeOutCtrl(CHECK_TIME_OUT))
  658.     {
  659.       #if(VIDEO_ABNORMAL_DEBUG)
  660.  IdmaPioDmxR(0x1fd7, &gxwTotalPlayTime, 1,DSP_W16);
  661.  OledShowNumber(gxwTotalPlayTime,WORD2,LINE0,4); 
  662.  IdmaPioDmxR(0x1fca, &gxwTotalPlayTime, 1,DSP_W16);
  663.  OledShowNumber(gxwTotalPlayTime,WORD2,LINE1,4);   
  664.  IdmaPioDmxR(0x1fcb, &gxwTotalPlayTime, 1,DSP_W16);
  665.  OledShowNumber(gxwTotalPlayTime,WORD2,LINE2,4); 
  666.  IdmaPioDmxR(0x1fc9, &gxwTotalPlayTime, 1,DSP_W16);
  667.  OledShowNumber(gxwTotalPlayTime,WORD2,LINE3,4);   
  668.  IdmaPioDmxR(0x1fd9, &gxwTotalPlayTime, 1,DSP_W16);
  669.  OledShowNumber(gxwTotalPlayTime,WORD2,LINE4,4); 
  670.  
  671.  VIDEO_ANNORMAL_DEBUG(9003);
  672.     #else
  673.   break;
  674.      #endif
  675.     }
  676. }
  677. //Walace070116#2 end
  678.     gxwFadeOutSector=(stPhoFileInf.dwFileTotalSector*7)/(gxwTotalPlayTime*10); //Walace060803#7
  679. }
  680. //Walace061122#2 start
  681. // cwADPCMSampleTable[SampleRateIndex][FrameRate]
  682. /* //Walace070115#1
  683. CWORD cwADPCMSampleTable[][6]={
  684. {1329, 1833, 1993, 2665, 3673, 3993}, //FR 1
  685. {265, 361, 393, 529, 729, 793}, //FR 5
  686. {129, 177, 193, 265, 361, 393}, //FR 10
  687. {89, 129, 137, 177, 273, 273} //FR 15
  688. };
  689. */
  690.  //Walace070115#1 start
  691.  //                  16k,22k,24k,
  692. CWORD cwHQ208VideoADPCMSample[3]={217,305,329}; //Walace070128#2  //For 208*176 (13 fps)
  693. CWORD cwHQ176VideoADPCMSample[3]={161,217,233}; //Walace070128#2 // For 176*144 (17 fps)
  694. CWORD cwHQ160VideoADPCMSample[3]={137,185,201}; //Walace070128#2  //For 160*128 (20 fps)
  695.  // 8k,11k,12k,16k,22k,24k,
  696. CWORD cwVideoADPCMSample[6]={89,129,137,177,273,273};
  697.  //Walace070115#1 end
  698. BOOL VideoGetHeader(void) //Walace061122#2
  699. {
  700. WORD wOffset;
  701. BYTE bData;
  702. BYTE bSRIndex;
  703. BYTE bAudioFramNum;
  704. //BYTE bVideoSizeCode; //Walace070128#2
  705. #if(VIDEO_AP_VERSION_DISPLAY)  //Walace070110#3
  706. //Walace061207#4 start
  707. gxbVideoSupportVersion[0]='0';
  708. gxbVideoSupportVersion[1]='1';
  709. gxbVideoSupportVersion[2]='.';
  710. gxbVideoSupportVersion[3]='1';
  711. gxbVideoSupportVersion[4]='2';
  712. gxbVideoSupportVersion[5]='.';
  713. gxbVideoSupportVersion[6]='1';
  714. gxbVideoSupportVersion[7]='0';
  715. gxbVideoFileVersion[0]='?';
  716. gxbVideoFileVersion[1]='?';
  717. gxbVideoFileVersion[2]='.';
  718. gxbVideoFileVersion[3]='?';
  719. gxbVideoFileVersion[4]='?';
  720. gxbVideoFileVersion[5]='.';
  721. gxbVideoFileVersion[6]='?';
  722. gxbVideoFileVersion[7]='?';
  723. //Walace061207#4 end  
  724. #endif
  725.     gpstFileIndex=&stPhoFileInf;
  726. gdwFileSector=0;
  727. //4 Force parser get field refresh
  728. wOffset=512;
  729. //4 AVI_H_SUPPORT_SYNC(0x00,6)
  730. #define bIndex bSRIndex
  731. for(bIndex=0;bIndex<sizeof(cbMTVSyncWord);bIndex++)
  732. {
  733. ParserGetField(&bData,1,&wOffset, FIRST_SEARCH, NORMAL_DATA);
  734. if(cbMTVSyncWord[bIndex]!=bData)
  735. {
  736. //gxbUiErrorCode=1;
  737. gxbUiErrorCode=VIDEO_ERR_UNKNOW_FORMAT; //Walace061207#4
  738. return FALSE;
  739. //goto GET_HEADER_ERR;
  740. }
  741. }
  742. #undef bIndex 
  743. //4  AVI_H_PACKET_SEQ(0x06,4)
  744. wOffset+=4;
  745. //4 AVI_H_PACKET_COUNT(0x0A,4)
  746. ParserGetField(&gxdwTotalFrameNum,4,&wOffset, FIRST_SEARCH, NORMAL_DATA);
  747. //4 AVI_H_PACKET_SIZE(0x0E,4) 
  748. wOffset+=2; 
  749. //4  AVI_H_FRAME_RATE (0x10,1)
  750. ParserGetField(&gxbFrameRate,1,&wOffset, FIRST_SEARCH, NORMAL_DATA);
  751. if(gxbFrameRate>=20)
  752. gxbFBPlayNumConst=4;
  753. else if(gxbFrameRate>=7)
  754. gxbFBPlayNumConst=2;
  755. else 
  756. gxbFBPlayNumConst=1;
  757. /*
  758. switch(gxbFrameRate) //Walace060117
  759. {
  760. case 1:
  761. case 5:
  762. gxbFBPlayNumConst=1;
  763. break;
  764. case 7: 
  765. case 10: 
  766. case 13: 
  767. gxbFBPlayNumConst=2;
  768. break;
  769. case 20:
  770. gxbFBPlayNumConst=4;
  771. break;
  772. default:
  773. //gxbUiErrorCode=2;
  774. goto GET_HEADER_ERR;
  775. }   
  776. */
  777. //4 AVI_H_SAMPLE_RATE(0x11,1)
  778. //Walace061122#2
  779. ParserGetField(&bData,1, &wOffset, FIRST_SEARCH, NORMAL_DATA); //Walace061122#2
  780. switch(bData) //Walace061122#2
  781. {
  782. case 8:
  783. gxwSampleRate = 8000;
  784. bSRIndex=0;
  785. break;
  786. case 11:
  787. gxwSampleRate = 11025;
  788. bSRIndex=1;
  789. break;
  790.  
  791. case 12:
  792. gxwSampleRate = 12000;
  793. bSRIndex=2;
  794. break;
  795. case 16://Horry060213
  796. gxwSampleRate = 16000;
  797. bSRIndex=3;
  798. break;
  799. case 22:
  800. gxwSampleRate = 22050;
  801. bSRIndex=4;
  802. break;
  803. case 24:
  804. gxwSampleRate = 24000;
  805. bSRIndex=5;
  806. break;
  807. case 32:
  808. gxwSampleRate = 32000;
  809. bSRIndex=6;
  810. break;
  811. //default: //Walace060912#1 //Walace060912#1
  812. case 44:
  813. gxwSampleRate = 44100;
  814. bSRIndex=7;
  815. break;
  816. case 48: 
  817. gxwSampleRate = 48000; 
  818. bSRIndex=8;
  819. break;
  820. default: //Walace060912#1 
  821. //gxbUiErrorCode=3;
  822. gxbErrCode=ERR_VIDEO_NOT_SUPPORT_FORMAT; //Walace061207#4 //Walace070507#1
  823. break; //Walace061228#1
  824. //goto GET_HEADER_ERR; //Walace061207#4
  825. }
  826. //Walace061122#2
  827. //3 Get the audio frame number in one mtv packet
  828. ParserGetField(&bAudioFramNum,1, &wOffset, FIRST_SEARCH, NORMAL_DATA);//Walace061120#1
  829. //4  AVI_H_IMAGE_INFO(0x13,1)
  830. ParserGetField(&bData,1, &wOffset, FIRST_SEARCH, NORMAL_DATA);
  831. xbShowInfoFlag &=0x0f;//Tony070125 
  832.         switch(bData&AVI_H_IMAGE_SIZE_MASK)
  833.         {
  834.          case VIDEO_SIZE_96_64:
  835.      gxbVideoWidth = 96;
  836.      gxbVideoHeight = 64;
  837.      fRotDisp=TRUE; //Tony070124 #1 //all rot
  838.      break;
  839.  
  840.          case VIDEO_SIZE_128_96:
  841.      gxbVideoWidth = 128;
  842.      gxbVideoHeight = 96;
  843.      fRotDisp=TRUE; //Tony070124 #1 
  844.      break;
  845.  
  846.          case VIDEO_SIZE_160_128:
  847.      gxbVideoWidth = 160;
  848.      gxbVideoHeight = 128;
  849.      fRotDisp=TRUE; //Tony070124 #1 
  850.       xbShowInfoFlag|=0xf0;//Tony070125 
  851.      break;
  852.  
  853. case VIDEO_SIZE_128_128: //Walace060912#2
  854.      gxbVideoWidth = 128;
  855.      gxbVideoHeight = 128;
  856.      fRotDisp=TRUE; //Tony070124 #1 
  857. break;
  858. case VIDEO_SIZE_176_144: //Walace060912#2
  859.      gxbVideoWidth = 176;
  860.      gxbVideoHeight = 144;
  861.      fRotDisp=TRUE; //Tony070124 #1 
  862. break;
  863. case VIDEO_SIZE_160_112: //Walace061114#1
  864.      gxbVideoWidth = 160;
  865.      gxbVideoHeight = 112;
  866.      fRotDisp=TRUE; //Tony070124 #1 
  867. break;
  868. case VIDEO_SIZE_208_176: //Walace061126#2
  869. case VIDEO_SIZE_DEBUG:
  870.      gxbVideoWidth = 208;
  871.      gxbVideoHeight = 176;
  872.  fRotDisp=TRUE; //Walace070122#1
  873.  xbShowInfoFlag|=0xf0;//Tony070125 
  874. break;
  875. default:
  876. gxbErrCode=ERR_VIDEO_NOT_SUPPORT_FORMAT; //Walace061207#4 //Walace070507#1
  877. break; //Walace061228#1
  878. //gxbUiErrorCode=4;
  879. //goto GET_HEADER_ERR;
  880.         } 
  881. #define MP3_TIME_SAMPLE_PER_FRAME1 1152 //Walace070115#1
  882. #define MP3_TIME_SAMPLE_PER_FRAME2 576 //Walace070115#1
  883. //4 AVI_H_VIDEO_VERSION(0x14,1)
  884. //Walace061101#1 start
  885. ParserGetField(&gxbFormatVersion,1, &wOffset, FIRST_SEARCH, NORMAL_DATA);  //Walace070110#3
  886. //Walace061226#1 start
  887. switch(gxbFormatVersion)
  888. {
  889. //Walace070329#1 start
  890. case AVI_H_SUPPORT_SYNC:
  891. case AVI_H_SUPPORT_128_128:  //0xFF for old sync word, 0xEE for new sync word  //Walace060912#1 
  892. gxbVideoFormat = VIDEO_TYPE_MP3_V1;
  893. break;
  894. //Walace070329#1 end 
  895. case AVI_H_SUPPORT_NEW_SYNC_MP3: 
  896. gxbVideoFormat = VIDEO_TYPE_MP3;
  897. if(bSRIndex>=6) // >= Samplerate 32khz //Walace070115#1
  898. {
  899. dwTimeSamplesPerPacket = MP3_TIME_SAMPLE_PER_FRAME1*(DWORD)bAudioFramNum;
  900. }
  901. else
  902. {
  903. dwTimeSamplesPerPacket = MP3_TIME_SAMPLE_PER_FRAME2*(DWORD)bAudioFramNum;
  904. }
  905. break;
  906. case AVI_H_SUPPORT_ADPCM_176_144:
  907. #if(VIDEO_ABNORMAL_DEBUG)
  908. if((bSRIndex>5)||(bSRIndex<3))
  909. VIDEO_ANNORMAL_DEBUG(9005);
  910. #endif
  911. gxbVideoFormat = VIDEO_TYPE_ADPCM;
  912. //OledShowNumber(bAudioFramNum,WORD0,LINE1,3); //WalaceDebug
  913. dwTimeSamplesPerPacket=cwVideoADPCMSample[bSRIndex]*(DWORD)bAudioFramNum;
  914. break;
  915. case AVI_H_SUPPORT_ADPCM_208_176: 
  916. #if(VIDEO_ABNORMAL_DEBUG)
  917. if(bSRIndex>5)
  918. VIDEO_ANNORMAL_DEBUG(9004);
  919. #endif
  920. gxbVideoFormat = VIDEO_TYPE_ADPCM_HQ;
  921. //OledShowNumber(bAudioFramNum,WORD0,LINE1,3); //WalaceDebug
  922. dwTimeSamplesPerPacket=cwHQ208VideoADPCMSample[bSRIndex-3]*(DWORD)bAudioFramNum;
  923. break;
  924.  //Walace070128#2 start
  925. case AVI_H_SUPPORT_HQ_ADPCM_176144_160128: 
  926. #if(VIDEO_ABNORMAL_DEBUG)
  927. if(bSRIndex>5)
  928. VIDEO_ANNORMAL_DEBUG(9005);
  929. #endif
  930. gxbVideoFormat = VIDEO_TYPE_ADPCM_HQ;
  931. //OledShowNumber(bAudioFramNum,WORD0,LINE1,3); //WalaceDebug
  932. if(gxbVideoWidth==176)
  933. dwTimeSamplesPerPacket=cwHQ176VideoADPCMSample[bSRIndex-3]*(DWORD)bAudioFramNum;
  934. else
  935. dwTimeSamplesPerPacket=cwHQ160VideoADPCMSample[bSRIndex-3]*(DWORD)bAudioFramNum;
  936. break;
  937.  //Walace070128#2 end
  938. default:
  939. //goto GET_HEADER_ERR; 
  940. gxbErrCode=ERR_VIDEO_NOT_SUPPORT_FORMAT; //Walace061207#4 //Walace070507#1
  941. //return FALSE;  
  942. break; //Walace061228#1
  943. }
  944. //Walace061226#1 end
  945. #undef MP3_TIME_SAMPLE_PER_FRAME1  //Walace070115#1
  946. #undef MP3_TIME_SAMPLE_PER_FRAME2  //Walace070115#1
  947. //Walace061207#2 start
  948. //4  Reserve 3 bytes (0x15,3)
  949. wOffset+=3;
  950. if(gxbVideoFormat == VIDEO_TYPE_MP3_V1) //Walace070329#1
  951. goto GET_CONFIG_END;
  952. #if(VIDEO_AP_VERSION_DISPLAY) //Walace061207#4 start
  953. //4  Reserve 2  bytes (0x18,1)
  954. wOffset+=2;
  955. //4   AVI_H_VIDEO_AP_VERSION (0x15,6) format in ASCII
  956. ParserGetField(&gxbVideoFileVersion,2, &wOffset, FIRST_SEARCH, NORMAL_DATA); 
  957. ParserGetField((&gxbVideoFileVersion)+3,2, &wOffset, FIRST_SEARCH, NORMAL_DATA); 
  958. ParserGetField((&gxbVideoFileVersion)+6,2, &wOffset, FIRST_SEARCH, NORMAL_DATA); 
  959. #else //Walace070110#3
  960. wOffset+=8;
  961. #endif
  962. if(gxbErrCode==ERR_VIDEO_NOT_SUPPORT_FORMAT) //Walace070507#1
  963. return FALSE;
  964. //4 Mp3 format check sync word
  965. if(gxbVideoFormat == VIDEO_TYPE_MP3)
  966. {
  967. ParserGetField(&bData,1, &wOffset, FIRST_SEARCH, NORMAL_DATA); 
  968. if(bData!=0xEE) //NewSyncWord 
  969. {
  970. gxbErrCode=ERR_VIDEO_NOT_SUPPORT_FORMAT; //Walace061207#4//Walace070507#1
  971. return FALSE;
  972. }
  973. }
  974. //Walace061207#2 end
  975. /* //Walace070115#1 start
  976. //Walace061122#2 start
  977. #define MP3_TIME_SAMPLE_PER_FRAME1 1152
  978. #define MP3_TIME_SAMPLE_PER_FRAME2 576
  979. //3 Determine time samples per avi packet
  980. if(gxbVideoFormat==VIDEO_TYPE_MP3)
  981. if(bSRIndex>=6) // >= Samplerate 32khz
  982. {
  983. dwTimeSamplesPerPacket = MP3_TIME_SAMPLE_PER_FRAME1*(DWORD)bAudioFramNum;
  984. }
  985. else
  986. {
  987. dwTimeSamplesPerPacket = MP3_TIME_SAMPLE_PER_FRAME2*(DWORD)bAudioFramNum;
  988. }
  989. }
  990. else //gxbVideoFormat==VIDEO_TYPE_ADPCM
  991. {
  992. //if(bSRIndex>4)
  993. // goto GET_HEADER_ERR; 
  994. dwTimeSamplesPerPacket=cwADPCMSampleTable[(gxbFrameRate/5)][bSRIndex]*(DWORD)bAudioFramNum;
  995. }
  996. #undef MP3_TIME_SAMPLE_PER_FRAME1 
  997. #undef MP3_TIME_SAMPLE_PER_FRAME2 
  998. */ //Walace070115#1 end
  999. //Walace061122#2 end
  1000.  //Walace061101#1 end
  1001.  GET_CONFIG_END: //Walace070329#1
  1002. gxbFFSkipConst=1;//(frame)     
  1003. /* //Walace070122#1
  1004. if(gxbVideoWidth>VIDEO_DISPLAY_MAX_COL||gxbVideoHeight>VIDEO_DISPLAY_MAX_ROW)
  1005. {
  1006. gxbUiErrorCode=VIDEO_ERR_OVER_SCREEN;
  1007. //gxbUiErrorCode=6;
  1008. return FALSE;
  1009. }
  1010. */
  1011. gxbErrCode=ERR_NO_ERROR;  //Walace070507#1
  1012. return TRUE;
  1013. /*GET_HEADER_ERR: //Walace061207#4
  1014. gxbUiErrorCode=VIDEO_ERR_UNKNOW_FORMAT;
  1015. return FALSE;
  1016. */
  1017.   
  1018. }
  1019. //Walace060912#1 start
  1020. //Walace060926#1 VideoResume start  //Walace061121#3 //Walace061122#2
  1021. void GetSectorNumFromSec(void)
  1022. {
  1023. WORD wOffset;
  1024. BYTE bIndex;
  1025. BYTE bData;
  1026. BYTE bSearchState;
  1027. DWORD dwPacketNum;
  1028. WORD wPacketSize;
  1029. WORD wSectorPerPacket; 
  1030. BYTE bSearchCount; 
  1031. DWORD gxdwTargetPacketNum;
  1032. //gxdwTargetPacketNum = ((DWORD)gxwCurrentPlayTime*gxwSampleRate+(dwTimeSamplesPerPacket-1))/dwTimeSamplesPerPacket;
  1033. gxdwTargetPacketNum = ((DWORD)gxwCurrentPlayTime*gxwSampleRate)/dwTimeSamplesPerPacket;//Walace070115#1
  1034. //WalaceDebug start
  1035. /*
  1036. OledShowNumber(gxdwTargetPacketNum,WORD2,PAGE0,5); //54
  1037. OledShowNumber((gxdwTargetPacketNum>>16),WORD2,PAGE1,5); //0
  1038. OledShowNumber(gxwCurrentPlayTime,WORD2,PAGE2,5);// 4
  1039. OledShowNumber(dwTimeSamplesPerPacket,WORD2,PAGE3,5); //1638
  1040. OledShowNumber(dwTimeSamplesPerPacket>>16,WORD2,PAGE4,5); //0
  1041. OledShowNumber(gxwSampleRate,WORD2,PAGE5,5); // 22k
  1042. */
  1043. // //WalaceDebug end
  1044. wSectorPerPacket=stPhoFileInf.dwFileTotalSector/gxdwTotalFrameNum; //Walace061122#2
  1045. #define COMPARE_SYNC_WORD 0x01
  1046. #define GET_AVI_HEADER 0x02
  1047. #define SEARCH_COMPLETE 0x03
  1048. #define SEARCH_BACK 0x04 //Walace061114#2
  1049. bSearchState = SEARCH_BACK;  //Walace061114#2
  1050. bSearchCount=2; //Walace061114#2
  1051. wOffset=512;
  1052. while(TRUE)
  1053. {
  1054. switch(bSearchState)
  1055. {
  1056. case SEARCH_BACK:  
  1057. if(gdwFileSector<(wSectorPerPacket*bSearchCount))
  1058. gdwFileSector=0;
  1059. else
  1060. gdwFileSector=gdwFileSector-(wSectorPerPacket*bSearchCount);
  1061. bSearchState=COMPARE_SYNC_WORD;  
  1062. break;
  1063. case COMPARE_SYNC_WORD:
  1064. ParserGetField(&bData, 1,&wOffset, FIRST_SEARCH, NORMAL_DATA);
  1065. COMPARE_FIRST_CHAR:
  1066. if(bData==cbMTVSyncWord[0])
  1067. {
  1068. for(bIndex=1;bIndex<sizeof(cbMTVSyncWord);bIndex++)
  1069. {
  1070. ParserGetField(&bData, 1,&wOffset, FIRST_SEARCH, NORMAL_DATA);
  1071. if(cbMTVSyncWord[bIndex]!=bData)
  1072. goto COMPARE_FIRST_CHAR;
  1073. }
  1074. bSearchState=GET_AVI_HEADER;
  1075. }
  1076. break;
  1077. case GET_AVI_HEADER:
  1078. ParserGetField(&dwPacketNum, 4,&wOffset, FIRST_SEARCH, NORMAL_DATA);
  1079. if(dwPacketNum==gxdwTargetPacketNum)
  1080. {
  1081. bSearchState=SEARCH_COMPLETE;
  1082. }
  1083. else if(dwPacketNum>gxdwTargetPacketNum)
  1084. {
  1085. bSearchCount= (dwPacketNum-gxdwTargetPacketNum)+2;
  1086. bSearchState=SEARCH_BACK;
  1087. }
  1088. else
  1089. {
  1090. wOffset+=4;
  1091. ParserGetField(&wPacketSize, 2,&wOffset, FIRST_SEARCH, NORMAL_DATA);
  1092. //wOffset+=(wPacketSize-(6+4+4+2)); //Walace070115#1
  1093. wOffset+=(wPacketSize-(AVI_HEADER_SIZE-0x10)); //Walace070115#1
  1094. bSearchState=COMPARE_SYNC_WORD;
  1095. }
  1096. break;
  1097. case SEARCH_COMPLETE:
  1098. gdwFileSector--; //Walace070115#1
  1099. //WalaceDebug
  1100. //OledShowNumber(gdwFileSector,WORD2,LINE6,5); // 840
  1101. //WalaceDebug
  1102. return;
  1103. }
  1104. }
  1105. #undef COMPARE_SYNC_WORD 
  1106. #undef GET_AVI_HEADER 
  1107. #undef SEARCH_COMPLETE 
  1108. #undef SEARCH_BACK 
  1109. }
  1110. //Walace060926#1 VideoResume end
  1111. BOOL VdEgVideoConfig(void) //Walace061121#1 //Walace061121#2
  1112. {
  1113. #if(FSCLUINDEX_KEEP) //Walace061121#1
  1114. BYTE bI; 
  1115. DWORD dwSecTemp;
  1116. #endif
  1117. gxbBlockColNum=VIDEO_UNKNOW_DATA;
  1118. gxbBlockRowNum=VIDEO_UNKNOW_DATA;
  1119. gxwBlockTotalNum =VIDEO_UNKNOW_DATA;
  1120. gxwCurrentBlockNum=VIDEO_UNKNOW_DATA;
  1121. #if(VIDEO_DEBUG_SAVE_BLOCK_DATA)
  1122. gxwCurrentFrameNum=VIDEO_UNKNOW_DATA;
  1123. #endif
  1124. gxwFadeOutSector=VIDEO_UNKNOW_DATA;
  1125. gfFadeState = FADE_STATE_FADE_OUT;
  1126. gxbErrCode=ERR_NO_ERROR; //Walace070507#1 
  1127. fRotDisp = FALSE ; //Walace070122#1
  1128. VideoGetHeader();
  1129. gdwFileSector=VIDEO_UNKNOW_DATA;  
  1130. //Vicky060605#1 //Walace061121#1
  1131. #if(FSCLUINDEX_KEEP)
  1132. for(bI=0;bI<FSCLUINDEX_NUM;bI++)
  1133. {
  1134. gxdwCluIndex[bI]=0;
  1135. }
  1136. #endif
  1137. //Vicky060605#1
  1138. #if(FSCLUINDEX_KEEP)
  1139. for(bI=0;bI<FSCLUINDEX_NUM;bI++)
  1140. {
  1141. dwSecTemp=(gpstFileIndex->dwFileTotalSector)/(FSCLUINDEX_NUM+1)*(FSCLUINDEX_NUM-bI);
  1142. dwSecTemp=gpstFileIndex->dwFileTotalSector-dwSecTemp;
  1143. if(dwSecTemp>=gpstFileIndex->dwFileTotalSector) //vicky061129#1 Avoid EOF Error
  1144. break;
  1145. FsReadFileSectorNew(dwSecTemp, FS_DATA_0_0);
  1146. gxdwCluIndex[bI]=gpstFileIndex->dwFileCurClu;
  1147. }
  1148. #endif
  1149. //End
  1150. gdwFileSector=VIDEO_UNKNOW_DATA;
  1151. gxwCurrentPlayTime=VIDEO_UNKNOW_DATA;
  1152. /*
  1153. if(gxbVideoWidth==224&&gxbVideoHeight==192)
  1154. {
  1155. gxbBlockWidth = 32;
  1156. gxbBlockHeight = 32;
  1157. gfCutBlockDisplay=TRUE;
  1158. }
  1159. else
  1160. {
  1161. */
  1162. gxbBlockWidth = 16;
  1163. gxbBlockHeight = 16;
  1164. //gfCutBlockDisplay=FALSE;
  1165. //}
  1166. gxbBlockColNum= gxbVideoWidth/gxbBlockWidth;
  1167. gxbBlockRowNum= gxbVideoHeight/gxbBlockHeight;
  1168. gxwBlockTotalNum=(WORD)gxbBlockRowNum*(WORD)gxbBlockColNum;
  1169. #if(VIDEO_DISP_IN_CENTER)
  1170. VideoShowCenterGetStartPos();
  1171. #else
  1172. gxbVideoStartX = 0;
  1173. gxbVideoStartY = 0; 
  1174. #endif
  1175.       #if(HEADER_INFO_CHECK)
  1176. OledShowNumber(gxdwTotalFrameNum&0xFFFF,WORD0,PAGE0,6);
  1177. OledShowNumber((gxdwTotalFrameNum>>16)&0xFFFF,WORD0,PAGE1,6);
  1178. OledShowNumber(gxbBlockWidth,WORD0,PAGE2,3);
  1179. OledShowNumber(gxbBlockHeight,WORD0,PAGE3,3);
  1180. OledShowNumber(gxbVideoWidth,WORD0,PAGE4,3);
  1181. OledShowNumber(gxbVideoHeight,WORD0,PAGE5,3);
  1182. OledShowNumber(gxbUiErrorCode,WORD0,PAGE6,3);
  1183. //OledShowNumber(gfCutBlockDisplay,WORD2,PAGE2,3);
  1184. OledShowNumber(gxbVideoFormat,WORD2,PAGE3,3);
  1185. OledShowNumber(gxbVideoWidth,WORD2,PAGE4,3);
  1186. OledShowNumber(gxbVideoHeight,WORD2,PAGE5,3);
  1187. KEY_PRESS_WAIT();
  1188. #endif
  1189. #if(VIDEO_OVERSCREEN_NO_DISPLAY)
  1190. if(gxbErrCode!=ERR_NO_ERROR) //Walace070507#1
  1191. #else
  1192. if(gxbErrCode!=ERR_NO_ERROR&&gxbErrCode!=ERR_VIDEO_OVER_SCREEN) //Walace070507#1
  1193. #endif
  1194. return FALSE;
  1195. return TRUE;
  1196. }
  1197. //Walace060912#1 end
  1198. BOOL VdEgStart(void)
  1199. {
  1200. WORD wDspVal; 
  1201.        CDC_I2S_INT_DIS();
  1202. VideoDspInit();
  1203. ClkDspEn();
  1204. CommonDelay(0xFFFF); //Walace070102#2
  1205.  //Walace061101#1 start
  1206. if(!DownloadVideoDsp(gxbVideoFormat)) //Walace061101#1
  1207.    return FALSE;
  1208. #if(FADE_IN_OUT_MODE==1)       
  1209.          CdcCtrl(CDC_PLAY_START);       
  1210.         #endif
  1211.         #if(VIDEO_FADE_MODE==1)         
  1212. CdcSetPaGain(gxbVolume);    //tne 2006/12/26 #1
  1213. CdcSetPaGainTask(PA_TASK_IMMEDIATE);  //Walace060525#4 //tne 2006/12/26 #1
  1214. #endif 
  1215. SetSysSpeed(VIDEO_ENGINE_PLAY_SPEED);  //Walace061207#3
  1216. //end
  1217. #if(OLED_COLOR_FIELD_TYPE==OLED_FILED_RGB565)
  1218. VideoSetLcdSizeType(VIDEO_DISPLAY_MAX_COL,VIDEO_DISPLAY_MAX_ROW,DSP_VIDEO_LCD_TYPE_STN);
  1219.        #else
  1220. VideoSetLcdSizeType(VIDEO_DISPLAY_MAX_COL,VIDEO_DISPLAY_MAX_ROW,DSP_VIDEO_LCD_TYPE_OLED);
  1221. #endif
  1222. if(gxbVideoFormat != VIDEO_TYPE_MP3_V1) //Walace070329#1
  1223. {
  1224. wDspVal=TRUE;
  1225. IdmaPioDmxW(&wDspVal, DSP_VIDEO_GET_CONFIG, 1, DSP_W16);//resume
  1226. }  //Walace070329#1
  1227. if(!SetDspStart()) //Walace070507#1
  1228. return FALSE;
  1229. gfDspCtrlCdc=TRUE;
  1230. #if(FADE_IN_OUT_MODE==0)       
  1231.        CdcCtrl(CDC_PLAY_START);
  1232. #endif    
  1233. //Walace060803#7 start //Walace060831#3 start
  1234. gxwTotalPlayTime=VIDEO_UNKNOW_DATA;
  1235. IdmaPioDmxW(&gxwTotalPlayTime,DSP_VIDEO_TOTAL_TIME,1,DSP_W16);
  1236. //Walace060803#7 end //Walace060831#3 end
  1237. return TRUE;
  1238. }
  1239. BYTE CheckVideoIn(void) large
  1240. {
  1241. WORD wDspVal;
  1242. IdmaPioDmxR(DSP_VIDEO_INPUT_FLAG, &wDspVal, 1,DSP_W16);
  1243. return (BYTE)wDspVal;
  1244. }
  1245. //==============================================================
  1246. BYTE CheckVideoOut(void) large
  1247. {
  1248. WORD wDspVal;
  1249. IdmaPioDmxR(DSP_VIDEO_OUTPUT_FLAG, &wDspVal, 1,DSP_W16);
  1250. return (BYTE)wDspVal;
  1251. }
  1252. /*
  1253. void VideoFillDspBuff(void)
  1254. {
  1255. BYTE bI;
  1256. bI=0;
  1257. while(TRUE)
  1258. {
  1259. if(CheckVideoIn()==DSP_REQ_START)
  1260. {
  1261. VideoFillDataToDsp();
  1262. bI=0;
  1263. }
  1264. else
  1265. {
  1266. bI++; 
  1267. if(bI>30)
  1268. break;
  1269. }
  1270. }
  1271. }
  1272. */
  1273. BOOL VideoFillDataToDsp(void)
  1274. {
  1275. WORD wDspVal;
  1276.    
  1277.    //2  fill sram buffer from file with 512 bytes
  1278.    // gdwFileSectory : current sector number send to dsp
  1279. gpstFileIndex=&stPhoFileInf;
  1280. //VideoGetAudioConfig(); //Walace060803#7
  1281. //VideoUpdateInfoFromDsp(); //Walace070116#4
  1282.    
  1283. if(gdwFileSector>=(gpstFileIndex->dwFileTotalSector))
  1284. return TRUE;
  1285. if(CheckVideoIn()!=DSP_REQ_START) //check dsp request data
  1286.       return TRUE;
  1287. if(FsReadFileSectorNew(gdwFileSector,FS_DATA_0_0)) //read a sector
  1288. {
  1289. gdwFileSector++;
  1290. //Walace060712#1
  1291. IdmaPioDmxR(DSP_VIDEO_INPUT_ADDR,&wDspVal,1,DSP_W16); //get DSP write index
  1292. //Send 512 bytes to DSP
  1293. obRACTL |= RA_INIT;
  1294. obSOURCEPATHCTRL &= 0xef; //source buffer disable
  1295. obTARGETPATHCTRL &= 0xef;    //target buffer disable
  1296. obRACTL &= RA_NORMAL_J;
  1297. obRACTL |= RA_COPY_MODE_EN;
  1298. obRAINIADRL = (SRAM_DATA_ADDR+gxwOffsetDataSec) & 0xFF; //set RA sddress
  1299. obRAINIADRH = (((SRAM_DATA_ADDR+gxwOffsetDataSec) >> 8) & 0x1F);
  1300. obRAINIADRH |= 0x80;
  1301. obTARGETPATHCTRL=0x36; //set Target IDMA, buffer EN
  1302. IdmaDmxW(wDspVal,256,DSP_W16); //IDMA from SRAM to DSP
  1303. obRACTL |= 0x80; //DMA EN 
  1304.        while(obIDMAREQ)  //polling IDMA request inactive
  1305. {;}
  1306. obRACTL &= 0x7F; //DMA Dis
  1307. obRACTL &= RA_COPY_MODE_DIS;
  1308. wDspVal=DSP_REQ_END;
  1309. IdmaPioDmxW(&wDspVal, DSP_VIDEO_INPUT_FLAG, 1, DSP_W16); //Set finish data transfer
  1310. return TRUE;
  1311. }
  1312. else
  1313. {         
  1314. return FALSE;    
  1315. }
  1316.  
  1317.  return TRUE;
  1318.     
  1319. }
  1320. //Walace061126#2 start
  1321. BOOL DMAIDMADmxRead(WORD wDmxAddress,WORD wSramAdd,WORD wGetSize)
  1322. {
  1323. //Get 512 bytes from DSP
  1324. obRACTL = RA_INIT;
  1325. //obSOURCEPATHCTRL &= 0xef; //source buffer disable
  1326. //obTARGETPATHCTRL &= 0xef;       //target buffer disable
  1327. obRACTL &= RA_NORMAL_J;
  1328. obRAINIADRL = wSramAdd & 0xFF; //set RA address
  1329. obRAINIADRH = ((wSramAdd >> 8) & 0x1F);
  1330. obRAINIADRH |= 0x80;
  1331. obRABANKSIZEL=0x00; //Set RA size 512B
  1332. //obRABANKSIZEH=0x02;
  1333. obRABANKSIZEH=(wGetSize>>8);
  1334. obMODSEL3 &= NOTBYPASS_RAJ;  //allen050601: force NotBypassRa 
  1335. obSOURCEPATHCTRL=0x36; //set Source IDMA, buffer EN
  1336. // obTARGETPATHCTRL=0x37; //Target SRAM
  1337. obTARGETPATHCTRL=0x00;
  1338. // obDOWNLOADADDRL=(SramAddr>>3)&0xFF; //SRAM Address
  1339. // obDOWNLOADADDRH=(SramAddr>>11)&0x3f;
  1340. // obDOWNLOADADDRH |= 0xc0;//to sram, reload address
  1341. // obDOWNLOADADDRH&=0xBF; //normal
  1342. // obTARGETPATHCTRL=0x37; //set Target RA, buffer EN
  1343. IdmaDmxR(wDmxAddress,(wGetSize>>1));
  1344. //IdmaDmxR(wDspVal,256); //IDMA from DSP to SRAM  //Walace061122#1
  1345. obRACTL |= 0x80; //DMA EN 
  1346. while(obIDMAREQ)  //polling IDMA request inactive
  1347. {;}
  1348.            //OledShowNumber(50,WORD1,LINE3,2); //OK
  1349.           
  1350. // obRACTL |= 0x10; //DMA SEND
  1351. // while(!(obRASTATUS & 0x80))
  1352. // {;}
  1353. obRACTL &= 0x7F; //DMA Dis
  1354. obIDMACTRL&=IDMA_ACT_DIS;
  1355. return TRUE;
  1356. }
  1357. //Walace061126#2end
  1358. //#define WALACEDEBUG //WalaceDebug
  1359. #ifdef WALACEDEBUG
  1360. XWORD gxwDebugKeep=0xFFFF;
  1361. #endif
  1362.  
  1363. BOOL  GetImageFromDsp(void)
  1364. {
  1365.    //2 Get image data from dsp 512 bytes to Sram
  1366.    
  1367. WORD wDspVal;
  1368.    
  1369. if(CheckVideoOut()==DSP_REQ_START) //DSP request send out a sector
  1370. {
  1371. IdmaPioDmxR(DSP_VIDEO_OUTPUT_ADDR,&wDspVal,1,DSP_W16);
  1372. #ifdef WALACEDEBUG
  1373. OledShowNumber(wDspVal,WORD6,PAGE0,5);
  1374. if((wDspVal>=gxwDebugKeep))
  1375. OledShowNumber((wDspVal-gxwDebugKeep),WORD6,PAGE1,5);
  1376. else
  1377. OledShowNumber(9999,WORD6,PAGE1,5);
  1378. gxwDebugKeep=wDspVal;
  1379. OledShowNumber(gxbBlockWidth,WORD6,PAGE2,5);
  1380. OledShowNumber(gxbBlockHeight,WORD6,PAGE3,5);
  1381. #endif
  1382. //Walace061126#2
  1383. DMAIDMADmxRead(wDspVal,SRAM_DMA_ADDRESS,((WORD)gxbBlockHeight*(WORD)gxbBlockWidth*2));
  1384. wDspVal=DSP_REQ_END;
  1385. IdmaPioDmxW(&wDspVal, DSP_VIDEO_OUTPUT_FLAG, 1,DSP_W16); //Set finish data transfer
  1386. #ifdef WALACEDEBUG
  1387. OledCtrlEn();
  1388. TftSetWindow(0,0,gxbBlockWidth,gxbBlockHeight);
  1389. TFT_MEMORY_WRITE_START();
  1390. OLED_SET_DAT();
  1391. for(wDspVal=0;wDspVal<((WORD)gxbBlockHeight*(WORD)gxbBlockWidth*2);wDspVal++)
  1392. {
  1393. LCD_WRITE(*(PXBYTE)(SRAM_DMA_ADDRESS+wDspVal));
  1394. }
  1395. OLED_SET_CMD();
  1396. OledCtrlDis();
  1397. #endif
  1398. return TRUE;
  1399. }
  1400.    return FALSE;
  1401. }
  1402. #if(VIDEO_BYTE_REVERSE_TEST)
  1403. void SwapSectorHL(void)
  1404. {
  1405. WORD wIndex;
  1406. BYTE bBuff;
  1407. PXBYTE pData;
  1408. pData = (PXBYTE)0xC800;
  1409. for(wIndex=0;wIndex<(DSP_BLOCK_SIZE<<1);wIndex+=2)
  1410. bBuff=*(pData+wIndex);
  1411. *(pData+wIndex) = *(pData+wIndex+1);
  1412. *(pData+wIndex+1) = bBuff;
  1413. }
  1414. }
  1415. #endif
  1416. #if(VIDEO_DEBUG_SAVE_BLOCK_DATA)
  1417. void SaveCurrentBlockToPrivate(BYTE bSecNum)
  1418. {
  1419. WORD wCounter;
  1420. OledCtrlDis();
  1421. for(wCounter=0;wCounter<512;wCounter++)
  1422. *((PXBYTE)SRAM_FONT_ADDR+wCounter)=*((PXBYTE)SRAM_LYRICS_ADDR+wCounter);//*((PXBYTE)(0xC800+wCounter));
  1423. LoadExtendMemCode();
  1424. NandPrivateEn();
  1425. FsRead((DWORD)bSecNum, 1, FS_DATA_0_0);
  1426. for(wCounter=0;wCounter<512;wCounter++)
  1427. gxbFsData[gxwOffsetDataSec+wCounter]=*((PXBYTE)SRAM_FONT_ADDR+wCounter);//*((PXBYTE)(0xC800+wCounter));
  1428. FsWrite((DWORD)bSecNum, 1 , FS_DATA_0_0);
  1429. NandFinishJob();
  1430. NandPrivateDis();
  1431. }
  1432. #endif
  1433. BOOL VideoShow(void) //Walace061126#2
  1434. {
  1435.    //2 2 Send Sram data to OLED
  1436.    BYTE bXStart,bYStart;
  1437.     WORD wRemainLength;
  1438. WORD wTransferLen;
  1439. WORD wDmaAddress;
  1440. BYTE bCurrentBlockWidth;
  1441. BYTE bCurrentBlockHeight;
  1442. BYTE bTemp;
  1443.    #if(VIDEO_ENGINE_SHOW_SPEED!= VIDEO_ENGINE_PLAY_SPEED) 
  1444.    BYTE bKeepClkDiv;
  1445.    bKeepClkDiv = obCLKMCUDIVF; 
  1446.    SetSysSpeed(VIDEO_ENGINE_SHOW_SPEED);
  1447.    #endif
  1448.    OledCtrlEn();
  1449. #if(VIDEO_BYTE_REVERSE_TEST) 
  1450.    SwapSectorHL();
  1451. #endif
  1452. // #if(LCD_TYPE==TFT_ORISE||LCD_TYPE==TFT_SOLOMON)//Jim#TftSolomn //Walace070122#1 mark
  1453.   if(fRotDisp) //Walace070122#1
  1454.    LCD_ROT90_DISPLAY_EN();
  1455.  // #endif
  1456. bXStart = (gxwCurrentBlockNum%gxbBlockColNum)*gxbBlockWidth+gxbVideoStartX;
  1457. bYStart = (gxwCurrentBlockNum/gxbBlockColNum)*gxbBlockHeight+gxbVideoStartY;
  1458. //OledShowNumber(bXStart,WORD0,PAGE0,3);
  1459. //OledShowNumber(bYStart,WORD0,PAGE1,3);
  1460. //CommonDelay(0xFFFF);
  1461. bCurrentBlockWidth=gxbBlockWidth;
  1462. bCurrentBlockHeight=gxbBlockHeight;
  1463. /*
  1464. if(gfCutBlockDisplay)
  1465. {
  1466. if((bXStart+gxbBlockWidth)>VIDEO_DISPLAY_MAX_COL)
  1467.     {
  1468. bCurrentBlockWidth=VIDEO_DISPLAY_MAX_COL-bXStart;
  1469. }
  1470. if((bYStart+gxbBlockHeight)>VIDEO_DISPLAY_MAX_ROW)
  1471. {
  1472. bCurrentBlockHeight=VIDEO_DISPLAY_MAX_ROW-bYStart;
  1473. }
  1474. }
  1475. */
  1476. #if(VIDEO_OFFSET_TO_PANEL_SIZE)
  1477. bXStart = bXStart%OLED_MAX_COL;
  1478. bYStart = bYStart%OLED_MAX_ROW;
  1479. #endif
  1480. #if(VIDEO_CUT_BLOCK_TO_PANEL_SIZE) //Walace060421#2  //Video debug flag for big size burn-in test
  1481. if((bXStart<=(VIDEO_DISPLAY_MAX_COL-bCurrentBlockWidth))&&(bYStart<=(VIDEO_DISPLAY_MAX_ROW-bCurrentBlockHeight)))
  1482. #endif
  1483. //if(bXStart<(220-80)) //WalaceDebug
  1484. {
  1485. #if(LCD_TYPE==OLED_SOLOMON)
  1486.       if(bYStart<gxbVideoMask)
  1487.  #endif
  1488. #if(LCD_TYPE==TFT_TOPPOLY||LCD_TYPE==TFT_ORISE) 
  1489. if(xbShowInfoFlag&0x0f)//Tony070125 
  1490. bTemp = 112;
  1491. else
  1492. bTemp = 128;
  1493. if((bYStart<bTemp))
  1494. #endif
  1495.                         {
  1496. #if(LCD_TYPE==TFT_ORISE)
  1497.                          
  1498.      TftSetWindow(bXStart,bYStart,bCurrentBlockWidth,bCurrentBlockHeight);                            
  1499.                        
  1500. TFT_MEMORY_WRITE_START();
  1501.                              #elif(LCD_TYPE==TFT_TOPPOLY)
  1502.                              if(fRotDisp) //Walace070122#1 start  // Jeff070125#2
  1503.                                 {
  1504.     TftSetWindow(bYStart,OLED_MAX_ROW-bXStart-1,bCurrentBlockWidth,bCurrentBlockHeight);
  1505.     DISP_CMD_OUT(0x8);
  1506.     DISP_DATA_OUT(OLED_MAX_ROW-bXStart-2+bCurrentBlockWidth);
  1507.                                  }
  1508.                              else
  1509.  {
  1510. TftSetWindow(bXStart,bYStart,bCurrentBlockWidth,bCurrentBlockHeight);
  1511.  } //Walace070122#1 end
  1512. TFT_MEMORY_WRITE_START();
  1513.   #elif(LCD_TYPE==TFT_SOLOMON) //Jim#TftSolomn
  1514. TftSetWindow(bYStart,bXStart,bCurrentBlockHeight,bCurrentBlockWidth);
  1515. TFT_MEMORY_WRITE_START();
  1516. #else
  1517. OLED_WRITE(OLED_CMD_SET_COL_ADDR) ;
  1518. OLED_WRITE(bXStart);
  1519. OLED_WRITE(bXStart+bCurrentBlockWidth-1);
  1520. OLED_WRITE(OLED_CMD_SET_ROW_ADDR) ;
  1521. OLED_WRITE(bYStart);
  1522. OLED_WRITE(bYStart+bCurrentBlockHeight-1);
  1523. #endif
  1524. //CommonDelay(0xFFFF);
  1525. OLED_SET_DAT();
  1526. wRemainLength = ((WORD)bCurrentBlockHeight*(WORD)bCurrentBlockWidth*2);
  1527. wDmaAddress=(SRAM_DMA_ADDRESS-0xc000);
  1528. while(wRemainLength)
  1529. {
  1530. if(wRemainLength<1024)
  1531. wTransferLen=wRemainLength;
  1532. else
  1533. wTransferLen=1024;
  1534. OledDMASramToSM(wDmaAddress, wTransferLen);
  1535. wRemainLength-=wTransferLen;
  1536. wDmaAddress+=wTransferLen;
  1537. }
  1538. OLED_SET_CMD();
  1539.        }
  1540.   
  1541. }
  1542. #if(VIDEO_DEBUG_SAVE_BLOCK_DATA)
  1543. if((gxwCurrentBlockNum==4)&&(gxwCurrentFrameNum==13))
  1544. {
  1545. SaveCurrentBlockToPrivate(3);
  1546. OledShowNumber(999,WORD0,LINE0,3);
  1547. while(1){;}
  1548. }
  1549. #endif
  1550.        gxwCurrentBlockNum++;
  1551.     //#if(LCD_TYPE==TFT_ORISE||LCD_TYPE==TFT_SOLOMON) //Jim#TftSolomn //Walace070122#1 mark
  1552. //LCD_ROT90_DISPLAY_DIS();
  1553. //#endif
  1554. if(fRotDisp) //Walace070122#1
  1555. OledDrawDirection(OLED_RAM_ACCESS_MODE_COLUMN_FIRST); //Walace070122#1
  1556.         if(gxwCurrentBlockNum>=gxwBlockTotalNum)
  1557. {
  1558. gxwCurrentBlockNum = 0;
  1559. #if(VIDEO_DEBUG_SAVE_BLOCK_DATA)
  1560. gxwCurrentFrameNum++;
  1561. #endif
  1562. OledCtrlDis();
  1563. #if(VIDEO_ENGINE_SHOW_SPEED!= VIDEO_ENGINE_PLAY_SPEED)//Walace060801#1 
  1564. SetSysSpeed(bKeepClkDiv); 
  1565. #endif
  1566. return TRUE;
  1567.        }
  1568.    
  1569.    OledCtrlDis();
  1570.    
  1571.    #if(VIDEO_ENGINE_SHOW_SPEED!= VIDEO_ENGINE_PLAY_SPEED) 
  1572.    SetSysSpeed(bKeepClkDiv);
  1573.    #endif
  1574.    
  1575.    return FALSE; 
  1576.   
  1577. }
  1578. #define WAIT_1_PACKET_COMPLETE 1
  1579. //Walace051218
  1580. #if(!VIDEO_FULLY_SERVICE_TO_DSP_DEBUG)
  1581. void VdEgPlay(void)
  1582. {
  1583. #if(WAIT_1_PACKET_COMPLETE)
  1584. WORD wTimeOut;
  1585. #endif
  1586. /*
  1587. if(obCLKMCUDIVF!=VIDEO_ENGINE_PLAY_SPEED)
  1588. {
  1589. OledShowNumber(obCLKMCUDIVF,WORD0,LINE0,6);
  1590. while(1){}
  1591. }
  1592. */
  1593.     //Walace061017#2 start //Walace061207#3 start
  1594.     /* //WalaceDebug mark
  1595.    #if(VIDEO_ENGINE_SHOW_SPEED!= VIDEO_ENGINE_PLAY_SPEED)
  1596. BYTE bKeepSpeed; 
  1597. bKeepSpeed=obCLKMCUDIVF; 
  1598. SetSysSpeed(VIDEO_ENGINE_PLAY_SPEED);  
  1599.    #endif
  1600.    */
  1601.     VideoFillDataToDsp();
  1602. VideoUpdateInfoFromDsp(); //Walace070116#4
  1603. VideoDebugShow();
  1604.     if(GetImageFromDsp())
  1605.        {             
  1606.         VideoShow();
  1607. #if(WAIT_1_PACKET_COMPLETE)
  1608.         wTimeOut=DSP_TIME_OUT_CONST;
  1609. while(wTimeOut--)
  1610.        {
  1611.         VideoFillDataToDsp();
  1612. VideoUpdateInfoFromDsp(); //Walace070116#4
  1613. VideoDebugShow();
  1614.         if(GetImageFromDsp())
  1615.         {        
  1616.         if(VideoShow())
  1617. goto VIDEO_PLAY_END; //Walace060801#1
  1618.         }
  1619. UiMessageCtrl();
  1620. }
  1621. #endif
  1622.        }
  1623. //Walace060801#1 start
  1624. VIDEO_PLAY_END:
  1625. /* //WalaceDebug mark //Walace061207#3 start
  1626.  #if(VIDEO_ENGINE_SHOW_SPEED!= VIDEO_ENGINE_PLAY_SPEED)
  1627. SetSysSpeed(bKeepSpeed);   //Walace061017#1
  1628. #endif
  1629. */
  1630. ;
  1631. //Walace060801#1 end
  1632. }
  1633. #else
  1634. XWORD gxwDspVal;
  1635. void VdEgPlay(void)
  1636. {
  1637. WORD wTemp=0;
  1638. SetSysSpeed(0x02);
  1639. while(1)
  1640. {
  1641. if(wTemp>0)
  1642.     {
  1643.     VideoFillDataToDsp(); 
  1644. VideoUpdateInfoFromDsp(); //Walace070116#4
  1645. wTemp=0;
  1646. }
  1647. else
  1648. {
  1649. wTemp++;
  1650. }
  1651. if(CheckVideoOut()==DSP_REQ_START) //DSP request send out a sector
  1652. {
  1653. gxwDspVal=DSP_REQ_END;
  1654. IdmaPioDmxW(&gxwDspVal, DSP_VIDEO_OUTPUT_FLAG, 1,DSP_W16); //Set finish data transfer
  1655. }
  1656. ShowDspErrMsg();
  1657. }
  1658. }
  1659. #endif
  1660. #if(VIDEO_FADE_MODE==0)
  1661. void VdForceFadeOut(void)
  1662. {
  1663. CdcSetPaGain(VIDEO_FADE_OUT_VOL); //tne 2006/12/26 #1
  1664. while(gdwFileSector<stPhoFileInf.dwFileTotalSector)
  1665. {
  1666. if(gxbTargetVolume==gxbLastVolume)
  1667. return;
  1668. //IntCdcSetPaGainTask(FALSE);
  1669. CdcSetPaGainTask(PA_TASK_UNIMMEDIATE|PA_TASK_DELAY);  //Walace060525#4 //tne 2006/12/26 #1
  1670. VdEgPlay();
  1671. }
  1672. /*
  1673. if(gxbTargetVolume!=gxbLastVolume)
  1674. while(1){}
  1675. */
  1676. }
  1677. #endif
  1678. //Walace061020#1 start
  1679. //Walace060630#3  
  1680. #define DSP_INBUFF_SIZE_MP3 1024 
  1681. #define DSP_INBUFF_SIZE_ADPCM 2048 
  1682. #define DSP_AUD_OUTBUFF_SIZE 4096
  1683. /*
  1684. 208x176 ADPCM
  1685. .var/dm/abs=0x0800 InBuffer[2048];  
  1686. .var/dm/abs=0x0000 rd_in
  1687. .var/dm/abs=0x1FF7 wr_in
  1688. .var/dm/abs=0x2000 AUD_outbuf[4096];
  1689. .var/dm/abs=0x1FE2 rd_out
  1690. .var/dm/abs=0x1FE3 wr_out
  1691. .var/dm/abs=0x1000 VEO_outbuf[2048];
  1692. .var/dm/abs=0x1FF9 V_outbuf_rd
  1693. .var/dm/abs=0x1FCE V_outbuf_wr
  1694. 176x144 & 160x128ADPCM
  1695. .var/dm/abs=0x0800 InBuffer[2048];
  1696. .var/dm/abs=0x0000 rd_in
  1697. .var/dm/abs=0x1FF7 wr_in 
  1698. .var/dm/abs=0x2000 AUD_outbuf[4096];
  1699. .var/dm/abs=0x1FE2 rd_out 
  1700. .var/dm/abs=0x1FE3 wr_out 
  1701. .var/dm/abs=0x1000 VEO_outbuf[2048];
  1702. .var/dm/abs=0x1FF9 V_outbuf_rd  
  1703. .var/dm/abs=0x1FCE V_outbuf_wr  
  1704. 160x144 mp3
  1705. .var/dm/abs=0x0800 InBuffer[1024];        
  1706. .var/dm/abs=0x0000 rd_in                  
  1707. .var/dm/abs=0x1FF7 wr_in                  
  1708.                                           
  1709. .var/dm/abs=0x2000 AUD_outbuf[4096];        
  1710. .var/dm/abs=0x1FE2 rd_out                 
  1711. .var/dm/abs=0x1FE3 wr_out                 
  1712.                                           
  1713. .var/dm/abs=0x1000 VEO_outbuf[1024];      
  1714. .var/dm/abs=0x1FF9 V_outbuf_rd            
  1715. .var/dm/abs=0x1FCE V_outbuf_wr  
  1716. */
  1717. WORD CheckDspBuffer(BYTE bCheckCmd) large
  1718. {
  1719. WORD wRDIndex,wWRIndex;
  1720. WORD wTimeOut;
  1721. WORD wBuffSize;
  1722. switch(bCheckCmd)
  1723. {
  1724. case WAIT_AUD_OUT_BUFF_EMPTY:
  1725. wTimeOut=0xFFFF;
  1726. while(wTimeOut)
  1727. {
  1728. //IdmaPioDmxR(DSP_VIDEO_AUD_OUT_RDINDEX,&wRDIndex,1,DSP_W16);
  1729. //IdmaPioDmxR(DSP_VIDEO_AUD_OUT_WRINDEX,&wWRIndex,1,DSP_W16);
  1730. //if(wRDIndex==wWRIndex) //Outbuffer Empty
  1731. // break;
  1732. IdmaPioDmxR(DSP_VIDEO_AUD_OUT_ERRFLAG,&wRDIndex,1,DSP_W16);
  1733. if(wRDIndex)
  1734. break;
  1735. wTimeOut--;
  1736. }
  1737. break; 
  1738. case GET_AV_IN_BUFF_DATA_SIZE:
  1739. if((gxbVideoFormat==VIDEO_TYPE_MP3)) //Walace061226#1
  1740. {
  1741. wBuffSize=DSP_INBUFF_SIZE_MP3;
  1742. }
  1743. else
  1744. {
  1745. wBuffSize=DSP_INBUFF_SIZE_ADPCM;
  1746. }
  1747. IdmaPioDmxR(DSP_VIDEO_AVI_IN_RD_INDEX,&wRDIndex,1,DSP_W16);
  1748. IdmaPioDmxR(DSP_VIDEO_AVI_IN_WR_INDEX,&wWRIndex,1,DSP_W16);
  1749. if(wWRIndex>=wRDIndex)
  1750. return (wWRIndex-wRDIndex)<<1;  //Walace061226#1
  1751. else
  1752. return (wBuffSize+wWRIndex-wRDIndex)<<1;  //Walace061226#1
  1753. break;
  1754. //Walace060829#2 start
  1755. case GET_AUD_OUT_BUFF_DATA_SIZE:
  1756. IdmaPioDmxR(DSP_VIDEO_AUD_OUT_RDINDEX,&wRDIndex,1,DSP_W16);
  1757. IdmaPioDmxR(DSP_VIDEO_AUD_OUT_WRINDEX,&wWRIndex,1,DSP_W16);
  1758. if(wWRIndex>=wRDIndex)
  1759. return (wWRIndex-wRDIndex);
  1760. else
  1761. return (DSP_AUD_OUTBUFF_SIZE+wWRIndex-wRDIndex)<<1; //Walace061226#1
  1762. break;
  1763. //Walace060829#2 end
  1764. //== Latched Signal==========
  1765. //   bit 0: AVI   Inbuffer Empty
  1766. //   bit 1: AUD  Outbuffer Empty
  1767. //   bit 2: VEO  Outbuffer Empty
  1768. //   bit 3: Audio Bitstream Format Error
  1769. //   bit 4: Vedio Bitstream Format Error
  1770. case GET_AVI_ERR_FLAG:
  1771. IdmaPioDmxR(DSP_VIDEO_AVI_ERR_FLAG,&wRDIndex,1,DSP_W16);
  1772. return wRDIndex;
  1773. }
  1774. }
  1775. //Walace060717#1 end
  1776. void VdEgStop(void)  //Walace060912#1
  1777. {
  1778. #if(VIDEO_FADE_MODE==0)
  1779. VdForceFadeOut();
  1780. #elif(VIDEO_FADE_MODE==1)
  1781. VdDspFade((DSP_FADE_OUT_EN|(DSP_FADE_1_UNIT<<4)),TRUE);//Horry060307
  1782. #endif
  1783. //Walace060630#3
  1784. if(gdwFileSector >= (stPhoFileInf.dwFileTotalSector-gxwFadeOutSector)) //Fade Out and Auto Next File, Send All Data
  1785. {
  1786. while(gdwFileSector<stPhoFileInf.dwFileTotalSector)
  1787. VdEgPlay();
  1788. CheckDspBuffer(WAIT_AUD_OUT_BUFF_EMPTY); //Walace060807#2
  1789. VideoUpdateInfoFromDsp();  //Walace060912#1
  1790. }
  1791. SetSysSpeed(VIDEO_ENGINE_LOW_SPEED);   //Walace061207#3
  1792. UiMessageCtrl();
  1793. CommonDelay(0x9FFF);
  1794.        CDC_I2S_INT_DIS();     
  1795. #if(VIDEO_DSP_HIGH_CLOCK) //Walace061226#1
  1796. if(gxbVideoFormat==VIDEO_TYPE_ADPCM_HQ) //Walace070116#1
  1797. {
  1798. DSP_CLK_SET_73(); //dsp clock for motion jpg  //Walace060804#2
  1799. obMODSEL3 &= MOD_USB_DISJ; //USB Clock EN
  1800. }
  1801. #endif
  1802. ClkDspDis();
  1803. gfDspCtrlCdc=FALSE;
  1804. VdFastCtrl(VF_F_INIT);
  1805. }
  1806. /*--------------------------------------------------------------------------
  1807. Description:
  1808. Let DSP process fade out,  wait it finish or not
  1809. Arguments:
  1810. wDspFadeCmd
  1811. the command that send to dsp (check const.c "Dsp Fade in/out command" for details)
  1812. fWait
  1813. TRUE:  wait until dsp finish
  1814. FALSE:  no waiting
  1815. Global arguments:
  1816. None
  1817. Returns: 
  1818. None
  1819. --------------------------------------------------------------------------*/
  1820. //Horry060307 start refer to Vicky060112
  1821. #if(VIDEO_FADE_MODE==1)
  1822. void VdDspFade(WORD wDspFadeCmd,BOOL fWait) 
  1823. {
  1824. WORD wTimeOut,wDspVal;
  1825. //BYTE bClkDiv;
  1826. //bClkDiv=obCLKMCUDIVF; 
  1827. //obCLKMCUDIVF=0x08;  
  1828. /*if(wDspFadeCmd&DSP_FADE_OUT_EN)
  1829. {
  1830. wDspVal=FALSE;
  1831. IdmaPioDmxW(&wDspVal, DSP_MUTE_PA_ADDR, 1, DSP_W16);
  1832. gxbRecOption|=PLAY_CHECK_MUTEPA;
  1833. }*/
  1834. if(gfFadeState==FADE_STATE_FADE_IN)
  1835. {
  1836. if(wDspFadeCmd&DSP_FADE_IN_EN)
  1837. return;
  1838. else
  1839. gfFadeState=FADE_STATE_FADE_OUT;
  1840. }
  1841. else
  1842. {
  1843. if(wDspFadeCmd&DSP_FADE_OUT_EN)
  1844. return;
  1845. else
  1846. gfFadeState=FADE_STATE_FADE_IN;
  1847. }
  1848. IdmaPioDmxW(&wDspFadeCmd,DSP_VIDEO_FADE_ADDR,1,DSP_W16);
  1849. if(fWait)
  1850. {
  1851. //wTimeOut=0x8FFF;
  1852. //0xA80=>measured with Scope  [126ms: 48K domain (14.7Mhz)]; [137ms: 44.1k domain (13.6Mhz)]
  1853. wTimeOut=0xFFFF; 
  1854. while((wTimeOut)&&(gdwFileSector<stPhoFileInf.dwFileTotalSector))
  1855. {
  1856. VdEgPlay();
  1857. IdmaPioDmxR(DSP_VIDEO_FADE_ADDR,&wDspVal,1,DSP_W16);
  1858. if((wDspVal & DSP_FADE_DONE)>>14)
  1859.  break;  
  1860. wTimeOut--;
  1861. }
  1862. }
  1863. //obCLKMCUDIVF=bClkDiv; //Vicky060112#2
  1864. }
  1865. #endif
  1866. //end
  1867. /*BOOL VdCheckOutBufEmpty(void)//Horry060307
  1868. {
  1869. WORD wRDindex,wWRindex;
  1870. IdmaPioDmxR(DSP_VIDEO_AUD_OUT_RDINDEX,&wRDindex,1,DSP_W16);
  1871. IdmaPioDmxR(DSP_VIDEO_AUD_OUT_WRINDEX,&wWRindex,1,DSP_W16);
  1872. return (wRDindex==wWRindex);
  1873. }*/
  1874. #if(VIDEO_USE_DEBUG)
  1875. void VideoDebugShow(void)
  1876. {
  1877. WORD wTemp;
  1878. // OledShowNumber(gdwFileSector&0xFFFF,SEG0,PAGE0,3);
  1879. /*
  1880. IdmaPioDmxR(DSP_VIDEO_AUD_OUT_RDINDEX,&wTemp,1,DSP_W16);
  1881. OledShowNumber(wTemp,SEG0,PAGE1,3);
  1882. IdmaPioDmxR(DSP_VIDEO_AUD_OUT_WRINDEX,&wTemp,1,DSP_W16);
  1883. OledShowNumber(wTemp,SEG0,PAGE2,3);
  1884. */
  1885. // IdmaPioDmxR(DSP_VIDEO_SEC_ADDR,&wTemp,1,DSP_W16);
  1886. // OledShowNumber(wTemp,SEG0,PAGE3,3);
  1887. //OledShowNumber(gxwTotalPlayTime,SEG0,PAGE4,3);
  1888. //IdmaPioDmxR(DSP_VIDEO_FRAME_NUM_L_ADDR,&wTemp,1,DSP_W16);
  1889. //OledShowNumber(wTemp,SEG0,PAGE5,3);
  1890. //IdmaPioDmxR(DSP_VIDEO_TOTAL_FRAME_NUM_L_ADDR,&wTemp,1,DSP_W16);
  1891. //OledShowNumber(wTemp,SEG0,PAGE6,3);
  1892. wTemp=5;
  1893. }
  1894. #endif
  1895. //Walace060717#1 start
  1896. void VideoUpdateInfoFromDsp(void)
  1897. {
  1898. WORD wDspTemp;
  1899. IdmaPioDmxR(DSP_VIDEO_SEC_ADDR,&wDspTemp,1,DSP_W16);
  1900. #if 0 //Walace070117#1 start
  1901. if((gxbVESpeed&VE_FAST_STATE)==VE_FAST_FB)  //Walace060712#1 
  1902. {
  1903. if(wDspTemp>=gxwCurrentPlayTime)
  1904. return;
  1905. }
  1906. gxwCurrentPlayTime=wDspTemp;
  1907. #else
  1908. if((gxbVESpeed&VE_FAST_STATE)!=VE_FAST_FB)
  1909. {
  1910. if(wDspTemp>gxwCurrentPlayTime)
  1911. gxwCurrentPlayTime=wDspTemp;
  1912. }
  1913. else
  1914. {
  1915. if(wDspTemp<gxwCurrentPlayTime)
  1916. gxwCurrentPlayTime=wDspTemp;
  1917. }
  1918. #endif //Walace070117#1 end
  1919. }
  1920. //Walace060717#1 end
  1921. //Walace060829#3  start
  1922. #if(VIDEO_SHOW_DSP_BUFF_ERR) 
  1923. XBYTE gxbLcdCounterKeep;
  1924. void ShowDspErrMsg(void)
  1925. {
  1926. WORD wBufferSize;
  1927. if(gdwFileSector<200||(gxbVideoState==VIDEO_STATE_IDLE))
  1928. {
  1929. wBufferSize=0;
  1930. IdmaPioDmxW(&wBufferSize,DSP_VIDEO_AVI_ERR_FLAG,1,DSP_W16);
  1931. gxbLcdCounterKeep = gxbLcdCounter;
  1932. return;
  1933. }
  1934. #if 0
  1935. wBufferSize=CheckDspBuffer(GET_AV_IN_BUFF_DATA_SIZE);
  1936. if(wBufferSize==0)
  1937. {
  1938. OledShowNumber(0x0001,WORD0,LINE0,2);
  1939. OledShowNumber(gdwFileSector,WORD0,LINE1,6);
  1940. while(1){}
  1941. }
  1942. wBufferSize=CheckDspBuffer(GET_AUD_OUT_BUFF_DATA_SIZE);
  1943. if(wBufferSize==0)
  1944. {
  1945. OledShowNumber(0x0002,WORD0,LINE0,2);
  1946. OledShowNumber(gdwFileSector,WORD0,LINE1,6);
  1947. while(1){}
  1948. }
  1949. wBufferSize=CheckDspBuffer(GET_AV_IN_ERR_FLAG);
  1950. if(wBufferSize!=0)
  1951. {
  1952. OledShowNumber(0x0002,WORD0,LINE0,2);
  1953. OledShowNumber(wBufferSize,WORD0,LINE1,6);
  1954. while(1){}
  1955. }
  1956. #endif
  1957. //CommonDelay(0xFFFF);
  1958. //OledShowNumber(555,WORD0,PAGE3,6);
  1959. //wBufferSize=CheckDspBuffer(GET_AV_IN_BUFF_DATA_SIZE);
  1960. //OledShowNumber(wBufferSize,WORD0,PAGE0,5);
  1961. // if(wBufferSize==0)
  1962. // {
  1963. //OledShowNumber(wBufferSize,WORD0,PAGE0,5);
  1964. //while(1){}
  1965. // }
  1966. //wBufferSize=CheckDspBuffer(GET_AUD_OUT_BUFF_DATA_SIZE);
  1967. //
  1968. //OledShowNumber(wBufferSize,WORD0,PAGE1,5);
  1969. //if(wBufferSize==0)
  1970. //{
  1971. //OledShowNumber(wBufferSize,WORD0,PAGE1,6);
  1972. //while(1){}
  1973. //}
  1974. //== Latched Signal==========
  1975. //   bit 0: AVI   Inbuffer Empty
  1976. //   bit 1: AUD  Outbuffer Empty
  1977. //   bit 2: VEO  Outbuffer Empty
  1978. //   bit 3: Audio Bitstream Format Error
  1979. //   bit 4: Vedio Bitstream Format Error
  1980. /*
  1981. #define DSP_ERR_AVI_INBUF_EMPTY 0x01
  1982. #define DSP_ERR_AUD_OUTBUF_EMPTY 0x02
  1983. #define DSP_ERR_VEO_OUTBUF_EMPTY 0x04
  1984. #define DSP_ERR_AUD_BITSTREAM_ERR 0x08
  1985. #define DSP_ERR_VEO_BITSTREAM_ERR 0x10
  1986. */
  1987. //CommonDelay(0xFFFF);
  1988. //wBufferSize=CheckDspBuffer(GET_AV_IN_BUFF_DATA_SIZE);
  1989. //OledShowNumber(wBufferSize,WORD0,PAGE0,5);
  1990. wBufferSize=CheckDspBuffer(GET_AVI_ERR_FLAG);
  1991. //if((wBufferSize&DSP_ERR_AVI_INBUF_EMPTY)||(wBufferSize&DSP_ERR_AUD_OUTBUF_EMPTY))
  1992. if((wBufferSize&DSP_ERR_AVI_INBUF_EMPTY))
  1993. //if(wBufferSize)
  1994. {
  1995. OledShowNumber(wBufferSize,WORD0,PAGE2,5);
  1996. wBufferSize=CheckDspBuffer(GET_AV_IN_BUFF_DATA_SIZE);
  1997. OledShowNumber(wBufferSize,WORD0,PAGE0,5);
  1998. wBufferSize=CheckDspBuffer(GET_AUD_OUT_BUFF_DATA_SIZE);
  1999. OledShowNumber(wBufferSize,WORD0,PAGE1,5);
  2000. while(1){}
  2001. }
  2002. }
  2003. #endif
  2004. //Walace060829#3  end