872df7c677d15c381a3b2370a92ef96e2c1915e1
[dcpomatic.git] / dvd / test.cc
1 #include <iostream>
2 #include <dvdread/dvd_reader.h>
3 #include <dvdread/ifo_read.h>
4
5 using namespace std;
6
7 int dvdtime2msec(dvd_time_t *dt)
8 {
9         float fps = 0;
10         switch ((dt->frame_u & 0xc0) >> 6) {
11         case 1:
12                 fps = 25;
13                 break;
14         case 3:
15                 fps = 29.97;
16                 break;
17         }
18         
19         int ms = (((dt->hour & 0xf0) >> 3) * 5 + (dt->hour & 0x0f)) * 3600000;
20         ms += (((dt->minute & 0xf0) >> 3) * 5 + (dt->minute & 0x0f)) * 60000;
21         ms += (((dt->second & 0xf0) >> 3) * 5 + (dt->second & 0x0f)) * 1000;
22
23         if (fps > 0) {
24                 ms += ((dt->frame_u & 0x30) >> 3) * 5 + (dt->frame_u & 0x0f) * 1000.0 / fps;
25         }
26
27         return ms;
28 }
29
30 int main ()
31 {
32         dvd_reader_t* dvd = DVDOpen ("/home/carl/Video/Asterix/VIDEO_TS");
33         if (dvd == 0) {
34                 cerr << "bad.\n";
35         }
36
37         ifo_handle_t* zero = ifoOpen (dvd, 0);
38         if (zero == 0) {
39                 cerr << "bad.\n";
40         }
41
42         ifo_handle_t** ifo = new ifo_handle_t*[zero->vts_atrt->nr_of_vtss + 1];
43         ifo[0] = zero;
44         for (int i = 1; i <= ifo[0]->vts_atrt->nr_of_vtss; ++i) {
45                 ifo[i] = ifoOpen (dvd, i);
46                 if (ifo[i] == 0) {
47                         cerr << "bad\n";
48                 }
49         }
50
51         cout << "ifos = " << zero->vts_atrt->nr_of_vtss << "\n";
52
53         int const titles = ifo[0]->tt_srpt->nr_of_srpts;
54
55         for (int i = 0; i < titles; ++i) {
56                 cout << "Title " << i << "\n";
57                 int const title_set_nr = ifo[0]->tt_srpt->title[i].title_set_nr;
58                 cout << "\ttitle_set_nr " << title_set_nr << "\n";
59                 int const vts_ttn = ifo[0]->tt_srpt->title[i].vts_ttn;
60                 pgcit_t* pgcit = ifo[title_set_nr]->vts_pgcit;
61                 pgc_t* pgc = pgcit->pgci_srp[ifo[title_set_nr]->vts_ptt_srpt->title[vts_ttn - 1].ptt[0].pgcn - 1].pgc;
62                 cout << "\t" << dvdtime2msec (&pgc->playback_time) / 1000 << " seconds\n";
63
64                 cout << "\t " << ((int) pgc->nr_of_programs) << " chapters.\n";
65         }
66
67         return 0;
68 }