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

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: CDDetection.c $             
  6.  *
  7.  * Description: CD Detection.
  8.  * ============
  9.  * 
  10.  * 
  11.  * Log:
  12.  * ====
  13.  * $Revision: 36 $
  14.  * Last Modified by $Author: Leslie $ at $Modtime: 11/03/03 7:44a $ 
  15.  ****************************************************************************************
  16.  * Updates:
  17.  ****************************************************************************************
  18.  * $Log: /I76/I76_Common/I76_Reference/Playcore/MediaDetection/CDDetection.c $
  19.  * 
  20.  * 36    11/03/03 3:26p Leslie
  21.  * Remove useless code
  22.  * Add IDENTIFY_CDDA_FIRST_FOR_CDROM_CDDA_MIXED_DISCS
  23.  * 
  24.  * 35    03-08-28 23:56 Leslie
  25.  * Code cleanup
  26.  * 
  27.  * 34    03-08-07 19:53 Leslie
  28.  * Speical Fix for MixCD disc which has both CDDA and Data Track
  29.  * 
  30.  * 33    03-07-28 18:50 Leslie
  31.  * Add changes for Task Force
  32.  * 
  33.  * 31    03-06-30 16:45 Leslie
  34.  * Add NO_VCD_SVCD_FOR_DVD_ALL_REGION_SETTING
  35.  * 
  36.  * 30    03-05-22 11:42 Leslie
  37.  * Code cleanup
  38.  * 
  39.  * 29    03-05-07 10:35 Dingming
  40.  * implement for mask VCD/SVCD
  41.  * 
  42.  * 28    03-04-21 13:54 Dingming
  43.  * fix problem when disable VCD/SVCD
  44.  * 
  45.  * 27    03-03-04 10:45 Hannahh
  46.  * remove customer name from all project
  47.  * 
  48.  * 26    03-02-24 10:18 Leslie
  49.  * Update with change
  50.  * 
  51.  * 26    2/20/03 6:03p Tomasp
  52.  * Corrected detecting CDDA media
  53.  * 
  54.  * 25    03-01-10 12:26 Leslie
  55.  * Update with file-system change
  56.  * 
  57.  * 24    12/10/02 10:45a Leslie
  58.  * 
  59.  * 23    10/30/02 17:48 Rond
  60.  * 
  61.  * 21    2/06/02 17:15 Nirm
  62.  * - Added DEFAULT_UNKNOWN_CDROMS_TO_VCD;
  63.  * - Moved some capability-related definitions to Config.h.
  64.  * 
  65.  * 20    9/05/02 15:54 Ettim
  66.  * Just preparing the code for the updated media detection sequence (code
  67.  * is under comment).
  68.  * 
  69.  * 19    5/05/02 17:56 Ettim
  70.  * Added support in CDEXTRA.
  71.  * 
  72.  * 18    26/04/02 10:50 Nirm
  73.  * - Removed debug-printing.
  74.  * 
  75.  * 17    23/04/02 9:31 Nirm
  76.  * - Added dependency in "Config.h".
  77.  * 
  78.  * 16    3/27/02 13:18 Ettim
  79.  * Replaced D_PICTURE_CD_ENABLED with CLIPS_JPEG_SUPPORT
  80.  * 
  81.  * 15    3/26/02 19:14 Ettim
  82.  * Added new clips navigation support.
  83.  * 
  84.  * 14    3/01/02 4:16a Dingming
  85.  * jpg file search
  86.  * 
  87.  * 13    28/02/02 23:58 Nirm
  88.  * - Changed lengths of filenames/directories;
  89.  * - Usage of short filenames for the detection.
  90.  * 
  91.  * 12    4/02/02 14:34 Nirm
  92.  * Integrated the MP3 detection sequence.
  93.  * 
  94.  * 11    24/01/02 19:11 Nirm
  95.  * Cleanup.
  96.  * 
  97.  * 9     24/01/02 17:56 Ettim
  98.  * Replaced the include of nav_svcd.h with svcd.h that contains only the necessary 
  99.  * definitions.
  100.  * 8     17/01/02 10:54 Nirm
  101.  * Configured the Decoder to VCD by default.
  102.  * 
  103.  * 7     1/16/02 16:16 Ettim
  104.  * Updating the macro PE_CD_SetDiscType to get only 1 argument.
  105.  * 
  106.  * 6     16/01/02 11:47 Atai
  107.  * change debug printing
  108.  * 
  109.  * 5     14/01/02 18:39 Nirm
  110.  * Re-enabled the genuine detection-sequence, apart from MP-3.
  111.  * 
  112.  * 4     9/01/02 15:31 Nirm
  113.  * Corrected Include-Paths.
  114.  ****************************************************************************************/
  115. #include "Config.h" // Global Configuration - do not remove!
  116. #ifdef _DEBUG
  117. #define IFTRACE if (gTraceNavigator)
  118. #include "DebugDbgMain.h"
  119. #endif
  120. #include "IncludeSysDefs.h"
  121. #include "Includestring_ex.h"
  122. #include "Decoderdecoder.h"
  123. #include "Drivedrv_API.h"
  124. #include "PlaycoreDataStructuresArray.h"
  125. #include "PlaycoreAuxCacheAuxCache.h"
  126. #include "PlaycoreExceptionException.h"
  127. #include "PlaycoreFileSysFileSystem.h"
  128. #include "PlaycoreMediaDetectionCDDetection.h"
  129. #include "PlaycoreNav_CDDAPE_CD.h"
  130. #include "PlaycoreNav_SVCDSVCD.h"
  131. #include "PlaycorePlayModePlayMode.h"
  132. #ifdef D_QS_UPGRADE_WAY
  133. #include "customerMercury_Referenceversion.h"
  134. #endif
  135. //<<<Leslie_0828_2003_B: Comment out
  136. #if 0//def ALLOW_MP3_IN_NON_VCD_PLAYER
  137. /////////////////////////////////////////////////////////////////////////////
  138. // _findClip()
  139. //
  140. // Description: Searches the Disc for a Clip, according to the file-extension
  141. // associated with it.
  142. //
  143. // Input: hArray - The Array-Handle associated with the Array to be
  144. //  shrinked.
  145. // Output: None
  146. // In/Out: None
  147. // Return: TRUE if a Clip of the requested type was found; FALSE otherwise.
  148. //
  149. // Remarks:
  150. // The search is carried-out recursively.
  151. // File-extensions are compared in a case-insensitive manner.
  152. #define MAX_DIRNAME_LEN 8
  153. #define MAX_SUBDIRS_CNT 20
  154. static BOOL _findClip(LPCWSTR i_pszClipExtension)
  155. {
  156. BOOL bClipFound;
  157. UINT16 hFindFile;
  158. UINT8  uPos, uSubDirsCnt;
  159. UINT32 hSubDirsArray;
  160. static FindData fdFileInfo;
  161. // Construct an Array to hold the names of any Sub-Directories found
  162. hSubDirsArray= Array_construct(MAX_SUBDIRS_CNT, (1+MAX_DIRNAME_LEN), NULL);
  163. if (NULL == hSubDirsArray) {
  164. dbg_printf(("WARNING: _findClip() Failed [1]: Low system-resourcesn"));
  165. return FALSE;
  166. }
  167. // Start scanning the Current-Directory
  168. hFindFile= FileSys_findFirstFile(FILESYS_WILDCARD_SEARCH, &fdFileInfo);
  169. if (NULL == hFindFile) {
  170. dbg_printf(("WARNING: _findClip() Failed [2]: Low system-resources, or no files foundn"));
  171. Array_destruct(hSubDirsArray);
  172. return FALSE;
  173. }
  174. bClipFound= FALSE;
  175. uSubDirsCnt= 0;
  176. do {
  177. // Check the Type of the File found
  178. if (FILETYPE_DIRECTORY == fdFileInfo.uFileType) {
  179. // Skip the Current and the Parent directories
  180. if ((0x00 == fdFileInfo.szFileID[0]) || (0x01 == fdFileInfo.szFileID[0]))
  181. continue;
  182. // Enqueue the Directory found, for later use
  183. if (! Array_setAt(hSubDirsArray, (UINT16)uSubDirsCnt, 
  184.   (const BYTE*)fdFileInfo.szFileID))
  185. {
  186. dbg_printf(("WARNING: _findClip() Failed [3]n"));
  187. break;
  188. }
  189. uSubDirsCnt++;
  190. }
  191. else if (FILETYPE_NORMAL == fdFileInfo.uFileType) {
  192. // Try to match the File's extension with the requested one
  193. LPWSTR pszCurrExtension= wcsrchr(fdFileInfo.szFileID, '.');
  194. if ((NULL != pszCurrExtension) && 
  195. (0 == _wcsnicmp(pszCurrExtension, i_pszClipExtension,
  196. wcslen(i_pszClipExtension))))
  197. {
  198. bClipFound= TRUE;
  199. break;
  200. }
  201. }
  202. } while (FileSys_findNextFile(hFindFile, &fdFileInfo));
  203. // Terminate the search
  204. FileSys_findClose(hFindFile);
  205. // Free any unused memory
  206. Array_freeExtra(hSubDirsArray);
  207. // Now, handle all directories that were found on the way, recursively
  208. memset(fdFileInfo.szFileID, 0, sizeof(fdFileInfo.szFileID));
  209. uPos= 0;
  210. while ((uPos < uSubDirsCnt) && ! bClipFound) {
  211. // Extract the next Sub-Directory name
  212. if (! Array_getAt(hSubDirsArray, uPos++, (BYTE*)fdFileInfo.szFileID)) {
  213. dbg_printf(("WARNING: _findClip() Failed [4]n"));
  214. continue;
  215. }
  216. // Enter the Sub-Directory
  217. if (! FileSys_changeDir(fdFileInfo.szFileID)) {
  218. dbg_printf(("WARNING: _findClip() Failed [5]n"));
  219. continue;
  220. }
  221. // Continue the search recursively
  222. bClipFound= _findClip(i_pszClipExtension);
  223. // Return to the Current-Directory
  224. if (! FileSys_goUp()) {
  225. dbg_printf(("WARNING: _findClip() Failed [6]n"));
  226. break;
  227. }
  228. }
  229. // Free the Sub-Directories Array
  230. Array_destruct(hSubDirsArray);
  231. return bClipFound;
  232. }
  233. #endif //ALLOW_MP3_IN_NON_VCD_PLAYER
  234. //Leslie_0828_2003_B>>>
  235. /////////////////////////////////////////////////////////////////////////////////////////////////
  236. // DEC_DISC_TYPE CD_DetermineDiscType() -
  237. // A sub-media identification service.
  238. //
  239. // Input:
  240. // None.
  241. //
  242. // Output:
  243. // The appropriate type of Disc for the Decoding process, or DEC_DISC_TYPE_NO_DISK if the
  244. // sub-media type couldn't be determined.
  245. //
  246. // Remarks:
  247. // This is a general service (detached from the SVCD Navigator), designed to determine the 
  248. // actual sub-media type, given that the Media is a CD-Disc (not a DVD-Disc).
  249. //
  250. // Identification is done using both TOC information and Standard-specific information.
  251. // The process partly duplicates the identification process carried-out by the SVCD Navigator,
  252. // in order to determine also if PBC information is available or not.
  253. #ifndef D_NO_DECODE_ENCRYPT_CDDA
  254. BOOL bIsCopyControlCDDA = FALSE ;
  255. #endif
  256. DEC_DISC_TYPE CD_DetermineDiscType(void)
  257. {
  258. int iCurrTrack, iTotalTracksCnt;
  259. int iDataTracksCnt= 0;
  260. int iAudioTracksCnt= 0, iFirstCDDATrack = 0, iLastCDDATrack = 0;
  261. BOOL bCDDATrackFound = FALSE;
  262. BYTE aBuffer[SVCD_INFO_HDR_SIZE];
  263. ULONG ulSize;
  264. BOOL bFileSysInitialized= FALSE;
  265. BOOL bAllowPBC= FALSE;
  266. DEC_DISC_TYPE uDiscType= DEC_DISC_TYPE_NO_DISK;
  267. enFileSysType eFSType;
  268. BOOL bIsFirstTrackCDDA = FALSE;
  269. BOOL bIsInfoSecotrParsed = FALSE;
  270. tr_printf(("Determining Disc-Type...n"));
  271. // Scan each of the Tracks on the disc, and establish the number of Data and CDDA Tracks
  272. // available, if any.
  273. iTotalTracksCnt= PE_CD_GetTracksCnt();
  274. for (iCurrTrack=1; iCurrTrack <= iTotalTracksCnt; iCurrTrack++) {
  275. BYTE ucCtrlField;
  276. DWORD dwStartAddress;
  277. // Acquire the Ctrl Field for the current Track
  278. if (! PE_CD_GetTrackTOC(iCurrTrack, &ucCtrlField, &ulSize, &dwStartAddress)) {
  279. tr_printf(("CD_DetermineDiscType(): Warning: Failed to retrieve TOC information for Track #%d.n", iCurrTrack));
  280. continue;
  281. }
  282. // Check what type of Track is reported
  283. if ((ucCtrlField & 0x5) == 0x4) {
  284. // A Data Track
  285. iDataTracksCnt++;
  286. }
  287. else {
  288. // Supposedly an Audio Track
  289. if (!bCDDATrackFound)
  290. {
  291. iFirstCDDATrack = iCurrTrack;
  292. bCDDATrackFound = TRUE;
  293. }
  294. iLastCDDATrack = iCurrTrack;
  295. if ( 1 == iCurrTrack ){
  296. tr_printf(("First Track is CDDA Trackn"));
  297. bIsFirstTrackCDDA = TRUE;
  298. }
  299. iAudioTracksCnt++;
  300. }
  301. }
  302. // Check if this is an Audio disc (i.e. all Tracks are Audio Tracks)
  303. if  ( (iAudioTracksCnt == iTotalTracksCnt) || ( bIsFirstTrackCDDA ) )
  304. return DEC_DISC_TYPE_CDDA;
  305. // This is a Data disc - configure the decoder to VCD mode
  306. //PE_CD_SetDiscType(DEC_DISC_TYPE_VCD);
  307. // The disc contains Data, and the player supports VCD. Try to detect the standard
  308. // VCD data-structures, assuming an S/VCD disc.
  309. if (!AuxCache_GetBytes(SVCD_INFO_FILE_ADDRESS, 0, SVCD_INFO_HDR_SIZE, aBuffer))
  310. {
  311. tr_printf(("WARNING: CD_DetermineDiscType(): Failed to access SVCD-Info Header.n"));
  312. memset(aBuffer, 0, sizeof(aBuffer)); // Clear the buffer, to force an Error
  313. bIsInfoSecotrParsed = FALSE;
  314. }
  315. else
  316. {
  317. bIsInfoSecotrParsed = TRUE;
  318. }
  319. if (bIsInfoSecotrParsed)
  320. {
  321. // Detect a variation of an S/VCD disc
  322. if (_isSimilarStrings((LPCSTR)aBuffer, "VIDEO_CD"))
  323. {
  324. #ifndef IS_VCD_CAPABLE
  325. return DEC_DISC_TYPE_NO_DISK;
  326. #endif
  327. uDiscType= DEC_DISC_TYPE_VCD;
  328. }
  329. else if (_isSimilarStrings((LPCSTR)aBuffer, "SUPERVCD") ||
  330.  _isSimilarStrings((LPCSTR)aBuffer, "HQ-VCD  "))
  331. {
  332. #ifndef IS_SVCD_CAPABALE
  333. return DEC_DISC_TYPE_NO_DISK;
  334. #endif
  335. uDiscType= DEC_DISC_TYPE_SVCD;
  336. }
  337. }
  338. // <<< SEC CH.KO050704: check VCD 1.0
  339. //#ifdef EXINO2
  340. if ((DEC_DISC_TYPE_SVCD != uDiscType) && (DEC_DISC_TYPE_VCD != uDiscType)&& (AuxCache_GetBytes(SVCD_KARINFO_FILE_ADDRESS, 0, 11, aBuffer)) &&
  341.  _isSimilarStrings((LPCSTR)aBuffer, "KARINFO.BIH"))
  342. {
  343. #ifndef IS_VCD_CAPABLE
  344. return DEC_DISC_TYPE_NO_DISK;
  345. #endif
  346. uDiscType= DEC_DISC_TYPE_VCD;
  347. }
  348. //#endif
  349. // SEC CH.KO050704>>>
  350. if ( ( DEC_DISC_TYPE_NO_DISK == uDiscType ) || ( !bIsInfoSecotrParsed ) )
  351. {
  352. // Try to Initialize the File-System:
  353. eFSType= FileSys_determineType();
  354. if ((eUnknown != eFSType) && FileSys_selectType(eFSType)) 
  355. {
  356. bFileSysInitialized= FileSys_initialize(FALSE);
  357. if (bFileSysInitialized == FALSE)
  358. {
  359. tr_printf(("FATAL: CD_DetermineDiscType(): Failed to initialize the File-System.n"));
  360. }
  361. }
  362. else 
  363. {
  364. tr_printf(("WARNING: CD_DetermineDiscType(): Failed to initialize the File-System.n"));
  365. }
  366. if (bFileSysInitialized && (eISO9660 == eFSType) &&
  367.  FileSys_goToRootDir())
  368. {
  369. uDiscType= DEC_DISC_TYPE_CDROM;
  370. // Test whether there is an MPEGAV directory or a Karaoke.TXT file on the Disc
  371. if ( FileSys_changeDir(L"MPEGAV") || FileSys_fileExists(L"KARAOKE.TXT")) //DM112504
  372. {
  373. tr_printf(("Success to find VCD Filesn"));
  374. uDiscType= DEC_DISC_TYPE_VCD;
  375. }
  376. else
  377. {
  378. tr_printf(("Try to check SVCD discs through filesystemn"));
  379. if (FileSys_changeDir(L"SVCD"))
  380. {
  381. tr_printf(("Success to find SVCD Filesn"));
  382. uDiscType = DEC_DISC_TYPE_SVCD;
  383. }
  384. else 
  385. {
  386. DWORD dwFileLocation;
  387. //<<<LX080503: This code is wrong behaviour, if the first track is data track and it has a filesytem and MP3/JPEG/WMA files on it, while second track is 
  388. //CDDA track, we need to be able to playback both contents. What we can do is to treat the disc as CD-ROM disc, and CDDA track is only a Audio Clip
  389. //file.  For temporary solution, we just igonre this.
  390. #ifdef IDENTIFY_CDDA_FIRST_FOR_CDROM_CDDA_MIXED_DISCS
  391. if (CdMedia_Macro.bIS_VCD_CAPABLE && (0 != iAudioTracksCnt)) 
  392. {
  393. uDiscType= DEC_DISC_TYPE_CDDA;
  394. }
  395. else
  396. #endif
  397. //LX080503>>>
  398. #ifdef CLIPS_JPEG_SUPPORT
  399. // Try detecting a Kodak-PictureCD
  400. if (CdMedia_Macro.bIS_JPEG_CAPABLE && 
  401.  FileSys_getFileLocation(L"INFO.CD", &dwFileLocation))
  402. {
  403. char szDiscSignature[23];
  404. // Read and verify the Disc-Signature
  405. if ( AuxCache_GetBytes(dwFileLocation, 0, sizeof(szDiscSignature), 
  406.   (BYTE*)szDiscSignature) &&
  407.  ((0 == strncmp(szDiscSignature, "Disc = KODAK PICTURE CD", 23)) ||
  408.   (0 == strncmp(szDiscSignature, "Disc = KODAKPICTURECD", 21))) &&
  409.  FileSys_changeDir(L"PICTURES") )
  410. {
  411. uDiscType= DEC_DISC_TYPE_PICTURE_CD;
  412. }
  413. }
  414. #endif //CLIPS_JPEG_SUPPORT
  415. #ifndef D_NO_DECODE_ENCRYPT_CDDA
  416. else if (iTotalTracksCnt > 1)
  417. {
  418. if ((FileSys_fileExists(L"PLAYER.EXE")))
  419. {
  420.     if(FileSys_changeDir(L"PLAYER") )
  421.       if(FileSys_fileExists(L"WMMP.EXE"))
  422.       {
  423. tr_printf(("Success to find this Copy Control CD Filesn"));
  424.      bIsCopyControlCDDA = TRUE;
  425.       }
  426. }
  427. else
  428. {
  429. tr_printf(("No Copy Control CD Filesn"));
  430. bIsCopyControlCDDA = FALSE;
  431. }
  432. if (bIsCopyControlCDDA)
  433. return DEC_DISC_TYPE_CDDA;
  434. }
  435. #endif
  436. }
  437. }
  438. }
  439. }
  440. // If, by now, no match was found, then allow playback as an Audio disc, provided
  441. // that at least one Audio Track was found at an earlier stage.
  442. if ((DEC_DISC_TYPE_NO_DISK == uDiscType) && (0 != iAudioTracksCnt))
  443. {
  444. uDiscType= DEC_DISC_TYPE_CDDA;
  445. }
  446. #ifdef DEFAULT_UNKNOWN_CDROMS_TO_VCD
  447. // If still there is no match, assume a VCD disc
  448. if ((DEC_DISC_TYPE_NO_DISK == uDiscType) && (0 != iDataTracksCnt))
  449. {
  450. uDiscType= DEC_DISC_TYPE_VCD;
  451. }
  452. #endif //DEFAULT_UNKNOWN_CDROMS_TO_VCD
  453. // Detect a Software-Update disc
  454. #ifdef D_QS_UPGRADE_WAY
  455. if (bFileSysInitialized && FileSys_fileExists(g_upgrade_file_name))
  456.    {
  457.        LPWSTR volume_id_name;
  458.        LPWSTR dest_name;
  459. UINT16 uFilenameLegth;
  460. int result;
  461. uFilenameLegth = wcslen((LPCWSTR)g_upgrade_DISC_ID);
  462. volume_id_name = (LPWSTR)malloc(FILESYSTEM_MAX_VOLUME_NAME*sizeof(WCHAR));
  463.     FileSys_getVolumeName(volume_id_name);
  464. dest_name= (LPWSTR)malloc((1 + uFilenameLegth) * sizeof(WCHAR));
  465. _str2wcs((LPCSTR)volume_id_name, dest_name,
  466.  ((1 + uFilenameLegth) * sizeof(WCHAR)));
  467.     result = _wcsnicmp(g_upgrade_DISC_ID, dest_name, uFilenameLegth);
  468.     free(volume_id_name);
  469.     free(dest_name);
  470. if (0 == result)
  471. {
  472.     return DEC_DISC_TYPE_SW_UPDATE;
  473.     }
  474.    }
  475. #else
  476. if (bFileSysInitialized && FileSys_fileExists(L"UPDATE.VER"))
  477. {
  478. return DEC_DISC_TYPE_SW_UPDATE;
  479. }
  480. #endif
  481. // For discs other than S/VCD, nothing more to do
  482. if ((uDiscType != DEC_DISC_TYPE_VCD) && (uDiscType != DEC_DISC_TYPE_SVCD))
  483. {
  484. return uDiscType;
  485. }
  486. #ifdef NO_VCD_SVCD_FOR_DVD_ALL_REGION_SETTING
  487. if ( ( 9 != gps->region_code ) && ( 0 != gps->region_code ) && 
  488. ( ( DEC_DISC_TYPE_SVCD == uDiscType) || ( DEC_DISC_TYPE_VCD == uDiscType ) ) )
  489. {
  490. uDiscType = DEC_DISC_TYPE_NO_DISK;
  491. Logo_display();
  492. return uDiscType;
  493. }
  494. #endif//NO_VCD_SVCD_FOR_DVD_ALL_REGION_SETTING
  495. //<<<LX071703: Meaningless to do this here, comment out
  496. #if 0
  497. // In the case of S/VCD discs, also establish the availability of the PSD information,
  498. // so that the initial state of PBC can be set.
  499. // Check the value of PSD-Size. If it is non-Zero, make sure that all PBC-required
  500. // data is indeed availbale. Otherwise, prohibit PBC usage.
  501. if (AuxCache_GetBytes(SVCD_INFO_FILE_ADDRESS, 44, 4, (BYTE *)&ulSize) && (0 < ulSize)) 
  502. {
  503. // Verify that the ENTRIES file is intact
  504. if (AuxCache_GetBytes(SVCD_ENTRIES_FILE_ADDRESS, 0, SVCD_ENTRIES_HDR_SIZE, aBuffer)) 
  505. {
  506. if ((0 == strncmp((LPSTR)aBuffer, "ENTRYVCD", 8)) ||
  507. (0 == strncmp((LPSTR)aBuffer, "ENTRYSVD", 8)))
  508. bAllowPBC= TRUE;
  509. }
  510. }
  511. // Update the final decision regarding PBC
  512. PM_SetPBC(bAllowPBC);
  513. #endif
  514. //LX071703>>>
  515. return uDiscType;
  516. }