import sys

def parseDisc(device):
    f = open(device)
    try:
        # read CD-XA001 at byte 1024 in sector 16
        f.seek(2048*16 + 1024, 0)
        modebuffer = f.read(8)
        print 'mode=%r' % modebuffer
        if modebuffer != 'CD-XA001':
            raise IOError('CD-XA001 not found')
        # read VIDEO_CD at sector 150
        f.seek(2048*150, 0)
        typebuffer = f.read(8)
        print 'type=%r' % typebuffer
        if typebuffer != 'VIDEO_CD' and typebuffer != 'SUPERVCD':
            raise IOError('VIDEO_CD or SUPERVCD not found')
        # read some bytes of the ISO9660 part to guess VCD or SVCD
        if typebuffer == 'VIDEO_CD':
            f.seek(2048*18, 0)
        elif typebuffer == 'SUPERVCD':
            f.seek(2048*18, 0)
        iso9660 = f.read(2048*16)
        mpegpos = iso9660.find('MPEG')
        print 'MPEG=%r:%r' % (mpegpos, iso9660[mpegpos:mpegpos+8])
        if iso9660[mpegpos:mpegpos+6] == 'MPEGAV':
            print 'VCD'
        elif iso9660[mpegpos:mpegpos+5] == 'MPEG2':
            print 'SVCD'
        else:
            raise IOError('Unable to detect video format')
    finally:
        f.close()

try:
    parseDisc(sys.argv[1])
except Exception, e:
    print e
    print 'No VCD or SVCD'
