annotate libmpdemux/open.c @ 9009:f2d4324561b2

1) Removed the code to remove {} from sub_read_line_ssa 2) Put this code in a separated function: sub_pp_ssa 3) After recoding added a call to sub_pp_ssa. To be more acqurate: I added a pointer to function to hold a postprocessing function to be invoked after using iconv. There are one pointer for each format, if this pointer isn.t NULL the post processing function is called. patch by Salvador Eduardo Tropea <salvador@inti.gov.ar> help by <hephooey@fastmail.fm>
author arpi
date Sun, 19 Jan 2003 00:54:55 +0000
parents f6456b177fdc
children aa0dd1f998d9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1467
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
1
4343
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4291
diff changeset
2 #include <ctype.h>
1467
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
3 #include <stdio.h>
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
4 #include <stdlib.h>
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
5 #include <string.h>
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
6 #include <unistd.h>
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
7 #include <fcntl.h>
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
8
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
9 #include "config.h"
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1482
diff changeset
10 #include "mp_msg.h"
1584
e49b3927c793 more messages for translator :)
arpi
parents: 1567
diff changeset
11 #include "help_mp.h"
1467
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
12
1468
fbed9c34069c freebsd fix
arpi
parents: 1467
diff changeset
13 #ifdef __FreeBSD__
fbed9c34069c freebsd fix
arpi
parents: 1467
diff changeset
14 #include <sys/cdrio.h>
fbed9c34069c freebsd fix
arpi
parents: 1467
diff changeset
15 #endif
fbed9c34069c freebsd fix
arpi
parents: 1467
diff changeset
16
4343
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4291
diff changeset
17 #include "../cfgparser.h"
1467
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
18 #include "stream.h"
1482
4800d1c58dab --enable-streaming fix
arpi
parents: 1468
diff changeset
19 #include "demuxer.h"
4551
716b00618bfc add mfi support
pontscho
parents: 4390
diff changeset
20 #include "mf.h"
1467
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
21
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
22 #ifdef STREAMING
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
23 #include "url.h"
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
24 #include "network.h"
8123
9fc45fe0d444 *HUGE* set of compiler warning fixes, unused variables removal
arpi
parents: 7854
diff changeset
25 extern int streaming_start( stream_t *stream, int *demuxer_type, URL_t *url);
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6853
diff changeset
26 #ifdef STREAMING_LIVE_DOT_COM
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6853
diff changeset
27 #include "demux_rtp.h"
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6853
diff changeset
28 int isSDPFile = 0;
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6853
diff changeset
29 #endif
1467
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
30 static URL_t* url;
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
31 #endif
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
32
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
33 int dvd_title=0;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
34 int dvd_chapter=1;
4291
e889d37f25b2 Add option -last-chapter for DVD playing/encoding
kmkaplan
parents: 4251
diff changeset
35 int dvd_last_chapter=0;
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
36 int dvd_angle=1;
4222
de7eddb3fd70 Change to use cdrom-device and dvd-device options needed for DVD/TV/VCD
albeu
parents: 4146
diff changeset
37 char* dvd_device=NULL;
de7eddb3fd70 Change to use cdrom-device and dvd-device options needed for DVD/TV/VCD
albeu
parents: 4146
diff changeset
38 char* cdrom_device=NULL;
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8712
diff changeset
39 char* cue_file_name=NULL;
5472
4bd766a5632b dvdnav functions moved out to dvdnav_steram.c
arpi
parents: 5381
diff changeset
40 int dvd_nav=0; /* use libdvdnav? */
5380
8a01cde9cf39 DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents: 4729
diff changeset
41
5381
9451df83c04b typo, thx to Mark Szabo <mw3@bsd.hu>
arpi
parents: 5380
diff changeset
42 #ifdef USE_DVDNAV
5472
4bd766a5632b dvdnav functions moved out to dvdnav_steram.c
arpi
parents: 5381
diff changeset
43 #include "dvdnav_stream.h"
5380
8a01cde9cf39 DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents: 4729
diff changeset
44 #endif
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
45
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
46 #ifdef USE_DVDREAD
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
47
1875
73c771050065 Add support for libdvdread-0.9.0
jkeil
parents: 1617
diff changeset
48 #define DVDREAD_VERSION(maj,min,micro) ((maj)*10000 + (min)*100 + (micro))
73c771050065 Add support for libdvdread-0.9.0
jkeil
parents: 1617
diff changeset
49
73c771050065 Add support for libdvdread-0.9.0
jkeil
parents: 1617
diff changeset
50 /*
73c771050065 Add support for libdvdread-0.9.0
jkeil
parents: 1617
diff changeset
51 * Try to autodetect the libdvd-0.9.0 library
73c771050065 Add support for libdvdread-0.9.0
jkeil
parents: 1617
diff changeset
52 * (0.9.0 removed the <dvdread/dvd_udf.h> header, and moved the two defines
73c771050065 Add support for libdvdread-0.9.0
jkeil
parents: 1617
diff changeset
53 * DVD_VIDEO_LB_LEN and MAX_UDF_FILE_NAME_LEN from it to
73c771050065 Add support for libdvdread-0.9.0
jkeil
parents: 1617
diff changeset
54 * <dvdread/dvd_reader.h>)
73c771050065 Add support for libdvdread-0.9.0
jkeil
parents: 1617
diff changeset
55 */
73c771050065 Add support for libdvdread-0.9.0
jkeil
parents: 1617
diff changeset
56 #if defined(DVD_VIDEO_LB_LEN) && defined(MAX_UDF_FILE_NAME_LEN)
73c771050065 Add support for libdvdread-0.9.0
jkeil
parents: 1617
diff changeset
57 #define LIBDVDREAD_VERSION DVDREAD_VERSION(0,9,0)
73c771050065 Add support for libdvdread-0.9.0
jkeil
parents: 1617
diff changeset
58 #else
73c771050065 Add support for libdvdread-0.9.0
jkeil
parents: 1617
diff changeset
59 #define LIBDVDREAD_VERSION DVDREAD_VERSION(0,8,0)
73c771050065 Add support for libdvdread-0.9.0
jkeil
parents: 1617
diff changeset
60 #endif
73c771050065 Add support for libdvdread-0.9.0
jkeil
parents: 1617
diff changeset
61
2935
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
62 char * dvd_audio_stream_types[8] =
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
63 { "ac3","unknown","mpeg1","mpeg2ext","lpcm","unknown","dts" };
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
64
6651
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6490
diff changeset
65 char * dvd_audio_stream_channels[6] =
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6490
diff changeset
66 { "unknown", "stereo", "unknown", "unknown", "unknown", "5.1" };
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
67 #endif
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
68
1467
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
69 extern int vcd_get_track_end(int fd,int track);
8812
f6456b177fdc vcd_read_cue.h -> cue_read.c+h
arpi
parents: 8782
diff changeset
70
f6456b177fdc vcd_read_cue.h -> cue_read.c+h
arpi
parents: 8782
diff changeset
71 #include "cue_read.h"
1467
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
72
2790
98769cea155c added tv subsystem
alex
parents: 2315
diff changeset
73 #ifdef USE_TV
98769cea155c added tv subsystem
alex
parents: 2315
diff changeset
74 #include "tv.h"
2931
bce9c945b29c tv interface update
alex
parents: 2837
diff changeset
75
bce9c945b29c tv interface update
alex
parents: 2837
diff changeset
76 extern int stream_open_tv(stream_t *stream, tvi_handle_t *tvh);
2790
98769cea155c added tv subsystem
alex
parents: 2315
diff changeset
77 #endif
98769cea155c added tv subsystem
alex
parents: 2315
diff changeset
78
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents: 6320
diff changeset
79 #ifdef HAVE_CDDA
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents: 6320
diff changeset
80 stream_t* open_cdda(char* dev,char* track);
7432
8705ce9a9fe9 Enable CDDB support only if the network layer is enabled.
bertrand
parents: 7408
diff changeset
81 #ifdef STREAMING
6474
654b26c941e5 CDDB support added.
bertrand
parents: 6384
diff changeset
82 stream_t* cddb_open(char* dev,char* track);
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents: 6320
diff changeset
83 #endif
7432
8705ce9a9fe9 Enable CDDB support only if the network layer is enabled.
bertrand
parents: 7408
diff changeset
84 #endif
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents: 6320
diff changeset
85
7630
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
86 // Define function about auth the libsmbclient library
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
87 // FIXME: I really do not not is this function is properly working
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
88
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
89 #ifdef LIBSMBCLIENT
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
90
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
91 #include "libsmbclient.h"
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
92
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
93 static char smb_password[15];
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
94 static char smb_username[15];
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
95
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
96 static void smb_auth_fn(const char *server, const char *share,
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
97 char *workgroup, int wgmaxlen, char *username, int unmaxlen,
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
98 char *password, int pwmaxlen)
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
99 {
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
100 char temp[128];
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
101
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
102 strcpy(temp, "LAN");
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
103 if (temp[strlen(temp) - 1] == 0x0a)
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
104 temp[strlen(temp) - 1] = 0x00;
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
105
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
106 if (temp[0]) strncpy(workgroup, temp, wgmaxlen - 1);
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
107
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
108 strcpy(temp, smb_username);
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
109 if (temp[strlen(temp) - 1] == 0x0a)
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
110 temp[strlen(temp) - 1] = 0x00;
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
111
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
112 if (temp[0]) strncpy(username, temp, unmaxlen - 1);
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
113
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
114 strcpy(temp, smb_password);
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
115 if (temp[strlen(temp) - 1] == 0x0a)
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
116 temp[strlen(temp) - 1] = 0x00;
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
117
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
118 if (temp[0]) strncpy(password, temp, pwmaxlen - 1);
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
119 }
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
120
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
121
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
122 #endif
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
123
1467
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
124 // Open a new stream (stdin/file/vcd/url)
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
125
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
126 stream_t* open_stream(char* filename,int vcd_track,int* file_format){
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
127 stream_t* stream=NULL;
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
128 int f=-1;
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
129 off_t len;
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
130 #ifdef __FreeBSD__
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
131 int bsize = VCD_SECTOR_SIZE;
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
132 #endif
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
133
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents: 6320
diff changeset
134 #ifdef HAVE_CDDA
6490
d7605d08b32f filename can be NULL. Fix the conflict between cdda and dvdnav.
albeu
parents: 6479
diff changeset
135 if(filename && strncmp("cdda://",filename,7) == 0)
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents: 6320
diff changeset
136 return open_cdda(cdrom_device ? cdrom_device : DEFAULT_CDROM_DEVICE,filename+7);
7432
8705ce9a9fe9 Enable CDDB support only if the network layer is enabled.
bertrand
parents: 7408
diff changeset
137 #ifdef STREAMING
6490
d7605d08b32f filename can be NULL. Fix the conflict between cdda and dvdnav.
albeu
parents: 6479
diff changeset
138 if(filename && strncmp("cddb://",filename,7) == 0)
6474
654b26c941e5 CDDB support added.
bertrand
parents: 6384
diff changeset
139 return cddb_open(cdrom_device ? cdrom_device : DEFAULT_CDROM_DEVICE,filename+7);
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents: 6320
diff changeset
140 #endif
7432
8705ce9a9fe9 Enable CDDB support only if the network layer is enabled.
bertrand
parents: 7408
diff changeset
141 #endif
6384
f0b933918a22 Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents: 6320
diff changeset
142
1467
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
143 //============ Open VideoCD track ==============
3261
caac174877b7 using #ifdef HAVE_VCD
arpi
parents: 3048
diff changeset
144 #ifdef HAVE_VCD
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8712
diff changeset
145 if(vcd_track && !cue_file_name){
1467
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
146 int ret,ret2;
8649
0c258b964b08 fixes (ok, just workarounds) sig11 in playtree/cfgparser's free()
arpi
parents: 8528
diff changeset
147 if(!cdrom_device) cdrom_device=strdup(DEFAULT_CDROM_DEVICE);
4222
de7eddb3fd70 Change to use cdrom-device and dvd-device options needed for DVD/TV/VCD
albeu
parents: 4146
diff changeset
148 f=open(cdrom_device,O_RDONLY);
de7eddb3fd70 Change to use cdrom-device and dvd-device options needed for DVD/TV/VCD
albeu
parents: 4146
diff changeset
149 if(f<0){ mp_msg(MSGT_OPEN,MSGL_ERR,MSGTR_CdDevNotfound,cdrom_device);return NULL; }
1467
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
150 vcd_read_toc(f);
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
151 ret2=vcd_get_track_end(f,vcd_track);
1584
e49b3927c793 more messages for translator :)
arpi
parents: 1567
diff changeset
152 if(ret2<0){ mp_msg(MSGT_OPEN,MSGL_ERR,MSGTR_ErrTrackSelect " (get)\n");return NULL;}
1467
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
153 ret=vcd_seek_to_track(f,vcd_track);
1584
e49b3927c793 more messages for translator :)
arpi
parents: 1567
diff changeset
154 if(ret<0){ mp_msg(MSGT_OPEN,MSGL_ERR,MSGTR_ErrTrackSelect " (seek)\n");return NULL;}
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1482
diff changeset
155 mp_msg(MSGT_OPEN,MSGL_V,"VCD start byte position: 0x%X end: 0x%X\n",ret,ret2);
1467
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
156 #ifdef __FreeBSD__
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
157 if (ioctl (f, CDRIOCSETBLOCKSIZE, &bsize) == -1) {
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
158 perror ( "Error in CDRIOCSETBLOCKSIZE");
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
159 }
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
160 #endif
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
161 stream=new_stream(f,STREAMTYPE_VCD);
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
162 stream->start_pos=ret;
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
163 stream->end_pos=ret2;
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
164 return stream;
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
165 }
3261
caac174877b7 using #ifdef HAVE_VCD
arpi
parents: 3048
diff changeset
166 #endif
1467
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
167
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8712
diff changeset
168
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8712
diff changeset
169 // for opening of vcds in bincue files
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8712
diff changeset
170 if(vcd_track && cue_file_name){
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8712
diff changeset
171 int ret,ret2;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8712
diff changeset
172 if ((f = cue_read_cue (cue_file_name)) == -1) return NULL;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8712
diff changeset
173
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8712
diff changeset
174 cue_vcd_read_toc();
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8712
diff changeset
175 ret2=cue_vcd_get_track_end(vcd_track);
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8712
diff changeset
176 ret=cue_vcd_seek_to_track(vcd_track);
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8712
diff changeset
177 if(ret<0){ mp_msg(MSGT_OPEN,MSGL_ERR,MSGTR_ErrTrackSelect " (seek)\n");return NULL;}
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8712
diff changeset
178 mp_msg(MSGT_OPEN,MSGL_V,"VCD start byte position: 0x%X end: 0x%X\n",ret,ret2);
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8712
diff changeset
179
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8712
diff changeset
180 stream=new_stream(f,STREAMTYPE_VCDBINCUE);
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8712
diff changeset
181 stream->start_pos=ret;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8712
diff changeset
182 stream->end_pos=ret2;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8712
diff changeset
183 printf ("start:%d end:%d\n", ret, ret2);
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8712
diff changeset
184 return stream;
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8712
diff changeset
185 }
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8712
diff changeset
186
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8712
diff changeset
187
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
188 //============ Open DVD title ==============
5380
8a01cde9cf39 DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents: 4729
diff changeset
189 #ifdef USE_DVDNAV
8a01cde9cf39 DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents: 4729
diff changeset
190 if(dvd_nav){
5472
4bd766a5632b dvdnav functions moved out to dvdnav_steram.c
arpi
parents: 5381
diff changeset
191 dvdnav_priv_t *dvdnav_priv;
5380
8a01cde9cf39 DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents: 4729
diff changeset
192 int event,len,tmplen=0;
8a01cde9cf39 DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents: 4729
diff changeset
193
8a01cde9cf39 DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents: 4729
diff changeset
194 stream=new_stream(-1,STREAMTYPE_DVDNAV);
8a01cde9cf39 DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents: 4729
diff changeset
195 if (!stream) {
8a01cde9cf39 DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents: 4729
diff changeset
196 mp_msg(MSGT_OPEN,MSGL_ERR,MSGTR_Exit_error);
8a01cde9cf39 DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents: 4729
diff changeset
197 return NULL;
8a01cde9cf39 DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents: 4729
diff changeset
198 }
5472
4bd766a5632b dvdnav functions moved out to dvdnav_steram.c
arpi
parents: 5381
diff changeset
199
4bd766a5632b dvdnav functions moved out to dvdnav_steram.c
arpi
parents: 5381
diff changeset
200 if(!filename) filename=DEFAULT_DVD_DEVICE;
4bd766a5632b dvdnav functions moved out to dvdnav_steram.c
arpi
parents: 5381
diff changeset
201 if (!(dvdnav_priv=new_dvdnav_stream(filename))) {
4bd766a5632b dvdnav functions moved out to dvdnav_steram.c
arpi
parents: 5381
diff changeset
202 mp_msg(MSGT_OPEN,MSGL_ERR,MSGTR_CantOpenDVD,filename);
4bd766a5632b dvdnav functions moved out to dvdnav_steram.c
arpi
parents: 5381
diff changeset
203 return NULL;
4bd766a5632b dvdnav functions moved out to dvdnav_steram.c
arpi
parents: 5381
diff changeset
204 }
4bd766a5632b dvdnav functions moved out to dvdnav_steram.c
arpi
parents: 5381
diff changeset
205
4bd766a5632b dvdnav functions moved out to dvdnav_steram.c
arpi
parents: 5381
diff changeset
206 stream->priv=(void*)dvdnav_priv;
5380
8a01cde9cf39 DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents: 4729
diff changeset
207 return stream;
8a01cde9cf39 DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents: 4729
diff changeset
208 }
8a01cde9cf39 DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents: 4729
diff changeset
209 #endif
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
210 #ifdef USE_DVDREAD
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
211 if(dvd_title){
2050
18f4dd5d568f -Wall warnings fixed
arpi
parents: 1977
diff changeset
212 // int ret,ret2;
5380
8a01cde9cf39 DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents: 4729
diff changeset
213 dvd_priv_t *d;
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
214 int ttn,pgc_id,pgn;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
215 dvd_reader_t *dvd;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
216 dvd_file_t *title;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
217 ifo_handle_t *vmg_file;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
218 tt_srpt_t *tt_srpt;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
219 ifo_handle_t *vts_file;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
220 /**
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
221 * Open the disc.
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
222 */
8649
0c258b964b08 fixes (ok, just workarounds) sig11 in playtree/cfgparser's free()
arpi
parents: 8528
diff changeset
223 if(!dvd_device) dvd_device=strdup(DEFAULT_DVD_DEVICE);
4222
de7eddb3fd70 Change to use cdrom-device and dvd-device options needed for DVD/TV/VCD
albeu
parents: 4146
diff changeset
224 dvd = DVDOpen(dvd_device);
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
225 if( !dvd ) {
4222
de7eddb3fd70 Change to use cdrom-device and dvd-device options needed for DVD/TV/VCD
albeu
parents: 4146
diff changeset
226 mp_msg(MSGT_OPEN,MSGL_ERR,MSGTR_CantOpenDVD,dvd_device);
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
227 return NULL;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
228 }
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
229
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1899
diff changeset
230 mp_msg(MSGT_OPEN,MSGL_INFO,MSGTR_DVDwait);
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
231
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
232 /**
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
233 * Load the video manager to find out the information about the titles on
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
234 * this disc.
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
235 */
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
236 vmg_file = ifoOpen( dvd, 0 );
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
237 if( !vmg_file ) {
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
238 mp_msg(MSGT_OPEN,MSGL_ERR, "Can't open VMG info!\n");
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
239 DVDClose( dvd );
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
240 return NULL;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
241 }
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
242 tt_srpt = vmg_file->tt_srpt;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
243 /**
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
244 * Make sure our title number is valid.
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
245 */
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1899
diff changeset
246 mp_msg(MSGT_OPEN,MSGL_INFO, MSGTR_DVDnumTitles,
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
247 tt_srpt->nr_of_srpts );
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
248 if( dvd_title < 1 || dvd_title > tt_srpt->nr_of_srpts ) {
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1899
diff changeset
249 mp_msg(MSGT_OPEN,MSGL_ERR, MSGTR_DVDinvalidTitle, dvd_title);
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
250 ifoClose( vmg_file );
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
251 DVDClose( dvd );
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
252 return NULL;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
253 }
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
254 --dvd_title; // remap 1.. -> 0..
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
255 /**
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
256 * Make sure the chapter number is valid for this title.
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
257 */
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1899
diff changeset
258 mp_msg(MSGT_OPEN,MSGL_INFO, MSGTR_DVDnumChapters,
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
259 tt_srpt->title[dvd_title].nr_of_ptts );
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
260 if( dvd_chapter<1 || dvd_chapter>tt_srpt->title[dvd_title].nr_of_ptts ) {
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1899
diff changeset
261 mp_msg(MSGT_OPEN,MSGL_ERR, MSGTR_DVDinvalidChapter, dvd_chapter);
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
262 ifoClose( vmg_file );
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
263 DVDClose( dvd );
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
264 return NULL;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
265 }
4291
e889d37f25b2 Add option -last-chapter for DVD playing/encoding
kmkaplan
parents: 4251
diff changeset
266 if( dvd_last_chapter>0 ) {
e889d37f25b2 Add option -last-chapter for DVD playing/encoding
kmkaplan
parents: 4251
diff changeset
267 if ( dvd_last_chapter<dvd_chapter || dvd_last_chapter>tt_srpt->title[dvd_title].nr_of_ptts ) {
e889d37f25b2 Add option -last-chapter for DVD playing/encoding
kmkaplan
parents: 4251
diff changeset
268 mp_msg(MSGT_OPEN,MSGL_ERR, "Invalid DVD last chapter number: %d\n", dvd_last_chapter);
e889d37f25b2 Add option -last-chapter for DVD playing/encoding
kmkaplan
parents: 4251
diff changeset
269 ifoClose( vmg_file );
e889d37f25b2 Add option -last-chapter for DVD playing/encoding
kmkaplan
parents: 4251
diff changeset
270 DVDClose( dvd );
e889d37f25b2 Add option -last-chapter for DVD playing/encoding
kmkaplan
parents: 4251
diff changeset
271 return NULL;
e889d37f25b2 Add option -last-chapter for DVD playing/encoding
kmkaplan
parents: 4251
diff changeset
272 }
e889d37f25b2 Add option -last-chapter for DVD playing/encoding
kmkaplan
parents: 4251
diff changeset
273 }
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
274 --dvd_chapter; // remap 1.. -> 0..
4291
e889d37f25b2 Add option -last-chapter for DVD playing/encoding
kmkaplan
parents: 4251
diff changeset
275 /* XXX No need to remap dvd_last_chapter */
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
276 /**
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
277 * Make sure the angle number is valid for this title.
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
278 */
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1899
diff changeset
279 mp_msg(MSGT_OPEN,MSGL_INFO, MSGTR_DVDnumAngles,
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
280 tt_srpt->title[dvd_title].nr_of_angles );
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
281 if( dvd_angle<1 || dvd_angle>tt_srpt->title[dvd_title].nr_of_angles ) {
1977
63634ecec611 faszom. typo.
arpi
parents: 1973
diff changeset
282 mp_msg(MSGT_OPEN,MSGL_ERR, MSGTR_DVDinvalidAngle, dvd_angle);
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
283 ifoClose( vmg_file );
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
284 DVDClose( dvd );
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
285 return NULL;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
286 }
1617
9e73b71b0cfa argh. yet another ugly bug: missing --dvd_angle
arpi
parents: 1616
diff changeset
287 --dvd_angle; // remap 1.. -> 0..
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
288 /**
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
289 * Load the VTS information for the title set our title is in.
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
290 */
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
291 vts_file = ifoOpen( dvd, tt_srpt->title[dvd_title].title_set_nr );
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
292 if( !vts_file ) {
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1899
diff changeset
293 mp_msg(MSGT_OPEN,MSGL_ERR, MSGTR_DVDnoIFO,
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
294 tt_srpt->title[dvd_title].title_set_nr );
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
295 ifoClose( vmg_file );
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
296 DVDClose( dvd );
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
297 return NULL;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
298 }
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
299 /**
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
300 * We've got enough info, time to open the title set data.
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
301 */
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
302 title = DVDOpenFile( dvd, tt_srpt->title[dvd_title].title_set_nr,
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
303 DVD_READ_TITLE_VOBS );
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
304 if( !title ) {
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1899
diff changeset
305 mp_msg(MSGT_OPEN,MSGL_ERR, MSGTR_DVDnoVOBs,
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
306 tt_srpt->title[dvd_title].title_set_nr );
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
307 ifoClose( vts_file );
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
308 ifoClose( vmg_file );
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
309 DVDClose( dvd );
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
310 return NULL;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
311 }
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
312
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1899
diff changeset
313 mp_msg(MSGT_OPEN,MSGL_INFO, MSGTR_DVDopenOk);
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
314 // store data
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
315 d=malloc(sizeof(dvd_priv_t)); memset(d,0,sizeof(dvd_priv_t));
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
316 d->dvd=dvd;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
317 d->title=title;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
318 d->vmg_file=vmg_file;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
319 d->tt_srpt=tt_srpt;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
320 d->vts_file=vts_file;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
321
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
322 /**
2935
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
323 * Check number of audio channels and types
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
324 */
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
325 {
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
326 int ac3aid = 128;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
327 int mpegaid = 0;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
328 int pcmaid = 160;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
329
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
330 d->nr_of_channels=0;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
331
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
332 if ( vts_file->vts_pgcit )
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
333 {
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
334 int i;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
335 for ( i=0;i<8;i++ )
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
336 if ( vts_file->vts_pgcit->pgci_srp[0].pgc->audio_control[i] & 0x8000 )
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
337 {
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
338 audio_attr_t * audio = &vts_file->vtsi_mat->vts_audio_attr[i];
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
339 int language = 0;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
340 char tmp[] = "unknown";
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
341
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
342 if ( audio->lang_type == 1 )
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
343 {
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
344 language=audio->lang_code;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
345 tmp[0]=language>>8;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
346 tmp[1]=language&0xff;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
347 tmp[2]=0;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
348 }
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
349
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
350 d->audio_streams[d->nr_of_channels].language=language;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
351 d->audio_streams[d->nr_of_channels].id=0;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
352 switch ( audio->audio_format )
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
353 {
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
354 case 0: // ac3
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
355 case 6: // dts
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
356 d->audio_streams[d->nr_of_channels].id=ac3aid;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
357 ac3aid++;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
358 break;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
359 case 2: // mpeg layer 1/2/3
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
360 case 3: // mpeg2 ext
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
361 d->audio_streams[d->nr_of_channels].id=mpegaid;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
362 mpegaid++;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
363 break;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
364 case 4: // lpcm
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
365 d->audio_streams[d->nr_of_channels].id=pcmaid;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
366 pcmaid++;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
367 break;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
368 }
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
369
6651
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6490
diff changeset
370 d->audio_streams[d->nr_of_channels].type=audio->audio_format;
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6490
diff changeset
371 // Pontscho: to my mind, tha channels:
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6490
diff changeset
372 // 1 - stereo
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6490
diff changeset
373 // 5 - 5.1
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6490
diff changeset
374 d->audio_streams[d->nr_of_channels].channels=audio->channels;
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6490
diff changeset
375 mp_msg(MSGT_OPEN,MSGL_V,"[open] audio stream: %d audio format: %s (%s) language: %s aid: %d\n",
2935
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
376 d->nr_of_channels,
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
377 dvd_audio_stream_types[ audio->audio_format ],
6651
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6490
diff changeset
378 dvd_audio_stream_channels[ audio->channels ],
2935
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
379 tmp,
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
380 d->audio_streams[d->nr_of_channels].id
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
381 );
3753
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
382
2935
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
383 d->nr_of_channels++;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
384 }
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
385 }
3048
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
386 mp_msg(MSGT_OPEN,MSGL_V,"[open] number of audio channels on disk: %d.\n",d->nr_of_channels );
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
387 }
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
388
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
389 /**
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
390 * Check number of subtitles and language
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
391 */
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
392 {
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
393 int i;
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
394
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
395 d->nr_of_subtitles=0;
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
396 for ( i=0;i<32;i++ )
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
397 if ( vts_file->vts_pgcit->pgci_srp[0].pgc->subp_control[i] & 0x80000000 )
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
398 {
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
399 subp_attr_t * subtitle = &vts_file->vtsi_mat->vts_subp_attr[i];
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
400 int language = 0;
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
401 char tmp[] = "unknown";
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
402
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
403 if ( subtitle->type == 1 )
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
404 {
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
405 language=subtitle->lang_code;
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
406 tmp[0]=language>>8;
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
407 tmp[1]=language&0xff;
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
408 tmp[2]=0;
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
409 }
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
410
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
411 d->subtitles[ d->nr_of_subtitles ].language=language;
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
412 d->subtitles[ d->nr_of_subtitles ].id=d->nr_of_subtitles;
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
413
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
414 mp_msg(MSGT_OPEN,MSGL_V,"[open] subtitle ( sid ): %d language: %s\n",
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
415 d->nr_of_subtitles,
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
416 tmp
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
417 );
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
418 d->nr_of_subtitles++;
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
419 }
b01551d725d4 add subtitle language detect.
pontscho
parents: 3046
diff changeset
420 mp_msg(MSGT_OPEN,MSGL_V,"[open] number of subtitles on disk: %d\n",d->nr_of_subtitles );
2935
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
421 }
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
422
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2931
diff changeset
423 /**
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
424 * Determine which program chain we want to watch. This is based on the
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
425 * chapter number.
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
426 */
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
427 ttn = tt_srpt->title[ dvd_title ].vts_ttn; // local
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
428 pgc_id = vts_file->vts_ptt_srpt->title[ttn-1].ptt[dvd_chapter].pgcn; // local
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
429 pgn = vts_file->vts_ptt_srpt->title[ttn-1].ptt[dvd_chapter].pgn; // local
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
430 d->cur_pgc = vts_file->vts_pgcit->pgci_srp[pgc_id-1].pgc;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
431 d->cur_cell = d->cur_pgc->program_map[pgn-1] - 1; // start playback here
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
432 d->packs_left=-1; // for Navi stuff
1609
84199d075839 ugly seeking bug fixed, correct multiangle seek implemented
arpi
parents: 1596
diff changeset
433 d->angle_seek=0;
4291
e889d37f25b2 Add option -last-chapter for DVD playing/encoding
kmkaplan
parents: 4251
diff changeset
434 /* XXX dvd_last_chapter is in the range 1..nr_of_ptts */
6853
c52dc92ebf4b There appears to be a trivial namespace error in determining the valid
arpi
parents: 6774
diff changeset
435 if ( dvd_last_chapter > 0 && dvd_last_chapter < tt_srpt->title[dvd_title].nr_of_ptts ) {
4291
e889d37f25b2 Add option -last-chapter for DVD playing/encoding
kmkaplan
parents: 4251
diff changeset
436 pgn=vts_file->vts_ptt_srpt->title[ttn-1].ptt[dvd_last_chapter].pgn;
e889d37f25b2 Add option -last-chapter for DVD playing/encoding
kmkaplan
parents: 4251
diff changeset
437 d->last_cell=d->cur_pgc->program_map[pgn-1] - 1;
e889d37f25b2 Add option -last-chapter for DVD playing/encoding
kmkaplan
parents: 4251
diff changeset
438 }
e889d37f25b2 Add option -last-chapter for DVD playing/encoding
kmkaplan
parents: 4251
diff changeset
439 else
e889d37f25b2 Add option -last-chapter for DVD playing/encoding
kmkaplan
parents: 4251
diff changeset
440 d->last_cell=d->cur_pgc->nr_of_cells;
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
441
6651
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6490
diff changeset
442 if( d->cur_pgc->cell_playback[d->cur_cell].block_type == BLOCK_TYPE_ANGLE_BLOCK ) d->cur_cell+=dvd_angle;
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
443 d->cur_pack = d->cur_pgc->cell_playback[ d->cur_cell ].first_sector;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
444 d->cell_last_pack=d->cur_pgc->cell_playback[ d->cur_cell ].last_sector;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
445 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);
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
446
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
447 // ... (unimplemented)
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
448 // return NULL;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
449 stream=new_stream(-1,STREAMTYPE_DVD);
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
450 stream->start_pos=(off_t)d->cur_pack*2048;
4390
fbbd612779af DVD progress bar fix
arpi
parents: 4344
diff changeset
451 stream->end_pos=(off_t)(d->cur_pgc->cell_playback[d->last_cell-1].last_sector)*2048;
5932
1ebeebca86f3 printf to mp_msg + warning msg from MSGL_INFO to MSGT_WARN
albeu
parents: 5819
diff changeset
452 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);
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
453 stream->priv=(void*)d;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
454 return stream;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
455 }
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
456 #endif
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
457
7408
0c6948b8100f stream layer cleanup part 2
arpi
parents: 7407
diff changeset
458 //============ Check for TV-input or multi-file input ====
0c6948b8100f stream layer cleanup part 2
arpi
parents: 7407
diff changeset
459 if( (mf_support == 1)
2790
98769cea155c added tv subsystem
alex
parents: 2315
diff changeset
460 #ifdef USE_TV
7408
0c6948b8100f stream layer cleanup part 2
arpi
parents: 7407
diff changeset
461 || (tv_param_on == 1)
2790
98769cea155c added tv subsystem
alex
parents: 2315
diff changeset
462 #endif
7408
0c6948b8100f stream layer cleanup part 2
arpi
parents: 7407
diff changeset
463 ){
4551
716b00618bfc add mfi support
pontscho
parents: 4390
diff changeset
464 /* create stream */
7407
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
465 stream = new_stream(-1, STREAMTYPE_DUMMY);
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
466 if (!stream) return(NULL);
7408
0c6948b8100f stream layer cleanup part 2
arpi
parents: 7407
diff changeset
467 stream->url=filename?strdup(filename):NULL;
4551
716b00618bfc add mfi support
pontscho
parents: 4390
diff changeset
468 return(stream);
716b00618bfc add mfi support
pontscho
parents: 4390
diff changeset
469 }
1467
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
470
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
471 #ifdef STREAMING
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
472 url = url_new(filename);
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
473 if(url) {
7630
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
474 if (strcmp(url->protocol, "smb")==0){
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
475 #ifdef LIBSMBCLIENT
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
476
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
477 // we need init of libsmbclient
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
478 int err;
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
479
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
480 // FIXME: HACK: make the username/password global varaibles
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
481 // so the auth_fn function should grab it ...
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
482 // i cannot thing other way...
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
483 err = smbc_init(smb_auth_fn, 10); /* Initialize things */
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
484 // libsmbclient using
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
485 if (err < 0) {
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
486 mp_msg(MSGT_OPEN,MSGL_ERR,MSGTR_SMBInitError,err);
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
487 return NULL;
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
488 }
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
489 f=smbc_open(filename, O_RDONLY, 0666);
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
490
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
491 // cannot open the file, outputs that
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
492 // MSGTR_FileNotFound -> MSGTR_SMBFileNotFound
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
493 if(f<0){
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
494 mp_msg(MSGT_OPEN,MSGL_ERR,MSGTR_SMBFileNotFound,filename);
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
495 return NULL;
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
496 }
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
497 len=smbc_lseek(f,0,SEEK_END);
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
498 smbc_lseek(f,0,SEEK_SET);
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
499 // FIXME: I really wonder is such situation -> but who cares ;)
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
500 // if (len == -1)
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
501 // return new_stream(f,STREAMTYPE_STREAM); // open as stream
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
502 url_free(url);
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
503 stream=new_stream(f,STREAMTYPE_SMB);
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
504 stream->end_pos=len;
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
505 return stream;
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
506 #else
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
507 mp_msg(MSGT_OPEN,MSGL_ERR,MSGTR_SMBNotCompiled,filename);
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
508 return NULL;
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
509 #endif
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7559
diff changeset
510 }
4251
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4222
diff changeset
511 stream=new_stream(f,STREAMTYPE_STREAM);
4729
f51bd827ed1c fixed MP3 ICY detection, return detected file format for open_stream
alex
parents: 4551
diff changeset
512 if( streaming_start( stream, file_format, url )<0){
4251
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4222
diff changeset
513 mp_msg(MSGT_OPEN,MSGL_ERR,MSGTR_UnableOpenURL, filename);
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4222
diff changeset
514 url_free(url);
05affdf4bdcd Moved network related code from open.c to network.c
bertrand
parents: 4222
diff changeset
515 return NULL;
4046
f732854e3d16 Kept the HTTP connection open after autodetect, so
bertrand
parents: 3753
diff changeset
516 }
1584
e49b3927c793 more messages for translator :)
arpi
parents: 1567
diff changeset
517 mp_msg(MSGT_OPEN,MSGL_INFO,MSGTR_ConnToServer, url->hostname );
3045
6c14fd789ba5 Changed the order of processing the network opening.
bertrand
parents: 2935
diff changeset
518 url_free(url);
2315
c3c73ba53f0e streaming fixed
arpi
parents: 2314
diff changeset
519 return stream;
1467
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
520 }
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
521 #endif
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
522
6320
12136df07dbd common code to handle file/stdin/fifo opening, allows using named pipes and
arpi
parents: 5932
diff changeset
523 //============ Open STDIN or plain FILE ============
12136df07dbd common code to handle file/stdin/fifo opening, allows using named pipes and
arpi
parents: 5932
diff changeset
524 if(!strcmp(filename,"-")){
12136df07dbd common code to handle file/stdin/fifo opening, allows using named pipes and
arpi
parents: 5932
diff changeset
525 // read from stdin
12136df07dbd common code to handle file/stdin/fifo opening, allows using named pipes and
arpi
parents: 5932
diff changeset
526 mp_msg(MSGT_OPEN,MSGL_INFO,MSGTR_ReadSTDIN);
12136df07dbd common code to handle file/stdin/fifo opening, allows using named pipes and
arpi
parents: 5932
diff changeset
527 f=0; // 0=stdin
12136df07dbd common code to handle file/stdin/fifo opening, allows using named pipes and
arpi
parents: 5932
diff changeset
528 } else {
8712
9e32c8ee5862 fixed stream errors on some cygwin installations
faust3
parents: 8649
diff changeset
529 #ifndef __CYGWIN__
1467
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
530 f=open(filename,O_RDONLY);
8712
9e32c8ee5862 fixed stream errors on some cygwin installations
faust3
parents: 8649
diff changeset
531 #else
9e32c8ee5862 fixed stream errors on some cygwin installations
faust3
parents: 8649
diff changeset
532 f=open(filename,O_RDONLY|O_BINARY);
9e32c8ee5862 fixed stream errors on some cygwin installations
faust3
parents: 8649
diff changeset
533 #endif
1584
e49b3927c793 more messages for translator :)
arpi
parents: 1567
diff changeset
534 if(f<0){ mp_msg(MSGT_OPEN,MSGL_ERR,MSGTR_FileNotFound,filename);return NULL; }
6320
12136df07dbd common code to handle file/stdin/fifo opening, allows using named pipes and
arpi
parents: 5932
diff changeset
535 }
12136df07dbd common code to handle file/stdin/fifo opening, allows using named pipes and
arpi
parents: 5932
diff changeset
536
1467
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
537 len=lseek(f,0,SEEK_END); lseek(f,0,SEEK_SET);
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
538 if (len == -1)
6320
12136df07dbd common code to handle file/stdin/fifo opening, allows using named pipes and
arpi
parents: 5932
diff changeset
539 return new_stream(f,STREAMTYPE_STREAM); // open as stream
12136df07dbd common code to handle file/stdin/fifo opening, allows using named pipes and
arpi
parents: 5932
diff changeset
540
1467
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
541 #ifdef _LARGEFILE_SOURCE
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1482
diff changeset
542 mp_msg(MSGT_OPEN,MSGL_V,"File size is %lld bytes\n", (long long)len);
1467
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
543 #else
1567
5c7760aa4f94 printf->mp_msg/mp_dbg
arpi
parents: 1482
diff changeset
544 mp_msg(MSGT_OPEN,MSGL_V,"File size is %u bytes\n", (unsigned int)len);
1467
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
545 #endif
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6853
diff changeset
546
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6853
diff changeset
547 #ifdef STREAMING_LIVE_DOT_COM
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6853
diff changeset
548 // Check for a special case: a SDP file:
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6853
diff changeset
549 if (isSDPFile) {
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6853
diff changeset
550 return stream_open_sdp(f, len, file_format);
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6853
diff changeset
551 }
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6853
diff changeset
552 #endif
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents: 6853
diff changeset
553
1467
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
554 stream=new_stream(f,STREAMTYPE_FILE);
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
555 stream->end_pos=len;
8528
9d143176d95f XMMS Input plugin support
arpi
parents: 8123
diff changeset
556 stream->url=filename?strdup(filename):NULL;
1467
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
557 return stream;
f352e1e951ba stream opening -> open.c, initialframes ignored
arpi
parents:
diff changeset
558 }
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
559
4343
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4291
diff changeset
560 int dvd_parse_chapter_range(struct config *conf, const char *range){
7472
c4434bdf6e51 tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents: 7432
diff changeset
561 const char *s;
c4434bdf6e51 tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents: 7432
diff changeset
562 char *t;
8123
9fc45fe0d444 *HUGE* set of compiler warning fixes, unused variables removal
arpi
parents: 7854
diff changeset
563 /* conf; prevent warning from GCC */
4344
7d9b4c874f73 Don't segfault with empty -chapter spec.
kmkaplan
parents: 4343
diff changeset
564 s = range;
4343
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4291
diff changeset
565 dvd_chapter = 1;
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4291
diff changeset
566 dvd_last_chapter = 0;
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4291
diff changeset
567 if (*range && isdigit(*range)) {
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4291
diff changeset
568 dvd_chapter = strtol(range, &s, 10);
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4291
diff changeset
569 if (range == s) {
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4291
diff changeset
570 mp_msg(MSGT_OPEN, MSGL_ERR, "Invalid chapter range specification %s\n", range);
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4291
diff changeset
571 return -1;
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4291
diff changeset
572 }
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4291
diff changeset
573 }
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4291
diff changeset
574 if (*s == 0)
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4291
diff changeset
575 return 0;
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4291
diff changeset
576 else if (*s != '-') {
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4291
diff changeset
577 mp_msg(MSGT_OPEN, MSGL_ERR, "Invalid chapter range specification %s\n", range);
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4291
diff changeset
578 return -1;
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4291
diff changeset
579 }
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4291
diff changeset
580 ++s;
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4291
diff changeset
581 if (*s == 0)
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4291
diff changeset
582 return 0;
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4291
diff changeset
583 if (! isdigit(*s)) {
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4291
diff changeset
584 mp_msg(MSGT_OPEN, MSGL_ERR, "Invalid chapter range specification %s\n", range);
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4291
diff changeset
585 return -1;
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4291
diff changeset
586 }
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4291
diff changeset
587 dvd_last_chapter = strtol(s, &t, 10);
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4291
diff changeset
588 if (s == t || *t) {
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4291
diff changeset
589 mp_msg(MSGT_OPEN, MSGL_ERR, "Invalid chapter range specification %s\n", range);
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4291
diff changeset
590 return -1;
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4291
diff changeset
591 }
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4291
diff changeset
592 return 0;
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4291
diff changeset
593 }
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4291
diff changeset
594
3753
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
595 #ifdef USE_DVDREAD
7854
d6c29d863f15 dvd chapter detect function from Gregory Kovriga
pontscho
parents: 7630
diff changeset
596 int dvd_chapter_from_cell(dvd_priv_t* dvd,int title,int cell)
d6c29d863f15 dvd chapter detect function from Gregory Kovriga
pontscho
parents: 7630
diff changeset
597 {
d6c29d863f15 dvd chapter detect function from Gregory Kovriga
pontscho
parents: 7630
diff changeset
598 pgc_t * cur_pgc;
d6c29d863f15 dvd chapter detect function from Gregory Kovriga
pontscho
parents: 7630
diff changeset
599 ptt_info_t* ptt;
d6c29d863f15 dvd chapter detect function from Gregory Kovriga
pontscho
parents: 7630
diff changeset
600 int chapter = cell;
d6c29d863f15 dvd chapter detect function from Gregory Kovriga
pontscho
parents: 7630
diff changeset
601 int pgc_id,pgn;
d6c29d863f15 dvd chapter detect function from Gregory Kovriga
pontscho
parents: 7630
diff changeset
602 if(title < 0 || cell < 0){
d6c29d863f15 dvd chapter detect function from Gregory Kovriga
pontscho
parents: 7630
diff changeset
603 return 0;
d6c29d863f15 dvd chapter detect function from Gregory Kovriga
pontscho
parents: 7630
diff changeset
604 }
d6c29d863f15 dvd chapter detect function from Gregory Kovriga
pontscho
parents: 7630
diff changeset
605 /* for most DVD's chapter == cell */
d6c29d863f15 dvd chapter detect function from Gregory Kovriga
pontscho
parents: 7630
diff changeset
606 /* but there are more complecated cases... */
d6c29d863f15 dvd chapter detect function from Gregory Kovriga
pontscho
parents: 7630
diff changeset
607 if(chapter >= dvd->vmg_file->tt_srpt->title[title].nr_of_ptts){
d6c29d863f15 dvd chapter detect function from Gregory Kovriga
pontscho
parents: 7630
diff changeset
608 chapter = dvd->vmg_file->tt_srpt->title[title].nr_of_ptts-1;
d6c29d863f15 dvd chapter detect function from Gregory Kovriga
pontscho
parents: 7630
diff changeset
609 }
d6c29d863f15 dvd chapter detect function from Gregory Kovriga
pontscho
parents: 7630
diff changeset
610 title = dvd->tt_srpt->title[title].vts_ttn-1;
d6c29d863f15 dvd chapter detect function from Gregory Kovriga
pontscho
parents: 7630
diff changeset
611 ptt = dvd->vts_file->vts_ptt_srpt->title[title].ptt;
d6c29d863f15 dvd chapter detect function from Gregory Kovriga
pontscho
parents: 7630
diff changeset
612 while(chapter >= 0){
d6c29d863f15 dvd chapter detect function from Gregory Kovriga
pontscho
parents: 7630
diff changeset
613 pgc_id = ptt[chapter].pgcn;
d6c29d863f15 dvd chapter detect function from Gregory Kovriga
pontscho
parents: 7630
diff changeset
614 pgn = ptt[chapter].pgn;
d6c29d863f15 dvd chapter detect function from Gregory Kovriga
pontscho
parents: 7630
diff changeset
615 cur_pgc = dvd->vts_file->vts_pgcit->pgci_srp[pgc_id-1].pgc;
d6c29d863f15 dvd chapter detect function from Gregory Kovriga
pontscho
parents: 7630
diff changeset
616 if(cell >= cur_pgc->program_map[pgn-1]-1){
d6c29d863f15 dvd chapter detect function from Gregory Kovriga
pontscho
parents: 7630
diff changeset
617 return chapter;
d6c29d863f15 dvd chapter detect function from Gregory Kovriga
pontscho
parents: 7630
diff changeset
618 }
d6c29d863f15 dvd chapter detect function from Gregory Kovriga
pontscho
parents: 7630
diff changeset
619 --chapter;
d6c29d863f15 dvd chapter detect function from Gregory Kovriga
pontscho
parents: 7630
diff changeset
620 }
d6c29d863f15 dvd chapter detect function from Gregory Kovriga
pontscho
parents: 7630
diff changeset
621 /* didn't find a chapter ??? */
d6c29d863f15 dvd chapter detect function from Gregory Kovriga
pontscho
parents: 7630
diff changeset
622 return chapter;
d6c29d863f15 dvd chapter detect function from Gregory Kovriga
pontscho
parents: 7630
diff changeset
623 }
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
624
3753
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
625 int dvd_aid_from_lang(stream_t *stream, unsigned char* lang){
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
626 dvd_priv_t *d=stream->priv;
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
627 int code,i;
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
628 while(lang && strlen(lang)>=2){
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
629 code=lang[1]|(lang[0]<<8);
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
630 for(i=0;i<d->nr_of_channels;i++){
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
631 if(d->audio_streams[i].language==code){
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
632 mp_msg(MSGT_OPEN,MSGL_INFO,"Selected DVD audio channel: %d language: %c%c\n",
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
633 d->audio_streams[i].id, lang[0],lang[1]);
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
634 return d->audio_streams[i].id;
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
635 }
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
636 // printf("%X != %X (%c%c)\n",code,d->audio_streams[i].language,lang[0],lang[1]);
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
637 }
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
638 lang+=2; while (lang[0]==',' || lang[0]==' ') ++lang;
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
639 }
5932
1ebeebca86f3 printf to mp_msg + warning msg from MSGL_INFO to MSGT_WARN
albeu
parents: 5819
diff changeset
640 mp_msg(MSGT_OPEN,MSGL_WARN,"No matching DVD audio language found!\n");
3753
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
641 return -1;
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
642 }
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
643
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
644 int dvd_sid_from_lang(stream_t *stream, unsigned char* lang){
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
645 dvd_priv_t *d=stream->priv;
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
646 int code,i;
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
647 while(lang && strlen(lang)>=2){
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
648 code=lang[1]|(lang[0]<<8);
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
649 for(i=0;i<d->nr_of_subtitles;i++){
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
650 if(d->subtitles[i].language==code){
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
651 mp_msg(MSGT_OPEN,MSGL_INFO,"Selected DVD subtitle channel: %d language: %c%c\n",
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
652 d->subtitles[i].id, lang[0],lang[1]);
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
653 return d->subtitles[i].id;
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
654 }
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
655 }
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
656 lang+=2; while (lang[0]==',' || lang[0]==' ') ++lang;
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
657 }
5932
1ebeebca86f3 printf to mp_msg + warning msg from MSGL_INFO to MSGT_WARN
albeu
parents: 5819
diff changeset
658 mp_msg(MSGT_OPEN,MSGL_WARN,"No matching DVD subtitle language found!\n");
3753
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
659 return -1;
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3603
diff changeset
660 }
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
661
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
662 static int dvd_next_cell(dvd_priv_t *d){
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
663 int next_cell=d->cur_cell;
1616
a3b4579e3806 some debug messages
arpi
parents: 1615
diff changeset
664
a3b4579e3806 some debug messages
arpi
parents: 1615
diff changeset
665 mp_msg(MSGT_DVD,MSGL_V, "dvd_next_cell: next1=0x%X \n",next_cell);
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
666
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
667 if( d->cur_pgc->cell_playback[ next_cell ].block_type
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
668 == BLOCK_TYPE_ANGLE_BLOCK ) {
4291
e889d37f25b2 Add option -last-chapter for DVD playing/encoding
kmkaplan
parents: 4251
diff changeset
669 while(next_cell<d->last_cell){
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
670 if( d->cur_pgc->cell_playback[next_cell].block_mode
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
671 == BLOCK_MODE_LAST_CELL ) break;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
672 ++next_cell;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
673 }
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
674 }
1616
a3b4579e3806 some debug messages
arpi
parents: 1615
diff changeset
675 mp_msg(MSGT_DVD,MSGL_V, "dvd_next_cell: next2=0x%X \n",next_cell);
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
676
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
677 ++next_cell;
4291
e889d37f25b2 Add option -last-chapter for DVD playing/encoding
kmkaplan
parents: 4251
diff changeset
678 if(next_cell>=d->last_cell) return -1; // EOF
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
679 if( d->cur_pgc->cell_playback[next_cell].block_type == BLOCK_TYPE_ANGLE_BLOCK ){
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
680 next_cell+=dvd_angle;
4291
e889d37f25b2 Add option -last-chapter for DVD playing/encoding
kmkaplan
parents: 4251
diff changeset
681 if(next_cell>=d->last_cell) return -1; // EOF
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
682 }
1616
a3b4579e3806 some debug messages
arpi
parents: 1615
diff changeset
683 mp_msg(MSGT_DVD,MSGL_V, "dvd_next_cell: next3=0x%X \n",next_cell);
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
684 return next_cell;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
685 }
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
686
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
687 int dvd_read_sector(dvd_priv_t *d,unsigned char* data){
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
688 int len;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
689
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
690 if(d->packs_left==0){
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
691 /**
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
692 * If we're not at the end of this cell, we can determine the next
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
693 * VOBU to display using the VOBU_SRI information section of the
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
694 * DSI. Using this value correctly follows the current angle,
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
695 * avoiding the doubled scenes in The Matrix, and makes our life
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
696 * really happy.
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
697 *
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
698 * Otherwise, we set our next address past the end of this cell to
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
699 * force the code above to go to the next cell in the program.
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
700 */
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
701 if( d->dsi_pack.vobu_sri.next_vobu != SRI_END_OF_CELL ) {
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
702 d->cur_pack= d->dsi_pack.dsi_gi.nv_pck_lbn +
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
703 ( d->dsi_pack.vobu_sri.next_vobu & 0x7fffffff );
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
704 mp_msg(MSGT_DVD,MSGL_DBG2, "Navi new pos=0x%X \n",d->cur_pack);
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
705 } else {
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
706 // end of cell! find next cell!
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
707 mp_msg(MSGT_DVD,MSGL_V, "--- END OF CELL !!! ---\n");
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
708 d->cur_pack=d->cell_last_pack+1;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
709 }
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
710 }
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
711
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
712 read_next:
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
713
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
714 if(d->cur_pack>d->cell_last_pack){
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
715 // end of cell!
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
716 int next=dvd_next_cell(d);
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
717 if(next>=0){
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
718 d->cur_cell=next;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
719
1615
4e4eb37a4b76 removed double +angle stuff
arpi
parents: 1609
diff changeset
720 // if( d->cur_pgc->cell_playback[d->cur_cell].block_type
4e4eb37a4b76 removed double +angle stuff
arpi
parents: 1609
diff changeset
721 // == BLOCK_TYPE_ANGLE_BLOCK ) d->cur_cell+=dvd_angle;
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
722 d->cur_pack = d->cur_pgc->cell_playback[ d->cur_cell ].first_sector;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
723 d->cell_last_pack=d->cur_pgc->cell_playback[ d->cur_cell ].last_sector;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
724 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);
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
725
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
726 } else return -1; // EOF
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
727 }
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
728
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
729 len = DVDReadBlocks( d->title, d->cur_pack, 1, data );
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
730 if(!len) return -1; //error
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
731
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
732 if(data[38]==0 && data[39]==0 && data[40]==1 && data[41]==0xBF &&
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
733 data[1024]==0 && data[1025]==0 && data[1026]==1 && data[1027]==0xBF){
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
734 // found a Navi packet!!!
1875
73c771050065 Add support for libdvdread-0.9.0
jkeil
parents: 1617
diff changeset
735 #if LIBDVDREAD_VERSION >= DVDREAD_VERSION(0,9,0)
73c771050065 Add support for libdvdread-0.9.0
jkeil
parents: 1617
diff changeset
736 navRead_DSI( &d->dsi_pack, &(data[ DSI_START_BYTE ]) );
73c771050065 Add support for libdvdread-0.9.0
jkeil
parents: 1617
diff changeset
737 #else
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
738 navRead_DSI( &d->dsi_pack, &(data[ DSI_START_BYTE ]), sizeof(dsi_t) );
1875
73c771050065 Add support for libdvdread-0.9.0
jkeil
parents: 1617
diff changeset
739 #endif
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
740 if(d->cur_pack != d->dsi_pack.dsi_gi.nv_pck_lbn ){
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
741 mp_msg(MSGT_DVD,MSGL_V, "Invalid NAVI packet! lba=0x%X navi=0x%X \n",
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
742 d->cur_pack,d->dsi_pack.dsi_gi.nv_pck_lbn);
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
743 } else {
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
744 // process!
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
745 d->packs_left = d->dsi_pack.dsi_gi.vobu_ea;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
746 mp_msg(MSGT_DVD,MSGL_DBG2, "Found NAVI packet! lba=0x%X len=%d \n",d->cur_pack,d->packs_left);
6774
3bcd52b7b2ae Workaround for seeking multiangle discs with missing sml_agli[] table, as a
arpi
parents: 6651
diff changeset
747 //navPrint_DSI(&d->dsi_pack);
3bcd52b7b2ae Workaround for seeking multiangle discs with missing sml_agli[] table, as a
arpi
parents: 6651
diff changeset
748 mp_msg(MSGT_DVD,MSGL_DBG3,"\r### CELL %d: Navi: %d/%d IFO: %d/%d \n",d->cur_cell,
3bcd52b7b2ae Workaround for seeking multiangle discs with missing sml_agli[] table, as a
arpi
parents: 6651
diff changeset
749 d->dsi_pack.dsi_gi.vobu_c_idn,d->dsi_pack.dsi_gi.vobu_vob_idn,
3bcd52b7b2ae Workaround for seeking multiangle discs with missing sml_agli[] table, as a
arpi
parents: 6651
diff changeset
750 d->cur_pgc->cell_position[d->cur_cell].cell_nr,
3bcd52b7b2ae Workaround for seeking multiangle discs with missing sml_agli[] table, as a
arpi
parents: 6651
diff changeset
751 d->cur_pgc->cell_position[d->cur_cell].vob_id_nr);
3bcd52b7b2ae Workaround for seeking multiangle discs with missing sml_agli[] table, as a
arpi
parents: 6651
diff changeset
752
1609
84199d075839 ugly seeking bug fixed, correct multiangle seek implemented
arpi
parents: 1596
diff changeset
753 if(d->angle_seek){
6774
3bcd52b7b2ae Workaround for seeking multiangle discs with missing sml_agli[] table, as a
arpi
parents: 6651
diff changeset
754 int i,skip=0;
7296
f4710b873abd SPARC gcc generates bad code accessing an unaligned and packed structure member
jkeil
parents: 6910
diff changeset
755 #if defined(__GNUC__) && defined(__sparc__)
f4710b873abd SPARC gcc generates bad code accessing an unaligned and packed structure member
jkeil
parents: 6910
diff changeset
756 // workaround for a bug in the sparc version of gcc 2.95.X ... 3.2,
f4710b873abd SPARC gcc generates bad code accessing an unaligned and packed structure member
jkeil
parents: 6910
diff changeset
757 // it generates incorrect code for unaligned access to a packed
f4710b873abd SPARC gcc generates bad code accessing an unaligned and packed structure member
jkeil
parents: 6910
diff changeset
758 // structure member, resulting in an mplayer crash with a SIGBUS
f4710b873abd SPARC gcc generates bad code accessing an unaligned and packed structure member
jkeil
parents: 6910
diff changeset
759 // signal.
f4710b873abd SPARC gcc generates bad code accessing an unaligned and packed structure member
jkeil
parents: 6910
diff changeset
760 //
f4710b873abd SPARC gcc generates bad code accessing an unaligned and packed structure member
jkeil
parents: 6910
diff changeset
761 // See also gcc problem report PR c/7847:
f4710b873abd SPARC gcc generates bad code accessing an unaligned and packed structure member
jkeil
parents: 6910
diff changeset
762 // http://gcc.gnu.org/cgi-bin/gnatsweb.pl?database=gcc&cmd=view+audit-trail&pr=7847
f4710b873abd SPARC gcc generates bad code accessing an unaligned and packed structure member
jkeil
parents: 6910
diff changeset
763 for(i=0;i<9;i++){ // check if all values zero:
f4710b873abd SPARC gcc generates bad code accessing an unaligned and packed structure member
jkeil
parents: 6910
diff changeset
764 typeof(d->dsi_pack.sml_agli.data[i].address) tmp_addr;
f4710b873abd SPARC gcc generates bad code accessing an unaligned and packed structure member
jkeil
parents: 6910
diff changeset
765 memcpy(&tmp_addr,&d->dsi_pack.sml_agli.data[i].address,sizeof(tmp_addr));
f4710b873abd SPARC gcc generates bad code accessing an unaligned and packed structure member
jkeil
parents: 6910
diff changeset
766 if((skip=tmp_addr)!=0) break;
f4710b873abd SPARC gcc generates bad code accessing an unaligned and packed structure member
jkeil
parents: 6910
diff changeset
767 }
f4710b873abd SPARC gcc generates bad code accessing an unaligned and packed structure member
jkeil
parents: 6910
diff changeset
768 #else
6774
3bcd52b7b2ae Workaround for seeking multiangle discs with missing sml_agli[] table, as a
arpi
parents: 6651
diff changeset
769 for(i=0;i<9;i++) // check if all values zero:
3bcd52b7b2ae Workaround for seeking multiangle discs with missing sml_agli[] table, as a
arpi
parents: 6651
diff changeset
770 if((skip=d->dsi_pack.sml_agli.data[i].address)!=0) break;
7296
f4710b873abd SPARC gcc generates bad code accessing an unaligned and packed structure member
jkeil
parents: 6910
diff changeset
771 #endif
6774
3bcd52b7b2ae Workaround for seeking multiangle discs with missing sml_agli[] table, as a
arpi
parents: 6651
diff changeset
772 if(skip){
3bcd52b7b2ae Workaround for seeking multiangle discs with missing sml_agli[] table, as a
arpi
parents: 6651
diff changeset
773 // sml_agli table has valid data (at least one non-zero):
3bcd52b7b2ae Workaround for seeking multiangle discs with missing sml_agli[] table, as a
arpi
parents: 6651
diff changeset
774 d->cur_pack=d->dsi_pack.dsi_gi.nv_pck_lbn+
3bcd52b7b2ae Workaround for seeking multiangle discs with missing sml_agli[] table, as a
arpi
parents: 6651
diff changeset
775 d->dsi_pack.sml_agli.data[dvd_angle].address;
3bcd52b7b2ae Workaround for seeking multiangle discs with missing sml_agli[] table, as a
arpi
parents: 6651
diff changeset
776 d->angle_seek=0;
3bcd52b7b2ae Workaround for seeking multiangle discs with missing sml_agli[] table, as a
arpi
parents: 6651
diff changeset
777 mp_msg(MSGT_DVD,MSGL_V, "Angle-seek synced using sml_agli map! new_lba=0x%X \n",d->cur_pack);
3bcd52b7b2ae Workaround for seeking multiangle discs with missing sml_agli[] table, as a
arpi
parents: 6651
diff changeset
778 } else {
3bcd52b7b2ae Workaround for seeking multiangle discs with missing sml_agli[] table, as a
arpi
parents: 6651
diff changeset
779 // check if we're in the right cell, jump otherwise:
3bcd52b7b2ae Workaround for seeking multiangle discs with missing sml_agli[] table, as a
arpi
parents: 6651
diff changeset
780 if( (d->dsi_pack.dsi_gi.vobu_c_idn==d->cur_pgc->cell_position[d->cur_cell].cell_nr) &&
3bcd52b7b2ae Workaround for seeking multiangle discs with missing sml_agli[] table, as a
arpi
parents: 6651
diff changeset
781 (d->dsi_pack.dsi_gi.vobu_vob_idn==d->cur_pgc->cell_position[d->cur_cell].vob_id_nr) ){
3bcd52b7b2ae Workaround for seeking multiangle discs with missing sml_agli[] table, as a
arpi
parents: 6651
diff changeset
782 d->angle_seek=0;
3bcd52b7b2ae Workaround for seeking multiangle discs with missing sml_agli[] table, as a
arpi
parents: 6651
diff changeset
783 mp_msg(MSGT_DVD,MSGL_V, "Angle-seek synced by cell/vob IDN search! \n");
3bcd52b7b2ae Workaround for seeking multiangle discs with missing sml_agli[] table, as a
arpi
parents: 6651
diff changeset
784 } else {
3bcd52b7b2ae Workaround for seeking multiangle discs with missing sml_agli[] table, as a
arpi
parents: 6651
diff changeset
785 // wrong angle, skip this vobu:
3bcd52b7b2ae Workaround for seeking multiangle discs with missing sml_agli[] table, as a
arpi
parents: 6651
diff changeset
786 d->cur_pack=d->dsi_pack.dsi_gi.nv_pck_lbn+
3bcd52b7b2ae Workaround for seeking multiangle discs with missing sml_agli[] table, as a
arpi
parents: 6651
diff changeset
787 d->dsi_pack.dsi_gi.vobu_ea;
3bcd52b7b2ae Workaround for seeking multiangle discs with missing sml_agli[] table, as a
arpi
parents: 6651
diff changeset
788 d->angle_seek=2; // DEBUG
3bcd52b7b2ae Workaround for seeking multiangle discs with missing sml_agli[] table, as a
arpi
parents: 6651
diff changeset
789 }
3bcd52b7b2ae Workaround for seeking multiangle discs with missing sml_agli[] table, as a
arpi
parents: 6651
diff changeset
790 }
1609
84199d075839 ugly seeking bug fixed, correct multiangle seek implemented
arpi
parents: 1596
diff changeset
791 }
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
792 }
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
793 ++d->cur_pack;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
794 goto read_next;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
795 }
6774
3bcd52b7b2ae Workaround for seeking multiangle discs with missing sml_agli[] table, as a
arpi
parents: 6651
diff changeset
796
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
797 ++d->cur_pack;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
798 if(d->packs_left>=0) --d->packs_left;
1609
84199d075839 ugly seeking bug fixed, correct multiangle seek implemented
arpi
parents: 1596
diff changeset
799
6774
3bcd52b7b2ae Workaround for seeking multiangle discs with missing sml_agli[] table, as a
arpi
parents: 6651
diff changeset
800 if(d->angle_seek){
3bcd52b7b2ae Workaround for seeking multiangle discs with missing sml_agli[] table, as a
arpi
parents: 6651
diff changeset
801 if(d->angle_seek==2) mp_msg(MSGT_DVD,MSGL_V, "!!! warning! reading packet while angle_seek !!!\n");
3bcd52b7b2ae Workaround for seeking multiangle discs with missing sml_agli[] table, as a
arpi
parents: 6651
diff changeset
802 goto read_next; // searching for Navi packet
3bcd52b7b2ae Workaround for seeking multiangle discs with missing sml_agli[] table, as a
arpi
parents: 6651
diff changeset
803 }
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
804
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
805 return d->cur_pack-1;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
806 }
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
807
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
808 void dvd_seek(dvd_priv_t *d,int pos){
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
809 d->packs_left=-1;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
810 d->cur_pack=pos;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
811
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
812 // check if we stay in current cell (speedup things, and avoid angle skip)
1609
84199d075839 ugly seeking bug fixed, correct multiangle seek implemented
arpi
parents: 1596
diff changeset
813 if(d->cur_pack>d->cell_last_pack ||
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
814 d->cur_pack<d->cur_pgc->cell_playback[ d->cur_cell ].first_sector){
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
815
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
816 // ok, cell change, find the right cell!
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
817 d->cur_cell=0;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
818 if( d->cur_pgc->cell_playback[d->cur_cell].block_type
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
819 == BLOCK_TYPE_ANGLE_BLOCK ) d->cur_cell+=dvd_angle;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
820
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
821 while(1){
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
822 int next;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
823 d->cell_last_pack=d->cur_pgc->cell_playback[ d->cur_cell ].last_sector;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
824 if(d->cur_pack<d->cur_pgc->cell_playback[ d->cur_cell ].first_sector){
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
825 d->cur_pack=d->cur_pgc->cell_playback[ d->cur_cell ].first_sector;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
826 break;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
827 }
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
828 if(d->cur_pack<=d->cell_last_pack) break; // ok, we find it! :)
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
829 next=dvd_next_cell(d);
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
830 if(next<0){
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
831 // d->cur_pack=d->cell_last_pack+1;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
832 break; // we're after the last cell
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
833 }
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
834 d->cur_cell=next;
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
835 }
1609
84199d075839 ugly seeking bug fixed, correct multiangle seek implemented
arpi
parents: 1596
diff changeset
836
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
837 }
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
838
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
839 mp_msg(MSGT_DVD,MSGL_V, "DVD Seek! lba=0x%X cell=%d packs: 0x%X-0x%X \n",
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
840 d->cur_pack,d->cur_cell,d->cur_pgc->cell_playback[ d->cur_cell ].first_sector,d->cell_last_pack);
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
841
1609
84199d075839 ugly seeking bug fixed, correct multiangle seek implemented
arpi
parents: 1596
diff changeset
842 // if we're in interleaved multi-angle cell, find the right angle chain!
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
843 // (read Navi block, and use the seamless angle jump table)
1609
84199d075839 ugly seeking bug fixed, correct multiangle seek implemented
arpi
parents: 1596
diff changeset
844 d->angle_seek=1;
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
845
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
846 }
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
847
6479
45ec7f24de06 Add uninit to the dvd stream.
albeu
parents: 6474
diff changeset
848 void dvd_close(dvd_priv_t *d) {
45ec7f24de06 Add uninit to the dvd stream.
albeu
parents: 6474
diff changeset
849 ifoClose(d->vts_file);
45ec7f24de06 Add uninit to the dvd stream.
albeu
parents: 6474
diff changeset
850 ifoClose(d->vmg_file);
45ec7f24de06 Add uninit to the dvd stream.
albeu
parents: 6474
diff changeset
851 DVDCloseFile(d->title);
45ec7f24de06 Add uninit to the dvd stream.
albeu
parents: 6474
diff changeset
852 DVDClose(d->dvd);
45ec7f24de06 Add uninit to the dvd stream.
albeu
parents: 6474
diff changeset
853 }
45ec7f24de06 Add uninit to the dvd stream.
albeu
parents: 6474
diff changeset
854
1596
fc0e9953bc2d libDVDread support
arpi
parents: 1584
diff changeset
855 #endif