annotate stream/stream_dvd.c @ 30367:2db4c1158df9

Make the scale filter prefer yuv conversions that do not need chroma scaling. Also always try keeping input and output format the same first.
author reimar
date Sat, 23 Jan 2010 19:00:09 +0000
parents 4f740437ed2b
children ce0122361a39
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
1
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
2
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
3 #include <ctype.h>
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
4 #include <stdio.h>
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
5 #include <stdlib.h>
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
6 #include <string.h>
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
7 #include <unistd.h>
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
8 #include <string.h>
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
9
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
10 #include "config.h"
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
11 #include "mp_msg.h"
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
12 #include "help_mp.h"
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
13
25210
92204ff32b27 When IFO file is opened (detected by extension), set dvd-device to IFO file's
voroshil
parents: 25187
diff changeset
14 #include <libgen.h>
25031
5e1e61012a05 report why the dvd couldn't be opened. Patch by Jan Knutar jknutar+nic+fi
nicodvb
parents: 24986
diff changeset
15 #include <errno.h>
5e1e61012a05 report why the dvd couldn't be opened. Patch by Jan Knutar jknutar+nic+fi
nicodvb
parents: 24986
diff changeset
16
16649
e1d6fbd607e0 Fix DVD audio and subtitle stream mapping, esp. for DVD with both 4:3 and
reimar
parents: 16544
diff changeset
17 #define FIRST_AC3_AID 128
e1d6fbd607e0 Fix DVD audio and subtitle stream mapping, esp. for DVD with both 4:3 and
reimar
parents: 16544
diff changeset
18 #define FIRST_DTS_AID 136
e1d6fbd607e0 Fix DVD audio and subtitle stream mapping, esp. for DVD with both 4:3 and
reimar
parents: 16544
diff changeset
19 #define FIRST_MPG_AID 0
e1d6fbd607e0 Fix DVD audio and subtitle stream mapping, esp. for DVD with both 4:3 and
reimar
parents: 16544
diff changeset
20 #define FIRST_PCM_AID 160
e1d6fbd607e0 Fix DVD audio and subtitle stream mapping, esp. for DVD with both 4:3 and
reimar
parents: 16544
diff changeset
21
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
22 #include "stream.h"
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16793
diff changeset
23 #include "m_option.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16793
diff changeset
24 #include "m_struct.h"
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
25
18682
bee3186a06f7 include stream_dvd's interface from libmpdemux/stream_dvd.h
nicodvb
parents: 18366
diff changeset
26 #include "stream_dvd.h"
23993
2107f38b6ca1 Moved dvdtimetomsec to stream_dvd_common.c.
cehoyos
parents: 23691
diff changeset
27 #include "stream_dvd_common.h"
21926
a8cd73869242 at open() assign *file_format=DEMUXER_TYPE_MPEG_PS to avoid useless demuxer probing
nicodvb
parents: 21731
diff changeset
28 #include "libmpdemux/demuxer.h"
18682
bee3186a06f7 include stream_dvd's interface from libmpdemux/stream_dvd.h
nicodvb
parents: 18366
diff changeset
29
27163
704a4fdb762a added support for the device part in the url; patch by
nicodvb
parents: 26833
diff changeset
30 static char* dvd_device_current;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
31 int dvd_angle=1;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
32
17257
1188874fd68b fix dvdread version macro
rathann
parents: 17191
diff changeset
33 #define LIBDVDREAD_VERSION(maj,min,micro) ((maj)*10000 + (min)*100 + (micro))
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
34 /*
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
35 * Try to autodetect the libdvd-0.9.0 library
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
36 * (0.9.0 removed the <dvdread/dvd_udf.h> header, and moved the two defines
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
37 * DVD_VIDEO_LB_LEN and MAX_UDF_FILE_NAME_LEN from it to
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
38 * <dvdread/dvd_reader.h>)
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
39 */
17257
1188874fd68b fix dvdread version macro
rathann
parents: 17191
diff changeset
40 #ifndef DVDREAD_VERSION
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
41 #if defined(DVD_VIDEO_LB_LEN) && defined(MAX_UDF_FILE_NAME_LEN)
17257
1188874fd68b fix dvdread version macro
rathann
parents: 17191
diff changeset
42 #define DVDREAD_VERSION LIBDVDREAD_VERSION(0,9,0)
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
43 #else
17257
1188874fd68b fix dvdread version macro
rathann
parents: 17191
diff changeset
44 #define DVDREAD_VERSION LIBDVDREAD_VERSION(0,8,0)
1188874fd68b fix dvdread version macro
rathann
parents: 17191
diff changeset
45 #endif
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
46 #endif
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
47
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
48
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
49 static struct stream_priv_s {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
50 int title;
27163
704a4fdb762a added support for the device part in the url; patch by
nicodvb
parents: 26833
diff changeset
51 char* device;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
52 } stream_priv_dflts = {
27163
704a4fdb762a added support for the device part in the url; patch by
nicodvb
parents: 26833
diff changeset
53 1,
704a4fdb762a added support for the device part in the url; patch by
nicodvb
parents: 26833
diff changeset
54 NULL
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
55 };
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
56
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
57 #define ST_OFF(f) M_ST_OFF(struct stream_priv_s,f)
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
58 /// URL definition
25242
371a40dcc1cc stream_opts arrays should be const
reimar
parents: 25232
diff changeset
59 static const m_option_t stream_opts_fields[] = {
27235
ea35e46aa7af in dvd streams the title part ranges from 1 to 99
nicodvb
parents: 27194
diff changeset
60 { "hostname", ST_OFF(title), CONF_TYPE_INT, M_OPT_RANGE, 1, 99, NULL},
27163
704a4fdb762a added support for the device part in the url; patch by
nicodvb
parents: 26833
diff changeset
61 { "filename", ST_OFF(device), CONF_TYPE_STRING, 0, 0 ,0, NULL},
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
62 { NULL, NULL, 0, 0, 0, 0, NULL }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
63 };
25691
68015115f63a stream_opts should be const
reimar
parents: 25685
diff changeset
64 static const struct m_struct_st stream_opts = {
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
65 "dvd",
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
66 sizeof(struct stream_priv_s),
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
67 &stream_priv_dflts,
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
68 stream_opts_fields
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
69 };
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
70
25232
893db6cc97b2 Add appropriate const specifiers to some custom parse functions.
reimar
parents: 25211
diff changeset
71 int dvd_parse_chapter_range(const m_option_t *conf, const char *range) {
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
72 const char *s;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
73 char *t;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
74 if (!range)
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
75 return M_OPT_MISSING_PARAM;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
76 s = range;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
77 dvd_chapter = 1;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
78 dvd_last_chapter = 0;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
79 if(*range && isdigit(*range)) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
80 dvd_chapter = strtol(range, &s, 10);
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
81 if(range == s) {
16793
8d4fb5469efb Make a few more messages translatable by moving them into help_mp-en.h.
diego
parents: 16770
diff changeset
82 mp_msg(MSGT_OPEN, MSGL_ERR, MSGTR_DVDinvalidChapterRange, range);
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
83 return M_OPT_INVALID;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
84 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
85 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
86 if(*s == 0)
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
87 return 0;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
88 else if(*s != '-') {
16793
8d4fb5469efb Make a few more messages translatable by moving them into help_mp-en.h.
diego
parents: 16770
diff changeset
89 mp_msg(MSGT_OPEN, MSGL_ERR, MSGTR_DVDinvalidChapterRange, range);
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
90 return M_OPT_INVALID;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
91 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
92 ++s;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
93 if(*s == 0)
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
94 return 0;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
95 if(! isdigit(*s)) {
16793
8d4fb5469efb Make a few more messages translatable by moving them into help_mp-en.h.
diego
parents: 16770
diff changeset
96 mp_msg(MSGT_OPEN, MSGL_ERR, MSGTR_DVDinvalidChapterRange, range);
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
97 return M_OPT_INVALID;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
98 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
99 dvd_last_chapter = strtol(s, &t, 10);
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
100 if (s == t || *t) {
16793
8d4fb5469efb Make a few more messages translatable by moving them into help_mp-en.h.
diego
parents: 16770
diff changeset
101 mp_msg(MSGT_OPEN, MSGL_ERR, MSGTR_DVDinvalidChapterRange, range);
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
102 return M_OPT_INVALID;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
103 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
104 return 0;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
105 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
106
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
107 int dvd_chapter_from_cell(dvd_priv_t* dvd,int title,int cell)
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
108 {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
109 pgc_t * cur_pgc;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
110 ptt_info_t* ptt;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
111 int chapter = cell;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
112 int pgc_id,pgn;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
113 if(title < 0 || cell < 0){
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
114 return 0;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
115 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
116 /* for most DVD's chapter == cell */
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
117 /* but there are more complecated cases... */
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
118 if(chapter >= dvd->vmg_file->tt_srpt->title[title].nr_of_ptts) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
119 chapter = dvd->vmg_file->tt_srpt->title[title].nr_of_ptts-1;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
120 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
121 title = dvd->tt_srpt->title[title].vts_ttn-1;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
122 ptt = dvd->vts_file->vts_ptt_srpt->title[title].ptt;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
123 while(chapter >= 0) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
124 pgc_id = ptt[chapter].pgcn;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
125 pgn = ptt[chapter].pgn;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
126 cur_pgc = dvd->vts_file->vts_pgcit->pgci_srp[pgc_id-1].pgc;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
127 if(cell >= cur_pgc->program_map[pgn-1]-1) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
128 return chapter;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
129 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
130 --chapter;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
131 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
132 /* didn't find a chapter ??? */
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
133 return chapter;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
134 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
135
20156
42b46a42f83b added OSD audio switching visualization
ptt
parents: 20086
diff changeset
136 int dvd_lang_from_aid(stream_t *stream, int id) {
42b46a42f83b added OSD audio switching visualization
ptt
parents: 20086
diff changeset
137 dvd_priv_t *d;
20158
7297d76977be gcc 2.95 fix
ods15
parents: 20156
diff changeset
138 int i;
20156
42b46a42f83b added OSD audio switching visualization
ptt
parents: 20086
diff changeset
139 if (!stream) return 0;
42b46a42f83b added OSD audio switching visualization
ptt
parents: 20086
diff changeset
140 d = stream->priv;
42b46a42f83b added OSD audio switching visualization
ptt
parents: 20086
diff changeset
141 if (!d) return 0;
42b46a42f83b added OSD audio switching visualization
ptt
parents: 20086
diff changeset
142 for(i=0;i<d->nr_of_channels;i++) {
42b46a42f83b added OSD audio switching visualization
ptt
parents: 20086
diff changeset
143 if(d->audio_streams[i].id==id)
42b46a42f83b added OSD audio switching visualization
ptt
parents: 20086
diff changeset
144 return d->audio_streams[i].language;
42b46a42f83b added OSD audio switching visualization
ptt
parents: 20086
diff changeset
145 }
42b46a42f83b added OSD audio switching visualization
ptt
parents: 20086
diff changeset
146 return 0;
42b46a42f83b added OSD audio switching visualization
ptt
parents: 20086
diff changeset
147 }
42b46a42f83b added OSD audio switching visualization
ptt
parents: 20086
diff changeset
148
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
149 int dvd_aid_from_lang(stream_t *stream, unsigned char* lang) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
150 dvd_priv_t *d=stream->priv;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
151 int code,i;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
152 if(lang) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
153 while(strlen(lang)>=2) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
154 code=lang[1]|(lang[0]<<8);
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
155 for(i=0;i<d->nr_of_channels;i++) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
156 if(d->audio_streams[i].language==code) {
16793
8d4fb5469efb Make a few more messages translatable by moving them into help_mp-en.h.
diego
parents: 16770
diff changeset
157 mp_msg(MSGT_OPEN,MSGL_INFO,MSGTR_DVDaudioChannel,
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
158 d->audio_streams[i].id, lang[0],lang[1]);
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
159 return d->audio_streams[i].id;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
160 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
161 //printf("%X != %X (%c%c)\n",code,d->audio_streams[i].language,lang[0],lang[1]);
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
162 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
163 lang+=2; while (lang[0]==',' || lang[0]==' ') ++lang;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
164 }
16793
8d4fb5469efb Make a few more messages translatable by moving them into help_mp-en.h.
diego
parents: 16770
diff changeset
165 mp_msg(MSGT_OPEN,MSGL_WARN,MSGTR_DVDnoMatchingAudio);
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
166 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
167 return -1;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
168 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
169
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
170 int dvd_number_of_subs(stream_t *stream) {
23601
0f1c9cf1752d Fix dvd:// subtitle handling to always report the MPEG stream id, because
reimar
parents: 23381
diff changeset
171 int i;
0f1c9cf1752d Fix dvd:// subtitle handling to always report the MPEG stream id, because
reimar
parents: 23381
diff changeset
172 int maxid = -1;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
173 dvd_priv_t *d;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
174 if (!stream) return -1;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
175 d = stream->priv;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
176 if (!d) return -1;
23601
0f1c9cf1752d Fix dvd:// subtitle handling to always report the MPEG stream id, because
reimar
parents: 23381
diff changeset
177 for (i = 0; i < d->nr_of_subtitles; i++)
0f1c9cf1752d Fix dvd:// subtitle handling to always report the MPEG stream id, because
reimar
parents: 23381
diff changeset
178 if (d->subtitles[i].id > maxid) maxid = d->subtitles[i].id;
0f1c9cf1752d Fix dvd:// subtitle handling to always report the MPEG stream id, because
reimar
parents: 23381
diff changeset
179 return maxid + 1;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
180 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
181
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
182 int dvd_lang_from_sid(stream_t *stream, int id) {
23601
0f1c9cf1752d Fix dvd:// subtitle handling to always report the MPEG stream id, because
reimar
parents: 23381
diff changeset
183 int i;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
184 dvd_priv_t *d;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
185 if (!stream) return 0;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
186 d = stream->priv;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
187 if (!d) return 0;
23601
0f1c9cf1752d Fix dvd:// subtitle handling to always report the MPEG stream id, because
reimar
parents: 23381
diff changeset
188 for (i = 0; i < d->nr_of_subtitles; i++)
0f1c9cf1752d Fix dvd:// subtitle handling to always report the MPEG stream id, because
reimar
parents: 23381
diff changeset
189 if (d->subtitles[i].id == id && d->subtitles[i].language) return d->subtitles[i].language;
0f1c9cf1752d Fix dvd:// subtitle handling to always report the MPEG stream id, because
reimar
parents: 23381
diff changeset
190 return 0;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
191 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
192
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
193 int dvd_sid_from_lang(stream_t *stream, unsigned char* lang) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
194 dvd_priv_t *d=stream->priv;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
195 int code,i;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
196 while(lang && strlen(lang)>=2) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
197 code=lang[1]|(lang[0]<<8);
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
198 for(i=0;i<d->nr_of_subtitles;i++) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
199 if(d->subtitles[i].language==code) {
16793
8d4fb5469efb Make a few more messages translatable by moving them into help_mp-en.h.
diego
parents: 16770
diff changeset
200 mp_msg(MSGT_OPEN,MSGL_INFO,MSGTR_DVDsubtitleChannel, i, lang[0],lang[1]);
23601
0f1c9cf1752d Fix dvd:// subtitle handling to always report the MPEG stream id, because
reimar
parents: 23381
diff changeset
201 return d->subtitles[i].id;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
202 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
203 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29083
diff changeset
204 lang+=2;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
205 while (lang[0]==',' || lang[0]==' ') ++lang;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
206 }
16793
8d4fb5469efb Make a few more messages translatable by moving them into help_mp-en.h.
diego
parents: 16770
diff changeset
207 mp_msg(MSGT_OPEN,MSGL_WARN,MSGTR_DVDnoMatchingSubtitle);
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
208 return -1;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
209 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
210
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
211 static int dvd_next_cell(dvd_priv_t *d) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
212 int next_cell=d->cur_cell;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
213
15551
f62be65f7df3 Reduce senseless spamminess of DVD playback in verbose mode.
diego
parents: 15518
diff changeset
214 mp_msg(MSGT_DVD,MSGL_DBG2, "dvd_next_cell: next1=0x%X \n",next_cell);
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
215 if( d->cur_pgc->cell_playback[ next_cell ].block_type == BLOCK_TYPE_ANGLE_BLOCK ) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
216 while(next_cell<d->last_cell) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
217 if( d->cur_pgc->cell_playback[next_cell].block_mode == BLOCK_MODE_LAST_CELL )
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
218 break;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
219 ++next_cell;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
220 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
221 }
15551
f62be65f7df3 Reduce senseless spamminess of DVD playback in verbose mode.
diego
parents: 15518
diff changeset
222 mp_msg(MSGT_DVD,MSGL_DBG2, "dvd_next_cell: next2=0x%X \n",next_cell);
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
223
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
224 ++next_cell;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29083
diff changeset
225 if(next_cell>=d->last_cell)
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
226 return -1; // EOF
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
227 if(d->cur_pgc->cell_playback[next_cell].block_type == BLOCK_TYPE_ANGLE_BLOCK ) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
228 next_cell+=dvd_angle;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29083
diff changeset
229 if(next_cell>=d->last_cell)
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
230 return -1; // EOF
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
231 }
15551
f62be65f7df3 Reduce senseless spamminess of DVD playback in verbose mode.
diego
parents: 15518
diff changeset
232 mp_msg(MSGT_DVD,MSGL_DBG2, "dvd_next_cell: next3=0x%X \n",next_cell);
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
233 return next_cell;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
234 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
235
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
236 int dvd_read_sector(dvd_priv_t *d,unsigned char* data) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
237 int len;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
238
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
239 if(d->packs_left==0) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
240 /**
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
241 * If we're not at the end of this cell, we can determine the next
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
242 * VOBU to display using the VOBU_SRI information section of the
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
243 * DSI. Using this value correctly follows the current angle,
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
244 * avoiding the doubled scenes in The Matrix, and makes our life
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
245 * really happy.
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
246 *
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
247 * Otherwise, we set our next address past the end of this cell to
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
248 * force the code above to go to the next cell in the program.
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
249 */
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
250 if(d->dsi_pack.vobu_sri.next_vobu != SRI_END_OF_CELL) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
251 d->cur_pack= d->dsi_pack.dsi_gi.nv_pck_lbn + ( d->dsi_pack.vobu_sri.next_vobu & 0x7fffffff );
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
252 mp_msg(MSGT_DVD,MSGL_DBG2, "Navi new pos=0x%X \n",d->cur_pack);
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
253 } else {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
254 // end of cell! find next cell!
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
255 mp_msg(MSGT_DVD,MSGL_V, "--- END OF CELL !!! ---\n");
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
256 d->cur_pack=d->cell_last_pack+1;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
257 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
258 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
259
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
260 read_next:
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
261 if(d->cur_pack>d->cell_last_pack) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
262 // end of cell!
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
263 int next=dvd_next_cell(d);
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
264 if(next>=0) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
265 d->cur_cell=next;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29083
diff changeset
266 // if( d->cur_pgc->cell_playback[d->cur_cell].block_type
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
267 // == BLOCK_TYPE_ANGLE_BLOCK ) d->cur_cell+=dvd_angle;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
268 d->cur_pack = d->cur_pgc->cell_playback[ d->cur_cell ].first_sector;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
269 d->cell_last_pack=d->cur_pgc->cell_playback[ d->cur_cell ].last_sector;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
270 mp_msg(MSGT_DVD,MSGL_V, "DVD next cell: %d pack: 0x%X-0x%X \n",d->cur_cell,d->cur_pack,d->cell_last_pack);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29083
diff changeset
271 } else
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
272 return -1; // EOF
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
273 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
274
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
275 len = DVDReadBlocks(d->title, d->cur_pack, 1, data);
28181
a02653498c15 Work around a dvdread bug where DVDReadBlocks would return values < 0 on read error,
reimar
parents: 27773
diff changeset
276 // only == 0 should indicate an error, but some dvdread version are buggy when used with dvdcss
a02653498c15 Work around a dvdread bug where DVDReadBlocks would return values < 0 on read error,
reimar
parents: 27773
diff changeset
277 if(len <= 0) return -1; //error
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
278
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
279 if(data[38]==0 && data[39]==0 && data[40]==1 && data[41]==0xBF &&
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
280 data[1024]==0 && data[1025]==0 && data[1026]==1 && data[1027]==0xBF) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
281 // found a Navi packet!!!
17257
1188874fd68b fix dvdread version macro
rathann
parents: 17191
diff changeset
282 #if DVDREAD_VERSION >= LIBDVDREAD_VERSION(0,9,0)
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
283 navRead_DSI(&d->dsi_pack, &(data[ DSI_START_BYTE ]));
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
284 #else
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
285 navRead_DSI(&d->dsi_pack, &(data[ DSI_START_BYTE ]), sizeof(dsi_t));
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
286 #endif
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
287 if(d->cur_pack != d->dsi_pack.dsi_gi.nv_pck_lbn ) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
288 mp_msg(MSGT_DVD,MSGL_V, "Invalid NAVI packet! lba=0x%X navi=0x%X \n",
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
289 d->cur_pack,d->dsi_pack.dsi_gi.nv_pck_lbn);
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
290 } else {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
291 // process!
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
292 d->packs_left = d->dsi_pack.dsi_gi.vobu_ea;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
293 mp_msg(MSGT_DVD,MSGL_DBG2, "Found NAVI packet! lba=0x%X len=%d \n",d->cur_pack,d->packs_left);
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
294 //navPrint_DSI(&d->dsi_pack);
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
295 mp_msg(MSGT_DVD,MSGL_DBG3,"\r### CELL %d: Navi: %d/%d IFO: %d/%d \n",d->cur_cell,
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
296 d->dsi_pack.dsi_gi.vobu_c_idn,d->dsi_pack.dsi_gi.vobu_vob_idn,
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
297 d->cur_pgc->cell_position[d->cur_cell].cell_nr,
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
298 d->cur_pgc->cell_position[d->cur_cell].vob_id_nr);
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
299
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
300 if(d->angle_seek) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
301 int i,skip=0;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
302 #if defined(__GNUC__) && ( defined(__sparc__) || defined(hpux) )
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
303 // workaround for a bug in the sparc/hpux version of gcc 2.95.X ... 3.2,
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
304 // it generates incorrect code for unaligned access to a packed
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
305 // structure member, resulting in an mplayer crash with a SIGBUS
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
306 // signal.
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
307 //
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
308 // See also gcc problem report PR c/7847:
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
309 // http://gcc.gnu.org/cgi-bin/gnatsweb.pl?database=gcc&cmd=view+audit-trail&pr=7847
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
310 for(i=0;i<9;i++) { // check if all values zero:
27773
55571c85e40e Replace typeof by __typeof__, the former is a non-portable GNU extension.
diego
parents: 27599
diff changeset
311 __typeof__(d->dsi_pack.sml_agli.data[i].address) tmp_addr;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
312 memcpy(&tmp_addr,&d->dsi_pack.sml_agli.data[i].address,sizeof(tmp_addr));
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
313 if((skip=tmp_addr)!=0) break;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
314 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
315 #else
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
316 for(i=0;i<9;i++) // check if all values zero:
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
317 if((skip=d->dsi_pack.sml_agli.data[i].address)!=0) break;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
318 #endif
25569
1ab8dade208c fixed bug when playing multi-angle titles: the address field in the agli data
nicodvb
parents: 25342
diff changeset
319 if(skip && skip!=0x7fffffff) {
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
320 // sml_agli table has valid data (at least one non-zero):
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
321 d->cur_pack=d->dsi_pack.dsi_gi.nv_pck_lbn+
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
322 d->dsi_pack.sml_agli.data[dvd_angle].address;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
323 d->angle_seek=0;
25569
1ab8dade208c fixed bug when playing multi-angle titles: the address field in the agli data
nicodvb
parents: 25342
diff changeset
324 d->cur_pack--;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
325 mp_msg(MSGT_DVD,MSGL_V, "Angle-seek synced using sml_agli map! new_lba=0x%X \n",d->cur_pack);
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
326 } else {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
327 // check if we're in the right cell, jump otherwise:
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
328 if( (d->dsi_pack.dsi_gi.vobu_c_idn==d->cur_pgc->cell_position[d->cur_cell].cell_nr) &&
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
329 (d->dsi_pack.dsi_gi.vobu_vob_idn==d->cur_pgc->cell_position[d->cur_cell].vob_id_nr) ){
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
330 d->angle_seek=0;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
331 mp_msg(MSGT_DVD,MSGL_V, "Angle-seek synced by cell/vob IDN search! \n");
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
332 } else {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
333 // wrong angle, skip this vobu:
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
334 d->cur_pack=d->dsi_pack.dsi_gi.nv_pck_lbn+
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
335 d->dsi_pack.dsi_gi.vobu_ea;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
336 d->angle_seek=2; // DEBUG
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
337 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
338 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
339 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
340 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
341 ++d->cur_pack;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
342 goto read_next;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
343 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
344
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
345 ++d->cur_pack;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
346 if(d->packs_left>=0) --d->packs_left;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
347
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
348 if(d->angle_seek) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
349 if(d->angle_seek==2) mp_msg(MSGT_DVD,MSGL_V, "!!! warning! reading packet while angle_seek !!!\n");
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
350 goto read_next; // searching for Navi packet
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
351 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
352
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
353 return d->cur_pack-1;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
354 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
355
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
356 void dvd_seek(dvd_priv_t *d,int pos) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
357 d->packs_left=-1;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
358 d->cur_pack=pos;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
359
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
360 // check if we stay in current cell (speedup things, and avoid angle skip)
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
361 if(d->cur_pack>d->cell_last_pack ||
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
362 d->cur_pack<d->cur_pgc->cell_playback[ d->cur_cell ].first_sector) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
363
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
364 // ok, cell change, find the right cell!
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
365 d->cur_cell=0;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
366 if(d->cur_pgc->cell_playback[d->cur_cell].block_type == BLOCK_TYPE_ANGLE_BLOCK )
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
367 d->cur_cell+=dvd_angle;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
368
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
369 while(1) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
370 int next;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
371 d->cell_last_pack=d->cur_pgc->cell_playback[ d->cur_cell ].last_sector;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
372 if(d->cur_pack<d->cur_pgc->cell_playback[ d->cur_cell ].first_sector) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
373 d->cur_pack=d->cur_pgc->cell_playback[ d->cur_cell ].first_sector;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
374 break;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
375 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
376 if(d->cur_pack<=d->cell_last_pack) break; // ok, we find it! :)
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
377 next=dvd_next_cell(d);
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
378 if(next<0) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
379 //d->cur_pack=d->cell_last_pack+1;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
380 break; // we're after the last cell
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
381 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
382 d->cur_cell=next;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
383 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
384 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
385
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
386 mp_msg(MSGT_DVD,MSGL_V, "DVD Seek! lba=0x%X cell=%d packs: 0x%X-0x%X \n",
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
387 d->cur_pack,d->cur_cell,d->cur_pgc->cell_playback[ d->cur_cell ].first_sector,d->cell_last_pack);
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
388
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
389 // if we're in interleaved multi-angle cell, find the right angle chain!
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
390 // (read Navi block, and use the seamless angle jump table)
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
391 d->angle_seek=1;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
392 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
393
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
394 void dvd_close(dvd_priv_t *d) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
395 ifoClose(d->vts_file);
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
396 ifoClose(d->vmg_file);
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
397 DVDCloseFile(d->title);
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
398 DVDClose(d->dvd);
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
399 dvd_chapter = 1;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
400 dvd_last_chapter = 0;
27163
704a4fdb762a added support for the device part in the url; patch by
nicodvb
parents: 26833
diff changeset
401 dvd_set_speed(dvd_device_current, -1); /* -1 => restore default */
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
402 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
403
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
404 static int fill_buffer(stream_t *s, char *but, int len)
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
405 {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
406 if(s->type == STREAMTYPE_DVD) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
407 off_t pos=dvd_read_sector(s->priv,s->buffer);
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
408 if(pos>=0) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
409 len=2048; // full sector
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
410 s->pos=2048*pos-len;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
411 } else len=-1; // error
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
412 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
413 return len;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
414 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
415
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
416 static int seek(stream_t *s, off_t newpos) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
417 s->pos=newpos; // real seek
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
418 dvd_seek(s->priv,s->pos/2048);
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
419 return 1;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
420 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
421
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
422 static void stream_dvd_close(stream_t *s) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
423 dvd_close(s->priv);
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
424 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
425
18091
71f9a4e7fd9d remove vts_no parameter from mp_get_titleset_length - it is not only useless,
reimar
parents: 18078
diff changeset
426 static int mp_get_titleset_length(ifo_handle_t *vts_file, tt_srpt_t *tt_srpt, int title_no)
17698
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
427 {
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
428 int vts_ttn; ///< title number within video title set
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
429 int pgc_no; ///< program chain number
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
430 int msec; ///< time length in milliseconds
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
431
17817
560617cdcc3b init msec in mp_get_titleset_length() before using it; closes cid 251
nicodvb
parents: 17698
diff changeset
432 msec=0;
17698
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
433 if(!vts_file || !tt_srpt)
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
434 return 0;
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
435
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
436 if(vts_file->vtsi_mat && vts_file->vts_pgcit)
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
437 {
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
438 vts_ttn = tt_srpt->title[title_no].vts_ttn - 1;
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
439 pgc_no = vts_file->vts_ptt_srpt->title[vts_ttn].ptt[0].pgcn - 1;
23993
2107f38b6ca1 Moved dvdtimetomsec to stream_dvd_common.c.
cehoyos
parents: 23691
diff changeset
440 msec = mp_dvdtimetomsec(&vts_file->vts_pgcit->pgci_srp[pgc_no].pgc->playback_time);
17698
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
441 }
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
442 return msec;
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
443 }
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
444
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
445
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
446 static int mp_describe_titleset(dvd_reader_t *dvd, tt_srpt_t *tt_srpt, int vts_no)
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
447 {
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
448 ifo_handle_t *vts_file;
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
449 int title_no, msec=0;
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
450
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
451 vts_file = ifoOpen(dvd, vts_no);
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
452 if(!vts_file)
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
453 return 0;
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
454
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
455 if(!vts_file->vtsi_mat || !vts_file->vts_pgcit)
18078
aeb937690d3d missing ifoClose and return 1. Patch by kiriuja (mplayer-patches at en-directo net)
reimar
parents: 18071
diff changeset
456 {
aeb937690d3d missing ifoClose and return 1. Patch by kiriuja (mplayer-patches at en-directo net)
reimar
parents: 18071
diff changeset
457 ifoClose(vts_file);
17698
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
458 return 0;
18078
aeb937690d3d missing ifoClose and return 1. Patch by kiriuja (mplayer-patches at en-directo net)
reimar
parents: 18071
diff changeset
459 }
17698
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
460
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
461 for(title_no = 0; title_no < tt_srpt->nr_of_srpts; title_no++)
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
462 {
18071
1e144ef9759b do not print the title length from a non-matching titleset.
reimar
parents: 17817
diff changeset
463 if (tt_srpt->title[title_no].title_set_nr != vts_no)
1e144ef9759b do not print the title length from a non-matching titleset.
reimar
parents: 17817
diff changeset
464 continue;
18091
71f9a4e7fd9d remove vts_no parameter from mp_get_titleset_length - it is not only useless,
reimar
parents: 18078
diff changeset
465 msec = mp_get_titleset_length(vts_file, tt_srpt, title_no);
18237
4231482179b6 Get ride of the several if(identify) messy lines and rearangment of some of the output, both patches by Kiriuja mplayer-patches AT en-directo_net, his changes are barely unrelated, nevertheless Im commiting them thogeter just for the sake of my mental healt, I had both patches already applied on my local three
reynaldo
parents: 18091
diff changeset
466 mp_msg(MSGT_IDENTIFY, MSGL_V, "ID_DVD_TITLE_%d_LENGTH=%d.%03d\n", title_no + 1, msec / 1000, msec % 1000);
17698
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
467 }
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
468 ifoClose(vts_file);
18078
aeb937690d3d missing ifoClose and return 1. Patch by kiriuja (mplayer-patches at en-directo net)
reimar
parents: 18071
diff changeset
469 return 1;
17698
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
470 }
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
471
19440
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
472 static int seek_to_chapter(stream_t *stream, ifo_handle_t *vts_file, tt_srpt_t *tt_srpt, int title_no, int chapter)
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
473 {
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
474 int cell;
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
475 ptt_info_t ptt;
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
476 pgc_t *pgc;
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
477 off_t pos;
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
478
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
479 if(!vts_file || !tt_srpt)
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
480 return 0;
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
481
28191
a39df27439b9 Fix DVD seek_to_chapter: the title number must be converted to a per-VTS
reimar
parents: 28181
diff changeset
482 if(title_no < 0 || title_no >= tt_srpt->nr_of_srpts)
a39df27439b9 Fix DVD seek_to_chapter: the title number must be converted to a per-VTS
reimar
parents: 28181
diff changeset
483 return 0;
a39df27439b9 Fix DVD seek_to_chapter: the title number must be converted to a per-VTS
reimar
parents: 28181
diff changeset
484
a39df27439b9 Fix DVD seek_to_chapter: the title number must be converted to a per-VTS
reimar
parents: 28181
diff changeset
485 // map global title to vts title
a39df27439b9 Fix DVD seek_to_chapter: the title number must be converted to a per-VTS
reimar
parents: 28181
diff changeset
486 title_no = tt_srpt->title[title_no].vts_ttn - 1;
a39df27439b9 Fix DVD seek_to_chapter: the title number must be converted to a per-VTS
reimar
parents: 28181
diff changeset
487
a39df27439b9 Fix DVD seek_to_chapter: the title number must be converted to a per-VTS
reimar
parents: 28181
diff changeset
488 if(title_no < 0 || title_no >= vts_file->vts_ptt_srpt->nr_of_srpts)
a39df27439b9 Fix DVD seek_to_chapter: the title number must be converted to a per-VTS
reimar
parents: 28181
diff changeset
489 return 0;
a39df27439b9 Fix DVD seek_to_chapter: the title number must be converted to a per-VTS
reimar
parents: 28181
diff changeset
490
19442
ab91d0304070 sanity check: since chapter is 0-based it can't exceed nr_of_ptts-1
nicodvb
parents: 19440
diff changeset
491 if(chapter < 0 || chapter > vts_file->vts_ptt_srpt->title[title_no].nr_of_ptts-1) //no such chapter
19440
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
492 return 0;
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
493
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
494 ptt = vts_file->vts_ptt_srpt->title[title_no].ptt[chapter];
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
495 pgc = vts_file->vts_pgcit->pgci_srp[ptt.pgcn-1].pgc;
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
496
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
497 cell = pgc->program_map[ptt.pgn - 1] - 1;
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
498 pos = (off_t) pgc->cell_playback[cell].first_sector * 2048;
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
499 mp_msg(MSGT_OPEN,MSGL_V,"\r\nSTREAM_DVD, seeked to chapter: %d, cell: %u, pos: %"PRIu64"\n",
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
500 chapter, pgc->cell_playback[cell].first_sector, pos);
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
501 stream_seek(stream, pos);
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
502
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
503 return chapter;
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
504 }
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
505
20812
2e78c538db90 idenfify now shows the timings of chapters of the chosen pgc
nicodvb
parents: 20746
diff changeset
506 static void list_chapters(pgc_t *pgc)
2e78c538db90 idenfify now shows the timings of chapters of the chosen pgc
nicodvb
parents: 20746
diff changeset
507 {
2e78c538db90 idenfify now shows the timings of chapters of the chosen pgc
nicodvb
parents: 20746
diff changeset
508 unsigned int i, cell;
2e78c538db90 idenfify now shows the timings of chapters of the chosen pgc
nicodvb
parents: 20746
diff changeset
509 unsigned int t=0, t2=0;
2e78c538db90 idenfify now shows the timings of chapters of the chosen pgc
nicodvb
parents: 20746
diff changeset
510
2e78c538db90 idenfify now shows the timings of chapters of the chosen pgc
nicodvb
parents: 20746
diff changeset
511 if(pgc->nr_of_programs < 2)
2e78c538db90 idenfify now shows the timings of chapters of the chosen pgc
nicodvb
parents: 20746
diff changeset
512 return;
2e78c538db90 idenfify now shows the timings of chapters of the chosen pgc
nicodvb
parents: 20746
diff changeset
513
2e78c538db90 idenfify now shows the timings of chapters of the chosen pgc
nicodvb
parents: 20746
diff changeset
514 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "CHAPTERS: ");
23368
cef784b467ac fixed off-by-one bug during chapter-listing; fixed by Jared Breland (list-mplayer@legroom.net) and me
nicodvb
parents: 22412
diff changeset
515 for(i=0; i<pgc->nr_of_programs; i++)
20812
2e78c538db90 idenfify now shows the timings of chapters of the chosen pgc
nicodvb
parents: 20746
diff changeset
516 {
2e78c538db90 idenfify now shows the timings of chapters of the chosen pgc
nicodvb
parents: 20746
diff changeset
517 cell = pgc->program_map[i]; //here the cell is 1-based
2e78c538db90 idenfify now shows the timings of chapters of the chosen pgc
nicodvb
parents: 20746
diff changeset
518 t2 = t/1000;
2e78c538db90 idenfify now shows the timings of chapters of the chosen pgc
nicodvb
parents: 20746
diff changeset
519 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "%02d:%02d:%02d,", t2/3600, (t2/60)%60, t2%60);
23368
cef784b467ac fixed off-by-one bug during chapter-listing; fixed by Jared Breland (list-mplayer@legroom.net) and me
nicodvb
parents: 22412
diff changeset
520 while(i+1<pgc->nr_of_programs && cell < pgc->program_map[i+1]) {
20812
2e78c538db90 idenfify now shows the timings of chapters of the chosen pgc
nicodvb
parents: 20746
diff changeset
521 if(!(pgc->cell_playback[cell-1].block_type == BLOCK_TYPE_ANGLE_BLOCK &&
2e78c538db90 idenfify now shows the timings of chapters of the chosen pgc
nicodvb
parents: 20746
diff changeset
522 pgc->cell_playback[cell-1].block_mode != BLOCK_MODE_FIRST_CELL)
2e78c538db90 idenfify now shows the timings of chapters of the chosen pgc
nicodvb
parents: 20746
diff changeset
523 )
23993
2107f38b6ca1 Moved dvdtimetomsec to stream_dvd_common.c.
cehoyos
parents: 23691
diff changeset
524 t += mp_dvdtimetomsec(&pgc->cell_playback[cell-1].playback_time);
20812
2e78c538db90 idenfify now shows the timings of chapters of the chosen pgc
nicodvb
parents: 20746
diff changeset
525 cell++;
2e78c538db90 idenfify now shows the timings of chapters of the chosen pgc
nicodvb
parents: 20746
diff changeset
526 }
2e78c538db90 idenfify now shows the timings of chapters of the chosen pgc
nicodvb
parents: 20746
diff changeset
527 }
2e78c538db90 idenfify now shows the timings of chapters of the chosen pgc
nicodvb
parents: 20746
diff changeset
528 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "\n");
2e78c538db90 idenfify now shows the timings of chapters of the chosen pgc
nicodvb
parents: 20746
diff changeset
529 }
2e78c538db90 idenfify now shows the timings of chapters of the chosen pgc
nicodvb
parents: 20746
diff changeset
530
20746
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
531 static double dvd_get_current_time(stream_t *stream, int cell)
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
532 {
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
533 int i, tm;
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
534 dvd_priv_t *d = stream->priv;
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
535
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
536 tm=0;
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
537 if(!cell) cell=d->cur_cell;
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
538 for(i=0; i<d->cur_cell; i++) {
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
539 if(d->cur_pgc->cell_playback[i].block_type == BLOCK_TYPE_ANGLE_BLOCK &&
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
540 d->cur_pgc->cell_playback[i].block_mode != BLOCK_MODE_FIRST_CELL
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
541 )
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
542 continue;
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
543 tm += d->cell_times_table[i];
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
544 }
23993
2107f38b6ca1 Moved dvdtimetomsec to stream_dvd_common.c.
cehoyos
parents: 23691
diff changeset
545 tm += mp_dvdtimetomsec(&d->dsi_pack.dsi_gi.c_eltm);
20746
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
546
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
547 return (double)tm/1000.0;
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
548 }
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
549
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
550 static int dvd_seek_to_time(stream_t *stream, ifo_handle_t *vts_file, double sec)
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
551 {
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
552 unsigned int i, j, k, timeunit, ac_time, tmap_sector=0, cell_sector=0, vobu_sector=0;
23381
300e9b7c499f Remove some unused variables, patch by timwoj ieee org.
diego
parents: 23368
diff changeset
553 int t=0;
20746
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
554 double tm, duration;
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
555 off_t pos = -1;
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
556 dvd_priv_t *d = stream->priv;
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
557 vts_tmapt_t *vts_tmapt = vts_file->vts_tmapt;
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
558
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
559 if(!vts_file->vts_tmapt || sec < 0)
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
560 return 0;
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
561
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
562 duration = (double) mp_get_titleset_length(d->vts_file, d->tt_srpt, d->cur_title-1) / 1000.0f;
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
563 if(sec > duration)
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
564 return 0;
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
565
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
566 i=d->cur_pgc_idx;
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
567 timeunit = vts_tmapt->tmap[i].tmu;
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
568 for(j = 0; j < vts_tmapt->tmap[i].nr_of_entries; j++) {
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
569 ac_time = timeunit * (j + 1);
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
570 if(ac_time >= sec)
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
571 break;
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
572 tmap_sector = vts_tmapt->tmap[i].map_ent[j] & 0x7fffffff;
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
573 }
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
574 //search enclosing cell
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
575 for(i=0; i<d->cur_pgc->nr_of_cells; i++) {
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
576 if(tmap_sector >= d->cur_pgc->cell_playback[i].first_sector && tmap_sector <= d->cur_pgc->cell_playback[i].last_sector) {
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
577 cell_sector = d->cur_pgc->cell_playback[i].first_sector;
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
578 break;
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
579 }
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
580 }
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
581
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
582 pos = ((off_t)cell_sector)<<11;
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
583 stream_seek(stream, pos);
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
584 do {
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
585 stream_skip(stream, 2048);
23993
2107f38b6ca1 Moved dvdtimetomsec to stream_dvd_common.c.
cehoyos
parents: 23691
diff changeset
586 t = mp_dvdtimetomsec(&d->dsi_pack.dsi_gi.c_eltm);
20746
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
587 } while(!t);
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
588 tm = dvd_get_current_time(stream, 0);
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
589
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
590 pos = ((off_t)tmap_sector)<<11;
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
591 stream_seek(stream, pos);
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
592 //now get current time in terms of the cell+cell time offset
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
593 memset(&d->dsi_pack.dsi_gi.c_eltm, 0, sizeof(dvd_time_t));
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
594 while(tm <= sec) {
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
595 if(!stream_skip(stream, 2048))
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
596 break;
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
597 tm = dvd_get_current_time(stream, 0);
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
598 };
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
599 tmap_sector = stream->pos >> 11;
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
600
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
601 //search closest VOBU sector
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
602 k=(vts_file->vts_vobu_admap->last_byte + 1 - VOBU_ADMAP_SIZE)/4; //entries in the vobu admap
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
603 for(i=1; i<k; i++) {
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
604 if(vts_file->vts_vobu_admap->vobu_start_sectors[i] > tmap_sector)
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
605 break;
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
606 }
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
607 vobu_sector = vts_file->vts_vobu_admap->vobu_start_sectors[i-1];
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
608 pos = ((off_t)vobu_sector) << 11;
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
609 stream_seek(stream, pos);
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
610
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
611 return 1;
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
612 }
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
613
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29083
diff changeset
614 static int control(stream_t *stream,int cmd,void* arg)
17698
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
615 {
19440
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
616 dvd_priv_t *d = stream->priv;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29083
diff changeset
617 switch(cmd)
17698
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
618 {
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
619 case STREAM_CTRL_GET_TIME_LENGTH:
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
620 {
20851
6602a90a06ec consistency fix: STREAM_CTRL_GET_TIME_LENGTH and STREAM_CTRL_GET_CURRENT_TIME now return time in (double) seconds
nicodvb
parents: 20840
diff changeset
621 *((double *)arg) = (double) mp_get_titleset_length(d->vts_file, d->tt_srpt, d->cur_title-1)/1000.0;
17698
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
622 return 1;
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
623 }
19476
edab36622800 implemented STREAM_CTRL_GET_NUM_CHAPTERS
nicodvb
parents: 19448
diff changeset
624 case STREAM_CTRL_GET_NUM_CHAPTERS:
edab36622800 implemented STREAM_CTRL_GET_NUM_CHAPTERS
nicodvb
parents: 19448
diff changeset
625 {
24257
d261f5109660 cosmetics: typo fix UNSUPORTED --> UNSUPPORTED
diego
parents: 24229
diff changeset
626 if(! d->cur_pgc->nr_of_programs) return STREAM_UNSUPPORTED;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29083
diff changeset
627 *((unsigned int *)arg) = d->cur_pgc->nr_of_programs;
19476
edab36622800 implemented STREAM_CTRL_GET_NUM_CHAPTERS
nicodvb
parents: 19448
diff changeset
628 return 1;
edab36622800 implemented STREAM_CTRL_GET_NUM_CHAPTERS
nicodvb
parents: 19448
diff changeset
629 }
19440
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
630 case STREAM_CTRL_SEEK_TO_CHAPTER:
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
631 {
20840
70b6f88bd23c make fail STREAM_CTRLs related to seeking/fetching time/chapter when the cache is enabled: they can't work atm
nicodvb
parents: 20812
diff changeset
632 int r;
70b6f88bd23c make fail STREAM_CTRLs related to seeking/fetching time/chapter when the cache is enabled: they can't work atm
nicodvb
parents: 20812
diff changeset
633 r = seek_to_chapter(stream, d->vts_file, d->tt_srpt, d->cur_title-1, *((unsigned int *)arg));
24257
d261f5109660 cosmetics: typo fix UNSUPORTED --> UNSUPPORTED
diego
parents: 24229
diff changeset
634 if(! r) return STREAM_UNSUPPORTED;
19440
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
635
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
636 return 1;
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
637 }
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
638 case STREAM_CTRL_GET_CURRENT_CHAPTER:
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
639 {
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
640 *((unsigned int *)arg) = dvd_chapter_from_cell(d, d->cur_title-1, d->cur_cell);
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
641 return 1;
9847a1bd66a0 support for seeking to chapter and getting current playing chapter
nicodvb
parents: 19271
diff changeset
642 }
20746
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
643 case STREAM_CTRL_GET_CURRENT_TIME:
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
644 {
20840
70b6f88bd23c make fail STREAM_CTRLs related to seeking/fetching time/chapter when the cache is enabled: they can't work atm
nicodvb
parents: 20812
diff changeset
645 double tm;
70b6f88bd23c make fail STREAM_CTRLs related to seeking/fetching time/chapter when the cache is enabled: they can't work atm
nicodvb
parents: 20812
diff changeset
646 tm = dvd_get_current_time(stream, 0);
20746
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
647 if(tm != -1) {
20851
6602a90a06ec consistency fix: STREAM_CTRL_GET_TIME_LENGTH and STREAM_CTRL_GET_CURRENT_TIME now return time in (double) seconds
nicodvb
parents: 20840
diff changeset
648 *((double *)arg) = tm;
20746
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
649 return 1;
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
650 }
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
651 break;
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
652 }
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
653 case STREAM_CTRL_SEEK_TO_TIME:
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
654 {
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
655 if(dvd_seek_to_time(stream, d->vts_file, *((double*)arg)))
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
656 return 1;
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
657 break;
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
658 }
24298
068d5d4231e8 implemented STREAM_CTRL_GET_ASPECT_RATIO
nicodvb
parents: 24257
diff changeset
659 case STREAM_CTRL_GET_ASPECT_RATIO:
068d5d4231e8 implemented STREAM_CTRL_GET_ASPECT_RATIO
nicodvb
parents: 24257
diff changeset
660 {
068d5d4231e8 implemented STREAM_CTRL_GET_ASPECT_RATIO
nicodvb
parents: 24257
diff changeset
661 *((double *)arg) = !d->vts_file->vtsi_mat->vts_video_attr.display_aspect_ratio ? 4.0/3.0 : 16.0/9.0;
068d5d4231e8 implemented STREAM_CTRL_GET_ASPECT_RATIO
nicodvb
parents: 24257
diff changeset
662 return 1;
068d5d4231e8 implemented STREAM_CTRL_GET_ASPECT_RATIO
nicodvb
parents: 24257
diff changeset
663 }
25573
a27aae25dd75 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25569
diff changeset
664 case STREAM_CTRL_GET_NUM_ANGLES:
a27aae25dd75 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25569
diff changeset
665 {
a27aae25dd75 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25569
diff changeset
666 *((int *)arg) = d->vmg_file->tt_srpt->title[dvd_title].nr_of_angles;
a27aae25dd75 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25569
diff changeset
667 return 1;
a27aae25dd75 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25569
diff changeset
668 }
a27aae25dd75 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25569
diff changeset
669 case STREAM_CTRL_GET_ANGLE:
a27aae25dd75 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25569
diff changeset
670 {
a27aae25dd75 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25569
diff changeset
671 *((int *)arg) = dvd_angle+1;
a27aae25dd75 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25569
diff changeset
672 return 1;
a27aae25dd75 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25569
diff changeset
673 }
a27aae25dd75 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25569
diff changeset
674 case STREAM_CTRL_SET_ANGLE:
a27aae25dd75 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25569
diff changeset
675 {
a27aae25dd75 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25569
diff changeset
676 int ang = *((int *)arg);
a27aae25dd75 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25569
diff changeset
677 if(ang>d->vmg_file->tt_srpt->title[dvd_title].nr_of_angles || ang<=0)
a27aae25dd75 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25569
diff changeset
678 break;
a27aae25dd75 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25569
diff changeset
679 dvd_angle = ang - 1;
a27aae25dd75 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25569
diff changeset
680 d->angle_seek = 1;
a27aae25dd75 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25569
diff changeset
681 return 1;
a27aae25dd75 implemented _ANGLE STREAM_CTRLs, patch by oattila chello hu
nicodvb
parents: 25569
diff changeset
682 }
17698
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
683 }
24257
d261f5109660 cosmetics: typo fix UNSUPORTED --> UNSUPPORTED
diego
parents: 24229
diff changeset
684 return STREAM_UNSUPPORTED;
17698
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
685 }
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
686
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
687
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
688 static int open_s(stream_t *stream,int mode, void* opts, int* file_format) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
689 struct stream_priv_s* p = (struct stream_priv_s*)opts;
20746
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
690 int k;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
691
25187
e2625ae16f56 this variable was nothing but a useless memleak
ben
parents: 25123
diff changeset
692 mp_msg(MSGT_OPEN,MSGL_V,"URL: %s\n", stream->url);
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
693 dvd_title = p->title;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
694 if(1){
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
695 //int ret,ret2;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
696 dvd_priv_t *d;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
697 int ttn,pgc_id,pgn;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
698 dvd_reader_t *dvd;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
699 dvd_file_t *title;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
700 ifo_handle_t *vmg_file;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
701 tt_srpt_t *tt_srpt;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
702 ifo_handle_t *vts_file;
22204
da9d0425a72a Simplify code by using separate variables for large common expressions.
reimar
parents: 21926
diff changeset
703 pgc_t *pgc;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
704 /**
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
705 * Open the disc.
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
706 */
27163
704a4fdb762a added support for the device part in the url; patch by
nicodvb
parents: 26833
diff changeset
707 if(p->device)
704a4fdb762a added support for the device part in the url; patch by
nicodvb
parents: 26833
diff changeset
708 dvd_device_current = p->device;
704a4fdb762a added support for the device part in the url; patch by
nicodvb
parents: 26833
diff changeset
709 else if(dvd_device)
704a4fdb762a added support for the device part in the url; patch by
nicodvb
parents: 26833
diff changeset
710 dvd_device_current = dvd_device;
704a4fdb762a added support for the device part in the url; patch by
nicodvb
parents: 26833
diff changeset
711 else
27194
fd1872d2b2d4 avoid unnecessary strdup(); patch by Aurel
nicodvb
parents: 27166
diff changeset
712 dvd_device_current = DEFAULT_DVD_DEVICE;
27163
704a4fdb762a added support for the device part in the url; patch by
nicodvb
parents: 26833
diff changeset
713 dvd_set_speed(dvd_device_current, dvd_speed);
25342
23f02d6ac901 Replace SYS_DARWIN by __APPLE__ and __DARWIN__ where appropriate.
diego
parents: 25242
diff changeset
714 #if defined(__APPLE__) || defined(__DARWIN__)
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
715 /* Dynamic DVD drive selection on Darwin */
27163
704a4fdb762a added support for the device part in the url; patch by
nicodvb
parents: 26833
diff changeset
716 if(!strcmp(dvd_device_current, "/dev/rdiskN")) {
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
717 int i;
27163
704a4fdb762a added support for the device part in the url; patch by
nicodvb
parents: 26833
diff changeset
718 size_t len = strlen(dvd_device_current)+1;
22403
11e7787eb78b replaced 1 instances of sprintf() with snprintf(); patch by njkain gmail com.
nicodvb
parents: 22204
diff changeset
719 char *temp_device = malloc(len);
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
720
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
721 for (i = 1; i < 10; i++) {
22403
11e7787eb78b replaced 1 instances of sprintf() with snprintf(); patch by njkain gmail com.
nicodvb
parents: 22204
diff changeset
722 snprintf(temp_device, len, "/dev/rdisk%d", i);
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
723 dvd = DVDOpen(temp_device);
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
724 if(!dvd) {
25031
5e1e61012a05 report why the dvd couldn't be opened. Patch by Jan Knutar jknutar+nic+fi
nicodvb
parents: 24986
diff changeset
725 mp_msg(MSGT_OPEN,MSGL_ERR,MSGTR_CantOpenDVD,temp_device, strerror(errno));
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
726 } else {
17490
acef9166db2f MPlayer OSX port: Add a call to UDFFindFile to verify that we are opening a valid udf image. Patch by Emanuele Giaquita <emanuele.giaquinta@gmail.com>
nplourde
parents: 17257
diff changeset
727 #if DVDREAD_VERSION <= LIBDVDREAD_VERSION(0,9,4)
21731
61c0bae18c23 replace call to UDFFindFile() (that is not part of the public API) with DVDOpenFile()
nicodvb
parents: 21636
diff changeset
728 dvd_file_t *dvdfile = DVDOpenFile(dvd,dvd_title,DVD_READ_INFO_FILE);
61c0bae18c23 replace call to UDFFindFile() (that is not part of the public API) with DVDOpenFile()
nicodvb
parents: 21636
diff changeset
729 if(!dvdfile) {
25031
5e1e61012a05 report why the dvd couldn't be opened. Patch by Jan Knutar jknutar+nic+fi
nicodvb
parents: 24986
diff changeset
730 mp_msg(MSGT_OPEN,MSGL_ERR,MSGTR_CantOpenDVD,temp_device, strerror(errno));
17490
acef9166db2f MPlayer OSX port: Add a call to UDFFindFile to verify that we are opening a valid udf image. Patch by Emanuele Giaquita <emanuele.giaquinta@gmail.com>
nplourde
parents: 17257
diff changeset
731 DVDClose(dvd);
21731
61c0bae18c23 replace call to UDFFindFile() (that is not part of the public API) with DVDOpenFile()
nicodvb
parents: 21636
diff changeset
732 continue;
61c0bae18c23 replace call to UDFFindFile() (that is not part of the public API) with DVDOpenFile()
nicodvb
parents: 21636
diff changeset
733 }
61c0bae18c23 replace call to UDFFindFile() (that is not part of the public API) with DVDOpenFile()
nicodvb
parents: 21636
diff changeset
734 DVDCloseFile(dvdfile);
17490
acef9166db2f MPlayer OSX port: Add a call to UDFFindFile to verify that we are opening a valid udf image. Patch by Emanuele Giaquita <emanuele.giaquinta@gmail.com>
nplourde
parents: 17257
diff changeset
735 #endif
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
736 break;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
737 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
738 }
21731
61c0bae18c23 replace call to UDFFindFile() (that is not part of the public API) with DVDOpenFile()
nicodvb
parents: 21636
diff changeset
739 free(temp_device);
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
740
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
741 if(!dvd) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
742 m_struct_free(&stream_opts,opts);
24257
d261f5109660 cosmetics: typo fix UNSUPORTED --> UNSUPPORTED
diego
parents: 24229
diff changeset
743 return STREAM_UNSUPPORTED;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
744 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
745 } else
25342
23f02d6ac901 Replace SYS_DARWIN by __APPLE__ and __DARWIN__ where appropriate.
diego
parents: 25242
diff changeset
746 #endif /* defined(__APPLE__) || defined(__DARWIN__) */
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
747 {
27163
704a4fdb762a added support for the device part in the url; patch by
nicodvb
parents: 26833
diff changeset
748 dvd = DVDOpen(dvd_device_current);
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
749 if(!dvd) {
27163
704a4fdb762a added support for the device part in the url; patch by
nicodvb
parents: 26833
diff changeset
750 mp_msg(MSGT_OPEN,MSGL_ERR,MSGTR_CantOpenDVD,dvd_device_current, strerror(errno));
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
751 m_struct_free(&stream_opts,opts);
24257
d261f5109660 cosmetics: typo fix UNSUPORTED --> UNSUPPORTED
diego
parents: 24229
diff changeset
752 return STREAM_UNSUPPORTED;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
753 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
754 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
755
19448
ebaf8067faae Print DVD audio channel and subtitle track information in non-verbose mode,
diego
parents: 19442
diff changeset
756 mp_msg(MSGT_OPEN,MSGL_V,"Reading disc structure, please wait...\n");
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
757
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
758 /**
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
759 * Load the video manager to find out the information about the titles on
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
760 * this disc.
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
761 */
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
762 vmg_file = ifoOpen(dvd, 0);
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
763 if(!vmg_file) {
16793
8d4fb5469efb Make a few more messages translatable by moving them into help_mp-en.h.
diego
parents: 16770
diff changeset
764 mp_msg(MSGT_OPEN,MSGL_ERR, MSGTR_DVDnoVMG);
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
765 DVDClose( dvd );
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
766 m_struct_free(&stream_opts,opts);
24257
d261f5109660 cosmetics: typo fix UNSUPORTED --> UNSUPPORTED
diego
parents: 24229
diff changeset
767 return STREAM_UNSUPPORTED;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
768 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
769 tt_srpt = vmg_file->tt_srpt;
18237
4231482179b6 Get ride of the several if(identify) messy lines and rearangment of some of the output, both patches by Kiriuja mplayer-patches AT en-directo_net, his changes are barely unrelated, nevertheless Im commiting them thogeter just for the sake of my mental healt, I had both patches already applied on my local three
reynaldo
parents: 18091
diff changeset
770 if (mp_msg_test(MSGT_IDENTIFY, MSGL_INFO))
4231482179b6 Get ride of the several if(identify) messy lines and rearangment of some of the output, both patches by Kiriuja mplayer-patches AT en-directo_net, his changes are barely unrelated, nevertheless Im commiting them thogeter just for the sake of my mental healt, I had both patches already applied on my local three
reynaldo
parents: 18091
diff changeset
771 {
4231482179b6 Get ride of the several if(identify) messy lines and rearangment of some of the output, both patches by Kiriuja mplayer-patches AT en-directo_net, his changes are barely unrelated, nevertheless Im commiting them thogeter just for the sake of my mental healt, I had both patches already applied on my local three
reynaldo
parents: 18091
diff changeset
772 int title_no; ///< title number
4231482179b6 Get ride of the several if(identify) messy lines and rearangment of some of the output, both patches by Kiriuja mplayer-patches AT en-directo_net, his changes are barely unrelated, nevertheless Im commiting them thogeter just for the sake of my mental healt, I had both patches already applied on my local three
reynaldo
parents: 18091
diff changeset
773 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_DVD_TITLES=%d\n", tt_srpt->nr_of_srpts);
4231482179b6 Get ride of the several if(identify) messy lines and rearangment of some of the output, both patches by Kiriuja mplayer-patches AT en-directo_net, his changes are barely unrelated, nevertheless Im commiting them thogeter just for the sake of my mental healt, I had both patches already applied on my local three
reynaldo
parents: 18091
diff changeset
774 for (title_no = 0; title_no < tt_srpt->nr_of_srpts; title_no++)
4231482179b6 Get ride of the several if(identify) messy lines and rearangment of some of the output, both patches by Kiriuja mplayer-patches AT en-directo_net, his changes are barely unrelated, nevertheless Im commiting them thogeter just for the sake of my mental healt, I had both patches already applied on my local three
reynaldo
parents: 18091
diff changeset
775 {
4231482179b6 Get ride of the several if(identify) messy lines and rearangment of some of the output, both patches by Kiriuja mplayer-patches AT en-directo_net, his changes are barely unrelated, nevertheless Im commiting them thogeter just for the sake of my mental healt, I had both patches already applied on my local three
reynaldo
parents: 18091
diff changeset
776 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_DVD_TITLE_%d_CHAPTERS=%d\n", title_no + 1, tt_srpt->title[title_no].nr_of_ptts);
4231482179b6 Get ride of the several if(identify) messy lines and rearangment of some of the output, both patches by Kiriuja mplayer-patches AT en-directo_net, his changes are barely unrelated, nevertheless Im commiting them thogeter just for the sake of my mental healt, I had both patches already applied on my local three
reynaldo
parents: 18091
diff changeset
777 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_DVD_TITLE_%d_ANGLES=%d\n", title_no + 1, tt_srpt->title[title_no].nr_of_angles);
4231482179b6 Get ride of the several if(identify) messy lines and rearangment of some of the output, both patches by Kiriuja mplayer-patches AT en-directo_net, his changes are barely unrelated, nevertheless Im commiting them thogeter just for the sake of my mental healt, I had both patches already applied on my local three
reynaldo
parents: 18091
diff changeset
778 }
4231482179b6 Get ride of the several if(identify) messy lines and rearangment of some of the output, both patches by Kiriuja mplayer-patches AT en-directo_net, his changes are barely unrelated, nevertheless Im commiting them thogeter just for the sake of my mental healt, I had both patches already applied on my local three
reynaldo
parents: 18091
diff changeset
779 }
4231482179b6 Get ride of the several if(identify) messy lines and rearangment of some of the output, both patches by Kiriuja mplayer-patches AT en-directo_net, his changes are barely unrelated, nevertheless Im commiting them thogeter just for the sake of my mental healt, I had both patches already applied on my local three
reynaldo
parents: 18091
diff changeset
780 if (mp_msg_test(MSGT_IDENTIFY, MSGL_V))
16544
a10adcba312f Prints the number of titles, DVD disk ID, the numbers of chapters and
gpoirier
parents: 15551
diff changeset
781 {
27465
b3bfe83d77f9 Print DVD volume ID with -identify.
reimar
parents: 27235
diff changeset
782 char volid[32];
16544
a10adcba312f Prints the number of titles, DVD disk ID, the numbers of chapters and
gpoirier
parents: 15551
diff changeset
783 unsigned char discid [16]; ///< disk ID, a 128 bit MD5 sum
a10adcba312f Prints the number of titles, DVD disk ID, the numbers of chapters and
gpoirier
parents: 15551
diff changeset
784 int vts_no; ///< video title set number
a10adcba312f Prints the number of titles, DVD disk ID, the numbers of chapters and
gpoirier
parents: 15551
diff changeset
785 for (vts_no = 1; vts_no <= vmg_file->vts_atrt->nr_of_vtss; vts_no++)
17698
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
786 mp_describe_titleset(dvd, tt_srpt, vts_no);
16544
a10adcba312f Prints the number of titles, DVD disk ID, the numbers of chapters and
gpoirier
parents: 15551
diff changeset
787 if (DVDDiscID(dvd, discid) >= 0)
a10adcba312f Prints the number of titles, DVD disk ID, the numbers of chapters and
gpoirier
parents: 15551
diff changeset
788 {
a10adcba312f Prints the number of titles, DVD disk ID, the numbers of chapters and
gpoirier
parents: 15551
diff changeset
789 int i;
22412
3fb1371e1697 print the disc_id without using a buffer
nicodvb
parents: 22404
diff changeset
790 mp_msg(MSGT_IDENTIFY, MSGL_V, "ID_DVD_DISC_ID=");
16544
a10adcba312f Prints the number of titles, DVD disk ID, the numbers of chapters and
gpoirier
parents: 15551
diff changeset
791 for (i = 0; i < 16; i ++)
22412
3fb1371e1697 print the disc_id without using a buffer
nicodvb
parents: 22404
diff changeset
792 mp_msg(MSGT_IDENTIFY, MSGL_V, "%02X", discid[i]);
3fb1371e1697 print the disc_id without using a buffer
nicodvb
parents: 22404
diff changeset
793 mp_msg(MSGT_IDENTIFY, MSGL_V, "\n");
16544
a10adcba312f Prints the number of titles, DVD disk ID, the numbers of chapters and
gpoirier
parents: 15551
diff changeset
794 }
27599
9821950a390d With -identify, ID_DVD_VOLUME_ID is not shown on some systems.
diego
parents: 27465
diff changeset
795 if (DVDUDFVolumeInfo(dvd, volid, sizeof(volid), NULL, 0) >= 0 || DVDISOVolumeInfo(dvd, volid, sizeof(volid), NULL, 0) >= 0)
27465
b3bfe83d77f9 Print DVD volume ID with -identify.
reimar
parents: 27235
diff changeset
796 mp_msg(MSGT_IDENTIFY, MSGL_V, "ID_DVD_VOLUME_ID=%s\n", volid);
16544
a10adcba312f Prints the number of titles, DVD disk ID, the numbers of chapters and
gpoirier
parents: 15551
diff changeset
797 }
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
798 /**
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
799 * Make sure our title number is valid.
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
800 */
19448
ebaf8067faae Print DVD audio channel and subtitle track information in non-verbose mode,
diego
parents: 19442
diff changeset
801 mp_msg(MSGT_OPEN,MSGL_STATUS, MSGTR_DVDnumTitles, tt_srpt->nr_of_srpts );
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
802 if(dvd_title < 1 || dvd_title > tt_srpt->nr_of_srpts) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
803 mp_msg(MSGT_OPEN,MSGL_ERR, MSGTR_DVDinvalidTitle, dvd_title);
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
804 ifoClose( vmg_file );
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
805 DVDClose( dvd );
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
806 m_struct_free(&stream_opts,opts);
24257
d261f5109660 cosmetics: typo fix UNSUPORTED --> UNSUPPORTED
diego
parents: 24229
diff changeset
807 return STREAM_UNSUPPORTED;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
808 }
20086
94c1edffdf2f Print current DVD title as ID_DVD_CURRENT_TITLE.
corey
parents: 19476
diff changeset
809 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_DVD_CURRENT_TITLE=%d\n", dvd_title);
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
810 --dvd_title; // remap 1.. -> 0..
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
811 /**
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
812 * Make sure the angle number is valid for this title.
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
813 */
19448
ebaf8067faae Print DVD audio channel and subtitle track information in non-verbose mode,
diego
parents: 19442
diff changeset
814 mp_msg(MSGT_OPEN,MSGL_STATUS, MSGTR_DVDnumAngles, tt_srpt->title[dvd_title].nr_of_angles);
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
815 if(dvd_angle<1 || dvd_angle>tt_srpt->title[dvd_title].nr_of_angles) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
816 mp_msg(MSGT_OPEN,MSGL_ERR, MSGTR_DVDinvalidAngle, dvd_angle);
24228
b5406f2f5044 in open_s() unified failure code in fail:
nicodvb
parents: 24145
diff changeset
817 goto fail;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
818 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
819 --dvd_angle; // remap 1.. -> 0..
16649
e1d6fbd607e0 Fix DVD audio and subtitle stream mapping, esp. for DVD with both 4:3 and
reimar
parents: 16544
diff changeset
820
e1d6fbd607e0 Fix DVD audio and subtitle stream mapping, esp. for DVD with both 4:3 and
reimar
parents: 16544
diff changeset
821 ttn = tt_srpt->title[dvd_title].vts_ttn - 1;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
822 /**
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
823 * Load the VTS information for the title set our title is in.
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
824 */
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
825 vts_file = ifoOpen( dvd, tt_srpt->title[dvd_title].title_set_nr );
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
826 if(!vts_file) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
827 mp_msg(MSGT_OPEN,MSGL_ERR, MSGTR_DVDnoIFO, tt_srpt->title[dvd_title].title_set_nr );
24228
b5406f2f5044 in open_s() unified failure code in fail:
nicodvb
parents: 24145
diff changeset
828 goto fail;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
829 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
830 /**
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
831 * We've got enough info, time to open the title set data.
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
832 */
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
833 title = DVDOpenFile(dvd, tt_srpt->title[dvd_title].title_set_nr, DVD_READ_TITLE_VOBS);
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
834 if(!title) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
835 mp_msg(MSGT_OPEN,MSGL_ERR, MSGTR_DVDnoVOBs, tt_srpt->title[dvd_title].title_set_nr);
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
836 ifoClose( vts_file );
24228
b5406f2f5044 in open_s() unified failure code in fail:
nicodvb
parents: 24145
diff changeset
837 goto fail;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
838 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
839
19448
ebaf8067faae Print DVD audio channel and subtitle track information in non-verbose mode,
diego
parents: 19442
diff changeset
840 mp_msg(MSGT_OPEN,MSGL_V, "DVD successfully opened.\n");
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
841 // store data
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
842 d=malloc(sizeof(dvd_priv_t)); memset(d,0,sizeof(dvd_priv_t));
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
843 d->dvd=dvd;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
844 d->title=title;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
845 d->vmg_file=vmg_file;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
846 d->tt_srpt=tt_srpt;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
847 d->vts_file=vts_file;
17698
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
848 d->cur_title = dvd_title+1;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
849
22204
da9d0425a72a Simplify code by using separate variables for large common expressions.
reimar
parents: 21926
diff changeset
850 pgc = vts_file->vts_pgcit ? vts_file->vts_pgcit->pgci_srp[ttn].pgc : NULL;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
851 /**
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
852 * Check number of audio channels and types
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
853 */
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
854 {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
855 d->nr_of_channels=0;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
856 if(vts_file->vts_pgcit) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
857 int i;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
858 for(i=0;i<8;i++)
22204
da9d0425a72a Simplify code by using separate variables for large common expressions.
reimar
parents: 21926
diff changeset
859 if(pgc->audio_control[i] & 0x8000) {
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
860 audio_attr_t * audio = &vts_file->vtsi_mat->vts_audio_attr[i];
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
861 int language = 0;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
862 char tmp[] = "unknown";
22204
da9d0425a72a Simplify code by using separate variables for large common expressions.
reimar
parents: 21926
diff changeset
863 stream_language_t *audio_stream = &d->audio_streams[d->nr_of_channels];
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
864
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
865 if(audio->lang_type == 1) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
866 language=audio->lang_code;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
867 tmp[0]=language>>8;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
868 tmp[1]=language&0xff;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
869 tmp[2]=0;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
870 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
871
22204
da9d0425a72a Simplify code by using separate variables for large common expressions.
reimar
parents: 21926
diff changeset
872 audio_stream->language=language;
da9d0425a72a Simplify code by using separate variables for large common expressions.
reimar
parents: 21926
diff changeset
873 audio_stream->id=pgc->audio_control[i] >> 8 & 7;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
874 switch(audio->audio_format) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
875 case 0: // ac3
22204
da9d0425a72a Simplify code by using separate variables for large common expressions.
reimar
parents: 21926
diff changeset
876 audio_stream->id+=FIRST_AC3_AID;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
877 break;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
878 case 6: // dts
22204
da9d0425a72a Simplify code by using separate variables for large common expressions.
reimar
parents: 21926
diff changeset
879 audio_stream->id+=FIRST_DTS_AID;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
880 break;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
881 case 2: // mpeg layer 1/2/3
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
882 case 3: // mpeg2 ext
22204
da9d0425a72a Simplify code by using separate variables for large common expressions.
reimar
parents: 21926
diff changeset
883 audio_stream->id+=FIRST_MPG_AID;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
884 break;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
885 case 4: // lpcm
22204
da9d0425a72a Simplify code by using separate variables for large common expressions.
reimar
parents: 21926
diff changeset
886 audio_stream->id+=FIRST_PCM_AID;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
887 break;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
888 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
889
22204
da9d0425a72a Simplify code by using separate variables for large common expressions.
reimar
parents: 21926
diff changeset
890 audio_stream->type=audio->audio_format;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
891 // Pontscho: to my mind, tha channels:
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
892 // 1 - stereo
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
893 // 5 - 5.1
22204
da9d0425a72a Simplify code by using separate variables for large common expressions.
reimar
parents: 21926
diff changeset
894 audio_stream->channels=audio->channels;
19448
ebaf8067faae Print DVD audio channel and subtitle track information in non-verbose mode,
diego
parents: 19442
diff changeset
895 mp_msg(MSGT_OPEN,MSGL_STATUS,MSGTR_DVDaudioStreamInfo,
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
896 d->nr_of_channels,
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
897 dvd_audio_stream_types[ audio->audio_format ],
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
898 dvd_audio_stream_channels[ audio->channels ],
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
899 tmp,
22204
da9d0425a72a Simplify code by using separate variables for large common expressions.
reimar
parents: 21926
diff changeset
900 audio_stream->id
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
901 );
22204
da9d0425a72a Simplify code by using separate variables for large common expressions.
reimar
parents: 21926
diff changeset
902 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_ID=%d\n", audio_stream->id);
18237
4231482179b6 Get ride of the several if(identify) messy lines and rearangment of some of the output, both patches by Kiriuja mplayer-patches AT en-directo_net, his changes are barely unrelated, nevertheless Im commiting them thogeter just for the sake of my mental healt, I had both patches already applied on my local three
reynaldo
parents: 18091
diff changeset
903 if(language && tmp[0])
22204
da9d0425a72a Simplify code by using separate variables for large common expressions.
reimar
parents: 21926
diff changeset
904 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AID_%d_LANG=%s\n", audio_stream->id, tmp);
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
905
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
906 d->nr_of_channels++;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
907 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
908 }
19448
ebaf8067faae Print DVD audio channel and subtitle track information in non-verbose mode,
diego
parents: 19442
diff changeset
909 mp_msg(MSGT_OPEN,MSGL_STATUS,MSGTR_DVDnumAudioChannels,d->nr_of_channels );
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
910 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
911
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
912 /**
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
913 * Check number of subtitles and language
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
914 */
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
915 {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
916 int i;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
917
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
918 d->nr_of_subtitles=0;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
919 for(i=0;i<32;i++)
22204
da9d0425a72a Simplify code by using separate variables for large common expressions.
reimar
parents: 21926
diff changeset
920 if(pgc->subp_control[i] & 0x80000000) {
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
921 subp_attr_t * subtitle = &vts_file->vtsi_mat->vts_subp_attr[i];
16649
e1d6fbd607e0 Fix DVD audio and subtitle stream mapping, esp. for DVD with both 4:3 and
reimar
parents: 16544
diff changeset
922 video_attr_t *video = &vts_file->vtsi_mat->vts_video_attr;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
923 int language = 0;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
924 char tmp[] = "unknown";
22204
da9d0425a72a Simplify code by using separate variables for large common expressions.
reimar
parents: 21926
diff changeset
925 stream_language_t *sub_stream = &d->subtitles[d->nr_of_subtitles];
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
926
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
927 if(subtitle->type == 1) {
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
928 language=subtitle->lang_code;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
929 tmp[0]=language>>8;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
930 tmp[1]=language&0xff;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
931 tmp[2]=0;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
932 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
933
22204
da9d0425a72a Simplify code by using separate variables for large common expressions.
reimar
parents: 21926
diff changeset
934 sub_stream->language=language;
da9d0425a72a Simplify code by using separate variables for large common expressions.
reimar
parents: 21926
diff changeset
935 sub_stream->id=d->nr_of_subtitles;
16649
e1d6fbd607e0 Fix DVD audio and subtitle stream mapping, esp. for DVD with both 4:3 and
reimar
parents: 16544
diff changeset
936 if(video->display_aspect_ratio == 0) /* 4:3 */
22204
da9d0425a72a Simplify code by using separate variables for large common expressions.
reimar
parents: 21926
diff changeset
937 sub_stream->id = pgc->subp_control[i] >> 24 & 31;
16649
e1d6fbd607e0 Fix DVD audio and subtitle stream mapping, esp. for DVD with both 4:3 and
reimar
parents: 16544
diff changeset
938 else if(video->display_aspect_ratio == 3) /* 16:9 */
22204
da9d0425a72a Simplify code by using separate variables for large common expressions.
reimar
parents: 21926
diff changeset
939 sub_stream->id = pgc->subp_control[i] >> 8 & 31;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
940
23601
0f1c9cf1752d Fix dvd:// subtitle handling to always report the MPEG stream id, because
reimar
parents: 23381
diff changeset
941 mp_msg(MSGT_OPEN,MSGL_STATUS,MSGTR_DVDsubtitleLanguage, sub_stream->id, tmp);
0f1c9cf1752d Fix dvd:// subtitle handling to always report the MPEG stream id, because
reimar
parents: 23381
diff changeset
942 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_SUBTITLE_ID=%d\n", sub_stream->id);
18237
4231482179b6 Get ride of the several if(identify) messy lines and rearangment of some of the output, both patches by Kiriuja mplayer-patches AT en-directo_net, his changes are barely unrelated, nevertheless Im commiting them thogeter just for the sake of my mental healt, I had both patches already applied on my local three
reynaldo
parents: 18091
diff changeset
943 if(language && tmp[0])
23601
0f1c9cf1752d Fix dvd:// subtitle handling to always report the MPEG stream id, because
reimar
parents: 23381
diff changeset
944 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_SID_%d_LANG=%s\n", sub_stream->id, tmp);
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
945 d->nr_of_subtitles++;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
946 }
19448
ebaf8067faae Print DVD audio channel and subtitle track information in non-verbose mode,
diego
parents: 19442
diff changeset
947 mp_msg(MSGT_OPEN,MSGL_STATUS,MSGTR_DVDnumSubtitles,d->nr_of_subtitles);
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
948 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
949
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
950 /**
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
951 * Determine which program chain we want to watch. This is based on the
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
952 * chapter number.
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
953 */
25955
eff9e1b25743 -chapter is now handled uniformly calling demuxer_seek_chapter() instead
nicodvb
parents: 25691
diff changeset
954 pgc_id = vts_file->vts_ptt_srpt->title[ttn].ptt[0].pgcn; // local
eff9e1b25743 -chapter is now handled uniformly calling demuxer_seek_chapter() instead
nicodvb
parents: 25691
diff changeset
955 pgn = vts_file->vts_ptt_srpt->title[ttn].ptt[0].pgn; // local
20746
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
956 d->cur_pgc_idx = pgc_id-1;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
957 d->cur_pgc = vts_file->vts_pgcit->pgci_srp[pgc_id-1].pgc;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
958 d->cur_cell = d->cur_pgc->program_map[pgn-1] - 1; // start playback here
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
959 d->packs_left=-1; // for Navi stuff
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
960 d->angle_seek=0;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
961 d->last_cell=d->cur_pgc->nr_of_cells;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
962
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29083
diff changeset
963 if(d->cur_pgc->cell_playback[d->cur_cell].block_type == BLOCK_TYPE_ANGLE_BLOCK )
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
964 d->cur_cell+=dvd_angle;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
965 d->cur_pack = d->cur_pgc->cell_playback[ d->cur_cell ].first_sector;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
966 d->cell_last_pack=d->cur_pgc->cell_playback[ d->cur_cell ].last_sector;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
967 mp_msg(MSGT_DVD,MSGL_V, "DVD start cell: %d pack: 0x%X-0x%X \n",d->cur_cell,d->cur_pack,d->cell_last_pack);
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
968
20746
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
969 //assign cell_times_table
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
970 d->cell_times_table = malloc(sizeof(unsigned int) * d->cur_pgc->nr_of_cells);
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
971 if(d->cell_times_table == NULL)
24257
d261f5109660 cosmetics: typo fix UNSUPORTED --> UNSUPPORTED
diego
parents: 24229
diff changeset
972 return STREAM_UNSUPPORTED;
20746
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
973 for(k=0; k<d->cur_pgc->nr_of_cells; k++)
23993
2107f38b6ca1 Moved dvdtimetomsec to stream_dvd_common.c.
cehoyos
parents: 23691
diff changeset
974 d->cell_times_table[k] = mp_dvdtimetomsec(&d->cur_pgc->cell_playback[k].playback_time);
20812
2e78c538db90 idenfify now shows the timings of chapters of the chosen pgc
nicodvb
parents: 20746
diff changeset
975 list_chapters(d->cur_pgc);
20746
a40246d0c941 implemented STREAM_CTRL_GET_CURRENT_TIME and STREAM_CTRL_SEEK_TO_TIME (precise seeking)
nicodvb
parents: 20635
diff changeset
976
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
977 // ... (unimplemented)
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
978 // return NULL;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
979 stream->type = STREAMTYPE_DVD;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
980 stream->sector_size = 2048;
29920
4f740437ed2b Finally rename the STREAM_SEEK define to MP_STREAM_SEEK, there are just too many
reimar
parents: 29852
diff changeset
981 stream->flags = STREAM_READ | MP_STREAM_SEEK;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
982 stream->fill_buffer = fill_buffer;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
983 stream->seek = seek;
17698
14830cce6098 implement STREAM_CTRL_GET_TIME_LENGTH to return the duration of the dvd currently playing
nicodvb
parents: 17490
diff changeset
984 stream->control = control;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
985 stream->close = stream_dvd_close;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
986 stream->start_pos = (off_t)d->cur_pack*2048;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
987 stream->end_pos = (off_t)(d->cur_pgc->cell_playback[d->last_cell-1].last_sector)*2048;
21926
a8cd73869242 at open() assign *file_format=DEMUXER_TYPE_MPEG_PS to avoid useless demuxer probing
nicodvb
parents: 21731
diff changeset
988 *file_format = DEMUXER_TYPE_MPEG_PS;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
989 mp_msg(MSGT_DVD,MSGL_V,"DVD start=%d end=%d \n",d->cur_pack,d->cur_pgc->cell_playback[d->last_cell-1].last_sector);
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
990 stream->priv = (void*)d;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
991 return STREAM_OK;
24228
b5406f2f5044 in open_s() unified failure code in fail:
nicodvb
parents: 24145
diff changeset
992
b5406f2f5044 in open_s() unified failure code in fail:
nicodvb
parents: 24145
diff changeset
993 fail:
b5406f2f5044 in open_s() unified failure code in fail:
nicodvb
parents: 24145
diff changeset
994 ifoClose(vmg_file);
b5406f2f5044 in open_s() unified failure code in fail:
nicodvb
parents: 24145
diff changeset
995 DVDClose(dvd);
b5406f2f5044 in open_s() unified failure code in fail:
nicodvb
parents: 24145
diff changeset
996 m_struct_free(&stream_opts, opts);
24257
d261f5109660 cosmetics: typo fix UNSUPORTED --> UNSUPPORTED
diego
parents: 24229
diff changeset
997 return STREAM_UNSUPPORTED;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
998 }
16793
8d4fb5469efb Make a few more messages translatable by moving them into help_mp-en.h.
diego
parents: 16770
diff changeset
999 mp_msg(MSGT_DVD,MSGL_ERR,MSGTR_NoDVDSupport);
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
1000 m_struct_free(&stream_opts,opts);
24257
d261f5109660 cosmetics: typo fix UNSUPORTED --> UNSUPPORTED
diego
parents: 24229
diff changeset
1001 return STREAM_UNSUPPORTED;
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
1002 }
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
1003
27166
e1619590ef03 cosmetics: in ifo_stream_oped() aligned the prototype to the style
nicodvb
parents: 27165
diff changeset
1004 static int ifo_stream_open (stream_t *stream, int mode, void *opts, int *file_format)
25210
92204ff32b27 When IFO file is opened (detected by extension), set dvd-device to IFO file's
voroshil
parents: 25187
diff changeset
1005 {
92204ff32b27 When IFO file is opened (detected by extension), set dvd-device to IFO file's
voroshil
parents: 25187
diff changeset
1006 char* filename;
27166
e1619590ef03 cosmetics: in ifo_stream_oped() aligned the prototype to the style
nicodvb
parents: 27165
diff changeset
1007 struct stream_priv_s *spriv;
29041
1b8e2b6fa928 Simplify detection of .ifo extension.
reimar
parents: 28191
diff changeset
1008 int len = strlen(stream->url);
25210
92204ff32b27 When IFO file is opened (detected by extension), set dvd-device to IFO file's
voroshil
parents: 25187
diff changeset
1009
29041
1b8e2b6fa928 Simplify detection of .ifo extension.
reimar
parents: 28191
diff changeset
1010 if (len < 4 || strcasecmp (stream->url + len - 4, ".ifo"))
25210
92204ff32b27 When IFO file is opened (detected by extension), set dvd-device to IFO file's
voroshil
parents: 25187
diff changeset
1011 return STREAM_UNSUPPORTED;
92204ff32b27 When IFO file is opened (detected by extension), set dvd-device to IFO file's
voroshil
parents: 25187
diff changeset
1012
92204ff32b27 When IFO file is opened (detected by extension), set dvd-device to IFO file's
voroshil
parents: 25187
diff changeset
1013 mp_msg(MSGT_DVD, MSGL_INFO, ".IFO detected. Redirecting to dvd://\n");
92204ff32b27 When IFO file is opened (detected by extension), set dvd-device to IFO file's
voroshil
parents: 25187
diff changeset
1014
92204ff32b27 When IFO file is opened (detected by extension), set dvd-device to IFO file's
voroshil
parents: 25187
diff changeset
1015 filename = strdup(basename(stream->url));
92204ff32b27 When IFO file is opened (detected by extension), set dvd-device to IFO file's
voroshil
parents: 25187
diff changeset
1016
27166
e1619590ef03 cosmetics: in ifo_stream_oped() aligned the prototype to the style
nicodvb
parents: 27165
diff changeset
1017 spriv=calloc(1, sizeof(struct stream_priv_s));
e1619590ef03 cosmetics: in ifo_stream_oped() aligned the prototype to the style
nicodvb
parents: 27165
diff changeset
1018 spriv->device = strdup(dirname(stream->url));
29045
bcc35d0962d6 100l, revert r29082, I missed that the vts comparison should be case-insensitive.
reimar
parents: 29044
diff changeset
1019 if(!strncasecmp(filename,"vts_",4))
bcc35d0962d6 100l, revert r29082, I missed that the vts comparison should be case-insensitive.
reimar
parents: 29044
diff changeset
1020 {
bcc35d0962d6 100l, revert r29082, I missed that the vts comparison should be case-insensitive.
reimar
parents: 29044
diff changeset
1021 if(sscanf(filename+3, "_%02d_", &spriv->title)!=1)
bcc35d0962d6 100l, revert r29082, I missed that the vts comparison should be case-insensitive.
reimar
parents: 29044
diff changeset
1022 spriv->title=1;
bcc35d0962d6 100l, revert r29082, I missed that the vts comparison should be case-insensitive.
reimar
parents: 29044
diff changeset
1023 }else
29044
5f860f568623 Reindent
reimar
parents: 29043
diff changeset
1024 spriv->title=1;
25210
92204ff32b27 When IFO file is opened (detected by extension), set dvd-device to IFO file's
voroshil
parents: 25187
diff changeset
1025
92204ff32b27 When IFO file is opened (detected by extension), set dvd-device to IFO file's
voroshil
parents: 25187
diff changeset
1026 free(filename);
92204ff32b27 When IFO file is opened (detected by extension), set dvd-device to IFO file's
voroshil
parents: 25187
diff changeset
1027 free(stream->url);
92204ff32b27 When IFO file is opened (detected by extension), set dvd-device to IFO file's
voroshil
parents: 25187
diff changeset
1028 stream->url=strdup("dvd://");
92204ff32b27 When IFO file is opened (detected by extension), set dvd-device to IFO file's
voroshil
parents: 25187
diff changeset
1029
27166
e1619590ef03 cosmetics: in ifo_stream_oped() aligned the prototype to the style
nicodvb
parents: 27165
diff changeset
1030 return open_s(stream, mode, spriv, file_format);
25210
92204ff32b27 When IFO file is opened (detected by extension), set dvd-device to IFO file's
voroshil
parents: 25187
diff changeset
1031 }
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
1032
25211
c1d17bd6683c Mark all stream_info_t as const
reimar
parents: 25210
diff changeset
1033 const stream_info_t stream_info_dvd = {
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
1034 "DVD stream",
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
1035 "null",
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
1036 "",
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
1037 "",
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
1038 open_s,
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
1039 { "dvd", NULL },
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
1040 &stream_opts,
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
1041 1 // Urls are an option string
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents:
diff changeset
1042 };
25210
92204ff32b27 When IFO file is opened (detected by extension), set dvd-device to IFO file's
voroshil
parents: 25187
diff changeset
1043
25211
c1d17bd6683c Mark all stream_info_t as const
reimar
parents: 25210
diff changeset
1044 const stream_info_t stream_info_ifo = {
25210
92204ff32b27 When IFO file is opened (detected by extension), set dvd-device to IFO file's
voroshil
parents: 25187
diff changeset
1045 "DVD IFO input",
92204ff32b27 When IFO file is opened (detected by extension), set dvd-device to IFO file's
voroshil
parents: 25187
diff changeset
1046 "ifo",
92204ff32b27 When IFO file is opened (detected by extension), set dvd-device to IFO file's
voroshil
parents: 25187
diff changeset
1047 "Benjamin Zores",
92204ff32b27 When IFO file is opened (detected by extension), set dvd-device to IFO file's
voroshil
parents: 25187
diff changeset
1048 "Mostly used to play DVDs on disk through OSD Menu",
92204ff32b27 When IFO file is opened (detected by extension), set dvd-device to IFO file's
voroshil
parents: 25187
diff changeset
1049 ifo_stream_open,
92204ff32b27 When IFO file is opened (detected by extension), set dvd-device to IFO file's
voroshil
parents: 25187
diff changeset
1050 { "file", "", NULL },
92204ff32b27 When IFO file is opened (detected by extension), set dvd-device to IFO file's
voroshil
parents: 25187
diff changeset
1051 NULL,
92204ff32b27 When IFO file is opened (detected by extension), set dvd-device to IFO file's
voroshil
parents: 25187
diff changeset
1052 0
92204ff32b27 When IFO file is opened (detected by extension), set dvd-device to IFO file's
voroshil
parents: 25187
diff changeset
1053 };