[MPlayer-cvslog] CVS: main/libmpdemux stream_dvd.c,1.2,1.3
Guillaume Poirier CVS
syncmail at mplayerhq.hu
Thu Sep 22 09:40:27 CEST 2005
- Previous message: [MPlayer-cvslog] CVS: main/DOCS/tech mpcf.txt,1.77,1.78
- Next message: [MPlayer-cvslog] CVS: main/libmpdemux vcd_read_nbsd.h, 1.5, 1.6 vcd_read_fbsd.h, 1.7, 1.8 vcd_read_darwin.h, 1.2, 1.3 vcd_read.h, 1.14, 1.15
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
CVS change done by Guillaume Poirier CVS
Update of /cvsroot/mplayer/main/libmpdemux
In directory mail:/var2/tmp/cvs-serv18371/libmpdemux
Modified Files:
stream_dvd.c
Log Message:
Prints the number of titles, DVD disk ID, the numbers of chapters and
angles for each title, and the time length of each title if -identify
is given when playing a DVD.
Patch by kiriuja < mplayer TIREH patches AH en TIREH directo POIS net >
Original thread at:
Date: Sep 16, 2005 12:24 AM
Subject: [MPlayer-dev-eng] [PATCH] -identify DVD titles
Index: stream_dvd.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpdemux/stream_dvd.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- stream_dvd.c 22 May 2005 22:35:44 -0000 1.2
+++ stream_dvd.c 22 Sep 2005 07:40:25 -0000 1.3
@@ -407,6 +407,23 @@
#endif
}
+/**
+\brief Converts DVD time structure to milliseconds.
+\param *dev the DVD time structure to convert
+\return returns the time in milliseconds
+*/
+static int dvdtimetomsec(dvd_time_t *dt)
+{
+ static int framerates[4] = {0, 2500, 0, 2997};
+ int framerate = framerates[(dt->frame_u & 0xc0) >> 6];
+ int msec = (((dt->hour & 0xf0) >> 3) * 5 + (dt->hour & 0x0f)) * 3600000;
+ msec += (((dt->minute & 0xf0) >> 3) * 5 + (dt->minute & 0x0f)) * 60000;
+ msec += (((dt->second & 0xf0) >> 3) * 5 + (dt->second & 0x0f)) * 1000;
+ if(framerate > 0)
+ msec += (((dt->frame_u & 0x30) >> 3) * 5 + (dt->frame_u & 0x0f)) * 100000 / framerate;
+ return msec;
+}
+
static int open_s(stream_t *stream,int mode, void* opts, int* file_format) {
struct stream_priv_s* p = (struct stream_priv_s*)opts;
char *filename;
@@ -474,6 +491,46 @@
return STREAM_UNSUPORTED;
}
tt_srpt = vmg_file->tt_srpt;
+ if (identify)
+ {
+ unsigned char discid [16]; ///< disk ID, a 128 bit MD5 sum
+ int vts_no; ///< video title set number
+ int title_no; ///< title number
+ int vts_ttn; ///< title number within video title set
+ int pgc_no; ///< program chain number
+ int msec; ///< time length in milliseconds
+ mp_msg(MSGT_GLOBAL, MSGL_INFO, "ID_DVD_TITLES=%d\n", tt_srpt->nr_of_srpts);
+ for (title_no = 0; title_no < tt_srpt->nr_of_srpts; title_no++)
+ {
+ mp_msg(MSGT_GLOBAL, MSGL_INFO, "ID_DVD_TITLE_%d_CHAPTERS=%d\n", title_no + 1, tt_srpt->title[title_no].nr_of_ptts);
+ mp_msg(MSGT_GLOBAL, MSGL_INFO, "ID_DVD_TITLE_%d_ANGLES=%d\n", title_no + 1, tt_srpt->title[title_no].nr_of_angles);
+ }
+ for (vts_no = 1; vts_no <= vmg_file->vts_atrt->nr_of_vtss; vts_no++)
+ {
+ vts_file = ifoOpen(dvd, vts_no);
+ if (vts_file)
+ {
+ if (vts_file->vtsi_mat && vts_file->vts_pgcit)
+ for (title_no = 0; title_no < tt_srpt->nr_of_srpts; title_no++)
+ if (tt_srpt->title[title_no].title_set_nr == vts_no)
+ {
+ vts_ttn = tt_srpt->title[title_no].vts_ttn - 1;
+ pgc_no = vts_file->vts_ptt_srpt->title[vts_ttn].ptt[0].pgcn - 1;
+ msec = dvdtimetomsec(&vts_file->vts_pgcit->pgci_srp[pgc_no].pgc->playback_time);
+ mp_msg(MSGT_GLOBAL, MSGL_INFO, "ID_DVD_TITLE_%d_LENGTH=%d.%03d\n", title_no + 1, msec / 1000, msec % 1000);
+ }
+ ifoClose(vts_file);
+ }
+ }
+ if (DVDDiscID(dvd, discid) >= 0)
+ {
+ int i;
+ char buf[33];
+ for (i = 0; i < 16; i ++)
+ sprintf(buf+2*i, "%02X", discid[i]);
+ mp_msg(MSGT_GLOBAL, MSGL_INFO, "ID_DVD_DISC_ID=%s\n", buf);
+ }
+ }
/**
* Make sure our title number is valid.
*/
- Previous message: [MPlayer-cvslog] CVS: main/DOCS/tech mpcf.txt,1.77,1.78
- Next message: [MPlayer-cvslog] CVS: main/libmpdemux vcd_read_nbsd.h, 1.5, 1.6 vcd_read_fbsd.h, 1.7, 1.8 vcd_read_darwin.h, 1.2, 1.3 vcd_read.h, 1.14, 1.15
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the MPlayer-cvslog
mailing list