@classmethod
def parse(cls, name, data_size, reader, parsers):
    """given a 4 byte name, data_size int, BitstreamReader
        and dict of {"atom":handler} sub-parsers,
        returns an atom of this class"""
    (version, track_in_poster, track_in_preview, track_in_movie, track_enabled
        ) = reader.parse('8u 20p 1u 1u 1u 1u')
    if version == 0:
        atom_format = '32u 32u 32u 4P 32u 8P 16u 16u 16u 2P'
    else:
        atom_format = '64U 64U 32u 4P 64U 8P 16u 16u 16u 2P'
    (created_utc_date, modified_utc_date, track_id, duration, video_layer,
        qt_alternate, volume) = reader.parse(atom_format)
    geometry_matrices = reader.parse('9* 32u')
    video_width, video_height = reader.parse('32u 32u')
    return cls(version=version, track_in_poster=track_in_poster,
        track_in_preview=track_in_preview, track_in_movie=track_in_movie,
        track_enabled=track_enabled, created_utc_date=created_utc_date,
        modified_utc_date=modified_utc_date, track_id=track_id, duration=
        duration, video_layer=video_layer, qt_alternate=qt_alternate,
        volume=volume, geometry_matrices=geometry_matrices, video_width=
        video_width, video_height=video_height)
