// based on florin's CDVDbin detection code :) // Parameter: // // // Returns true if the image is valid/known/supported, or false if not (type == ISOTYPE_ILLEGAL). bool isoFile::Detect( bool readType ) { char buf[32]; m_type = ISOTYPE_ILLEGAL; _IsoPart& headpart( m_parts[0] ); headpart.Seek( 0 ); headpart.Read( buf, 4 ); if (strncmp(buf, "BDV2", 4) == 0) { m_flags = ISOFLAGS_BLOCKDUMP_V2; headpart.Read(m_blocksize); headpart.Read(m_blocks); headpart.Read(m_blockofs); if (readType) { _ReadDtable(); return detect(); } return true; } // First sanity check: no sane CD image has less than 16 sectors, since that's what // we need simply to contain a TOC. So if the file size is not large enough to // accommodate that, it is NOT a CD image ---> wxFileOffset size = headpart.handle->GetLength(); if (size < (2048 * 16)) return false; m_blocks = 16; if (tryIsoType(2048, 0, 24)) return true; // ISO 2048 if (tryIsoType(2336, 0, 16)) return true; // RAW 2336 if (tryIsoType(2352, 0, 0)) return true; // RAW 2352 if (tryIsoType(2448, 0, 0)) return true; // RAWQ 2448 if (tryIsoType(2048, 150 * 2048, 24)) return true; // NERO ISO 2048 if (tryIsoType(2352, 150 * 2048, 0)) return true; // NERO RAW 2352 if (tryIsoType(2448, 150 * 2048, 0)) return true; // NERO RAWQ 2448 if (tryIsoType(2048, -8, 24)) return true; // ISO 2048 if (tryIsoType(2352, -8, 0)) return true; // RAW 2352 if (tryIsoType(2448, -8, 0)) return true; // RAWQ 2448 m_offset = 0; m_blocksize = CD_FRAMESIZE_RAW; m_blockofs = 0; m_type = ISOTYPE_AUDIO; //BUG: This also detects a memory-card-file as a valid Audio-CD ISO... -avih return true; }
// based on florin's CDVDbin detection code :) // Parameter: // // // Returns true if the image is valid/known/supported, or false if not (type == ISOTYPE_ILLEGAL). bool InputIsoFile::Detect( bool readType ) { m_type = ISOTYPE_ILLEGAL; AsyncFileReader* headpart = m_reader; // First sanity check: no sane CD image has less than 16 sectors, since that's what // we need simply to contain a TOC. So if the file size is not large enough to // accommodate that, it is NOT a CD image ---> int sectors = headpart->GetBlockCount(); if (sectors < 17) return false; m_blocks = 17; if (tryIsoType(2048, 0, 24)) return true; // ISO 2048 if (tryIsoType(2336, 0, 16)) return true; // RAW 2336 if (tryIsoType(2352, 0, 0)) return true; // RAW 2352 if (tryIsoType(2448, 0, 0)) return true; // RAWQ 2448 if (tryIsoType(2048, 150 * 2048, 24)) return true; // NERO ISO 2048 if (tryIsoType(2352, 150 * 2048, 0)) return true; // NERO RAW 2352 if (tryIsoType(2448, 150 * 2048, 0)) return true; // NERO RAWQ 2448 if (tryIsoType(2048, -8, 24)) return true; // ISO 2048 if (tryIsoType(2352, -8, 0)) return true; // RAW 2352 if (tryIsoType(2448, -8, 0)) return true; // RAWQ 2448 m_offset = 0; m_blocksize = CD_FRAMESIZE_RAW; m_blockofs = 0; m_type = ISOTYPE_AUDIO; m_reader->SetDataOffset(m_offset); m_reader->SetBlockSize(m_blocksize); //BUG: This also detects a memory-card-file as a valid Audio-CD ISO... -avih return true; }