PGC.H
上传用户:super_houu
上传日期:2008-09-21
资源大小:4099k
文件大小:7k
源码类别:

DVD

开发平台:

Others

  1. /****************************************************************************************
  2.  *  Copyright (c) 2002 ZORAN Corporation, All Rights Reserved
  3.  *  THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF ZORAN CORPORATION
  4.  *
  5.  *  File: $Workfile: PGC.H $             
  6.  *
  7.  * Description: 
  8.  * ============
  9.  * 
  10.  * 
  11.  * Log:
  12.  * ====
  13.  * $Revision: 5 $
  14.  * Last Modified by $Author: Angieh $ at $Modtime: 04-03-31 20:18 $ 
  15.  ****************************************************************************************
  16.  * Updates:
  17.  ****************************************************************************************
  18.  * $Log: /I76/I76_Common/I76_Reference/Playcore/Nav_DVD/Header/PGC.H $
  19.  * 
  20.  * 5     04-03-31 20:26 Angieh
  21.  * Add support for index and page search.
  22.  * 
  23.  * 4     12/30/03 11:29a Leonh
  24.  * Angieh:Change for DVD AUDIO navigator header.
  25.  * 
  26.  * 8     11/12/03 12:50p Leonh
  27.  * clean up the code
  28.  * 
  29.  * 7     11/11/03 11:36a Leonh
  30.  * Angieh:Add DVD Audio compile switch.
  31.  * 
  32.  * 6     10/20/03 11:46a Leslie
  33.  * check the variable type and change the dvda rtpb schedule way as the
  34.  * same with DVD Video
  35.  * 
  36.  * 5     10/14/03 11:20a Leslie
  37.  * add the prototype
  38.  * 
  39.  * 4     8/20/03 2:56p Leonh
  40.  * Merge dvd audio code with the latest nav_dvd code with reference
  41.  * 2     03-05-13 16:46 Leonh
  42.  * merge pgc_construct()
  43.  * 
  44.  * 1     03-04-28 11:15 Fwang
  45.  * Initial for DVDA
  46.  * 
  47.  * 2     23/04/02 9:34 Nirm
  48.  * - Added dependency in "Config.h".
  49.  * 
  50.  * 1     2/17/02 12:12 Rinata
  51.  * 
  52.  * 1     2/17/02 11:38 Rinata
  53.  * 
  54.  * 2     9/01/02 16:40 Nirm
  55.  * Corrected Include-Paths.
  56.  ****************************************************************************************/
  57. #include "Config.h" // Global Configuration - do not remove!
  58. #ifndef __PGC_H
  59. #define __PGC_H
  60. #include "PlaycoreNav_DVDHeaderaction.h"
  61. #include "PlaycoreNav_DVDHeaderdvda_ats.h"
  62. //## Class: C_PGC
  63. // Implements the DVD Program Chain play-back control (DVD
  64. // 4.3).
  65. //
  66. // Implements a simple state machine which decodes the PGC
  67. // information into a sequence of action items for the
  68. // caller. It handles:
  69. // - stream selection
  70. // - random/shuffle/loop play-back
  71. // - program selection
  72. // - cell selection (including angle block processing based
  73. // on SPRM(3))
  74. // - command selection
  75. // - execution of intra-PGC commands (GoTo group, LinkCN,
  76. // etc)
  77. // Action items are one of the:
  78. // - select stream
  79. // - execute command
  80. // - play cell
  81. // - pause
  82. // - terminate
  83. //
  84. // It also provides direct access to PGC info through the
  85. // public member classes.
  86. //## Category: DVD Manager::DVD Control; Global
  87. //## Subsystem: CCE_NAV
  88. //## Persistence: Transient
  89. //## Cardinality/Multiplicity: n
  90. void pgc_construct( S_FPOS *address, int PGCNumber,PgcTypes  type );
  91. void pgc_delete( void );
  92.     // Initiates the play-back process, starting from the
  93.     // specified program (default is the entry program) and
  94.     // optional conditions, like PRE-command skip, etc.
  95. BOOL pgc_Start(int PGN, int mode, DWORD VOBU);
  96.     // Retrieves the next action to be performed or 0 if the
  97.     // end of the PGC was reached.
  98. BOOL pgc_Get_Next_Action(S_Action *action);
  99. BOOL pgc_Is_NEXTPG_Available( void );   // Returns TRUE if can goto NEXTPG FALSE otherwise
  100. BOOL pgc_Is_PREVPG_Available( void );   // Returns TRUE if can goto PREVPG FALSE otherwise
  101.     // Attempts to execute the specified Navigation Command.
  102.     // Returns TRUE if the command was completed locally 
  103.     //  (in which case action will be set to "nop")
  104.     //  or if it's deferred for the caller and FALSE if the
  105.     //  command is invalid.
  106.     // Example of commands handled localy: GoTo group, LinkCN.
  107. BOOL pgc_Execute_Action( S_Action *action );
  108. BOOL pgc_Final_Still( void );
  109.     
  110. void pgc_SetScanSpeed( int speed );
  111. int pgc_Angle_Change( void );
  112. int pgc_Select_Audio( int actual_strnbr, int ini_lcd, int ini_lcd_ext );
  113. int pgc_Select_SubPicture( int actual_strnbr, int ini_lcd, int ini_lcd_ext );
  114. void pgc_Select_Audio1( void );
  115. void pgc_Select_SubPicture1( void );
  116. BOOL pgc_AudioAttributes( int astn, AUDIO_ATTRIBUTES *spec_code );
  117. BOOL pgc_SubpictureLanguage( int spn,  DWORD *spec_code, BYTE *sp_type );
  118.     // get elapsed time since the start of PGC;
  119. void pgc_ElapsedTime( DWORD,  DWORD, DWORD, DVD_BOOKMARK* );
  120.     // FVOBU_SA for specified cell
  121. DWORD pgc_CellEntryVOBU( int cell );
  122.     // reset time notification data
  123.     // (re)set PG playback order
  124. void pgc_Playback_Order( void );
  125. int pgc_Is_GOUP_Available( void );
  126. BOOL pgc_Execute_GoTo( void );
  127. BOOL pgc_Execute_LinkPGN ( int    );
  128. BOOL pgc_Execute_LinkCN( int    );
  129. BOOL pgc_Execute_LinkSIns( CmdOpt );
  130. BOOL pgc_Execute_ExternalLink( CmdOpt, int );
  131. int  pgc_Cell_Select( void );
  132. BOOL pgc_Seamless_Connectivity( void ); // see 3.3.12.3
  133. #ifdef NO_SCPAD
  134. #define pgc_Get_UOP_CTL() ((DWORD)pgc_gi_Get_UOP_CTL( (&gns.dvd.pgc.info_st) ))
  135. #define pgc_Get_SP_Palette( pal ) { pgc_gi_Get_SP_Palette( &gns.dvd.pgc.info_st, pal );  }
  136. #else
  137. #define pgc_Get_UOP_CTL() ((DWORD)pgc_gi_Get_UOP_CTL())
  138. #define pgc_Get_SP_Palette( pal ) { pgc_gi_Get_SP_Palette( pal );  }
  139. #endif
  140. #define pgc_TimeNotifyReset() { gns.dvd.pgc.decoded_c_pbi.LVOBU_EA = gns.dvd.pgc.decoded_c_pbi.FVOBU_SA = 0; gns.dvd.pgc.e_time = 0; gns.dvd.pgc.e_program_index = -1; }
  141. #define pgc_Stop(){ gns.dvd.pgc.next_state = stop; }
  142. #define pgc_clear_cell_time() {gns.dvd.pgc.e_time = 0; gns.dvd.pgc.e_cell_time = 0;}
  143. #ifdef NO_SCPAD
  144. // functions for DVD audio
  145. /*  ATS_PGI  members  fetching routines  */
  146. BOOL pgc_pgmap_Get_FAC_S_PTM(S_STORAGE *st, int program,DWORD *fac_s_ptm);
  147. BOOL pgc_pgmap_Get_ATS_PG_PB_TM(S_STORAGE *st, int program,DWORD *ats_pg_pb_tm,unsigned int *ats_pg_pa_tm);
  148. #ifdef DVD_AUDIO_SUPPORT
  149. /*  ATS_ASV_PBI members  fetching routines  */ 
  150. BOOL pgc_GetAsvSRP(S_STORAGE *st, int program,ATS_PG_ASV_PBI_SRP *asv_pbi_srp);
  151. BOOL pgc_GetAsvDLIST(S_STORAGE *st,int start_offset,int dlist_num,ATS_PG_ASV_DLIST *asv_pbi_dlist);
  152. #endif
  153. #else
  154. // functions for DVD audio
  155. /*  ATS_PGI  members  fetching routines  */
  156. BOOL pgc_pgmap_Get_FAC_S_PTM(S_SC_STORAGE *st, int program,DWORD *fac_s_ptm);
  157. BOOL pgc_pgmap_Get_ATS_PG_PB_TM(S_SC_STORAGE *st, int program,DWORD *ats_pg_pb_tm,DWORD *ats_pg_pa_tm);
  158. #ifdef DVD_AUDIO_SUPPORT
  159. /*  ATS_ASV_PBI members  fetching routines  */ 
  160. BOOL pgc_GetAsvSRP(S_SC_STORAGE *st, int program,ATS_PG_ASV_PBI_SRP *asv_pbi_srp);
  161. BOOL pgc_GetAsvDLIST(S_SC_STORAGE *st,int start_offset,int dlist_num,ATS_PG_ASV_DLIST *asv_pbi_dlist);
  162. #ifdef DVD_AUDIO_INDEX
  163. WORD pgc_pg_Get_Index_num(WORD lastCell);
  164. #endif
  165. #ifdef DVD_AUDIO_TIME_SEARCH_IN_TRACK
  166. DWORD pgc_pgmap_Get_PG_TM(void);
  167. #endif
  168. #endif
  169. BOOL pgc_Is_TimeUnit_Valid(int PGCN );
  170. #endif
  171. #endif