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

DVD

开发平台:

Others

  1. /*******************************************************************
  2.  *  AuxSubtitlesCommonPrivate.h
  3.  *******************************************************************
  4.  *  Description:
  5.  *  ============
  6.  *  Private definitions for auxSubtitles.c and auxSubtitlesFormats.c
  7.  *******************************************************************
  8.  *
  9.  *
  10.  ******************************************************************/
  11. #include "Config.h" // Global Configuration - do not remove!
  12. #ifdef USE_AUX_SUBTITLES
  13. #ifndef __AUXSUBTITLESCOMMONPRIVATE_H_
  14. #define __AUXSUBTITLESCOMMONPRIVATE_H_
  15. #include "PlaycoreNav_ClipsClip_Impl.h"
  16. #define STORAGE_INTERFACE_BUFFER_SIZE 16 // size in words
  17. #define LAST_SUBTITLE_MARKER 0xffffffffUL
  18. #define SUBTITLES_SCLK_MULTIPLIER 90000UL
  19. #define SUBTITLES_SCLK_MULTIPLIER_MIL 90
  20. // Robin_0527_2004_A
  21. #if defined(SDRAM_2X16MBITS) && !defined(NEW_2X16M_MAPPING)
  22. #define SUBTITLES_MEMORY_SIZE 73728UL // 72KB
  23. #else
  24. #define SUBTITLES_MEMORY_SIZE 204800UL //200KB
  25. #endif
  26. //#define SUBTITLES_MEMORY_ADDRESS 0x90400UL
  27. //#define AUX_SUBTITLE_EARLY_DISPLAY_OFFSET 80000UL
  28. #define AUX_SUBTITLE_EARLY_DISPLAY_OFFSET 400UL
  29. #define SUBTITLE_INDEX_ENTRIES 8
  30. #ifdef SUPPORT_SAMI_SUBTITLE
  31. #define SF_NUMBER_OF_FORMATS (8+1)
  32. #else
  33. #define SF_NUMBER_OF_FORMATS (7+1)
  34. #endif
  35. #define SF_MICRODVD_PROBE_LIMIT 50
  36. #define FORMAT_NEW_LINE 'n'
  37. #define FRAME_TO_TIME(frame, scale, rate) ((((100000UL*(scale))/(rate))*(frame))/(100UL)) // Robin_0531_2004_A
  38. // typedefs
  39. // ======================================================
  40. // Commented references to this enum are throughout the AuxSubtitles code. It's not really necessary
  41. // when opening a subtitle file for use, since passing the parse function is enough. If anyone wants
  42. // to determine exact subtitle format type without using the file, uncomment these references.
  43. /* typedef enum { SF_MICRODVD, SF_SUBRIP, SF_SAMI, SF_SUBVIEWER1, SF_SUBVIEWER2, SF_UNKNOWN } SubtitlesFormatID; */
  44. /////////////////////////////////////////////////////////////////////////////////////////////
  45. // Function Type : SubtitleProbingFuncPtr
  46. // Purpose : Check if the beginning of a file is compatible with a specific format
  47. // Input Parameters : dwSubtitlesFileAddress - location of the file on disc
  48. //   dwSubtitlesFileSize  -  file size
  49. // Return type : TRUE if the file's beginning looks compatible, FALSE otherwise or on error.
  50. // Description : Functions of this type should be implemented for any subtitles format which
  51. //   uses filename extension that other formats also use. The function will
  52. //   scan a small section of the file (mostly its beginning) and attempt
  53. //   to find tokens that distinguish this format from the other formats that
  54. //   use the same extension.
  55. //   Any impelementation should consider the other recongnized types and avoid
  56. //   using identifying marks which the other formats use. When adding a new
  57. //   format it might be necessary to change or implement the probing functions
  58. //   for the existing formats, if there's a risk of confusing between the formats.
  59. /////////////////////////////////////////////////////////////////////////////////////////////
  60. typedef BOOL (*SubtitleProbingFuncPtr)(DWORD dwSubtitlesFileAddress,  DWORD dwSubtitlesFileSize);
  61. /////////////////////////////////////////////////////////////////////////////////////////////
  62. // Function Type : SubtitleParsingFuncPtr
  63. // Purpose : Parse the subtitle file according to the specific format, and store its
  64. //   contents using the proprietary format.
  65. // Input Parameters : dwSubtitlesFileAddress - location of the file on disc
  66. //   dwSubtitlesFileSize  -  file size
  67. //   dwScale, dwRate - dwScale/dwRate is the number of seconds
  68. // per video frame in the associated clip
  69. // Return type : TRUE if parsing was successful, FALSE on error.
  70. // Description : A function of this type must be implemented for every subtitle format.
  71. //   The function will read the file, extract subtitles test, timing information,
  72. //   and possibly language information and formatting information.
  73. //   It will then store this data for use during playback, using only the
  74. //   interface functions available in this file.
  75. /////////////////////////////////////////////////////////////////////////////////////////////
  76. typedef BOOL (*SubtitleParsingFuncPtr)(DWORD dwSubtitlesFileAddress, DWORD dwSubtitlesFileSize ,
  77.    DWORD dwScale, DWORD dwRate);
  78. typedef struct SubtitleFormatAttrTAG {
  79. /* SubtitlesFormatID sfFormatID; */
  80. // Robin_1003_2004_E
  81. // LPCWSTR *aFormatValidExtensions;
  82. SubtitleProbingFuncPtr  pfProbe;
  83. SubtitleParsingFuncPtr  pfParse;
  84. } SubtitleFormatAttr;
  85. typedef struct SubtitleStorageInterfaceTAG {
  86. DWORD dwCurrentStorageOffset;
  87. BYTE baBuffer[STORAGE_INTERFACE_BUFFER_SIZE];
  88. WORD wBufferPos;
  89. #ifdef _DEBUG
  90. DWORD dwByteCount;
  91. DWORD dwEntryCount;
  92. WORD  wMaxEntryLength;
  93. WORD  wCurrentEntryLength;
  94. WORD  wCurrentLineLength;
  95. WORD  wMaxLineLength;
  96. #endif // _DEBUG
  97. } SubtitleStorageInterface;
  98. typedef struct SubtitleStorageIndexEntryTAG {
  99. DWORD dwStartTime;
  100.    DWORD dwAddress;
  101. } SubtitleStorageIndexEntry;
  102. typedef struct SubtitleStorageIndexTAG {
  103. SubtitleStorageIndexEntry entry[SUBTITLE_INDEX_ENTRIES];
  104.    WORD wSubtitlesModulu;
  105.    WORD wInterval;
  106.    BYTE bIndexPosition;
  107. }  SubtitleStorageIndex;
  108. // externals
  109. extern CONST  SubtitleFormatAttr availableSubtitleFormats[SF_NUMBER_OF_FORMATS];
  110. extern  SubtitleStorageInterface* g_pSubtitleStorage;
  111. //*******************************************************************************************
  112. //  Subtitle storage interface functions
  113. //*******************************************************************************************
  114. /////////////////////////////////////////////////////////////////////////////////////////////
  115. // Function Name : subtitleStorageInitWriting
  116. // Purpose : Initializes the interface to the subtitles storage
  117. // Return type : TRUE on success, FALSE on error
  118. // Description :
  119. /////////////////////////////////////////////////////////////////////////////////////////////
  120. void subtitleStorageInitWriting(void);
  121. /////////////////////////////////////////////////////////////////////////////////////////////
  122. // Function Name : subtitleStorageMarkLastEntry
  123. // Purpose : to be used after the last subtitle was parsed.
  124. // Return type : TRUE - on success. FALSE when out of subtitle storage memory
  125. // Description : writes LAST_SUBTITLE_MARKER to the next position in the subtitle
  126. //    storage.
  127. /////////////////////////////////////////////////////////////////////////////////////////////
  128. BOOL subtitleStorageMarkLastEntry(void);
  129. /////////////////////////////////////////////////////////////////////////////////////////////
  130. // Function Name : subtitleStorageStartEntry
  131. // Purpose : Opens a new subtitle entry
  132. // Input Parameters : dwStartSCLK - Display starting time (SCLK)
  133. // Return type : TRUE - on success. FALSE when out of subtitle storage memory
  134. // Description : writes the SCLK DWORD, followed by a null byte
  135. /////////////////////////////////////////////////////////////////////////////////////////////
  136. BOOL subtitleStorageStartEntry(DWORD dwStartSCLK);
  137. /////////////////////////////////////////////////////////////////////////////////////////////
  138. // Function Name : subtitleStorageEndEntry
  139. // Purpose : Closes a subtitle entry
  140. // Input Parameters : dwEndSCLK - Display starting time (SCLK)
  141. // Return type : TRUE - on success. FALSE when out of subtitle storage memory
  142. // Description : writes a null byte, followed by the SCLK DWORD.
  143. /////////////////////////////////////////////////////////////////////////////////////////////
  144. BOOL subtitleStorageEndEntry(DWORD dwEndSCLK);
  145. /////////////////////////////////////////////////////////////////////////////////////////////
  146. // Function Name : subtitleStorageWriteByte
  147. // Purpose : Writes a byte to the subtitle storage memory
  148. // Input Parameters : b       - the byte to be stored
  149. // Return type : TRUE - on success. FALSE when out of subtitle storage memory
  150. // Description : writes the byte to the internal buffer. when full - writes the buffer
  151. //                  to the subtitle storage memory
  152. /////////////////////////////////////////////////////////////////////////////////////////////
  153. BOOL subtitleStorageWriteByte(BYTE b);
  154. /////////////////////////////////////////////////////////////////////////////////////////////
  155. // Function Name : subtitleStorageWriteDWORD
  156. // Purpose : Writes a double word to the subtitle storage memory
  157. // Input Parameters : dw       - the dword to be stored
  158. // Return type : TRUE - on success. FALSE when out of subtitle storage memory
  159. // Description : writes the word to the internal buffer, byte by byte. when
  160. //                  the internal buffer is full - writes the buffer
  161. //                  to the subtitle storage memory
  162. /////////////////////////////////////////////////////////////////////////////////////////////
  163. BOOL subtitleStorageWriteDWORD(DWORD dw);
  164. /////////////////////////////////////////////////////////////////////////////////////////////
  165. // Function Name : subtitleStorageCommitBuffer
  166. // Purpose : Internal Write the internal buffer to memory
  167. // Return type : void
  168. // Description : uses sc_SetBytes to write the buffer to subtitle memory. resets wBufferPos
  169. /////////////////////////////////////////////////////////////////////////////////////////////
  170. void subtitleStorageCommitBuffer(void);
  171. /////////////////////////////////////////////////////////////////////////////////////////////
  172. // Function Name : subtitleStorageGetSubtitle
  173. // Purpose : Get a subtitle string and the end sclk count
  174. // Output Parameters:  dwEndSCLK - The time for stopping the display of this subtitle in SCLK count
  175. // Return type : TRUE on success, FALSE if string is too long to fit in buffer
  176. // Description : Copies the subtitle string from subtitles storage memory to
  177. //                  the scratch pad. The string is copied as it was in the subtitles file,
  178. //   except for conversion of formatting symbols. Conversion to Unicode or any
  179. //                  other format the OSD module requires, is likely to be language-dependant,
  180. //                  and should be performed by the calling function if necessary.
  181. //   The time for displaying the returned subtitle should be determined beforehand,
  182. //                  and this function should be called when this time is reached. The end time is
  183. //                  returned by this function.
  184. /////////////////////////////////////////////////////////////////////////////////////////////
  185. BOOL subtitleStorageGetSubtitle(DWORD *dwEndSCLK);
  186. /////////////////////////////////////////////////////////////////////////////////////////////
  187. // Function Name : subtitleStorageGetStartTime
  188. // Purpose : Get the start SCLK count of the current subtitle
  189. // Output Parameters: dwStartSCLK - Start display time, as SCLK count
  190. // Return type : FALSE if there are no more subtitles. TRUE otherwise
  191. // Description : Reads the start SCLK count for this subtitle. If there are no more subtitle,
  192. //                  FALSE is returned, and also the value of dwStartSCLK is LAST_SUBTITLE_MARKER
  193. //   which is set to be the max possible value of the SCLK
  194. /////////////////////////////////////////////////////////////////////////////////////////////
  195. BOOL subtitleStorageGetStartTime(DWORD *dwStartSCLK);
  196. /////////////////////////////////////////////////////////////////////////////////////////////
  197. // Function Name : subtitleStorageRewind
  198. // Purpose : Set the current subtitle pointer to the previous subtitle
  199. // Input Parameters : storage - handle to a storage struct
  200. // Output Parameters: dwStartSCLK - Start display time of the previous subtitle, as SCLK count
  201. //                    dwEndSCLK - End display time of the previous subtitle, as SCLK count
  202. // Return type : FALSE if the current subtitle is already the first. TRUE otherwise.
  203. // Description : The function searches for the previous subtitle in the subtitles memory,
  204. //                    makes it the current subtitle, and returns its start and end time.
  205. //   This function is used for backwards navigation in the subtitles memory
  206. /////////////////////////////////////////////////////////////////////////////////////////////
  207. //BOOL subtitleStorageRewind(SubtitleStorageInterface *storage, DWORD *dwStartSCLK, DWORD *dwEndSCLK);
  208. /////////////////////////////////////////////////////////////////////////////////////////////
  209. // Function Name : subtitleStorageFillBuffer
  210. // Purpose : Internal function for reading from the subtitles memory in to the internal buffer
  211. // Input Parameters : storage - handle to a storage struct
  212. // Return type : void
  213. // Description : uses sc_GetBytes to write the buffer to subtitle memory. resets wBufferPos
  214. /////////////////////////////////////////////////////////////////////////////////////////////
  215. void subtitleStorageFillBuffer(void);
  216. /////////////////////////////////////////////////////////////////////////////////////////////
  217. // Function Name : subtitleStorageReadByte
  218. // Purpose : Reads a byte to the subtitle storage memory
  219. // Input Parameters : b       - place to store the byte
  220. // Return type : void
  221. // Description : Reads the byte from the internal buffer. when empty - fills the buffer
  222. /////////////////////////////////////////////////////////////////////////////////////////////
  223. void subtitleStorageReadByte(BYTE *b);
  224. /////////////////////////////////////////////////////////////////////////////////////////////
  225. // Function Name : subtitleStorageReadDWORD
  226. // Purpose : Reads a byte to the subtitle storage memory
  227. // Input Parameters : b       - place to store the DWOR
  228. // Return type : void
  229. // Description : Reads the DWORD byte by byte using subtitleStorageReadByte
  230. /////////////////////////////////////////////////////////////////////////////////////////////
  231. void subtitleStorageReadDWORD(DWORD *dw);
  232. /////////////////////////////////////////////////////////////////////////////////////////////
  233. // Function Name : subtitleStorageInitReading
  234. // Purpose : Initializes the interface to the subtitles storage
  235. // Return type : void
  236. // Description :
  237. /////////////////////////////////////////////////////////////////////////////////////////////
  238. void subtitleStorageInitReading(void);
  239. /////////////////////////////////////////////////////////////////////////////////////////////
  240. // Function Name  : subtitleStorageRewindBytes
  241. // Purpose  : Rewinds the subtitles storage pointer
  242. // Input Parameters: count   - number of bytes to rewind
  243. // Return type : FALSE when attempting to rewind beyond the start of the subtitles storage
  244. //   TRUE otherwise.
  245. // Description : Checks if the requested position is currently in the buffer, and updates
  246. //                  internal pointers if so. Otherwise, reads required data from the SDRAM
  247. /////////////////////////////////////////////////////////////////////////////////////////////
  248. BOOL subtitleStorageRewindBytes(WORD count);
  249. void updateSubtitlesIndex(DWORD dwAddress, DWORD dwStartSCLK);
  250. /////////////////////////////////////////////////////////////////////////////////////////////
  251. // Function Name  : subtitleGoToTime
  252. // Purpose  : Jump to a new time in the subtitle storage
  253. // Input parameters: dwCurrentTime - the new time
  254. // Return type :  void
  255. // Description :  After FF/FB/Goto, this function is used to set the next subtitle to be
  256. //                   the 1 right before the new time.
  257. /////////////////////////////////////////////////////////////////////////////////////////////
  258. void subtitleGoToTime(DWORD dwCurrentTime);
  259. void switchBytesInWString(LPSTR str);
  260. #endif // __AUXSUBTITLESCOMMONPRIVATE_H_
  261. #endif // USE_AUX_SUBTITLES