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 as I often call it, 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;