Zotty
8th December 2007, 17:22
I'm working on an app that plays seperate chapters of an HD DVD, but I've run into a wall. So time to pick some info on the subject from your minds.
I figured these 4 files are needed to accomplish the task;
- the .xpl file where the chapter name and timestamp are located
- the .map file corresponding to the EVO
- the .vti file
- and the EVO file itself containing video
Atm I've got the following already done; made an xpl parser, so the chapter names are no problem. I'm also able to scan/view the EVO file to see which packets are there (stream ID's and payload length).
Where I'm stuck is parsing the map and vti files. A bit of reverse engineering gave insight in how the files are build up. Doesn't give a 100% picture, but I've found some tables with for example offsets to other tables containing basic info about the EVO files. This is mostly in the vti file where I've found a datablock block for each evo file.
Here's how far I've gotton. The offsets are mainly from the Bourne Identity disc, but I've compared the results with some other discs aswell:
0x0000 ADVANCED-VTS
...
0x001F 0D 00 10 00 00 00 02 // ?
...
0x0080 00 00 03 FF // ?
...
0x00BB 01 00 00 00 06 // ?
...
// start of offset table?
0x0800 00 08 00 00 // start of table (current + offset)?
00 00 20 27 // ? 8*0x400 = 0x2000 -> 0x27 remaining
0x0808 00 00 00 28 // start of 0x400 blocks (0x0800 + offset)?
...
00 00 1C 28
0x0828 00 00 6B 10 C0....01 1C 00 D4 // 0 (start of 0x400 blocks)
...
0x0C28 05 00 6B 10 C0 00 60 10 50.... // after prev 0x400
00 00 00 00 00 00
06 // no of repeats
1C 00 D4 00
...
1C 00 D4 00
0x0CE9 01 // no of repeats
1C C4 00
0x0D0D 20 // no of repeats
80 20 00 00 00
80 xx 00 00 00 // xx increases 1 each time
80 3F 00 00 00
* cut entries *
0x1C28 00 00 20 00 50....01 1C 00 C4 // after prev 0x400, last one
...
0x2428 10 00 6B 10 C0....01 1C 00 C4 // where does this one come from?
...
// start of EVO table?
0x3002 00 30 // no of EVO's
00 00 // reserved?
3C C7 // end address (last byte), including padding?
// total blocksize is 36*16 byte (starting at 0x3000 + offset?)
0x3008 00 00 00 C8 // start of first EVO (value + current offset)
...
00 00 3B 88 // offset to last EVO
// start of EVO data
0x3208 20 00
<filename> followed by 00...
0x3310 00 05 00 00 0D 4C 00 28 D5 69 00 00 7B B5 00 02 // 16 bytes (not EVO size) last byte is evo number
00 00 00 00 00 00 // 6 bytes
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF // 16 bytes
00... // 18 bytes
* skipped bunch of entries *
// zero bytes signals end of EVO table?
0x6CC8 00... // 320 bytes (name)
00... to the end // 18 bytes
The map file is the biggest mystery though. Here's what I've got so far:
0x0000 HDDVD_TMAP00
0x000F 0F // no of chapters?
00 00 00 10 20
00....00
// VTI table?
0x0038 01 // no of VTIs?
FF FF FF FF
FF FF FF FF
00....00
0x0072 HVA00001.VTI // size 0x110 bytes (/16=17)
00....00
0x0182 01 A0 // offset of start of table
0x0184 00 13 // file no in VTI
0x0186 1D CA // no of 4-byte pieces
0x0188 00....00 // reserved?
// size 0x7728 / 4 = 0x1DCA
0x01A0 00 C4 00 52
00 C4 60 63
00 C4 60 93
00 C4 60 99
etc...
0x78C8 00....00
So is there anyone who can fill in the gaps? I'm guessing some of the values I haven't figured out yet are used to pinpoint the start of each chapter. But how does it all come together? Is there a link between the values in the above files and balues in the PES header? If so, what's the link?
In short: what information is needed to find a chapter and where is that information stored? Any help on this would be appreciated.
edit:
hmmmz, is this the right subforum for these kind of questions?
I figured these 4 files are needed to accomplish the task;
- the .xpl file where the chapter name and timestamp are located
- the .map file corresponding to the EVO
- the .vti file
- and the EVO file itself containing video
Atm I've got the following already done; made an xpl parser, so the chapter names are no problem. I'm also able to scan/view the EVO file to see which packets are there (stream ID's and payload length).
Where I'm stuck is parsing the map and vti files. A bit of reverse engineering gave insight in how the files are build up. Doesn't give a 100% picture, but I've found some tables with for example offsets to other tables containing basic info about the EVO files. This is mostly in the vti file where I've found a datablock block for each evo file.
Here's how far I've gotton. The offsets are mainly from the Bourne Identity disc, but I've compared the results with some other discs aswell:
0x0000 ADVANCED-VTS
...
0x001F 0D 00 10 00 00 00 02 // ?
...
0x0080 00 00 03 FF // ?
...
0x00BB 01 00 00 00 06 // ?
...
// start of offset table?
0x0800 00 08 00 00 // start of table (current + offset)?
00 00 20 27 // ? 8*0x400 = 0x2000 -> 0x27 remaining
0x0808 00 00 00 28 // start of 0x400 blocks (0x0800 + offset)?
...
00 00 1C 28
0x0828 00 00 6B 10 C0....01 1C 00 D4 // 0 (start of 0x400 blocks)
...
0x0C28 05 00 6B 10 C0 00 60 10 50.... // after prev 0x400
00 00 00 00 00 00
06 // no of repeats
1C 00 D4 00
...
1C 00 D4 00
0x0CE9 01 // no of repeats
1C C4 00
0x0D0D 20 // no of repeats
80 20 00 00 00
80 xx 00 00 00 // xx increases 1 each time
80 3F 00 00 00
* cut entries *
0x1C28 00 00 20 00 50....01 1C 00 C4 // after prev 0x400, last one
...
0x2428 10 00 6B 10 C0....01 1C 00 C4 // where does this one come from?
...
// start of EVO table?
0x3002 00 30 // no of EVO's
00 00 // reserved?
3C C7 // end address (last byte), including padding?
// total blocksize is 36*16 byte (starting at 0x3000 + offset?)
0x3008 00 00 00 C8 // start of first EVO (value + current offset)
...
00 00 3B 88 // offset to last EVO
// start of EVO data
0x3208 20 00
<filename> followed by 00...
0x3310 00 05 00 00 0D 4C 00 28 D5 69 00 00 7B B5 00 02 // 16 bytes (not EVO size) last byte is evo number
00 00 00 00 00 00 // 6 bytes
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF // 16 bytes
00... // 18 bytes
* skipped bunch of entries *
// zero bytes signals end of EVO table?
0x6CC8 00... // 320 bytes (name)
00... to the end // 18 bytes
The map file is the biggest mystery though. Here's what I've got so far:
0x0000 HDDVD_TMAP00
0x000F 0F // no of chapters?
00 00 00 10 20
00....00
// VTI table?
0x0038 01 // no of VTIs?
FF FF FF FF
FF FF FF FF
00....00
0x0072 HVA00001.VTI // size 0x110 bytes (/16=17)
00....00
0x0182 01 A0 // offset of start of table
0x0184 00 13 // file no in VTI
0x0186 1D CA // no of 4-byte pieces
0x0188 00....00 // reserved?
// size 0x7728 / 4 = 0x1DCA
0x01A0 00 C4 00 52
00 C4 60 63
00 C4 60 93
00 C4 60 99
etc...
0x78C8 00....00
So is there anyone who can fill in the gaps? I'm guessing some of the values I haven't figured out yet are used to pinpoint the start of each chapter. But how does it all come together? Is there a link between the values in the above files and balues in the PES header? If so, what's the link?
In short: what information is needed to find a chapter and where is that information stored? Any help on this would be appreciated.
edit:
hmmmz, is this the right subforum for these kind of questions?