@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"""
    assert name == b'mvhd'
    version, flags = reader.parse('8u 24u')
    if version == 0:
        atom_format = '32u 32u 32u 32u 32u 16u 10P'
    else:
        atom_format = '64U 64U 32u 64U 32u 16u 10P'
    (created_utc_date, modified_utc_date, time_scale, duration,
        playback_speed, user_volume) = reader.parse(atom_format)
    geometry_matrices = reader.parse('32u' * 9)
    (qt_preview, qt_still_poster, qt_selection_time, qt_current_time,
        next_track_id) = reader.parse('64U 32u 64U 32u 32u')
    return cls(version=version, flags=flags, created_utc_date=
        created_utc_date, modified_utc_date=modified_utc_date, time_scale=
        time_scale, duration=duration, playback_speed=playback_speed,
        user_volume=user_volume, geometry_matrices=geometry_matrices,
        qt_preview=qt_preview, qt_still_poster=qt_still_poster,
        qt_selection_time=qt_selection_time, qt_current_time=
        qt_current_time, next_track_id=next_track_id)
