This is an old revision of the document!
Video Manager Group IFO (VMGI)
The VMGI is the primary IFO containing all the metadata about the entire DVD. Or, aka IFO zero.
Files are a normal IFO file, the first one on the disc, being VIDEO_TS.IFO
and VIDEO_TS.BUP
.
Here are the headers that are generic to all IFOs: http://stnsoft.com/DVD/ifo.html
And here is some data that is specific to the VMG IFO: http://stnsoft.com/DVD/ifo_vmg.html
libdvdread
See ifoOpenVMGI()
in ifo_read.h
.
See vmgi_mat_t
struct in ifo_types.h
.
ifo_handle_t *ifo_zero; ifo_zero = ifoOpen(dvdread_dvd, 0);
VMG ID
- Example: DVDVIDEO-VMG
char *id; id = ifo_zero->vmgi_mat->vmg_identifier;
Last sector of VMG set
The last sector of the BUP.
uint32t i; i = ifo_zero->vmgi_mat->vmg_last_sector;
Last sector of IFO
Current IFO? Not sure…
uint32t i; i = ifo_zero->vmgi_mat->vmgi_last_sector;
Version number
uint8t i; i = ifo_zero->vmgi_mat->specification_version;
VMG category
uint32_t i; i = ifo_zero->vmgi_mat->vmg_category;
Number of volumes
Not sure if I've seen this one yet, where it is positvely set (todo: search IFOs). It's the number of volumes for an entire set of the DVDs that this one is a part of a collection.
uint16_t i; i = ifo_zero->vmgi_mat->vmg_nr_of_volumes
Volume number
uint16_t i; i = ifo_zero->vmgi_mat->vmg_this_volume_nr;
Disc side
This should obviously be a 1 or a 2.
uint8t i; i = ifo_zero->vmgi_mat->disc_side;
Number of title sets
Number of VTSs, aka IFOs. For debugging, this number should match the actual amount of IFOs on a DVD.
uint16_t i; i = ifo_zero->vmgi_mat->vmg_nr_of_title_sets;
Provider ID
Example: DEFENDERS_OF_THE_EARTH_V2D2A
. Often blank. 32 characters not including a NULL terminator.
char *id; id = ifo_zero->vmgi_mat->provider_identifier;
VMG POS
Dunno what this one is. 8-bytes.
uint64_t i; i = ifo_zero->vmgi_mat->vmg_pos_code;
Last byte of VMG IFO (IFO Zero)
uint32_t i; i = ifo_zero->vmgi_mat->vmgi_last_byte;
Start address of first PGC
First Play program chain.
uint32_t i; i = ifo_zero->vmgi_mat->first_play_pgc;
Start sector of menu VOB
Dunno what this is yet.
uint32_t i; i = ifo_zero->vmgi_mat->vmgm_vobs;
Sector pointer to TT_SRPT, table of titles
uint32_t i; i = ifo_zero->vmgi_mat->tt_srpt;
Sector pointer to Menu Program Chain Table (VMGM_PGCI_UT)
uint32_t i; i = ifo_zero->vmgi_mat->vmgm_pgci_ut;
Sector pointer to Parental Management masks (VMG_PTL_MAIT)
uint32_t i; i = ifo_zero->vmgi_mat->ptl_mait;
Sector pointer to copies of VTS audio/sub-picture attributes (VMG_VTS_ATRT)
uint32_t i; i = ifo_zero->vmgi_mat->vts_atrt;
Sector pointer to VMG_TXTDT_MG
Text data. No idea what this one is.
uint32_t i; i = ifo_zero->vmgi_mat->txtdt_mgi;
Sector pointer to menu cell address table (VMGM_C_ADT)
uint32_t i; i = ifo_zero->vmgi_mat->vmgm_c_adt;
Sector pointer to menu VOBU address map (VMGM_VOBU_ADMAP)
uint32_t i; i = ifo_zero->vmgi_mat->vmgm_vobu_admap;
Video attributes of menu VOBs (VMGM_VOBS)
video_attr_t *a; a = ifo_zero->vmgi_mat->vmgm_video_attr;
Number of audio streams in menu VOBs (VMGM_VOBS)
Should be 0 or 1 (debugging checks).
uint8_t i; i = ifo_zero->vmgi_mat->nr_of_vmgm_audio_streams;
Audio attributes of menu VOBs (VMGM_VOBS)
For channels the most common integer value (from my findings) is 0 or 1. Need to find out if that means integer + 1 (so, 0 = mono, 1 = stereo) or what.
audio_attr_t *a; a = ifo_zero->vmgi_mat->vmgm_audio_attr;
Number of subpicture streams in menu VOBs (VMGM_VOBS)
Should be 0 or 1 (debugging checks).
uint8_t i; i = ifo_zero->vmgi_mat->nr_of_vmgm_subp_streams;
Subpicture attributes of menu VOBs (VMGM_VOBS)
subp_attr_t *a; a = ifo_zero->vmgi_mat->vmgm_subp_attr;