summaryrefslogtreecommitdiffstats
path: root/libmpdvdkit2/ifo_print.c
diff options
context:
space:
mode:
authoraurel <aurel@b3059339-0415-0410-9bf9-f77b7e298cf2>2005-06-30 22:48:26 +0000
committeraurel <aurel@b3059339-0415-0410-9bf9-f77b7e298cf2>2005-06-30 22:48:26 +0000
commiteb3c1b5cedfc1b7d35a2d261780979b00170946e (patch)
treeccc33eb81679684b7f2ca3d7c610d721375c4ea5 /libmpdvdkit2/ifo_print.c
parentc8fbf4405d7b433f0dc622bc9dcf81d0ceb5ef36 (diff)
downloadmpv-eb3c1b5cedfc1b7d35a2d261780979b00170946e.tar.bz2
mpv-eb3c1b5cedfc1b7d35a2d261780979b00170946e.tar.xz
update libdvdread to v0.9.4
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@15875 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdvdkit2/ifo_print.c')
-rw-r--r--libmpdvdkit2/ifo_print.c245
1 files changed, 170 insertions, 75 deletions
diff --git a/libmpdvdkit2/ifo_print.c b/libmpdvdkit2/ifo_print.c
index 5da0ebcd61..6d5b54acfa 100644
--- a/libmpdvdkit2/ifo_print.c
+++ b/libmpdvdkit2/ifo_print.c
@@ -1,10 +1,7 @@
/*
- * Copyright (C) 2000, 2001, 2002 Björn Englund <d4bjorn@dtek.chalmers.se>,
- * Håkan Hjort <d95hjort@dtek.chalmers.se>
- *
- * Modified for use with MPlayer, changes contained in libdvdread_changes.diff.
- * detailed CVS changelog at http://www.mplayerhq.hu/cgi-bin/cvsweb.cgi/main/
- * $Id$
+ * Copyright (C) 2000, 2001, 2002, 2003
+ * Björn Englund <d4bjorn@dtek.chalmers.se>,
+ * Håkan Hjort <d95hjort@dtek.chalmers.se>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,26 +18,27 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+#include "config.h"
+
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <inttypes.h>
#include <string.h>
#include <ctype.h>
-//#include <assert.h>
-#include "config.h" // Needed for WORDS_BIGENDIAN
#include "ifo_types.h"
#include "ifo_read.h"
#include "ifo_print.h"
+#include "dvdread_internal.h"
/* Put this in some other file / package? It's used in nav_print too. */
-static void ifoPrint_time(int level, dvd_time_t *dtime) {
+static void ifoPrint_time(dvd_time_t *dtime) {
const char *rate;
- assert((dtime->hour>>4) < 0xa && (dtime->hour&0xf) < 0xa);
- assert((dtime->minute>>4) < 0x7 && (dtime->minute&0xf) < 0xa);
- assert((dtime->second>>4) < 0x7 && (dtime->second&0xf) < 0xa);
- assert((dtime->frame_u&0xf) < 0xa);
+ CHECK_VALUE((dtime->hour>>4) < 0xa && (dtime->hour&0xf) < 0xa);
+ CHECK_VALUE((dtime->minute>>4) < 0x7 && (dtime->minute&0xf) < 0xa);
+ CHECK_VALUE((dtime->second>>4) < 0x7 && (dtime->second&0xf) < 0xa);
+ CHECK_VALUE((dtime->frame_u&0xf) < 0xa);
printf("%02x:%02x:%02x.%02x",
dtime->hour,
@@ -79,7 +77,7 @@ static void ifoPrint_CMD(int row, vm_cmd_t *command) {
printf("\n");
}
-static void ifoPrint_video_attributes(int level, video_attr_t *attr) {
+static void ifoPrint_video_attributes(video_attr_t *attr) {
/* The following test is shorter but not correct ISO C,
memcmp(attr,my_friendly_zeros, sizeof(video_attr_t)) */
@@ -90,6 +88,7 @@ static void ifoPrint_video_attributes(int level, video_attr_t *attr) {
&& attr->unknown1 == 0
&& attr->line21_cc_1 == 0
&& attr->line21_cc_2 == 0
+ && attr->bit_rate == 0
&& attr->video_format == 0
&& attr->letterboxed == 0
&& attr->film_mode == 0) {
@@ -149,7 +148,7 @@ static void ifoPrint_video_attributes(int level, video_attr_t *attr) {
}
printf("U%x ", attr->unknown1);
- assert(!attr->unknown1);
+ CHECK_VALUE(!attr->unknown1);
if(attr->line21_cc_1 || attr->line21_cc_2) {
printf("NTSC CC ");
@@ -158,6 +157,17 @@ static void ifoPrint_video_attributes(int level, video_attr_t *attr) {
if(attr->line21_cc_2)
printf("2 ");
}
+
+ switch(attr->bit_rate) {
+ case 0:
+ printf("Variable Bit Rate ");
+ break;
+ case 1:
+ printf("Constant Bit Rate ");
+ break;
+ default:
+ printf("(please send a bug report)");
+ }
{
int height = 480;
@@ -192,7 +202,7 @@ static void ifoPrint_video_attributes(int level, video_attr_t *attr) {
}
}
-static void ifoPrint_audio_attributes(int level, audio_attr_t *attr) {
+static void ifoPrint_audio_attributes(audio_attr_t *attr) {
if(attr->audio_format == 0
&& attr->multichannel_extension == 0
@@ -201,8 +211,10 @@ static void ifoPrint_audio_attributes(int level, audio_attr_t *attr) {
&& attr->quantization == 0
&& attr->sample_frequency == 0
&& attr->channels == 0
+ && attr->lang_code == 0
&& attr->lang_extension == 0
- && attr->unknown1 == 0
+ && attr->code_extension == 0
+ && attr->unknown3 == 0
&& attr->unknown1 == 0) {
printf("-- Unspecified --");
return;
@@ -240,10 +252,11 @@ static void ifoPrint_audio_attributes(int level, audio_attr_t *attr) {
switch(attr->lang_type) {
case 0:
// not specified
- assert(attr->lang_code == 0 || attr->lang_code == 0xffff);
+ CHECK_VALUE(attr->lang_code == 0 || attr->lang_code == 0xffff);
break;
case 1:
- printf("%c%c ", attr->lang_code>>8, attr->lang_code & 0xff);
+ printf("%c%c (%c) ", attr->lang_code>>8, attr->lang_code & 0xff,
+ attr->lang_extension ? attr->lang_extension : ' ');
break;
default:
printf("(please send a bug report) ");
@@ -294,7 +307,7 @@ static void ifoPrint_audio_attributes(int level, audio_attr_t *attr) {
printf("%dCh ", attr->channels + 1);
- switch(attr->lang_extension) {
+ switch(attr->code_extension) {
case 0:
printf("Not specified ");
break;
@@ -315,34 +328,64 @@ static void ifoPrint_audio_attributes(int level, audio_attr_t *attr) {
printf("(please send a bug report) ");
}
- printf("%d ", attr->unknown1);
- printf("%d ", attr->unknown2);
+ printf("%d ", attr->unknown3);
+ if(attr->application_mode == 1) {
+ printf("ca=%d ", attr->app_info.karaoke.channel_assignment);
+ printf("%d ", attr->app_info.karaoke.version);
+ if(attr->app_info.karaoke.mc_intro)
+ printf("mc intro ");
+ printf("%s ", attr->app_info.karaoke.mode ? "duet" : "solo");
+ printf("%d ", attr->app_info.karaoke.unknown4);
+ }
+ if(attr->application_mode == 2) {
+ if(attr->app_info.surround.dolby_encoded) {
+ printf("dolby surround ");
+ }
+ printf("%d ", attr->app_info.surround.unknown5);
+ printf("%d ", attr->app_info.surround.unknown6);
+ }
}
-static void ifoPrint_subp_attributes(int level, subp_attr_t *attr) {
+static void ifoPrint_subp_attributes(subp_attr_t *attr) {
if(attr->type == 0
+ && attr->code_mode == 0
&& attr->lang_code == 0
+ && attr->lang_extension == 0
&& attr->zero1 == 0
&& attr->zero2 == 0
- && attr->lang_extension== 0) {
+ && attr->code_extension == 0) {
printf("-- Unspecified --");
return;
}
- printf("type %02x ", attr->type);
-
- if(isalpha((int)(attr->lang_code >> 8))
- && isalpha((int)(attr->lang_code & 0xff))) {
- printf("%c%c ", attr->lang_code >> 8, attr->lang_code & 0xff);
+ switch(attr->code_mode) {
+ case 0:
+ printf("Coding Mode RLE ");
+ break;
+ case 1:
+ printf("Coding Mode Extended ");
+ break;
+ default:
+ printf("(please send a bug report) ");
+ }
+
+ if(attr->type == 1) {
+ if(isalpha((int)(attr->lang_code >> 8))
+ && isalpha((int)(attr->lang_code & 0xff))) {
+ printf("%c%c ", attr->lang_code >> 8, attr->lang_code & 0xff);
+ } else {
+ printf("%02x%02x ", attr->lang_code >> 8, attr->lang_code & 0xff);
+ }
} else {
- printf("%02x%02x ", 0xff & (unsigned)(attr->lang_code >> 8),
- 0xff & (unsigned)(attr->lang_code & 0xff));
+ printf("lang not specified ");
}
printf("%d ", attr->zero1);
printf("%d ", attr->zero2);
-
+ printf("%d ", attr->code_extension);
+
+ /* Is this correct? should it not be subp_code_ext here instead? */
switch(attr->lang_extension) {
case 0:
printf("Not specified ");
@@ -498,20 +541,20 @@ void ifoPrint_VMGI_MAT(vmgi_mat_t *vmgi_mat) {
printf("Start sector of VMGM_VOBU_ADMAP: %08x\n",
vmgi_mat->vmgm_vobu_admap);
printf("Video attributes of VMGM_VOBS: ");
- ifoPrint_video_attributes(5, &vmgi_mat->vmgm_video_attr);
+ ifoPrint_video_attributes(&vmgi_mat->vmgm_video_attr);
printf("\n");
printf("VMGM Number of Audio attributes: %i\n",
vmgi_mat->nr_of_vmgm_audio_streams);
if(vmgi_mat->nr_of_vmgm_audio_streams > 0) {
printf("\tstream %i status: ", 1);
- ifoPrint_audio_attributes(5, &vmgi_mat->vmgm_audio_attr);
+ ifoPrint_audio_attributes(&vmgi_mat->vmgm_audio_attr);
printf("\n");
}
printf("VMGM Number of Sub-picture attributes: %i\n",
vmgi_mat->nr_of_vmgm_subp_streams);
if(vmgi_mat->nr_of_vmgm_subp_streams > 0) {
printf("\tstream %2i status: ", 1);
- ifoPrint_subp_attributes(5, &vmgi_mat->vmgm_subp_attr);
+ ifoPrint_subp_attributes(&vmgi_mat->vmgm_subp_attr);
printf("\n");
}
}
@@ -540,14 +583,14 @@ void ifoPrint_VTSI_MAT(vtsi_mat_t *vtsi_mat) {
printf("Start sector of VTS_VOBU_ADMAP: %08x\n", vtsi_mat->vts_vobu_admap);
printf("Video attributes of VTSM_VOBS: ");
- ifoPrint_video_attributes(5, &vtsi_mat->vtsm_video_attr);
+ ifoPrint_video_attributes(&vtsi_mat->vtsm_video_attr);
printf("\n");
printf("VTSM Number of Audio attributes: %i\n",
vtsi_mat->nr_of_vtsm_audio_streams);
if(vtsi_mat->nr_of_vtsm_audio_streams > 0) {
printf("\tstream %i status: ", 1);
- ifoPrint_audio_attributes(5, &vtsi_mat->vtsm_audio_attr);
+ ifoPrint_audio_attributes(&vtsi_mat->vtsm_audio_attr);
printf("\n");
}
@@ -555,19 +598,19 @@ void ifoPrint_VTSI_MAT(vtsi_mat_t *vtsi_mat) {
vtsi_mat->nr_of_vtsm_subp_streams);
if(vtsi_mat->nr_of_vtsm_subp_streams > 0) {
printf("\tstream %2i status: ", 1);
- ifoPrint_subp_attributes(5, &vtsi_mat->vtsm_subp_attr);
+ ifoPrint_subp_attributes(&vtsi_mat->vtsm_subp_attr);
printf("\n");
}
printf("Video attributes of VTS_VOBS: ");
- ifoPrint_video_attributes(5, &vtsi_mat->vts_video_attr);
+ ifoPrint_video_attributes(&vtsi_mat->vts_video_attr);
printf("\n");
printf("VTS Number of Audio attributes: %i\n",
vtsi_mat->nr_of_vts_audio_streams);
for(i = 0; i < vtsi_mat->nr_of_vts_audio_streams; i++) {
printf("\tstream %i status: ", i);
- ifoPrint_audio_attributes(5, &vtsi_mat->vts_audio_attr[i]);
+ ifoPrint_audio_attributes(&vtsi_mat->vts_audio_attr[i]);
printf("\n");
}
@@ -575,9 +618,11 @@ void ifoPrint_VTSI_MAT(vtsi_mat_t *vtsi_mat) {
vtsi_mat->nr_of_vts_subp_streams);
for(i = 0; i < vtsi_mat->nr_of_vts_subp_streams; i++) {
printf("\tstream %2i status: ", i);
- ifoPrint_subp_attributes(5, &vtsi_mat->vts_subp_attr[i]);
+ ifoPrint_subp_attributes(&vtsi_mat->vts_subp_attr[i]);
printf("\n");
}
+
+ /* FIXME: Add printing of MultiChannel Extension */
}
@@ -631,7 +676,7 @@ static void ifoPrint_CELL_PLAYBACK(cell_playback_t *cell_playback, int nr) {
for(i=0;i<nr;i++) {
printf("Cell: %3i ", i + 1);
- ifoPrint_time(5, &cell_playback[i].playback_time);
+ ifoPrint_time(&cell_playback[i].playback_time);
printf("\t");
if(cell_playback[i].block_mode || cell_playback[i].block_type) {
@@ -709,7 +754,7 @@ void ifoPrint_PGC(pgc_t *pgc) {
printf("Number of Cells: %i\n", pgc->nr_of_cells);
/* Check that time is 0:0:0:0 also if nr_of_programs==0 */
printf("Playback time: ");
- ifoPrint_time(5, &pgc->playback_time); printf("\n");
+ ifoPrint_time(&pgc->playback_time); printf("\n");
/* If no programs/no time then does this mean anything? */
printf("Prohibited user operations: ");
@@ -734,7 +779,12 @@ void ifoPrint_PGC(pgc_t *pgc) {
printf("GoUp PGC number: %i\n", pgc->goup_pgc_nr);
if(pgc->nr_of_programs != 0) {
printf("Still time: %i seconds (255=inf)\n", pgc->still_time);
- printf("PG Playback mode %02x\n", pgc->pg_playback_mode);
+ if(pgc->pg_playback_mode == 0)
+ printf("PG Playback mode: Sequential\n");
+ else if(!(pgc->pg_playback_mode & 0x80))
+ printf("PG Playback mode: Random %i\n", pgc->pg_playback_mode);
+ else
+ printf("PG Playback mode: Shuffle %i\n", pgc->pg_playback_mode & 0x7f );
}
if(pgc->nr_of_programs != 0) {
@@ -764,8 +814,23 @@ void ifoPrint_TT_SRPT(tt_srpt_t *tt_srpt) {
printf("\tNumber of PTTs: %i\n", tt_srpt->title[i].nr_of_ptts);
printf("\tNumber of angles: %i\n",
tt_srpt->title[i].nr_of_angles);
- printf("\tTitle playback type: %02x\n", /* XXX: TODO FIXME */
- *(uint8_t *)&(tt_srpt->title[i].pb_ty));
+ printf("\tTitle playback type: %s%s%s%s%s%s%s\n",
+ tt_srpt->title[i].pb_ty.multi_or_random_pgc_title ?
+ " One Random PGC Title or Multi PGC Title" :
+ " One Sequential PGC Title",
+ tt_srpt->title[i].pb_ty.jlc_exists_in_cell_cmd ?
+ "" : ", No Link/Jump/Call exists in Cell command",
+ tt_srpt->title[i].pb_ty.jlc_exists_in_prepost_cmd ?
+ "" : ", No Link/Jump/Call exists in Pre- and/or Post-command",
+ tt_srpt->title[i].pb_ty.jlc_exists_in_button_cmd ?
+ "" : ", No Link/Jump/Call exists in Button command",
+ tt_srpt->title[i].pb_ty.jlc_exists_in_tt_dom ?
+ "" : ", No Link/Jump/Call exists in TT_DOM",
+ tt_srpt->title[i].pb_ty.chapter_search_or_play ?
+ ", UOP1 (TT_Play and PTT_Search) prohibited" : "",
+ tt_srpt->title[i].pb_ty.title_or_time_play ?
+ ", UOP0 (Time_Play and Time_Search) prohibited" : ""
+ );
printf("\tParental ID field: %04x\n",
tt_srpt->title[i].parental_id);
printf("\tTitle set starting sector %08x\n",
@@ -780,6 +845,8 @@ void ifoPrint_VTS_PTT_SRPT(vts_ptt_srpt_t *vts_ptt_srpt) {
vts_ptt_srpt->nr_of_srpts,
vts_ptt_srpt->last_byte);
for(i=0;i<vts_ptt_srpt->nr_of_srpts;i++) {
+ printf("\nVTS_PTT number %d has a offset %d relative to VTS_PTT_SRPT\n",
+ i + 1, vts_ptt_srpt->ttu_offset[i]);
for(j=0;j<vts_ptt_srpt->title[i].nr_of_ptts;j++) {
printf("VTS_PTT_SRPT - Title %3i part %3i: PGC: %3i PG: %3i\n",
i + 1, j + 1,
@@ -790,40 +857,57 @@ void ifoPrint_VTS_PTT_SRPT(vts_ptt_srpt_t *vts_ptt_srpt) {
}
-static void hexdump(uint8_t *ptr, int len) {
- while(len--)
- printf("%02x ", *ptr++);
-}
-
void ifoPrint_PTL_MAIT(ptl_mait_t *ptl_mait) {
- int i, j;
+ int i, level, vts;
printf("Number of Countries: %i\n", ptl_mait->nr_of_countries);
printf("Number of VTSs: %i\n", ptl_mait->nr_of_vtss);
- //printf("Last byte: %i\n", ptl_mait->last_byte);
+ printf("Last byte: %i\n", ptl_mait->last_byte);
for(i = 0; i < ptl_mait->nr_of_countries; i++) {
- printf("Country code: %c%c\n",
+
+ printf("Start byte: %i\n", ptl_mait->countries[i].pf_ptl_mai_start_byte);
+ printf("Parental Masks for country: %c%c\n",
ptl_mait->countries[i].country_code >> 8,
ptl_mait->countries[i].country_code & 0xff);
- /*
- printf("Start byte: %04x %i\n",
- ptl_mait->countries[i].pf_ptl_mai_start_byte,
- ptl_mait->countries[i].pf_ptl_mai_start_byte);
- */
- /* This seems to be pointing at a array with 8 2byte fields per VTS
- ? and one extra for the menu? always an odd number of VTSs on
- all the dics I tested so it might be padding to even also.
- If it is for the menu it probably the first entry. */
- for(j=0;j<8;j++) {
- hexdump( (uint8_t *)ptl_mait->countries - PTL_MAIT_COUNTRY_SIZE
- + ptl_mait->countries[i].pf_ptl_mai_start_byte
- + j*(ptl_mait->nr_of_vtss+1)*2, (ptl_mait->nr_of_vtss+1)*2);
+
+ for(vts = 0; vts <= ptl_mait->nr_of_vtss; vts++) {
+ if( vts == 0 ) {
+ printf("VMG ");
+ } else {
+ printf("VTS %2d ", vts);
+ }
+ for(level = 0; level < 8; level++) {
+ printf("%d: %04x ", level,
+ ptl_mait->countries[i].pf_ptl_mai[vts][level] );
+ }
printf("\n");
}
}
}
+void ifoPrint_VTS_TMAPT(vts_tmapt_t *vts_tmapt) {
+ unsigned int timeunit;
+ int i, j;
+
+ printf("Number of VTS_TMAPS: %i\n", vts_tmapt->nr_of_tmaps);
+ printf("Last byte: %i\n", vts_tmapt->last_byte);
+
+ for(i = 0; i < vts_tmapt->nr_of_tmaps; i++) {
+ printf("TMAP %i\n", i + 1);
+ printf(" offset %d relative to VTS_TMAPTI\n", vts_tmapt->tmap_offset[i]);
+ printf(" Time unit (seconds): %i\n", vts_tmapt->tmap[i].tmu);
+ printf(" Number of entries: %i\n", vts_tmapt->tmap[i].nr_of_entries);
+ timeunit = vts_tmapt->tmap[i].tmu;
+ for(j = 0; j < vts_tmapt->tmap[i].nr_of_entries; j++) {
+ unsigned int ac_time = timeunit * (j + 1);
+ printf("Time: %2i:%02i:%02i VOBU Sector: 0x%08x %s\n",
+ ac_time / (60 * 60), (ac_time / 60) % 60, ac_time % 60,
+ vts_tmapt->tmap[i].map_ent[j] & 0x7fffffff,
+ (vts_tmapt->tmap[i].map_ent[j] >> 31) ? "discontinuity" : "");
+ }
+ }
+}
void ifoPrint_C_ADT(c_adt_t *c_adt) {
int i, entries;
@@ -870,9 +954,10 @@ void ifoPrint_PGCI_UT(pgci_ut_t *pgci_ut) {
printf("Number of Menu Language Units (PGCI_LU): %3i\n", pgci_ut->nr_of_lus);
for(i = 0; i < pgci_ut->nr_of_lus; i++) {
- printf("\nMenu Language Code: %c%c\n",
+ printf("\nMenu Language Code: %c%c (%c)\n",
pgci_ut->lu[i].lang_code >> 8,
- pgci_ut->lu[i].lang_code & 0xff);
+ pgci_ut->lu[i].lang_code & 0xff,
+ pgci_ut->lu[i].lang_extension ? pgci_ut->lu[i].lang_extension :' ');
printf("Menu Existence: %02x\n", pgci_ut->lu[i].exists);
ifoPrint_PGCIT(pgci_ut->lu[i].pgcit);
}
@@ -885,31 +970,31 @@ static void ifoPrint_VTS_ATTRIBUTES(vts_attributes_t *vts_attributes) {
printf("VTS_CAT Application type: %08x\n", vts_attributes->vts_cat);
printf("Video attributes of VTSM_VOBS: ");
- ifoPrint_video_attributes(5, &vts_attributes->vtsm_vobs_attr);
+ ifoPrint_video_attributes(&vts_attributes->vtsm_vobs_attr);
printf("\n");
printf("Number of Audio streams: %i\n",
vts_attributes->nr_of_vtsm_audio_streams);
if(vts_attributes->nr_of_vtsm_audio_streams > 0) {
printf("\tstream %i attributes: ", 1);
- ifoPrint_audio_attributes(5, &vts_attributes->vtsm_audio_attr);
+ ifoPrint_audio_attributes(&vts_attributes->vtsm_audio_attr);
printf("\n");
}
printf("Number of Subpicture streams: %i\n",
vts_attributes->nr_of_vtsm_subp_streams);
if(vts_attributes->nr_of_vtsm_subp_streams > 0) {
printf("\tstream %2i attributes: ", 1);
- ifoPrint_subp_attributes(5, &vts_attributes->vtsm_subp_attr);
+ ifoPrint_subp_attributes(&vts_attributes->vtsm_subp_attr);
printf("\n");
}
printf("Video attributes of VTSTT_VOBS: ");
- ifoPrint_video_attributes(5, &vts_attributes->vtstt_vobs_video_attr);
+ ifoPrint_video_attributes(&vts_attributes->vtstt_vobs_video_attr);
printf("\n");
printf("Number of Audio streams: %i\n",
vts_attributes->nr_of_vtstt_audio_streams);
for(i = 0; i < vts_attributes->nr_of_vtstt_audio_streams; i++) {
printf("\tstream %i attributes: ", i);
- ifoPrint_audio_attributes(5, &vts_attributes->vtstt_audio_attr[i]);
+ ifoPrint_audio_attributes(&vts_attributes->vtstt_audio_attr[i]);
printf("\n");
}
@@ -917,7 +1002,7 @@ static void ifoPrint_VTS_ATTRIBUTES(vts_attributes_t *vts_attributes) {
vts_attributes->nr_of_vtstt_subp_streams);
for(i = 0; i < vts_attributes->nr_of_vtstt_subp_streams; i++) {
printf("\tstream %2i attributes: ", i);
- ifoPrint_subp_attributes(5, &vts_attributes->vtstt_subp_attr[i]);
+ ifoPrint_subp_attributes(&vts_attributes->vtstt_subp_attr[i]);
printf("\n");
}
}
@@ -929,6 +1014,8 @@ void ifoPrint_VTS_ATRT(vts_atrt_t *vts_atrt) {
printf("Number of Video Title Sets: %3i\n", vts_atrt->nr_of_vtss);
for(i = 0; i < vts_atrt->nr_of_vtss; i++) {
printf("\nVideo Title Set %i\n", i + 1);
+ printf(" offset %d relative to VMG_VTS_ATRT\n",
+ vts_atrt->vts_atrt_offsets[i]);
ifoPrint_VTS_ATTRIBUTES(&vts_atrt->vts[i]);
}
}
@@ -1022,6 +1109,14 @@ void ifoPrint(dvd_reader_t *dvd, int title) {
} else {
printf("No Menu PGCI Unit table present\n");
}
+
+ printf("\nTime Search table\n");
+ printf( "-----------------\n");
+ if(ifohandle->vts_tmapt) {
+ ifoPrint_VTS_TMAPT(ifohandle->vts_tmapt);
+ } else {
+ printf("No Time Search table present\n");
+ }
printf("\nMenu Cell Adress table\n");
printf( "-----------------\n");