Module: CHD::Metadata

Defined in:
lib/chd/metadata.rb

Overview

| Type | Associated scanf string | |——|—————————————————————————————-| | GDDD | “CYLS:%d,HEADS:%d,SECS:%d,BPS:%d” | | CHTR | “TRACK:%d TYPE:%s SUBTYPE:%s FRAMES:%d” | | CHT2 | “TRACK:%d TYPE:%s SUBTYPE:%s FRAMES:%d PREGAP:%d PGTYPE:%s PGSUB:%s POSTGAP:%d” | | CHGD | “TRACK:%d TYPE:%s SUBTYPE:%s FRAMES:%d PAD:%d PREGAP:%d PGTYPE:%s PGSUB:%s POSTGAP:%d” | | AVAV | “FPS:%d.%06d WIDTH:%d HEIGHT:%d INTERLACED:%d CHANNELS:%d SAMPLERATE:%d” |

Constant Summary collapse

HARD_DISK =

Hard disk

:'GDDD'
HARD_DISK_IDENT =

Hard disk identity

:'IDNT'
HARD_DISK_KEY =

Hard disk key

:'KEY '
PCMCIA_CIS =

PCMCIA CIS

:'CIS '
CDROM_TRACK =

CDROM Track

:'CHTR'
CDROM_TRACK_PREGAP =

CDROM Track with pregap

:'CHT2'
GDROM_TRACK =

GDROM Track (SEGA Genesis)

:'CHGD'
AV =

Audio/Video

:'AVAV'
AV_LD =

Audio/Video Laser Disk

:'AVLD'
CDROM_OLD =

CDROM Track (old CHD version)

:'CHCD'
GDROM_OLD =

GDROM Track (old CHD version)

:'CHGT'

Class Method Summary collapse

Class Method Details

.parse(data, flags, type) ⇒ Hash{Symbol => Object}

Parse metadata returned by CHD#get_metadata

Examples:

chd = CHD.new('file.chd')
puts CHD::Metadata.parse(*chd.(0)).inspect

Parameters:

  • data (String)
  • flags (Integer)
  • type (Symbol)

Returns:

  • (Hash{Symbol => Object})


114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'lib/chd/metadata.rb', line 114

def self.parse(data, flags, type)
    # Flags
    unless (flags & ~(METADATA_FLAG_CHECKSUM)).zero?
        raise ParsingError,
              "unsupported flag (0x#{flags.to_s(16)}) (fill bug report)"
    end
    set_flags = Set.new
    set_flags << :checksum unless (flags & METADATA_FLAG_CHECKSUM).zero?

    # Data
    case type
    when CDROM_TRACK        then parse_cdrom_track(data, CDROM_TRACK_REGEX)
    when CDROM_TRACK_PREGAP then parse_cdrom_track(data, CDROM_TRACK_PREGAP_REGEX)
    when GDROM_TRACK        then parse_cdrom_track(data, GDROM_TRACK_REGEX)
    when HARD_DISK          then parse_hard_disk(data, HARD_DISK_REGEX)
    else                    raise "not implemented yet"
    end
end