annotate stream/stream.c @ 23980:27bac14b4ce4

More simple and correct font reselection. Since ass_font_t contains a list of font faces, there is no need to select the face with maximum charset coverage each time. It is enough to select any face with the required glyph.
author eugeni
date Fri, 03 Aug 2007 13:43:11 +0000
parents e244d570ba44
children d261f5109660
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1428
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1177
diff changeset
1
1430
1728d249c783 missing unistd.h (requires for off_t under freebsd)
arpi
parents: 1428
diff changeset
2 #include <stdio.h>
1728d249c783 missing unistd.h (requires for off_t under freebsd)
arpi
parents: 1428
diff changeset
3 #include <stdlib.h>
1728d249c783 missing unistd.h (requires for off_t under freebsd)
arpi
parents: 1428
diff changeset
4 #include <unistd.h>
1428
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1177
diff changeset
5
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1177
diff changeset
6 #include <sys/types.h>
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1177
diff changeset
7 #include <sys/stat.h>
9798
02449faf87dd MINGW32 port
faust3
parents: 9794
diff changeset
8 #ifndef __MINGW32__
1428
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1177
diff changeset
9 #include <sys/ioctl.h>
6814
6863033786d1 warning fixes
atmos4
parents: 6810
diff changeset
10 #include <sys/wait.h>
9798
02449faf87dd MINGW32 port
faust3
parents: 9794
diff changeset
11 #endif
1428
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1177
diff changeset
12 #include <fcntl.h>
2322
e22ec6fce385 cache2 support
arpi
parents: 2310
diff changeset
13 #include <signal.h>
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
14 #include <strings.h>
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents: 537
diff changeset
15
1430
1728d249c783 missing unistd.h (requires for off_t under freebsd)
arpi
parents: 1428
diff changeset
16 #include "config.h"
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10242
diff changeset
17
54bcbf28698a Networking support under MinGW.
diego
parents: 10242
diff changeset
18 #ifndef HAVE_WINSOCK2
54bcbf28698a Networking support under MinGW.
diego
parents: 10242
diff changeset
19 #define closesocket close
54bcbf28698a Networking support under MinGW.
diego
parents: 10242
diff changeset
20 #else
54bcbf28698a Networking support under MinGW.
diego
parents: 10242
diff changeset
21 #include <winsock2.h>
54bcbf28698a Networking support under MinGW.
diego
parents: 10242
diff changeset
22 #endif
54bcbf28698a Networking support under MinGW.
diego
parents: 10242
diff changeset
23
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1642
diff changeset
24 #include "mp_msg.h"
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1642
diff changeset
25 #include "help_mp.h"
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16793
diff changeset
26 #include "osdep/shmem.h"
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents: 537
diff changeset
27
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents: 537
diff changeset
28 #include "stream.h"
19312
ab8d6b6deb63 proper inclusion of demuxer.h (including libmpdemux in Makefile only was to make previous split easier)
ben
parents: 19301
diff changeset
29 #include "libmpdemux/demuxer.h"
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents: 537
diff changeset
30
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16793
diff changeset
31 #include "m_option.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16793
diff changeset
32 #include "m_struct.h"
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
33
19808
5385740067a1 * remove extern definitions of functions in .c files
attila
parents: 19568
diff changeset
34 #include "cache2.h"
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
35
8812
f6456b177fdc vcd_read_cue.h -> cue_read.c+h
arpi
parents: 8782
diff changeset
36 //#include "vcd_read_bincue.h"
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8524
diff changeset
37
9886
e578e4375434 Port vcd to the new API
albeu
parents: 9874
diff changeset
38 #ifdef HAVE_VCD
e578e4375434 Port vcd to the new API
albeu
parents: 9874
diff changeset
39 extern stream_info_t stream_info_vcd;
e578e4375434 Port vcd to the new API
albeu
parents: 9874
diff changeset
40 #endif
9810
pontscho
parents: 9801
diff changeset
41 #ifdef HAVE_CDDA
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9798
diff changeset
42 extern stream_info_t stream_info_cdda;
9810
pontscho
parents: 9801
diff changeset
43 #endif
10121
d42177a0da2a Changed the STREAMING defines to MPLAYER_NETWORK to avoid name definition clash.
bertrand
parents: 9915
diff changeset
44 #ifdef MPLAYER_NETWORK
9853
765cca786fec Add netstream
albeu
parents: 9826
diff changeset
45 extern stream_info_t stream_info_netstream;
15585
281d155fb37f ported all network streams to the new API
nicodvb
parents: 15520
diff changeset
46 extern stream_info_t stream_info_pnm;
281d155fb37f ported all network streams to the new API
nicodvb
parents: 15520
diff changeset
47 extern stream_info_t stream_info_asf;
281d155fb37f ported all network streams to the new API
nicodvb
parents: 15520
diff changeset
48 extern stream_info_t stream_info_rtsp;
19313
0792ad01e9bf split rtp stack, udp input layer and rtp input layer from rtp.c
ben
parents: 19312
diff changeset
49 extern stream_info_t stream_info_rtp;
0792ad01e9bf split rtp stack, udp input layer and rtp input layer from rtp.c
ben
parents: 19312
diff changeset
50 extern stream_info_t stream_info_udp;
15585
281d155fb37f ported all network streams to the new API
nicodvb
parents: 15520
diff changeset
51 extern stream_info_t stream_info_http1;
281d155fb37f ported all network streams to the new API
nicodvb
parents: 15520
diff changeset
52 extern stream_info_t stream_info_http2;
9853
765cca786fec Add netstream
albeu
parents: 9826
diff changeset
53 #endif
10560
11826d9f90c7 this patch fixes
arpi
parents: 10281
diff changeset
54 #ifdef HAS_DVBIN_SUPPORT
11826d9f90c7 this patch fixes
arpi
parents: 10281
diff changeset
55 extern stream_info_t stream_info_dvb;
11826d9f90c7 this patch fixes
arpi
parents: 10281
diff changeset
56 #endif
19273
11ec1cb3a7ea add an explicit tv stream input instead of the previous hack in stream_null
ben
parents: 19271
diff changeset
57 #ifdef USE_TV
11ec1cb3a7ea add an explicit tv stream input instead of the previous hack in stream_null
ben
parents: 19271
diff changeset
58 extern stream_info_t stream_info_tv;
11ec1cb3a7ea add an explicit tv stream input instead of the previous hack in stream_null
ben
parents: 19271
diff changeset
59 #endif
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents: 19313
diff changeset
60 #ifdef USE_RADIO
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents: 19313
diff changeset
61 extern stream_info_t stream_info_radio;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents: 19313
diff changeset
62 #endif
18997
73b8f5ff772d added new pvr:// input for ivtv based cards
ben
parents: 18712
diff changeset
63 #ifdef HAVE_PVR
73b8f5ff772d added new pvr:// input for ivtv based cards
ben
parents: 18712
diff changeset
64 extern stream_info_t stream_info_pvr;
73b8f5ff772d added new pvr:// input for ivtv based cards
ben
parents: 18712
diff changeset
65 #endif
10625
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10560
diff changeset
66 #ifdef HAVE_FTP
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10560
diff changeset
67 extern stream_info_t stream_info_ftp;
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10560
diff changeset
68 #endif
14836
8b9738526dd7 added a stream module for the vstream client library
joey
parents: 12018
diff changeset
69 #ifdef HAVE_VSTREAM
8b9738526dd7 added a stream module for the vstream client library
joey
parents: 12018
diff changeset
70 extern stream_info_t stream_info_vstream;
8b9738526dd7 added a stream module for the vstream client library
joey
parents: 12018
diff changeset
71 #endif
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents: 15476
diff changeset
72 #ifdef USE_DVDNAV
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents: 15476
diff changeset
73 extern stream_info_t stream_info_dvdnav;
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents: 15476
diff changeset
74 #endif
15520
2c5186ed83b9 ported smb:// to the new stream api
nicodvb
parents: 15518
diff changeset
75 #ifdef LIBSMBCLIENT
2c5186ed83b9 ported smb:// to the new stream api
nicodvb
parents: 15518
diff changeset
76 extern stream_info_t stream_info_smb;
2c5186ed83b9 ported smb:// to the new stream api
nicodvb
parents: 15518
diff changeset
77 #endif
16572
56a5f69e9b35 "LIVE.COM Streaming Media" is now called "LIVE555 Streaming Media".
rsf
parents: 15585
diff changeset
78 #ifdef STREAMING_LIVE555
15585
281d155fb37f ported all network streams to the new API
nicodvb
parents: 15520
diff changeset
79 extern stream_info_t stream_info_sdp;
281d155fb37f ported all network streams to the new API
nicodvb
parents: 15520
diff changeset
80 extern stream_info_t stream_info_rtsp_sip;
16762
4fced87835f3 Kill a compiler warning, Patch by Zuxy Meng
gpoirier
parents: 16750
diff changeset
81 #endif
10560
11826d9f90c7 this patch fixes
arpi
parents: 10281
diff changeset
82
15476
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 15421
diff changeset
83 extern stream_info_t stream_info_cue;
9901
233802490b0e Add a null streamv Currently used for tv and mf. Could be used to
albeu
parents: 9886
diff changeset
84 extern stream_info_t stream_info_null;
19301
097e5bc71210 added dedicated file for mf:// input
ben
parents: 19273
diff changeset
85 extern stream_info_t stream_info_mf;
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
86 extern stream_info_t stream_info_file;
20635
9ed557ae1383 Streamline and simplify internal vs external libdvdread handling.
diego
parents: 19808
diff changeset
87 #ifdef USE_DVDREAD
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents: 15476
diff changeset
88 extern stream_info_t stream_info_dvd;
17191
6ac0b5f0d1ed fix compilation when dvdkit and dvdread are not available
nicodvb
parents: 17012
diff changeset
89 #endif
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
90
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
91 stream_info_t* auto_open_streams[] = {
9886
e578e4375434 Port vcd to the new API
albeu
parents: 9874
diff changeset
92 #ifdef HAVE_VCD
e578e4375434 Port vcd to the new API
albeu
parents: 9874
diff changeset
93 &stream_info_vcd,
e578e4375434 Port vcd to the new API
albeu
parents: 9874
diff changeset
94 #endif
9810
pontscho
parents: 9801
diff changeset
95 #ifdef HAVE_CDDA
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9798
diff changeset
96 &stream_info_cdda,
9810
pontscho
parents: 9801
diff changeset
97 #endif
10121
d42177a0da2a Changed the STREAMING defines to MPLAYER_NETWORK to avoid name definition clash.
bertrand
parents: 9915
diff changeset
98 #ifdef MPLAYER_NETWORK
9853
765cca786fec Add netstream
albeu
parents: 9826
diff changeset
99 &stream_info_netstream,
15585
281d155fb37f ported all network streams to the new API
nicodvb
parents: 15520
diff changeset
100 &stream_info_http1,
281d155fb37f ported all network streams to the new API
nicodvb
parents: 15520
diff changeset
101 &stream_info_asf,
281d155fb37f ported all network streams to the new API
nicodvb
parents: 15520
diff changeset
102 &stream_info_pnm,
281d155fb37f ported all network streams to the new API
nicodvb
parents: 15520
diff changeset
103 &stream_info_rtsp,
16572
56a5f69e9b35 "LIVE.COM Streaming Media" is now called "LIVE555 Streaming Media".
rsf
parents: 15585
diff changeset
104 #ifdef STREAMING_LIVE555
15585
281d155fb37f ported all network streams to the new API
nicodvb
parents: 15520
diff changeset
105 &stream_info_sdp,
281d155fb37f ported all network streams to the new API
nicodvb
parents: 15520
diff changeset
106 &stream_info_rtsp_sip,
281d155fb37f ported all network streams to the new API
nicodvb
parents: 15520
diff changeset
107 #endif
19313
0792ad01e9bf split rtp stack, udp input layer and rtp input layer from rtp.c
ben
parents: 19312
diff changeset
108 &stream_info_rtp,
0792ad01e9bf split rtp stack, udp input layer and rtp input layer from rtp.c
ben
parents: 19312
diff changeset
109 &stream_info_udp,
15585
281d155fb37f ported all network streams to the new API
nicodvb
parents: 15520
diff changeset
110 &stream_info_http2,
9853
765cca786fec Add netstream
albeu
parents: 9826
diff changeset
111 #endif
10560
11826d9f90c7 this patch fixes
arpi
parents: 10281
diff changeset
112 #ifdef HAS_DVBIN_SUPPORT
11826d9f90c7 this patch fixes
arpi
parents: 10281
diff changeset
113 &stream_info_dvb,
11826d9f90c7 this patch fixes
arpi
parents: 10281
diff changeset
114 #endif
19273
11ec1cb3a7ea add an explicit tv stream input instead of the previous hack in stream_null
ben
parents: 19271
diff changeset
115 #ifdef USE_TV
11ec1cb3a7ea add an explicit tv stream input instead of the previous hack in stream_null
ben
parents: 19271
diff changeset
116 &stream_info_tv,
11ec1cb3a7ea add an explicit tv stream input instead of the previous hack in stream_null
ben
parents: 19271
diff changeset
117 #endif
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents: 19313
diff changeset
118 #ifdef USE_RADIO
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents: 19313
diff changeset
119 &stream_info_radio,
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents: 19313
diff changeset
120 #endif
18997
73b8f5ff772d added new pvr:// input for ivtv based cards
ben
parents: 18712
diff changeset
121 #ifdef HAVE_PVR
73b8f5ff772d added new pvr:// input for ivtv based cards
ben
parents: 18712
diff changeset
122 &stream_info_pvr,
73b8f5ff772d added new pvr:// input for ivtv based cards
ben
parents: 18712
diff changeset
123 #endif
10625
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10560
diff changeset
124 #ifdef HAVE_FTP
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10560
diff changeset
125 &stream_info_ftp,
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10560
diff changeset
126 #endif
14836
8b9738526dd7 added a stream module for the vstream client library
joey
parents: 12018
diff changeset
127 #ifdef HAVE_VSTREAM
8b9738526dd7 added a stream module for the vstream client library
joey
parents: 12018
diff changeset
128 &stream_info_vstream,
8b9738526dd7 added a stream module for the vstream client library
joey
parents: 12018
diff changeset
129 #endif
15520
2c5186ed83b9 ported smb:// to the new stream api
nicodvb
parents: 15518
diff changeset
130 #ifdef LIBSMBCLIENT
2c5186ed83b9 ported smb:// to the new stream api
nicodvb
parents: 15518
diff changeset
131 &stream_info_smb,
2c5186ed83b9 ported smb:// to the new stream api
nicodvb
parents: 15518
diff changeset
132 #endif
15476
5eb4994a691f ported cue:// to the new stream api; note: this stream must still be optimized in its read() and seek() functions
nicodvb
parents: 15421
diff changeset
133 &stream_info_cue,
20635
9ed557ae1383 Streamline and simplify internal vs external libdvdread handling.
diego
parents: 19808
diff changeset
134 #ifdef USE_DVDREAD
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents: 15476
diff changeset
135 &stream_info_dvd,
17191
6ac0b5f0d1ed fix compilation when dvdkit and dvdread are not available
nicodvb
parents: 17012
diff changeset
136 #endif
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents: 15476
diff changeset
137 #ifdef USE_DVDNAV
18712
cb7da1894b00 restored support for dvdnav only in the stream layer; all other functionalities are disabled
nicodvb
parents: 18558
diff changeset
138 &stream_info_dvdnav,
15518
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents: 15476
diff changeset
139 #endif
9391bf60ccdf ported dvd:// to the new stream api
nicodvb
parents: 15476
diff changeset
140
9901
233802490b0e Add a null streamv Currently used for tv and mf. Could be used to
albeu
parents: 9886
diff changeset
141 &stream_info_null,
19301
097e5bc71210 added dedicated file for mf:// input
ben
parents: 19273
diff changeset
142 &stream_info_mf,
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
143 &stream_info_file,
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
144 NULL
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
145 };
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
146
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
147 stream_t* open_stream_plugin(stream_info_t* sinfo,char* filename,int mode,
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
148 char** options, int* file_format, int* ret) {
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
149 void* arg = NULL;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
150 stream_t* s;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
151 m_struct_t* desc = (m_struct_t*)sinfo->opts;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
152
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
153 // Parse options
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
154 if(desc) {
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
155 arg = m_struct_alloc(desc);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
156 if(sinfo->opts_url) {
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
157 m_option_t url_opt =
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
158 { "stream url", arg , CONF_TYPE_CUSTOM_URL, 0, 0 ,0, sinfo->opts };
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
159 if(m_option_parse(&url_opt,"stream url",filename,arg,M_CONFIG_FILE) < 0) {
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
160 mp_msg(MSGT_OPEN,MSGL_ERR, "URL parsing failed on url %s\n",filename);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
161 m_struct_free(desc,arg);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
162 return NULL;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
163 }
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
164 }
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
165 if(options) {
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
166 int i;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
167 for(i = 0 ; options[i] != NULL ; i += 2) {
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
168 mp_msg(MSGT_OPEN,MSGL_DBG2, "Set stream arg %s=%s\n",
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
169 options[i],options[i+1]);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
170 if(!m_struct_set(desc,arg,options[i],options[i+1]))
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
171 mp_msg(MSGT_OPEN,MSGL_WARN, "Failed to set stream option %s=%s\n",
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
172 options[i],options[i+1]);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
173 }
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
174 }
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
175 }
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
176 s = new_stream(-2,-2);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
177 s->url=strdup(filename);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
178 s->flags |= mode;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
179 *ret = sinfo->open(s,mode,arg,file_format);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
180 if((*ret) != STREAM_OK) {
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
181 free(s->url);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
182 free(s);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
183 return NULL;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
184 }
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
185 if(s->type <= -2)
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
186 mp_msg(MSGT_OPEN,MSGL_WARN, "Warning streams need a type !!!!\n");
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
187 if(s->flags & STREAM_SEEK && !s->seek)
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
188 s->flags &= ~STREAM_SEEK;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
189 if(s->seek && !(s->flags & STREAM_SEEK))
9853
765cca786fec Add netstream
albeu
parents: 9826
diff changeset
190 s->flags |= STREAM_SEEK;
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
191
21659
da09e69a0f01 support functions for writing to streams
nicodvb
parents: 21493
diff changeset
192 s->mode = mode;
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
193
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
194 mp_msg(MSGT_OPEN,MSGL_V, "STREAM: [%s] %s\n",sinfo->name,filename);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
195 mp_msg(MSGT_OPEN,MSGL_V, "STREAM: Description: %s\n",sinfo->info);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
196 mp_msg(MSGT_OPEN,MSGL_V, "STREAM: Author: %s\n", sinfo->author);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
197 mp_msg(MSGT_OPEN,MSGL_V, "STREAM: Comment: %s\n", sinfo->comment);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
198
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
199 return s;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
200 }
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
201
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
202
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
203 stream_t* open_stream_full(char* filename,int mode, char** options, int* file_format) {
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
204 int i,j,l,r;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
205 stream_info_t* sinfo;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
206 stream_t* s;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
207
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
208 for(i = 0 ; auto_open_streams[i] ; i++) {
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
209 sinfo = auto_open_streams[i];
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
210 if(!sinfo->protocols) {
10735
8a10d5d0ce86 serious bugs - 1l absinth (changed to absinth against cola inflation)
alex
parents: 10625
diff changeset
211 mp_msg(MSGT_OPEN,MSGL_WARN, "Stream type %s has protocols == NULL, it's a bug\n", sinfo->name);
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
212 continue;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
213 }
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
214 for(j = 0 ; sinfo->protocols[j] ; j++) {
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
215 l = strlen(sinfo->protocols[j]);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
216 // l == 0 => Don't do protocol matching (ie network and filenames)
21493
8ca0be3a46a0 Make sure invalid protocols are rejected instead of treated
reimar
parents: 20635
diff changeset
217 if((l == 0 && !strstr(filename, "://")) ||
8ca0be3a46a0 Make sure invalid protocols are rejected instead of treated
reimar
parents: 20635
diff changeset
218 ((strncmp(sinfo->protocols[j],filename,l) == 0) &&
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
219 (strncmp("://",filename+l,3) == 0))) {
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
220 *file_format = DEMUXER_TYPE_UNKNOWN;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
221 s = open_stream_plugin(sinfo,filename,mode,options,file_format,&r);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
222 if(s) return s;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
223 if(r != STREAM_UNSUPORTED) {
16793
8d4fb5469efb Make a few more messages translatable by moving them into help_mp-en.h.
diego
parents: 16762
diff changeset
224 mp_msg(MSGT_OPEN,MSGL_ERR, MSGTR_FailedToOpen,filename);
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
225 return NULL;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
226 }
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
227 break;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
228 }
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
229 }
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
230 }
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
231
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
232 mp_msg(MSGT_OPEN,MSGL_ERR, "No stream found to handle url %s\n",filename);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
233 return NULL;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
234 }
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
235
21659
da09e69a0f01 support functions for writing to streams
nicodvb
parents: 21493
diff changeset
236 stream_t* open_output_stream(char* filename,char** options) {
da09e69a0f01 support functions for writing to streams
nicodvb
parents: 21493
diff changeset
237 int file_format; //unused
da09e69a0f01 support functions for writing to streams
nicodvb
parents: 21493
diff changeset
238 if(!filename) {
da09e69a0f01 support functions for writing to streams
nicodvb
parents: 21493
diff changeset
239 mp_msg(MSGT_OPEN,MSGL_ERR,"open_output_stream(), NULL filename, report this bug\n");
da09e69a0f01 support functions for writing to streams
nicodvb
parents: 21493
diff changeset
240 return NULL;
da09e69a0f01 support functions for writing to streams
nicodvb
parents: 21493
diff changeset
241 }
da09e69a0f01 support functions for writing to streams
nicodvb
parents: 21493
diff changeset
242
da09e69a0f01 support functions for writing to streams
nicodvb
parents: 21493
diff changeset
243 return open_stream_full(filename,STREAM_WRITE,options,&file_format);
da09e69a0f01 support functions for writing to streams
nicodvb
parents: 21493
diff changeset
244 }
da09e69a0f01 support functions for writing to streams
nicodvb
parents: 21493
diff changeset
245
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
246 //=================== STREAMER =========================
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
247
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
248 int stream_fill_buffer(stream_t *s){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
249 int len;
9874
55a43ae66ceb Oops, I just noticed albeu's revision 1.58 - so I backed out the
rsf
parents: 9873
diff changeset
250 if (/*s->fd == NULL ||*/ s->eof) { s->buf_pos = s->buf_len = 0; return 0; }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
251 switch(s->type){
692
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
252 case STREAMTYPE_STREAM:
10121
d42177a0da2a Changed the STREAMING defines to MPLAYER_NETWORK to avoid name definition clash.
bertrand
parents: 9915
diff changeset
253 #ifdef MPLAYER_NETWORK
3044
606bb6943ae9 Added a network read function call and a seek network function call.
bertrand
parents: 2790
diff changeset
254 if( s->streaming_ctrl!=NULL ) {
606bb6943ae9 Added a network read function call and a seek network function call.
bertrand
parents: 2790
diff changeset
255 len=s->streaming_ctrl->streaming_read(s->fd,s->buffer,STREAM_BUFFER_SIZE, s->streaming_ctrl);break;
606bb6943ae9 Added a network read function call and a seek network function call.
bertrand
parents: 2790
diff changeset
256 } else {
606bb6943ae9 Added a network read function call and a seek network function call.
bertrand
parents: 2790
diff changeset
257 len=read(s->fd,s->buffer,STREAM_BUFFER_SIZE);break;
606bb6943ae9 Added a network read function call and a seek network function call.
bertrand
parents: 2790
diff changeset
258 }
606bb6943ae9 Added a network read function call and a seek network function call.
bertrand
parents: 2790
diff changeset
259 #else
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
260 len=read(s->fd,s->buffer,STREAM_BUFFER_SIZE);break;
3044
606bb6943ae9 Added a network read function call and a seek network function call.
bertrand
parents: 2790
diff changeset
261 #endif
5133
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 4893
diff changeset
262 case STREAMTYPE_DS:
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 4893
diff changeset
263 len = demux_read_data((demux_stream_t*)s->priv,s->buffer,STREAM_BUFFER_SIZE);
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 4893
diff changeset
264 break;
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents: 9380
diff changeset
265
76c6d8f1ebf5 this is a combo patch that:
arpi
parents: 9380
diff changeset
266
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
267 default:
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
268 len= s->fill_buffer ? s->fill_buffer(s,s->buffer,STREAM_BUFFER_SIZE) : 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
269 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
270 if(len<=0){ s->eof=1; s->buf_pos=s->buf_len=0; return 0; }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
271 s->buf_pos=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
272 s->buf_len=len;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
273 s->pos+=len;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
274 // printf("[%d]",len);fflush(stdout);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
275 return len;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
276 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
277
21659
da09e69a0f01 support functions for writing to streams
nicodvb
parents: 21493
diff changeset
278 int stream_write_buffer(stream_t *s, unsigned char *buf, int len) {
da09e69a0f01 support functions for writing to streams
nicodvb
parents: 21493
diff changeset
279 int rd;
da09e69a0f01 support functions for writing to streams
nicodvb
parents: 21493
diff changeset
280 if(!s->write_buffer)
da09e69a0f01 support functions for writing to streams
nicodvb
parents: 21493
diff changeset
281 return -1;
da09e69a0f01 support functions for writing to streams
nicodvb
parents: 21493
diff changeset
282 rd = s->write_buffer(s, buf, len);
da09e69a0f01 support functions for writing to streams
nicodvb
parents: 21493
diff changeset
283 if(rd < 0)
da09e69a0f01 support functions for writing to streams
nicodvb
parents: 21493
diff changeset
284 return -1;
da09e69a0f01 support functions for writing to streams
nicodvb
parents: 21493
diff changeset
285 s->pos += rd;
da09e69a0f01 support functions for writing to streams
nicodvb
parents: 21493
diff changeset
286 return rd;
da09e69a0f01 support functions for writing to streams
nicodvb
parents: 21493
diff changeset
287 }
da09e69a0f01 support functions for writing to streams
nicodvb
parents: 21493
diff changeset
288
1428
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1177
diff changeset
289 int stream_seek_long(stream_t *s,off_t pos){
6814
6863033786d1 warning fixes
atmos4
parents: 6810
diff changeset
290 off_t newpos=0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
291
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17878
diff changeset
292 // if( mp_msg_test(MSGT_STREAM,MSGL_DBG3) ) printf("seek_long to 0x%X\n",(unsigned int)pos);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
293
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
294 s->buf_pos=s->buf_len=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
295
21659
da09e69a0f01 support functions for writing to streams
nicodvb
parents: 21493
diff changeset
296 if(s->mode == STREAM_WRITE) {
da09e69a0f01 support functions for writing to streams
nicodvb
parents: 21493
diff changeset
297 if(!s->seek || !s->seek(s,pos))
da09e69a0f01 support functions for writing to streams
nicodvb
parents: 21493
diff changeset
298 return 0;
da09e69a0f01 support functions for writing to streams
nicodvb
parents: 21493
diff changeset
299 return 1;
da09e69a0f01 support functions for writing to streams
nicodvb
parents: 21493
diff changeset
300 }
da09e69a0f01 support functions for writing to streams
nicodvb
parents: 21493
diff changeset
301
22362
e244d570ba44 cleaned stream_seek() : simplified the alignment to STREAM_BUFFER_SIZE or s->sector_size
nicodvb
parents: 21659
diff changeset
302 if(s->sector_size)
e244d570ba44 cleaned stream_seek() : simplified the alignment to STREAM_BUFFER_SIZE or s->sector_size
nicodvb
parents: 21659
diff changeset
303 newpos = (pos/s->sector_size)*s->sector_size;
e244d570ba44 cleaned stream_seek() : simplified the alignment to STREAM_BUFFER_SIZE or s->sector_size
nicodvb
parents: 21659
diff changeset
304 else
e244d570ba44 cleaned stream_seek() : simplified the alignment to STREAM_BUFFER_SIZE or s->sector_size
nicodvb
parents: 21659
diff changeset
305 newpos = pos&(~((off_t)STREAM_BUFFER_SIZE-1));
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
306
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17878
diff changeset
307 if( mp_msg_test(MSGT_STREAM,MSGL_DBG3) ){
18176
f72bc5754209 Part3 of Otvos Attila's oattila AT chello-hu mp_msg changes, with lots of modifications as usual
reynaldo
parents: 17932
diff changeset
308 mp_msg(MSGT_STREAM,MSGL_DBG3, "s->pos=%"PRIX64" newpos=%"PRIX64" new_bufpos=%"PRIX64" buflen=%X \n",
16750
0a31740dd5e6 Use PRI?64 defines as format strings for 64 bit variables.
reimar
parents: 16572
diff changeset
309 (int64_t)s->pos,(int64_t)newpos,(int64_t)pos,s->buf_len);
2050
18f4dd5d568f -Wall warnings fixed
arpi
parents: 1999
diff changeset
310 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
311 pos-=newpos;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
312
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
313 if(newpos==0 || newpos!=s->pos){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
314 switch(s->type){
692
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
315 case STREAMTYPE_STREAM:
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
316 //s->pos=newpos; // real seek
3044
606bb6943ae9 Added a network read function call and a seek network function call.
bertrand
parents: 2790
diff changeset
317 // Some streaming protocol allow to seek backward and forward
606bb6943ae9 Added a network read function call and a seek network function call.
bertrand
parents: 2790
diff changeset
318 // A function call that return -1 can tell that the protocol
606bb6943ae9 Added a network read function call and a seek network function call.
bertrand
parents: 2790
diff changeset
319 // doesn't support seeking.
10121
d42177a0da2a Changed the STREAMING defines to MPLAYER_NETWORK to avoid name definition clash.
bertrand
parents: 9915
diff changeset
320 #ifdef MPLAYER_NETWORK
11965
3d75bcc28231 enable seeking in http streams
attila
parents: 10735
diff changeset
321 if(s->seek) { // new stream seek is much cleaner than streaming_ctrl one
3d75bcc28231 enable seeking in http streams
attila
parents: 10735
diff changeset
322 if(!s->seek(s,newpos)) {
3d75bcc28231 enable seeking in http streams
attila
parents: 10735
diff changeset
323 mp_msg(MSGT_STREAM,MSGL_ERR, "Seek failed\n");
12018
2c2fb4457982 Seek in HTTP streams and stdin seek fixes
rtognimp
parents: 11965
diff changeset
324 return 0;
11965
3d75bcc28231 enable seeking in http streams
attila
parents: 10735
diff changeset
325 }
3d75bcc28231 enable seeking in http streams
attila
parents: 10735
diff changeset
326 break;
3d75bcc28231 enable seeking in http streams
attila
parents: 10735
diff changeset
327 }
3d75bcc28231 enable seeking in http streams
attila
parents: 10735
diff changeset
328
8929
c5ca1ae42555 check if seeking supported, otherwise fallback to null reading
arpi
parents: 8812
diff changeset
329 if( s->streaming_ctrl!=NULL && s->streaming_ctrl->streaming_seek ) {
3044
606bb6943ae9 Added a network read function call and a seek network function call.
bertrand
parents: 2790
diff changeset
330 if( s->streaming_ctrl->streaming_seek( s->fd, pos, s->streaming_ctrl )<0 ) {
606bb6943ae9 Added a network read function call and a seek network function call.
bertrand
parents: 2790
diff changeset
331 mp_msg(MSGT_STREAM,MSGL_INFO,"Stream not seekable!\n");
606bb6943ae9 Added a network read function call and a seek network function call.
bertrand
parents: 2790
diff changeset
332 return 1;
606bb6943ae9 Added a network read function call and a seek network function call.
bertrand
parents: 2790
diff changeset
333 }
606bb6943ae9 Added a network read function call and a seek network function call.
bertrand
parents: 2790
diff changeset
334 }
606bb6943ae9 Added a network read function call and a seek network function call.
bertrand
parents: 2790
diff changeset
335 #else
692
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
336 if(newpos<s->pos){
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1642
diff changeset
337 mp_msg(MSGT_STREAM,MSGL_INFO,"Cannot seek backward in linear streams!\n");
692
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
338 return 1;
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
339 }
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
340 while(s->pos<newpos){
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
341 if(stream_fill_buffer(s)<=0) break; // EOF
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
342 }
3044
606bb6943ae9 Added a network read function call and a seek network function call.
bertrand
parents: 2790
diff changeset
343 #endif
692
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
344 break;
7408
0c6948b8100f stream layer cleanup part 2
arpi
parents: 7407
diff changeset
345 default:
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
346 // This should at the beginning as soon as all streams are converted
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
347 if(!s->seek)
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
348 return 0;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
349 // Now seek
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
350 if(!s->seek(s,newpos)) {
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
351 mp_msg(MSGT_STREAM,MSGL_ERR, "Seek failed\n");
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
352 return 0;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
353 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
354 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
355 // putchar('.');fflush(stdout);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
356 //} else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
357 // putchar('%');fflush(stdout);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
358 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
359
17878
ab0a3e3d32ed Fix a potential seek failure, fill_buffer doesn't have to
albeu
parents: 17712
diff changeset
360 while(stream_fill_buffer(s) > 0 && pos >= 0) {
ab0a3e3d32ed Fix a potential seek failure, fill_buffer doesn't have to
albeu
parents: 17712
diff changeset
361 if(pos<=s->buf_len){
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
362 s->buf_pos=pos; // byte position in sector
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
363 return 1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
364 }
17878
ab0a3e3d32ed Fix a potential seek failure, fill_buffer doesn't have to
albeu
parents: 17712
diff changeset
365 pos -= s->buf_len;
ab0a3e3d32ed Fix a potential seek failure, fill_buffer doesn't have to
albeu
parents: 17712
diff changeset
366 }
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1642
diff changeset
367
1999
0c45328c9f8b fixed seek to EOF pos
arpi
parents: 1973
diff changeset
368 // if(pos==s->buf_len) printf("XXX Seek to last byte of file -> EOF\n");
0c45328c9f8b fixed seek to EOF pos
arpi
parents: 1973
diff changeset
369
16750
0a31740dd5e6 Use PRI?64 defines as format strings for 64 bit variables.
reimar
parents: 16572
diff changeset
370 mp_msg(MSGT_STREAM,MSGL_V,"stream_seek: WARNING! Can't seek to 0x%"PRIX64" !\n",(int64_t)(pos+newpos));
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
371 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
372 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
373
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
374
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
375 void stream_reset(stream_t *s){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
376 if(s->eof){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
377 s->pos=0; //ftell(f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
378 // s->buf_pos=s->buf_len=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
379 s->eof=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
380 }
9853
765cca786fec Add netstream
albeu
parents: 9826
diff changeset
381 if(s->control) s->control(s,STREAM_CTRL_RESET,NULL);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
382 //stream_seek(s,0);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
383 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
384
17712
a320248c2450 stream_control() returns int, not void
nicodvb
parents: 17696
diff changeset
385 int stream_control(stream_t *s, int cmd, void *arg){
17696
66d7afee9a46 added new stream_control() and new command: STREAM_CTRL_GET_TIME_LENGTH
nicodvb
parents: 17191
diff changeset
386 if(!s->control) return STREAM_UNSUPORTED;
66d7afee9a46 added new stream_control() and new command: STREAM_CTRL_GET_TIME_LENGTH
nicodvb
parents: 17191
diff changeset
387 return s->control(s, cmd, arg);
66d7afee9a46 added new stream_control() and new command: STREAM_CTRL_GET_TIME_LENGTH
nicodvb
parents: 17191
diff changeset
388 }
66d7afee9a46 added new stream_control() and new command: STREAM_CTRL_GET_TIME_LENGTH
nicodvb
parents: 17191
diff changeset
389
2144
99f079ff9374 new_memory_stream() added
arpi
parents: 2050
diff changeset
390 stream_t* new_memory_stream(unsigned char* data,int len){
18558
4928dd61f136 Fix potential integer overflows in memory allocation.
rtogni
parents: 18176
diff changeset
391 stream_t *s;
4928dd61f136 Fix potential integer overflows in memory allocation.
rtogni
parents: 18176
diff changeset
392
4928dd61f136 Fix potential integer overflows in memory allocation.
rtogni
parents: 18176
diff changeset
393 if(len < 0)
4928dd61f136 Fix potential integer overflows in memory allocation.
rtogni
parents: 18176
diff changeset
394 return NULL;
4928dd61f136 Fix potential integer overflows in memory allocation.
rtogni
parents: 18176
diff changeset
395 s=malloc(sizeof(stream_t)+len);
6892
b8e0b1c54940 10000l - didn't clear new stream struct, causing possible sig11 in cache layer
arpi
parents: 6814
diff changeset
396 memset(s,0,sizeof(stream_t));
2144
99f079ff9374 new_memory_stream() added
arpi
parents: 2050
diff changeset
397 s->fd=-1;
99f079ff9374 new_memory_stream() added
arpi
parents: 2050
diff changeset
398 s->type=STREAMTYPE_MEMORY;
99f079ff9374 new_memory_stream() added
arpi
parents: 2050
diff changeset
399 s->buf_pos=0; s->buf_len=len;
99f079ff9374 new_memory_stream() added
arpi
parents: 2050
diff changeset
400 s->start_pos=0; s->end_pos=len;
99f079ff9374 new_memory_stream() added
arpi
parents: 2050
diff changeset
401 stream_reset(s);
99f079ff9374 new_memory_stream() added
arpi
parents: 2050
diff changeset
402 s->pos=len;
99f079ff9374 new_memory_stream() added
arpi
parents: 2050
diff changeset
403 memcpy(s->buffer,data,len);
99f079ff9374 new_memory_stream() added
arpi
parents: 2050
diff changeset
404 return s;
99f079ff9374 new_memory_stream() added
arpi
parents: 2050
diff changeset
405 }
99f079ff9374 new_memory_stream() added
arpi
parents: 2050
diff changeset
406
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
407 stream_t* new_stream(int fd,int type){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
408 stream_t *s=malloc(sizeof(stream_t));
3291
2122a13b5a29 fixed startup crash
iive
parents: 3261
diff changeset
409 if(s==NULL) return NULL;
2122a13b5a29 fixed startup crash
iive
parents: 3261
diff changeset
410 memset(s,0,sizeof(stream_t));
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10242
diff changeset
411
54bcbf28698a Networking support under MinGW.
diego
parents: 10242
diff changeset
412 #ifdef HAVE_WINSOCK2
54bcbf28698a Networking support under MinGW.
diego
parents: 10242
diff changeset
413 {
54bcbf28698a Networking support under MinGW.
diego
parents: 10242
diff changeset
414 WSADATA wsdata;
54bcbf28698a Networking support under MinGW.
diego
parents: 10242
diff changeset
415 int temp = WSAStartup(0x0202, &wsdata); // there might be a better place for this (-> later)
54bcbf28698a Networking support under MinGW.
diego
parents: 10242
diff changeset
416 mp_msg(MSGT_STREAM,MSGL_V,"WINSOCK2 init: %i\n", temp);
54bcbf28698a Networking support under MinGW.
diego
parents: 10242
diff changeset
417 }
54bcbf28698a Networking support under MinGW.
diego
parents: 10242
diff changeset
418 #endif
3291
2122a13b5a29 fixed startup crash
iive
parents: 3261
diff changeset
419
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
420 s->fd=fd;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
421 s->type=type;
180
afa2c05cfe43 terrible fatal bug fixed
arpi_esp
parents: 1
diff changeset
422 s->buf_pos=s->buf_len=0;
598
c7117e17e20b OSD seekbar fixed for mpeg/VCD
arpi_esp
parents: 578
diff changeset
423 s->start_pos=s->end_pos=0;
1642
78fa0713b823 free'ing priv struct
arpi
parents: 1595
diff changeset
424 s->priv=NULL;
7407
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
425 s->url=NULL;
2322
e22ec6fce385 cache2 support
arpi
parents: 2310
diff changeset
426 s->cache_pid=0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
427 stream_reset(s);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
428 return s;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
429 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
430
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
431 void free_stream(stream_t *s){
6138
523014df7d32 big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents: 5982
diff changeset
432 // printf("\n*** free_stream() called ***\n");
9798
02449faf87dd MINGW32 port
faust3
parents: 9794
diff changeset
433 #ifdef USE_STREAM_CACHE
4893
904cc3813582 Added waitpid in free_stream to avoid zombies
albeu
parents: 4464
diff changeset
434 if(s->cache_pid) {
9915
eabe876ab5e2 Fix cache uninit
albeu
parents: 9901
diff changeset
435 cache_uninit(s);
4893
904cc3813582 Added waitpid in free_stream to avoid zombies
albeu
parents: 4464
diff changeset
436 }
9798
02449faf87dd MINGW32 port
faust3
parents: 9794
diff changeset
437 #endif
15520
2c5186ed83b9 ported smb:// to the new stream api
nicodvb
parents: 15518
diff changeset
438 if(s->close) s->close(s);
15421
ae5e1b9e3c92 fix segfaults caused by socket and file descriptor mismatches on windows
faust3
parents: 14836
diff changeset
439 if(s->fd>0){
ae5e1b9e3c92 fix segfaults caused by socket and file descriptor mismatches on windows
faust3
parents: 14836
diff changeset
440 /* on unix we define closesocket to close
ae5e1b9e3c92 fix segfaults caused by socket and file descriptor mismatches on windows
faust3
parents: 14836
diff changeset
441 on windows however we have to distinguish between
ae5e1b9e3c92 fix segfaults caused by socket and file descriptor mismatches on windows
faust3
parents: 14836
diff changeset
442 network socket and file */
ae5e1b9e3c92 fix segfaults caused by socket and file descriptor mismatches on windows
faust3
parents: 14836
diff changeset
443 if(s->url && strstr(s->url,"://"))
ae5e1b9e3c92 fix segfaults caused by socket and file descriptor mismatches on windows
faust3
parents: 14836
diff changeset
444 closesocket(s->fd);
ae5e1b9e3c92 fix segfaults caused by socket and file descriptor mismatches on windows
faust3
parents: 14836
diff changeset
445 else close(s->fd);
ae5e1b9e3c92 fix segfaults caused by socket and file descriptor mismatches on windows
faust3
parents: 14836
diff changeset
446 }
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10242
diff changeset
447 #ifdef HAVE_WINSOCK2
54bcbf28698a Networking support under MinGW.
diego
parents: 10242
diff changeset
448 mp_msg(MSGT_STREAM,MSGL_V,"WINSOCK2 uninit\n");
54bcbf28698a Networking support under MinGW.
diego
parents: 10242
diff changeset
449 WSACleanup(); // there might be a better place for this (-> later)
54bcbf28698a Networking support under MinGW.
diego
parents: 10242
diff changeset
450 #endif
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
451 // Disabled atm, i don't like that. s->priv can be anything after all
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
452 // streams should destroy their priv on close
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
453 //if(s->priv) free(s->priv);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
454 if(s->url) free(s->url);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
455 free(s);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
456 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
457
5133
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 4893
diff changeset
458 stream_t* new_ds_stream(demux_stream_t *ds) {
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 4893
diff changeset
459 stream_t* s = new_stream(-1,STREAMTYPE_DS);
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 4893
diff changeset
460 s->priv = ds;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 4893
diff changeset
461 return s;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 4893
diff changeset
462 }