macro.c
上传用户:caisangzi8
上传日期:2013-10-25
资源大小:15756k
文件大小:27k
源码类别:

DVD

开发平台:

C/C++

  1. //
  2. // FILE
  3. // macro.c
  4. //
  5. // DESCRIPTION
  6. //
  7. //
  8. #include "config.h"
  9. #include "global.h"
  10. #include "memmap.h"
  11. #include "cd.h"
  12. #include "macro.h"
  13. #include "osd.h"
  14. #include "func.h"
  15. #include "supfunc.h"
  16. #include "dma.h"
  17. #include "vpp.h"
  18. #include "atapi_if.h"
  19. #include "stc.h"
  20. #include "lbaif.h"
  21. #include "util.h"
  22. #include "svcd.h"   //Jeff 20010717
  23. #include "dsp3_if.h" //Jeff 20010827
  24. #include "auddrv.h" //2004AUDDRV oliver 20041011 for using audio driver API purpose
  25. #include "dvdpe.h"
  26. #include "viddec.h"
  27. #include "cdxa.h"
  28. #include "mpegsys.h"
  29. #include "cdfunc.h"
  30. #include "dvdpe.h"
  31. #include "setup.h"
  32. #include "pu8560.h" //alan,2002/5/28 10:07PM
  33. #include "fs96602.h"//#ifdef SUPPORT_FILE_SYSTEM_MODE
  34. #include "fsGUI.h"
  35. #include "fsNAV.h"
  36. #include "srv2.h" //cyue: add streamming play
  37. #include "kinf.h"
  38. #include "sinf.h"
  39. #include "kernel.h"
  40. #include "asf_if.h"
  41. #include "avi_if.h"
  42. #include "audcodec.h"
  43. #include "bit_rate.h"   // 2004/07/26 yltseng
  44. #include "cardfs.h"     //wthsin, 2004/8/5 01:24am
  45. #ifndef DVDRELEASE
  46. //#define MACRO_DBG       1
  47. #endif
  48. #ifdef MACRO_DBG
  49. #define MONE_FUNCTION
  50. #define macro_puts(s)       io_write_wait(s)
  51. #endif
  52. #ifdef  MONE_FUNCTION
  53. #define macro_function(s)   do {macro_puts(s); macro_puts("n");} while (0)
  54. #endif
  55. #ifndef macro_puts
  56. #define macro_puts(s)       ((void)0)
  57. #endif
  58. #ifndef macro_function
  59. #define macro_function(s)   ((void)0)
  60. #endif
  61. //
  62. // standalone debugging
  63. // enable macro_puts() with UART0_puts()
  64. //
  65. #if 0
  66. #include "uartsup.h"
  67. #undef  macro_puts
  68. #define macro_puts(s)       UART0_puts(s)
  69. #endif
  70. #ifdef SUPPORT_MIDI_MENU_SEL
  71. extern UINT8 gIsMidiSelMenu;
  72. #endif
  73. //2004AUDDRV extern  void    DSPReset();
  74. extern  int     DTSAC3_check(void);        //Jeff 20010717
  75. extern  void    resync_audio(void);
  76. extern  int     get_size_map(int track);
  77. extern  int     get_segment_length(int s);
  78. //2004AUDDRV init_cdda(void);//kenny
  79. //2004AUDDRV extern  void    init_dtscd(void);
  80. //2004AUDDRV extern  void    init_mp3(void);
  81. extern  int     do_mp3(void);
  82. extern int do_aac(void);
  83. extern  int     do_audio_cdda(void);
  84. extern  void    set_video_aspect(void);
  85. void    InitializeCDPlayback(UINT32 lba,UINT32 len,UINT8 id);
  86. #include "ninf.h"
  87. #include "pinf.h"
  88. extern UINT32 save_srn_start_t;
  89. UINT32  mp3ReadLen; //To count data(units in Word) that move to Aud Buf(for MP3 timeing display) Jeff 20010919
  90. BYTE    audio_only;
  91. t_seq_info last_header;
  92. static  inline  void
  93. restart_sup(void)
  94. {
  95. reset_sup();
  96. }
  97. void MacroSaveHeader()
  98. {
  99.     if( (!show_logo)&&((psd_state&PSD_SEL_LIST)==0) )
  100.     {
  101.         //Terry,2004/6/7 06:39PM
  102.         //for HanYing, Video Masaic.
  103.         save_sequence_info(&last_header);
  104.     }
  105. }
  106. void MacroRestoreHeader()
  107. {
  108.     setup_sequence_info(&last_header);
  109. }
  110. /*
  111. ** Abort()
  112. **
  113. ** HIGH PRIORITY.  IMMEDIATE
  114. */
  115. void    MacroAbort()
  116. {
  117. macro_puts("abortn");
  118. avd_idle_state();
  119. SetIntrMask(0);
  120.   //SetIntrFlag(0);
  121. }
  122. /*
  123. ** Sync()
  124. **
  125. ** HIGH PRIORITY.  IMMEDIATE
  126. */
  127. void    MacroSync()
  128. {
  129. while (IsRPicStart || !IsVPicEnd)
  130. ;
  131. }
  132. /*
  133. ** Pause()
  134. **
  135. ** Cause the player to PAUSE and stop.
  136. **
  137. */
  138. void    MacroPause()
  139. {
  140.     if (pFsJpeg->gifsFuncBtn == FS_FUNC_JPEG)
  141.     {}
  142.     else
  143. {
  144.     AUDIF_Set_Pause();//2004AUDDRV AudioSetPause(); //Pause command to DSP Jeff 20010919
  145.     avd_pause_on();
  146. }
  147. }
  148. //
  149. // Continue()
  150. //
  151. // Release from PAUSE status and continue playback.
  152. // STC and other timers should be reset and resynced according to incoming
  153. // bitstream.
  154. //
  155. void    MacroContinue()
  156. {
  157. avd_pause_off();
  158. avd_play_state();
  159. AUDIF_Set_Continue();//2004AUDDRV AudioSetContinue(); //Continue-play command to DSP Jeff 20010919
  160. }
  161. /*
  162. ** DisplayBackground()
  163. **
  164. ** Display the background for preview.
  165. ** Also set display picture id to 2
  166. **
  167. */
  168. //void    MacroDisplayBackground()
  169. //{
  170. //  set_disbuf(1);
  171. //}
  172. /*
  173. ** Freeze()
  174. **
  175. ** Cause the player to play audio only.  Video output is freezed.
  176. **
  177. */
  178. //void    MacroFreeze()
  179. //{
  180. //}
  181. /*
  182. ** OSD_OnOff()
  183. **
  184. **
  185. */
  186. /*
  187. void    MacroOSD_OnOff()
  188. {
  189.   if (MacroParam.OSD_OnOff.on_off)
  190.   {
  191.         // reset link address
  192.     regs0->tlink_addr  = LINK_NULL;
  193.     regs0->blink_addr  = LINK_NULL;
  194.   }
  195.   else
  196.   {
  197.         // setup link address
  198.     regs0->tlink_addr  = region[0].osd_header[0];
  199.     regs0->blink_addr  = region[0].osd_header[1];
  200.   }
  201. }
  202. */
  203. /*
  204. ** PlayMP3()
  205. **
  206. ** interestingly, I am still not sure how to design this.
  207. **
  208. */
  209. void    MacroPlayMP3(void)
  210. {
  211.     macro_function(__FUNCTION__);
  212.     /*
  213.     ** play video elementary bitstream only.
  214.     */
  215.     CDSetPlayCRC();
  216.     s_msf             = MacroParam.PlayMP3.address_msf;
  217.     s_len             = MacroParam.PlayMP3.length;
  218.     e_msf  = addmsf(s_msf, s_len);
  219.     if(adv_search_time<0)
  220.     {
  221.         if (GetCurrentFileType() == CDROM)
  222.         {
  223.             mp3ReadLen = (PlayBackLength-10)<<11;
  224.             s_msf = addmsf(e_msf,-10);
  225.         }
  226.     }
  227.     InitializeCDPlayback(msf2l(s_msf),(UINT32)s_len,0);
  228.     VOBU_DIS = 0; //Jeff 20011024
  229. }
  230. /*
  231. void PlayMP3FromEnd(UINT32 msf, UINT32 len)
  232. {
  233. }
  234. */
  235. /*
  236. void PlayMP3FromX(UINT32 msf, UINT32 len, UINT32 Xmsf)
  237. {
  238.   MacroParam.PlayMP3.address_msf=(msf);
  239.   MacroParam.PlayMP3.length=(len);
  240.   CDSetPlayCRC();
  241.   s_msf             = MacroParam.PlayMP3.address_msf;
  242.   s_len             = MacroParam.PlayMP3.length;
  243.   e_msf  = addmsf(s_msf, s_len); //Jeff 20010827
  244.   st_msf = s_msf;
  245. //  mp3ReadLen = 0;
  246.   //InitializeCDPlayback(msf2l(s_msf),(UINT32)s_len,0);
  247.   InitializeCDPlayback(msf2l(Xmsf), (UINT32)s_len, 0);
  248.   VOBU_DIS = 0;
  249. }
  250. */
  251. UINT8 avd_search_header(void)
  252. {
  253.     if (AVD_state == STATE_FINDFIRSTSEQ) return TRUE;
  254.     return FALSE;
  255. }
  256. extern void init_svcd_as(void); // in navuser_if.c
  257. extern BYTE audioNotContinuous; //Jeff 20021125
  258. //
  259. // FUNCTION
  260. // InitializeCDPlayback()
  261. //
  262. void
  263. InitializeCDPlayback(UINT32 lba,UINT32 len,UINT8 id)
  264. {
  265.     macro_function(__FUNCTION__);
  266.     #ifdef ZOOM_FFBF_NOT_ACROSS_TRACK//Jack 20040930
  267.     if(vpp_zoom || adv_search_time)
  268.     {
  269.         vpp_zoom = 0;
  270.         adv_search_time = 0;
  271.         osd_tog_region(REGION1,OSD_OFF);
  272.         //PrintOsdMsg(STR_OS_PLAY,REGION1, 1,0);
  273.     }
  274.     #endif
  275.     if(counter_down==-1)
  276.         counter_down = 5;
  277.     flush_atapi();
  278. // initialize new playback
  279.     audio_only    = 0;
  280.     set_video_stream_id(0xe0);
  281. // initialize cd track
  282.     cd_update_trk_now();
  283. // initialize service program
  284.     setup_decode_service(SERVICE_CD);
  285.     cd_type = GetCurrentFileType();
  286.     do_system = do_system_init = do_system_layer;
  287.     restart_video_engine();
  288.     restart_audio_engine();
  289.     if ((cd_type != CDDVD) && (cd_type_loaded != CDROM)) // Robert 2004/02/05, cdrom disc should not enter.
  290.     {
  291.         //terry,2002/5/1 12:12AM
  292.         //audio/subtitle must be initial,avoid being reset on trk chg
  293.         init_svcd_as();
  294.         // initialize cd msf
  295.         //printf("psd_state:%xn",psd_state);
  296.         if (cd_type_loaded != CDROM)
  297.         {
  298.             if (((psd_state&PSD_PLAY_SEG) != PSD_PLAY_SEG) || (bDiscType == CD_OKO))
  299.             {
  300.                 st_msf = gettrkmsf(cd_trk_now) & 0x00ffffff;
  301.                 if ((psd_state & PSD_PLAY_LIST) && pFsJpeg->List.p.play_time)
  302.                 {
  303.                     e_msf = addmsf(s_msf, getUINT16_bi(&pFsJpeg->List.p.play_time) * 5);
  304.                 }
  305.                 else if ((bDiscType == CD_OKO) && ((!IsPBCOn()) || (psd_state & PSD_PLAY_LIST)))
  306.                 {
  307.                     UINT8 a_o_id = (pFsJpeg->cdrom.oko_trk_end[cd_trk_now] >> 24);
  308.                     e_msf = pFsJpeg->cdrom.oko_trk_end[cd_trk_now] & 0x00ffffff;
  309.                     set_audio_stream_id(0xc0 | (a_o_id >> 4));
  310.                     sup_set_channel(a_o_id & 0xf);
  311.                 }
  312.                 else
  313.                 {
  314.                     e_msf = get_next_trk_msf(cd_trk_now);
  315.                 }
  316.         if (bDiscType == CD_CVD)
  317.                 {
  318.                     //printf("oko id:%dn",oko_menu_id);
  319.     set_audio_stream_id(0xc0 |oko_menu_id);
  320.                     sup_set_channel(oko_menu_id);
  321.                 }
  322. if ((gettrkcna(cd_trk_now) & CNA_DATA) == 0)
  323.                     cd_type = CDDA;
  324.             } //if( ( (psd_state&PSD_PLAY_SEG)!=PSD_PLAY_SEG )||(bDiscType == CD_OKO) )
  325.         } //if(cd_type_loaded!=CDROM)
  326.         if (len == 0) len = msf2l(e_msf) - msf2l(s_msf);
  327.         // setup VCD specific information
  328.         if (cd_type != CDDA)
  329.         {
  330.             unsigned v_id;
  331.             // initialize video stream
  332.             v_id = 0xe0 | (id & 0x03);    // VCD: depends on PSD
  333.             if(v_id >= 0xe3) v_id = 0xe0;
  334.             if(v_id != 0xe0) audio_only = 2;
  335.             set_video_stream_id(v_id);
  336.             //printf("st_msf:%x s_msf:%xn",st_msf,s_msf);
  337.             //printf("2.goto_active:%xn",goto_active);
  338.     if (goto_active == 1)
  339.             {
  340.                 // * search video-sequence header
  341.                 //we must avoid user keyin when searching video seq. header
  342.                 //macro_puts("macro: search seq.hdrn");
  343.                 reset_sequence_state();
  344.                 AVD_ResetMediaStatus();
  345.                 AVD_state = STATE_FINDFIRSTSEQ;
  346.                 start_atapi_intr(msf2l(st_msf),5*75, 16);
  347.                 MediaMainLoop();
  348.                 flush_atapi();
  349.     restart_video_engine();
  350.     restart_audio_engine();
  351.                 //if (!sequence_start)
  352.                 //  macro_puts("macro: seq.hdr NOT foundn");
  353.                 //else
  354.                 //  macro_puts("macro: seq.hdr FOUNDn");
  355.         if (sequence_start)
  356.             goto_active = 0;
  357.             } else if (((psd_state==(PSD_PLAY_LIST|PSD_PLAY_ENTRY)) || adv_search_time<0) && (cd_type_loaded!=CDROM)) {
  358.                 // list, entry or backward playback: force auto-setting
  359.                 goto_active = 1;
  360.             } else if ((last_header.horizontal_size_value)&&(last_header.vertical_size_value)) {
  361.                 // has last-header: use saved-header info.
  362.                 Restore_header();
  363.     } else {
  364.                 // otherwise
  365.                 goto_active = 1;
  366.             }
  367.             //printf("3.goto_active:%xn",goto_active);
  368.             //printf("psd_state:%x goto_active:%xn",psd_state,goto_active);
  369.             if (goto_active)
  370.             {
  371.                 if( (get_size_map(cd_trk_now)==1) || (cd_type_loaded==CDVCD10))
  372.                     setup_vcd_motion_pal();
  373.                 else
  374.                     setup_vcd_motion_ntsc();
  375.                 goto_active=0;
  376.             }
  377.         } //if(cd_type != CDDA)
  378.         //printf("stream_video:%x audio_only:%x psd_state:%xn",stream_video,audio_only,psd_state);
  379.     } //if ((cd_type!=CDDVD)&&(cd_type!=CDROM))
  380.     AVD_ResetMediaStatus();
  381.     source_end = 0;
  382.     if ((play_state != VCD_STATE_PREVIEW) && (play_state != VCD_STATE_9FRAMES))
  383.     {
  384.         avd_play_state();
  385.     }
  386.     else
  387.     {
  388.         avd_preview_state();
  389.     }
  390.     SetIntrMask(INTR_MASK_NORMAL);
  391.     restart_sup();
  392.     timeout_playback    = 0;
  393.     regs0->rtc_31_16    = 0;
  394.     timestamp_key       = 0;    // alan 0425
  395.     set_stc(0);
  396.     set_stc_init();
  397.     P_frame         = 0;    // clear pause
  398.     // navigator-state
  399.     PE_ClearNav();
  400.     sys_cmd = 0;
  401.     if (vpp_zoom<2)
  402.     {
  403.         set_video_aspect();
  404.     }
  405. #ifndef IR_TOOL
  406. printf("cd_type:%xn",cd_type);
  407. #endif
  408.     switch(cd_type)
  409.     {
  410. case CD_DA:
  411. case CDDA:
  412. {
  413. //Jeff 20020527
  414. BYTE bDTS=0;
  415. BYTE preCDsubtype;
  416. int     iRetry=0;
  417. preCDsubtype = cd_subtype; //Jeff 20021206
  418. audio_only = 1;   // terry,2002/4/30 05:32PM ff>=4 mute audio
  419. //init_cdda();        // for mix mode
  420. cd_subtype = CD_DA;       //Jeff 20020415
  421. setup_decode_service(SERVICE_CDDA);
  422. //4-7-23 0:28
  423. AUDIF_Set_Volume(0);//AudioSetVolume(0); //Jeff 20021125
  424.         // 2004/01/17 yltseng, because when we do some action during DTSAC3_check(), this action may be invalid because
  425.         // goto_active is set to 1. So we prevent user input during DTSAC3_check by setting counter_down longer
  426.         counter_down = 10;  
  427. do { //Jeff 20020518
  428. int iCheckType;
  429. audioNotContinuous=5; //Jeff 20021125
  430. goto_active = 1; //avoid display time show error time
  431. start_atapi_intr(msf2l(st_msf),150, 16);//terry,0515,search track start up
  432. iRetry++;
  433. iCheckType = DTSAC3_check();
  434. #ifdef SUPPORT_AC3_CD_DISC //terry,2004/2/17 06:35PM
  435. if (iCheckType==0xac3)
  436. { //Jeff 20040102
  437. //Dolby-CD
  438. cd_subtype = CD_AC3;
  439. AUDIF_Init_AC3CD();//2004AUDDRV init_ac3cd();
  440. setup_SetAC3Config();
  441. if ( setup_IsSet2SPDIF_Bitstream() ) {
  442. AUDIF_Reset_DSP();//2004AUDDRV DSPReset();
  443. }
  444. iRetry = 3;
  445. bDTS=0xf;
  446. } else
  447. #endif
  448. if (iCheckType > 0)
  449. {
  450. cd_subtype = CD_DTS;       //move to here 2003-8-13 0:38
  451. //printf("DTS bitstreamn");
  452. #if !defined(NO_DTS_OUTPUT)||defined(FORCE_NO_DTS_OUTPUT)//nono 4-5-5 13:31
  453. #ifndef DTS_CD_OUT_RAW_A
  454. if ( !setup_IsSet2SPDIF_Bitstream() )//nono 2-7-5 21:38
  455. #endif
  456. {
  457. AUDIF_Init_DTSCD();//2004AUDDRV init_dtscd();
  458. }
  459. #endif//#ifndef NO_DTS_OUTPUT
  460. // cd_subtype = CD_DTS;       //Jeff 20020415
  461. setup_SetDTSCDConfig();
  462. #ifndef DTS_CD_OUT_RAW_A
  463. if ( setup_IsSet2SPDIF_Bitstream() ) { //Jeff 20031230
  464.                     //ycwen 2004/08/31 : if not download PCM again, it would be wrong when "AC3->DTS"
  465.                     AUDIF_Set_CodingMode(AUDIF_CODING_MODE_PCM);//2004AUDDRV audif_set_coding_mode(AUDIF_CODING_MODE_PCM);
  466. AUDIF_Reset_DSP();//2004AUDDRV DSPReset();
  467. }
  468. #endif
  469. iRetry = 3;
  470. bDTS=1;
  471. }
  472. //printf("2.cd_subtype=%xn",cd_subtype);
  473. } while(iRetry < 3);
  474. printf("program:%x source_end:%x AVD_media_status:%x goto_active:%x sys_cmd:%xn",program_end,source_end,AVD_media_status,goto_active,sys_cmd);
  475. if(program_end)
  476. {
  477. //terry,2003/8/24 04:38PM
  478. program_end = 0;
  479. source_end = 0;
  480. goto_active = 0;
  481. sys_cmd = 0;
  482. AVD_ResetMediaStatus();
  483. }
  484. if (bDTS==0) AUDIF_Init_CDDA();//2004AUDDRV init_cdda();
  485. flush_atapi();
  486. goto_active=0;
  487. if (preCDsubtype != cd_subtype) AUDIF_Reset_DSP();//2004AUDDRV DSPReset(); //Jeff 20021206
  488. #ifndef CD_INIT_DNOT_MUTE//4-8-20 12:16
  489. audioNotContinuous=10; //Jeff 20021125
  490. AUDIF_Set_Volume(0);//2004AUDDRV AudioSetVolume(0); //Jeff 20021125
  491. #else   //ycwen : 2004/9/6 : To prevent bf/ff from de-mute
  492.     #ifdef MP3_CD_FF1_BF1_MUTE
  493.         if (adv_search_time != 0)
  494.     #else
  495.         if ((adv_search_time > 2)||(adv_search_time < -2))
  496.     #endif
  497.             AUDIF_Set_Volume(0);//2004AUDDRV AudioSetVolume(0);
  498. #endif
  499. }
  500. break;
  501. #ifdef SUPPORT_MP4
  502. case CDROM_MP4:
  503. do_system = do_system_init = do_avi_movi_parser;
  504. restart_mp4_video_engine();
  505. #if defined(SUPPORT_CARD_STORAGE)||defined(SUPPORT_USB)||defined(SPHE8202_CARD_STORAGE)
  506. if (media_type == MEDIA_CARD)
  507. setup_decode_service(SERVICE_CARDFILE);
  508. #endif
  509. break;
  510. #endif
  511. #ifdef SUPPORT_WMA
  512. case CDROM_WMA:
  513. do_system = do_system_init = doASFHeader;
  514. audio_only = 1;
  515. #if defined(SUPPORT_CARD_STORAGE)||defined(SUPPORT_USB)||defined(SPHE8202_CARD_STORAGE)
  516. if (media_type == MEDIA_CARD)
  517. setup_decode_service(SERVICE_CARDFILE);
  518. #endif
  519. AUDIF_Init_WMA();//2004AUDDRV InitWma();
  520. //ycwen 2004/10/26 To prevent wma FF/BF from de-mute when changing track
  521.     #ifdef MP3_CD_FF1_BF1_MUTE
  522.         if (adv_search_time != 0)
  523.     #else
  524.         if ((adv_search_time > 2)||(adv_search_time < -2))
  525.     #endif
  526.             AUDIF_Set_Volume(0);
  527. break;
  528. #endif
  529. #ifdef SUPPORT_WAV
  530.     case CDROM_WAV:
  531.         printf("SUPPORT_WAV in macro.cn");
  532.         do_system = do_system_init = do_audio_cdda;
  533.         audio_only = 1; 
  534. #if defined(SUPPORT_CARD_STORAGE)||defined(SUPPORT_USB)||defined(SPHE8202_CARD_STORAGE)
  535.             if (media_type == MEDIA_CARD)
  536. setup_decode_service(SERVICE_CARDFILE);
  537. #endif
  538. AUDIF_Init_CDDA();
  539.         #ifdef MP3_CD_FF1_BF1_MUTE
  540.             if (adv_search_time != 0)
  541.         #else
  542.             if ((adv_search_time > 2)||(adv_search_time < -2))
  543.         #endif
  544.                 AUDIF_Set_Volume(0);
  545.     break;
  546. #endif
  547. #ifdef SUPPORT_AAC
  548. case CDROM_AAC:
  549. do_system = do_system_init = do_aac;
  550. audio_only = 1;
  551. #if defined(SUPPORT_CARD_STORAGE)||defined(SUPPORT_USB)||defined(SPHE8202_CARD_STORAGE)
  552. if (media_type==MEDIA_CARD)
  553. setup_decode_service(SERVICE_CARDFILE);
  554. #endif
  555. AUDIF_Init_AAC();
  556. break;
  557. #endif
  558. case CDROM:
  559. do_system = do_system_init = do_mp3;
  560. audio_only = 1; //Jeff 20011116
  561. #ifdef REMAIN_TIME  // 2004/08/10 yltseng
  562. Mp3_kbitrate = Mp3_kbitrate_PreCalc = PreParseMP3BitRate( VBR_MP3_CENTER_N_LBA, 20, lba, len );
  563. #endif
  564. #if defined(SUPPORT_CARD_STORAGE)||defined(SUPPORT_USB)||defined(SPHE8202_CARD_STORAGE)
  565. if (media_type==MEDIA_CARD)
  566. setup_decode_service(SERVICE_CARDFILE);
  567. #endif
  568.     // 2004/08/11 yltseng
  569.         AUDIF_Init_MP3();//2004AUDDRV init_mp3();
  570.         break;
  571.     default:
  572. #ifdef SUPPORT_PRECALCULATE_VIDEOBITRATE_FOR_FILE_MODE
  573.     // 2004/08/11 yltseng, initialization for pre-calculate video bitrate
  574.         Mp3_kbitrate_PreCalc = 0;
  575. #endif
  576. #ifdef SUPPORT_FILE_SYSTEM_MODE
  577. #if defined(SUPPORT_CARD_STORAGE)||defined(SUPPORT_USB)||defined(SPHE8202_CARD_STORAGE)
  578. if ((cd_type_loaded == CDROM) || (cd_type == CDROM_MPG)) // Robert 021127
  579. {
  580. if (media_type == MEDIA_CARD)
  581. setup_decode_service(SERVICE_CARDFILE);
  582. }
  583. #endif
  584. #endif
  585. #ifdef SUPPORT_MIDI
  586. #ifdef SUPPORT_MIDI_MENU_SEL
  587. if ( gIsMidiSelMenu||Is_MIDI_STATE() )
  588. {
  589. } else
  590. #else
  591. if ( Is_MIDI_STATE() )
  592. {
  593. } else
  594. #endif
  595. #endif
  596.     #ifdef DVD_SERVO
  597. if ((cd_type_loaded == CDVCD10) && (is_svo_dvd()))
  598. #else
  599. if (cd_type_loaded == CDVCD10)
  600. #endif
  601. {
  602. AUDIF_Set_CodingMode(AUDIF_CODING_MODE_AC3);//2004AUDDRV audif_set_coding_mode(AUDIF_CODING_MODE_AC3); // robert 2004/02/19
  603. }
  604. else
  605. AUDIF_Init_MP3();//2004AUDDRV init_mp3();//for mix-mode
  606.         break;
  607. case CDDVD:
  608. break;
  609.     } //switch(cd_type)
  610.     if(IsPBCOn() && (rep_ab_mode == REPEAT_FIND_B))
  611.     {
  612.         s_msf=repStart;
  613.         lba=msf2l(s_msf);
  614.     }
  615.     {//terry, reduce code ,0528
  616.         int bat;
  617.         #if DISC_SYSTEM!=DISC_SYSTEM_ATAPI
  618.             ss_msf = s_msf;
  619.             printf("goto msf %06xn", s_msf);
  620.             //if(cd_type_loaded==CDDVD)
  621.             //bat=128;
  622.             //else
  623.             bat=32;
  624.         #else
  625.             if ((cd_type == CDDVD) || (cd_type == CDDA) || (cd_type == CD_DA))
  626.             {
  627. #ifdef DVD_AUDIO
  628.                 bat=32;    //terry,2004/2/26 08:08PM
  629. #else
  630.                 bat=16;    //terry,2004/2/26 08:08PM
  631. #endif
  632.             }
  633.             else
  634.                 bat=4;
  635.         #endif
  636. #if defined (SUPPORT_WMA) || defined (SUPPORT_MP4)
  637.         if (GetCurrentFileType() == CDROM_WMA)
  638.             bat = 1;
  639. else if (GetCurrentFileType() == CDROM_MP4)
  640. bat = 32;
  641. #endif
  642.         #ifndef IR_TOOL
  643.         printf("initplayback,lba:%x s_msf:%x e_msf:%x len:%dn",lba,s_msf,e_msf,len);
  644.         #endif
  645.         #if defined(SUPPORT_CARD_STORAGE)||defined(SUPPORT_USB)||defined(SPHE8202_CARD_STORAGE)
  646.          if (media_type==MEDIA_CARD)  //wthsin, 2004/7/7 02:34pm
  647.          {
  648.            if(adv_search_time!=0)  adv_search_time=0;
  649.          }
  650.         #endif
  651.         start_atapi_intr(lba,len, bat);
  652.         if(cd_type_loaded!=CDDVD)
  653.         {
  654.             get_cdkit_time(CD_TRK_CHANGED);
  655.             if(adv_search_time>=0) p_msf=0;//terry,2004/1/19 03:22PM,for bw ,cross track ,time error
  656.             else p_msf=e_msf;
  657.         }
  658.     }
  659. }
  660. /*
  661. ** Play()
  662. **
  663. **
  664. */
  665. void    MacroPlay()
  666. {
  667.   timeout_playback              = 0;
  668. }
  669. void    MacroFindFirstNav()
  670. {
  671.     flush_atapi();
  672.     start_atapi_intr(MacroParam.FindFirstNav.lba, MacroParam.FindFirstNav.len, 16);
  673.     setup_decode_service(SERVICE_CD);
  674.     restart_video_engine();
  675.     set_video_stream_id(0xe0);
  676.     set_audio_stream_id(0xc0);
  677.     SetIntrMask(INTR_MASK_NORMAL);
  678.     //SetIntrFlag(0);
  679.     restart_video_engine();
  680.     restart_sup();
  681.     timeout_playback    = 0;
  682.     regs0->rtc_31_16    = 0;
  683.     AVD_state           = STATE_FINDFIRSTNAV;
  684.     AVD_ResetMediaStatus();
  685. }
  686. //
  687. // FUNCTION
  688. // MacroPlayLBA
  689. //
  690. // DESCRIPTION
  691. // playback from a specific LBA location.
  692. //
  693. // PARAMETER
  694. // MacroParam.PlayLBA.lba : LBA start address
  695. //
  696. void
  697. MacroPlayLBA()
  698. {
  699.     UINT8 id=0;
  700.     macro_function(__FUNCTION__);
  701.     if( (bDiscType == CD_OKO)&&(psd_state==(PSD_SEL_LIST|PSD_PLAY_SEG)) )
  702.     {
  703.         id=2;
  704.         cd_trk_now=1;
  705.     }
  706.     InitializeCDPlayback(MacroParam.PlayLBA.lba,MacroParam.PlayLBA.len,id);
  707. #ifdef MACRO_DBG
  708.     printf("playlba, msf:%x len:%d lba:%d stream_video:%xn",
  709.           s_msf,(msf2l(e_msf)-msf2l(s_msf)+5),msf2l(s_msf),stream_video);
  710. #endif
  711. }
  712. // Cyue: for VOD
  713. #ifdef SUPPORT_STREAM_BUFFER
  714. //======================================================
  715. //void  MacroPlayStream()
  716. //      Initializing system to play stream
  717. //INPUT  ARGUMENTS: NONE
  718. //OUTPUT ARGUMENTS: NONE;
  719. //RETURN: NONE
  720. //
  721. // cyue: 2002-08-08 08:35AM Add to Standard code
  722. //======================================================
  723. void    MacroPlayStream()
  724. {
  725.   stream_init(); //init streambuffer
  726.   // initialize new playback
  727.   audio_only    = 0;
  728.   set_video_stream_id(0xe0);
  729.   set_audio_stream_id(0xc0);
  730.   // initialize service program
  731.   setup_decode_service(SERVICE_STREAMING);
  732.   cd_type       = 0;
  733.   // initialize video stream
  734.   set_video_stream_id(0xe0);
  735.   AVD_ResetMediaStatus();
  736.   avd_play_state();
  737.   restart_video_engine();
  738.   restart_audio_engine();
  739.   SetIntrMask(INTR_MASK_NORMAL);
  740.   restart_sup();
  741.   timeout_playback              = 0;
  742.   regs0->rtc_31_16              = 0;
  743.   timestamp_key                 = 0;    // alan 0425
  744.   set_stc(0);
  745.   set_stc_init();
  746.   P_frame           = 0;    // clear pause
  747.   // navigator-state
  748.   PE_ClearNav();
  749.   sys_cmd=0;
  750. }
  751. #endif //#ifdef SUPPORT_STREAM_BUFFER
  752. /*
  753. ** PlayTrack()
  754. */
  755. void    MacroPlayTrack()
  756. {
  757.   int item;
  758.   macro_function(__FUNCTION__);
  759.   item      = MacroParam.PlayTrack.track;
  760.   s_msf     = gettrkmsf(item)&0x00ffffff;
  761. //  goto_active = 0x0f;
  762.   /*if ((gettrkcna(item)&CNA_DATA)==0)
  763.     cd_type=CDDA;
  764.   else
  765.     cd_type=cd_type_loaded;*/
  766.   InitializeCDPlayback(msf2l(s_msf),0,0);
  767.   #ifdef MACRO_DBG
  768.   printf("playtrk, msf:%x emsf:%d leadout:%x lba:%d stream_video:%xn",s_msf,e_msf,gettrkmsf_leadout(),msf2l(s_msf),stream_video);
  769.   #endif
  770. }
  771. /*
  772. ** PlayEntry()
  773. */
  774. void    MacroPlayEntry()
  775. {
  776.   int item;
  777.   item  = MacroParam.PlayEntry.entry;
  778.   s_msf = get_entry(item);
  779.   //printf("item:%x msf:%06x lba:%06xn",item,s_msf,msf2l(s_msf));
  780.   s_msf             = MSF(bcd2bin(msf_mm(s_msf)), bcd2bin(msf_ss(s_msf)), bcd2bin(msf_ff(s_msf)));
  781.   //cd_type=cd_type_loaded;
  782.   InitializeCDPlayback(msf2l(s_msf),0,0);
  783.   #ifdef MACRO_DBG
  784.   printf("playentry, msf:%x len:%d lba:%d n",s_msf,msf2l(e_msf)-msf2l(s_msf),msf2l(s_msf));
  785.   #endif
  786. }
  787. /*
  788. ** PlaySegment()
  789. */
  790. void    MacroPlaySegment(void)
  791. {
  792.   int   item;
  793.   BYTE  seg_code;
  794.   item              = MacroParam.PlaySegment.segment;
  795.   seg_code          = get_segment(item);
  796.   #ifdef MACRO_DBG
  797.   printf("SEG CODE=%xn",seg_code);
  798.   #endif
  799.   #ifdef MACRO_DBG
  800.   printf("SEG CODE[4:2]=%xn",(seg_code>>2) & 0x07);
  801.   #endif
  802.   s_msf  = get_segment_msf(item)&0x00ffffff;
  803.   SegLen = get_segment_length(item);
  804.   e_msf  = addmsf_ss(s_msf,SegLen*2);
  805.   st_msf = s_msf;
  806.   //cd_type=cd_type_loaded;
  807.   InitializeCDPlayback(msf2l(s_msf), 0,(seg_code>>2) & 0x07);
  808. #if 0
  809.   /*
  810.   ** SEG_CODE [1:0]
  811.   **
  812.   ** 00 : no-audio
  813.   ** 01 : mono audio
  814.   ** 10 : stereo audio
  815.   ** 11 : 2-channel audio
  816.   */
  817.   if( (seg_code&0x03)==0 )
  818.       vcd_state       = 0;
  819.   else
  820.       vcd_state       = VCD_AUDIO;
  821.   /*
  822.   ** SEG_CODE [4:2]
  823.   **
  824.   ** 000 : no video
  825.   ** 001 : NSTC normal res. still
  826.   ** 010 : NTSC high res. still
  827.   ** 011 : NTSC normal res. motion
  828.   ** 100 : reserved
  829.   ** 101 : PAL normal res. still
  830.   ** 110 : PAL high res. still
  831.   ** 111 : PAL normal res. motion
  832.   */
  833.   id=(seg_code>>2) & 0x07;
  834.   switch (id)
  835.   {
  836.   case 1:   /* NTSC normal-res still        */
  837.   case 5:   /*  PAL normal-res still        */
  838.   case 2:       /* NTSC high-res still          */
  839.   case 6:       /*  PAL high-res still          */
  840.     vcd_state                 |= VCD_VIDEO;
  841.     stream_video              = 0xe0| (id&0x03) ;
  842.     break;
  843.   case 3:   /* NTSC normal-res motion       */
  844.   case 7:       /*  PAL normal-res motion       */
  845.     vcd_state                 |= VCD_VIDEO;
  846.     stream_video              = 0xe0;
  847.     break;
  848.   }
  849.   #ifdef MACRO_DBG
  850.    printf("playseg, msf:%x len:%d lba:%d stream_video:%xn",s_msf,(msf2l(e_msf)-msf2l(s_msf)+5),msf2l(s_msf),stream_video);
  851.   #endif
  852. #endif
  853. }
  854. /*
  855. ** PlayOneSlide
  856. **
  857. ** Playback exactly one slide and pause.
  858. */
  859. //void    MacroPlayOneSlide()
  860. //{
  861. //}
  862. /*
  863. ** PlayRomSlide()
  864. **
  865. ** Playback video-elementary bitstream embedded in ROM (address space).
  866. **
  867. */
  868. void    MacroPlayRomSlide()
  869. {
  870.     macro_puts("play_rom_sliden");
  871.     // reset navigator-state
  872.     PE_ClearNav();
  873.     //
  874.     // setup video source and server.
  875.     romimage_ptr                  = MacroParam.PlayRomSlide.rom_addr;
  876.     setup_decode_service(SERVICE_ROMV);
  877.     SetIntrMask(INTR_MASK_NORMAL_ROM);
  878.     restart_video_engine();
  879.     restart_sup();
  880.     timeout_playback    = 0;
  881.     regs0->rtc_31_16    = 0;
  882.     set_stc(0);
  883.     set_stc_init();
  884.     save_srn_start_t=0;
  885.     macro_puts("prs_statusn");
  886.     // avd-state
  887.     avd_playoneromslide_state();
  888.     AVD_ResetMediaStatus();
  889.     // parser-state
  890.     P_frame           = 0;
  891.     //
  892.     macro_puts("prs_aspectn");
  893.     set_video_aspect();
  894.     //
  895.     macro_puts("prs_stopcdn");
  896.     if (!CDOpened()) CDSetStop();
  897.     macro_puts("prs_exitn");
  898. }
  899. //void    MacroPlaySector()
  900. //{
  901. //}
  902. //void    MacroPlaySlides()
  903. //{
  904. //}
  905. //void    MacroPreview()
  906. //{
  907. //}
  908. //void    MacroPreviewSector()
  909. //{
  910. //}
  911. /*
  912. ** ReadCD
  913. **
  914. */
  915. //void    MacroReadCD()
  916. //{
  917. //}
  918. //void    MacroReadSeqheader()
  919. //{
  920. //}
  921. /*
  922. ** SelectStream()
  923. **
  924. ** Select next incoming stream
  925. **
  926. ** Typical values:
  927. **
  928. **  0xe0    Video motion picture
  929. **  0xe1    Video low-res still picture
  930. **  0xe2    Video hi-res still picture
  931. **  0xc0    Audio (main)
  932. **  0xc1    Audio (alternate)
  933. **
  934. **  0xff    Auto select next incoming stream.
  935. **
  936. */
  937. #if 0
  938. void    MacroSelectStream()
  939. {
  940.   set_video_stream_id(MacroParam.SelectStream.video);
  941.   set_audio_stream_id(MacroParam.SelectStream.audio);
  942. }
  943. #endif