annotate libmpdemux/stream.c @ 11330:a974c00c779d

Removed temporary .cpp file used during the Matroska test. Updated the libebml and libmatroska requirements to at least v0.6.0 for both. There have been changes in the lacing code, and users WILL come and complain why mplayer, linked against older versions, will have issues playing newer files.
author mosu
date Thu, 30 Oct 2003 14:57:06 +0000
parents 8a10d5d0ce86
children 3d75bcc28231
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"
9380
edfe34c5405d linux->osdep
arpi
parents: 8929
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"
5133
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 4893
diff changeset
29 #include "demuxer.h"
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents: 537
diff changeset
30
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
31 #include "../m_option.h"
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
32 #include "../m_struct.h"
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
33
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
34
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents: 537
diff changeset
35 extern int verbose; // defined in mplayer.c
10242
4e34d468f549 warning fixes by Dominik
alex
parents: 10121
diff changeset
36 void cache_uninit(stream_t *s); // defined in cache2.c
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
37
8812
f6456b177fdc vcd_read_cue.h -> cue_read.c+h
arpi
parents: 8782
diff changeset
38 #include "cue_read.h"
f6456b177fdc vcd_read_cue.h -> cue_read.c+h
arpi
parents: 8782
diff changeset
39
f6456b177fdc vcd_read_cue.h -> cue_read.c+h
arpi
parents: 8782
diff changeset
40 //#include "vcd_read_bincue.h"
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8524
diff changeset
41
1595
1918610d2802 seeking in DVD
arpi
parents: 1430
diff changeset
42 #ifdef USE_DVDREAD
8344
85165f5c2f7b dvd_* declarations fixed to matc with open.c
arpi
parents: 7630
diff changeset
43 int dvd_read_sector(dvd_priv_t *d,unsigned char* data);
85165f5c2f7b dvd_* declarations fixed to matc with open.c
arpi
parents: 7630
diff changeset
44 void dvd_seek(dvd_priv_t *d,int pos);
6814
6863033786d1 warning fixes
atmos4
parents: 6810
diff changeset
45 void dvd_close(dvd_priv_t *d);
1595
1918610d2802 seeking in DVD
arpi
parents: 1430
diff changeset
46 #endif
1918610d2802 seeking in DVD
arpi
parents: 1430
diff changeset
47
7630
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7408
diff changeset
48 #ifdef LIBSMBCLIENT
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7408
diff changeset
49 #include "libsmbclient.h"
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7408
diff changeset
50 #endif
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7408
diff changeset
51
9886
e578e4375434 Port vcd to the new API
albeu
parents: 9874
diff changeset
52 #ifdef HAVE_VCD
e578e4375434 Port vcd to the new API
albeu
parents: 9874
diff changeset
53 extern stream_info_t stream_info_vcd;
e578e4375434 Port vcd to the new API
albeu
parents: 9874
diff changeset
54 #endif
9810
pontscho
parents: 9801
diff changeset
55 #ifdef HAVE_CDDA
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9798
diff changeset
56 extern stream_info_t stream_info_cdda;
9810
pontscho
parents: 9801
diff changeset
57 #endif
10121
d42177a0da2a Changed the STREAMING defines to MPLAYER_NETWORK to avoid name definition clash.
bertrand
parents: 9915
diff changeset
58 #ifdef MPLAYER_NETWORK
9853
765cca786fec Add netstream
albeu
parents: 9826
diff changeset
59 extern stream_info_t stream_info_netstream;
765cca786fec Add netstream
albeu
parents: 9826
diff changeset
60 #endif
10560
11826d9f90c7 this patch fixes
arpi
parents: 10281
diff changeset
61 #ifdef HAS_DVBIN_SUPPORT
11826d9f90c7 this patch fixes
arpi
parents: 10281
diff changeset
62 extern stream_info_t stream_info_dvb;
11826d9f90c7 this patch fixes
arpi
parents: 10281
diff changeset
63 #endif
10625
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10560
diff changeset
64 #ifdef HAVE_FTP
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10560
diff changeset
65 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
66 #endif
10560
11826d9f90c7 this patch fixes
arpi
parents: 10281
diff changeset
67
9901
233802490b0e Add a null streamv Currently used for tv and mf. Could be used to
albeu
parents: 9886
diff changeset
68 extern stream_info_t stream_info_null;
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
69 extern stream_info_t stream_info_file;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
70
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
71 stream_info_t* auto_open_streams[] = {
9886
e578e4375434 Port vcd to the new API
albeu
parents: 9874
diff changeset
72 #ifdef HAVE_VCD
e578e4375434 Port vcd to the new API
albeu
parents: 9874
diff changeset
73 &stream_info_vcd,
e578e4375434 Port vcd to the new API
albeu
parents: 9874
diff changeset
74 #endif
9810
pontscho
parents: 9801
diff changeset
75 #ifdef HAVE_CDDA
9801
2f02809d32a8 URL is cdda://tracks[:speed][/device]
albeu
parents: 9798
diff changeset
76 &stream_info_cdda,
9810
pontscho
parents: 9801
diff changeset
77 #endif
10121
d42177a0da2a Changed the STREAMING defines to MPLAYER_NETWORK to avoid name definition clash.
bertrand
parents: 9915
diff changeset
78 #ifdef MPLAYER_NETWORK
9853
765cca786fec Add netstream
albeu
parents: 9826
diff changeset
79 &stream_info_netstream,
765cca786fec Add netstream
albeu
parents: 9826
diff changeset
80 #endif
10560
11826d9f90c7 this patch fixes
arpi
parents: 10281
diff changeset
81 #ifdef HAS_DVBIN_SUPPORT
11826d9f90c7 this patch fixes
arpi
parents: 10281
diff changeset
82 &stream_info_dvb,
11826d9f90c7 this patch fixes
arpi
parents: 10281
diff changeset
83 #endif
10625
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10560
diff changeset
84 #ifdef HAVE_FTP
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10560
diff changeset
85 &stream_info_ftp,
620cc649f519 ftp support. The change on connect2Server is needed bcs we need 2
albeu
parents: 10560
diff changeset
86 #endif
9901
233802490b0e Add a null streamv Currently used for tv and mf. Could be used to
albeu
parents: 9886
diff changeset
87 &stream_info_null,
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
88 &stream_info_file,
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
89 NULL
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
90 };
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
91
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
92 stream_t* open_stream_plugin(stream_info_t* sinfo,char* filename,int mode,
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
93 char** options, int* file_format, int* ret) {
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
94 void* arg = NULL;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
95 stream_t* s;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
96 m_struct_t* desc = (m_struct_t*)sinfo->opts;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
97
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
98 // Parse options
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
99 if(desc) {
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
100 arg = m_struct_alloc(desc);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
101 if(sinfo->opts_url) {
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
102 m_option_t url_opt =
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
103 { "stream url", arg , CONF_TYPE_CUSTOM_URL, 0, 0 ,0, sinfo->opts };
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
104 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
105 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
106 m_struct_free(desc,arg);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
107 return NULL;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
108 }
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
109 }
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
110 if(options) {
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
111 int i;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
112 for(i = 0 ; options[i] != NULL ; i += 2) {
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
113 mp_msg(MSGT_OPEN,MSGL_DBG2, "Set stream arg %s=%s\n",
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
114 options[i],options[i+1]);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
115 if(!m_struct_set(desc,arg,options[i],options[i+1]))
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
116 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
117 options[i],options[i+1]);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
118 }
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
119 }
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
120 }
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
121 s = new_stream(-2,-2);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
122 s->url=strdup(filename);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
123 s->flags |= mode;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
124 *ret = sinfo->open(s,mode,arg,file_format);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
125 if((*ret) != STREAM_OK) {
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
126 free(s->url);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
127 free(s);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
128 return NULL;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
129 }
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
130 if(s->type <= -2)
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
131 mp_msg(MSGT_OPEN,MSGL_WARN, "Warning streams need a type !!!!\n");
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
132 if(s->flags & STREAM_SEEK && !s->seek)
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
133 s->flags &= ~STREAM_SEEK;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
134 if(s->seek && !(s->flags & STREAM_SEEK))
9853
765cca786fec Add netstream
albeu
parents: 9826
diff changeset
135 s->flags |= STREAM_SEEK;
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
136
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
137
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
138 mp_msg(MSGT_OPEN,MSGL_V, "STREAM: [%s] %s\n",sinfo->name,filename);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
139 mp_msg(MSGT_OPEN,MSGL_V, "STREAM: Description: %s\n",sinfo->info);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
140 mp_msg(MSGT_OPEN,MSGL_V, "STREAM: Author: %s\n", sinfo->author);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
141 mp_msg(MSGT_OPEN,MSGL_V, "STREAM: Comment: %s\n", sinfo->comment);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
142
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
143 return s;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
144 }
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_full(char* filename,int mode, char** options, int* file_format) {
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
148 int i,j,l,r;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
149 stream_info_t* sinfo;
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
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
152 for(i = 0 ; auto_open_streams[i] ; i++) {
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
153 sinfo = auto_open_streams[i];
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
154 if(!sinfo->protocols) {
10735
8a10d5d0ce86 serious bugs - 1l absinth (changed to absinth against cola inflation)
alex
parents: 10625
diff changeset
155 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
156 continue;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
157 }
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
158 for(j = 0 ; sinfo->protocols[j] ; j++) {
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
159 l = strlen(sinfo->protocols[j]);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
160 // l == 0 => Don't do protocol matching (ie network and filenames)
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
161 if((l == 0) || ((strncmp(sinfo->protocols[j],filename,l) == 0) &&
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
162 (strncmp("://",filename+l,3) == 0))) {
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
163 *file_format = DEMUXER_TYPE_UNKNOWN;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
164 s = open_stream_plugin(sinfo,filename,mode,options,file_format,&r);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
165 if(s) return s;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
166 if(r != STREAM_UNSUPORTED) {
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
167 mp_msg(MSGT_OPEN,MSGL_ERR, "Failed to open %s\n",filename);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
168 return NULL;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
169 }
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
170 break;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
171 }
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
172 }
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 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
176 return NULL;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
177 }
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
178
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
179 //=================== STREAMER =========================
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
180
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
181 int stream_fill_buffer(stream_t *s){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
182 int len;
9874
55a43ae66ceb Oops, I just noticed albeu's revision 1.58 - so I backed out the
rsf
parents: 9873
diff changeset
183 if (/*s->fd == NULL ||*/ s->eof) { s->buf_pos = s->buf_len = 0; return 0; }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
184 switch(s->type){
7630
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7408
diff changeset
185 #ifdef LIBSMBCLIENT
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7408
diff changeset
186 case STREAMTYPE_SMB:
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7408
diff changeset
187 len=smbc_read(s->fd,s->buffer,STREAM_BUFFER_SIZE);
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7408
diff changeset
188 break;
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7408
diff changeset
189 #endif
692
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
190 case STREAMTYPE_STREAM:
10121
d42177a0da2a Changed the STREAMING defines to MPLAYER_NETWORK to avoid name definition clash.
bertrand
parents: 9915
diff changeset
191 #ifdef MPLAYER_NETWORK
3044
606bb6943ae9 Added a network read function call and a seek network function call.
bertrand
parents: 2790
diff changeset
192 if( s->streaming_ctrl!=NULL ) {
606bb6943ae9 Added a network read function call and a seek network function call.
bertrand
parents: 2790
diff changeset
193 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
194 } else {
606bb6943ae9 Added a network read function call and a seek network function call.
bertrand
parents: 2790
diff changeset
195 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
196 }
606bb6943ae9 Added a network read function call and a seek network function call.
bertrand
parents: 2790
diff changeset
197 #else
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
198 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
199 #endif
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8524
diff changeset
200 case STREAMTYPE_VCDBINCUE:
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8524
diff changeset
201 len=cue_vcd_read(s->buffer);break;
5380
8a01cde9cf39 DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents: 5133
diff changeset
202 #ifdef USE_DVDNAV
8a01cde9cf39 DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents: 5133
diff changeset
203 case STREAMTYPE_DVDNAV: {
5472
4bd766a5632b dvdnav functions moved out to dvdnav_steram.c
arpi
parents: 5382
diff changeset
204 dvdnav_stream_read((dvdnav_priv_t*)s->priv,s->buffer,&len);
4bd766a5632b dvdnav functions moved out to dvdnav_steram.c
arpi
parents: 5382
diff changeset
205 if (len==0) return 0; // this was an event, so repeat the read
5380
8a01cde9cf39 DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents: 5133
diff changeset
206 break;
8a01cde9cf39 DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents: 5133
diff changeset
207 }
8a01cde9cf39 DVDnav support patch by David Holm and Kees Cook <mplayer@outflux.net>
arpi
parents: 5133
diff changeset
208 #endif
1595
1918610d2802 seeking in DVD
arpi
parents: 1430
diff changeset
209 #ifdef USE_DVDREAD
1918610d2802 seeking in DVD
arpi
parents: 1430
diff changeset
210 case STREAMTYPE_DVD: {
1918610d2802 seeking in DVD
arpi
parents: 1430
diff changeset
211 off_t pos=dvd_read_sector(s->priv,s->buffer);
1918610d2802 seeking in DVD
arpi
parents: 1430
diff changeset
212 if(pos>=0){
1918610d2802 seeking in DVD
arpi
parents: 1430
diff changeset
213 len=2048; // full sector
1918610d2802 seeking in DVD
arpi
parents: 1430
diff changeset
214 s->pos=2048*pos-len;
1918610d2802 seeking in DVD
arpi
parents: 1430
diff changeset
215 } else len=-1; // error
1918610d2802 seeking in DVD
arpi
parents: 1430
diff changeset
216 break;
1918610d2802 seeking in DVD
arpi
parents: 1430
diff changeset
217 }
1918610d2802 seeking in DVD
arpi
parents: 1430
diff changeset
218 #endif
5133
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 4893
diff changeset
219 case STREAMTYPE_DS:
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 4893
diff changeset
220 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
221 break;
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents: 9380
diff changeset
222
76c6d8f1ebf5 this is a combo patch that:
arpi
parents: 9380
diff changeset
223
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
224 default:
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
225 len= s->fill_buffer ? s->fill_buffer(s,s->buffer,STREAM_BUFFER_SIZE) : 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
226 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
227 if(len<=0){ s->eof=1; s->buf_pos=s->buf_len=0; return 0; }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
228 s->buf_pos=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
229 s->buf_len=len;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
230 s->pos+=len;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
231 // printf("[%d]",len);fflush(stdout);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
232 return len;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
233 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
234
1428
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1177
diff changeset
235 int stream_seek_long(stream_t *s,off_t pos){
6814
6863033786d1 warning fixes
atmos4
parents: 6810
diff changeset
236 off_t newpos=0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
237
2144
99f079ff9374 new_memory_stream() added
arpi
parents: 2050
diff changeset
238 // if(verbose>=3) printf("seek_long to 0x%X\n",(unsigned int)pos);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
239
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
240 s->buf_pos=s->buf_len=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
241
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
242 switch(s->type){
7630
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7408
diff changeset
243 case STREAMTYPE_SMB:
692
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
244 case STREAMTYPE_STREAM:
1428
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1177
diff changeset
245 #ifdef _LARGEFILE_SOURCE
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1177
diff changeset
246 newpos=pos&(~((long long)STREAM_BUFFER_SIZE-1));break;
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1177
diff changeset
247 #else
492
888a85621f50 preliminary DVD support using libcss
lgb
parents: 180
diff changeset
248 newpos=pos&(~(STREAM_BUFFER_SIZE-1));break;
1428
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1177
diff changeset
249 #endif
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8524
diff changeset
250 case STREAMTYPE_VCDBINCUE:
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8524
diff changeset
251 newpos=(pos/VCD_SECTOR_DATA)*VCD_SECTOR_DATA;break;
1595
1918610d2802 seeking in DVD
arpi
parents: 1430
diff changeset
252 case STREAMTYPE_DVD:
1918610d2802 seeking in DVD
arpi
parents: 1430
diff changeset
253 newpos=pos/2048; newpos*=2048; break;
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
254 default:
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
255 // Round on sector size
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
256 if(s->sector_size)
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
257 newpos=(pos/s->sector_size)*s->sector_size;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
258 else { // Otherwise on the buffer size
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
259 #ifdef _LARGEFILE_SOURCE
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
260 newpos=pos&(~((long long)STREAM_BUFFER_SIZE-1));break;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
261 #else
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
262 newpos=pos&(~(STREAM_BUFFER_SIZE-1));break;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
263 #endif
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
264 }
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
265 break;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
266 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
267
2050
18f4dd5d568f -Wall warnings fixed
arpi
parents: 1999
diff changeset
268 if(verbose>=3){
18f4dd5d568f -Wall warnings fixed
arpi
parents: 1999
diff changeset
269 #ifdef _LARGEFILE_SOURCE
18f4dd5d568f -Wall warnings fixed
arpi
parents: 1999
diff changeset
270 printf("s->pos=%llX newpos=%llX new_bufpos=%llX buflen=%X \n",
18f4dd5d568f -Wall warnings fixed
arpi
parents: 1999
diff changeset
271 (long long)s->pos,(long long)newpos,(long long)pos,s->buf_len);
18f4dd5d568f -Wall warnings fixed
arpi
parents: 1999
diff changeset
272 #else
18f4dd5d568f -Wall warnings fixed
arpi
parents: 1999
diff changeset
273 printf("s->pos=%X newpos=%X new_bufpos=%X buflen=%X \n",
18f4dd5d568f -Wall warnings fixed
arpi
parents: 1999
diff changeset
274 (unsigned int)s->pos,newpos,pos,s->buf_len);
18f4dd5d568f -Wall warnings fixed
arpi
parents: 1999
diff changeset
275 #endif
18f4dd5d568f -Wall warnings fixed
arpi
parents: 1999
diff changeset
276 }
18f4dd5d568f -Wall warnings fixed
arpi
parents: 1999
diff changeset
277
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
278 pos-=newpos;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
279
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
280 if(newpos==0 || newpos!=s->pos){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
281 switch(s->type){
7630
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7408
diff changeset
282 #ifdef LIBSMBCLIENT
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7408
diff changeset
283 case STREAMTYPE_SMB:
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7408
diff changeset
284 s->pos=newpos; // real seek
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7408
diff changeset
285 if(smbc_lseek(s->fd,s->pos,SEEK_SET)<0) s->eof=1;
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7408
diff changeset
286 break;
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7408
diff changeset
287 #endif
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8524
diff changeset
288 case STREAMTYPE_VCDBINCUE:
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8524
diff changeset
289 s->pos=newpos; // real seek
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8524
diff changeset
290 cue_set_msf(s->pos/VCD_SECTOR_DATA);
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8524
diff changeset
291 break;
5472
4bd766a5632b dvdnav functions moved out to dvdnav_steram.c
arpi
parents: 5382
diff changeset
292 #ifdef USE_DVDNAV
4bd766a5632b dvdnav functions moved out to dvdnav_steram.c
arpi
parents: 5382
diff changeset
293 case STREAMTYPE_DVDNAV: {
4bd766a5632b dvdnav functions moved out to dvdnav_steram.c
arpi
parents: 5382
diff changeset
294 if (newpos==0) {
4bd766a5632b dvdnav functions moved out to dvdnav_steram.c
arpi
parents: 5382
diff changeset
295 if (dvdnav_stream_reset((dvdnav_priv_t*)s->priv))
4bd766a5632b dvdnav functions moved out to dvdnav_steram.c
arpi
parents: 5382
diff changeset
296 s->pos=0;
4bd766a5632b dvdnav functions moved out to dvdnav_steram.c
arpi
parents: 5382
diff changeset
297 }
4bd766a5632b dvdnav functions moved out to dvdnav_steram.c
arpi
parents: 5382
diff changeset
298 if(newpos!=s->pos){
4bd766a5632b dvdnav functions moved out to dvdnav_steram.c
arpi
parents: 5382
diff changeset
299 mp_msg(MSGT_STREAM,MSGL_INFO,"Cannot seek in DVDNAV streams yet!\n");
4bd766a5632b dvdnav functions moved out to dvdnav_steram.c
arpi
parents: 5382
diff changeset
300 return 1;
4bd766a5632b dvdnav functions moved out to dvdnav_steram.c
arpi
parents: 5382
diff changeset
301 }
4bd766a5632b dvdnav functions moved out to dvdnav_steram.c
arpi
parents: 5382
diff changeset
302 break;
4bd766a5632b dvdnav functions moved out to dvdnav_steram.c
arpi
parents: 5382
diff changeset
303 }
4bd766a5632b dvdnav functions moved out to dvdnav_steram.c
arpi
parents: 5382
diff changeset
304 #endif
1595
1918610d2802 seeking in DVD
arpi
parents: 1430
diff changeset
305 #ifdef USE_DVDREAD
1918610d2802 seeking in DVD
arpi
parents: 1430
diff changeset
306 case STREAMTYPE_DVD:
1918610d2802 seeking in DVD
arpi
parents: 1430
diff changeset
307 s->pos=newpos; // real seek
1918610d2802 seeking in DVD
arpi
parents: 1430
diff changeset
308 dvd_seek(s->priv,s->pos/2048);
1918610d2802 seeking in DVD
arpi
parents: 1430
diff changeset
309 break;
1918610d2802 seeking in DVD
arpi
parents: 1430
diff changeset
310 #endif
692
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
311 case STREAMTYPE_STREAM:
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
312 //s->pos=newpos; // real seek
3044
606bb6943ae9 Added a network read function call and a seek network function call.
bertrand
parents: 2790
diff changeset
313 // 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
314 // 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
315 // doesn't support seeking.
10121
d42177a0da2a Changed the STREAMING defines to MPLAYER_NETWORK to avoid name definition clash.
bertrand
parents: 9915
diff changeset
316 #ifdef MPLAYER_NETWORK
8929
c5ca1ae42555 check if seeking supported, otherwise fallback to null reading
arpi
parents: 8812
diff changeset
317 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
318 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
319 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
320 return 1;
606bb6943ae9 Added a network read function call and a seek network function call.
bertrand
parents: 2790
diff changeset
321 }
606bb6943ae9 Added a network read function call and a seek network function call.
bertrand
parents: 2790
diff changeset
322 }
606bb6943ae9 Added a network read function call and a seek network function call.
bertrand
parents: 2790
diff changeset
323 #else
692
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
324 if(newpos<s->pos){
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1642
diff changeset
325 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
326 return 1;
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
327 }
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
328 while(s->pos<newpos){
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
329 if(stream_fill_buffer(s)<=0) break; // EOF
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
330 }
3044
606bb6943ae9 Added a network read function call and a seek network function call.
bertrand
parents: 2790
diff changeset
331 #endif
692
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
332 break;
7408
0c6948b8100f stream layer cleanup part 2
arpi
parents: 7407
diff changeset
333 default:
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
334 // This should at the beginning as soon as all streams are converted
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
335 if(!s->seek)
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
336 return 0;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
337 // Now seek
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
338 if(!s->seek(s,newpos)) {
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
339 mp_msg(MSGT_STREAM,MSGL_ERR, "Seek failed\n");
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
340 return 0;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
341 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
342 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
343 // putchar('.');fflush(stdout);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
344 //} else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
345 // putchar('%');fflush(stdout);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
346 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
347
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
348 stream_fill_buffer(s);
1999
0c45328c9f8b fixed seek to EOF pos
arpi
parents: 1973
diff changeset
349 if(pos>=0 && pos<=s->buf_len){
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
350 s->buf_pos=pos; // byte position in sector
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
351 return 1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
352 }
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1642
diff changeset
353
1999
0c45328c9f8b fixed seek to EOF pos
arpi
parents: 1973
diff changeset
354 // 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
355
1428
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1177
diff changeset
356 #ifdef _LARGEFILE_SOURCE
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1642
diff changeset
357 mp_msg(MSGT_STREAM,MSGL_V,"stream_seek: WARNING! Can't seek to 0x%llX !\n",(long long)(pos+newpos));
1428
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1177
diff changeset
358 #else
1973
5216f108cb4f all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents: 1642
diff changeset
359 mp_msg(MSGT_STREAM,MSGL_V,"stream_seek: WARNING! Can't seek to 0x%X !\n",(pos+newpos));
1428
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1177
diff changeset
360 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
361 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
362 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
363
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
364
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
365 void stream_reset(stream_t *s){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
366 if(s->eof){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
367 s->pos=0; //ftell(f);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
368 // s->buf_pos=s->buf_len=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
369 s->eof=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
370 }
9853
765cca786fec Add netstream
albeu
parents: 9826
diff changeset
371 if(s->control) s->control(s,STREAM_CTRL_RESET,NULL);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
372 //stream_seek(s,0);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
373 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
374
2144
99f079ff9374 new_memory_stream() added
arpi
parents: 2050
diff changeset
375 stream_t* new_memory_stream(unsigned char* data,int len){
99f079ff9374 new_memory_stream() added
arpi
parents: 2050
diff changeset
376 stream_t *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
377 memset(s,0,sizeof(stream_t));
2144
99f079ff9374 new_memory_stream() added
arpi
parents: 2050
diff changeset
378 s->fd=-1;
99f079ff9374 new_memory_stream() added
arpi
parents: 2050
diff changeset
379 s->type=STREAMTYPE_MEMORY;
99f079ff9374 new_memory_stream() added
arpi
parents: 2050
diff changeset
380 s->buf_pos=0; s->buf_len=len;
99f079ff9374 new_memory_stream() added
arpi
parents: 2050
diff changeset
381 s->start_pos=0; s->end_pos=len;
99f079ff9374 new_memory_stream() added
arpi
parents: 2050
diff changeset
382 stream_reset(s);
99f079ff9374 new_memory_stream() added
arpi
parents: 2050
diff changeset
383 s->pos=len;
99f079ff9374 new_memory_stream() added
arpi
parents: 2050
diff changeset
384 memcpy(s->buffer,data,len);
99f079ff9374 new_memory_stream() added
arpi
parents: 2050
diff changeset
385 return s;
99f079ff9374 new_memory_stream() added
arpi
parents: 2050
diff changeset
386 }
99f079ff9374 new_memory_stream() added
arpi
parents: 2050
diff changeset
387
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
388 stream_t* new_stream(int fd,int type){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
389 stream_t *s=malloc(sizeof(stream_t));
3291
2122a13b5a29 fixed startup crash
iive
parents: 3261
diff changeset
390 if(s==NULL) return NULL;
2122a13b5a29 fixed startup crash
iive
parents: 3261
diff changeset
391 memset(s,0,sizeof(stream_t));
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10242
diff changeset
392
54bcbf28698a Networking support under MinGW.
diego
parents: 10242
diff changeset
393 #ifdef HAVE_WINSOCK2
54bcbf28698a Networking support under MinGW.
diego
parents: 10242
diff changeset
394 {
54bcbf28698a Networking support under MinGW.
diego
parents: 10242
diff changeset
395 WSADATA wsdata;
54bcbf28698a Networking support under MinGW.
diego
parents: 10242
diff changeset
396 int temp = WSAStartup(0x0202, &wsdata); // there might be a better place for this (-> later)
54bcbf28698a Networking support under MinGW.
diego
parents: 10242
diff changeset
397 mp_msg(MSGT_STREAM,MSGL_V,"WINSOCK2 init: %i\n", temp);
54bcbf28698a Networking support under MinGW.
diego
parents: 10242
diff changeset
398 }
54bcbf28698a Networking support under MinGW.
diego
parents: 10242
diff changeset
399 #endif
3291
2122a13b5a29 fixed startup crash
iive
parents: 3261
diff changeset
400
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
401 s->fd=fd;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
402 s->type=type;
180
afa2c05cfe43 terrible fatal bug fixed
arpi_esp
parents: 1
diff changeset
403 s->buf_pos=s->buf_len=0;
598
c7117e17e20b OSD seekbar fixed for mpeg/VCD
arpi_esp
parents: 578
diff changeset
404 s->start_pos=s->end_pos=0;
1642
78fa0713b823 free'ing priv struct
arpi
parents: 1595
diff changeset
405 s->priv=NULL;
7407
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
406 s->url=NULL;
2322
e22ec6fce385 cache2 support
arpi
parents: 2310
diff changeset
407 s->cache_pid=0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
408 stream_reset(s);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
409 return s;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
410 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
411
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
412 void free_stream(stream_t *s){
6138
523014df7d32 big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents: 5982
diff changeset
413 // printf("\n*** free_stream() called ***\n");
9798
02449faf87dd MINGW32 port
faust3
parents: 9794
diff changeset
414 #ifdef USE_STREAM_CACHE
4893
904cc3813582 Added waitpid in free_stream to avoid zombies
albeu
parents: 4464
diff changeset
415 if(s->cache_pid) {
9915
eabe876ab5e2 Fix cache uninit
albeu
parents: 9901
diff changeset
416 cache_uninit(s);
4893
904cc3813582 Added waitpid in free_stream to avoid zombies
albeu
parents: 4464
diff changeset
417 }
9798
02449faf87dd MINGW32 port
faust3
parents: 9794
diff changeset
418 #endif
6479
45ec7f24de06 Add uninit to the dvd stream.
albeu
parents: 6384
diff changeset
419 switch(s->type) {
7630
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7408
diff changeset
420 #ifdef LIBSMBCLIENT
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7408
diff changeset
421 case STREAMTYPE_SMB:
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7408
diff changeset
422 smbc_close(s->fd);
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7408
diff changeset
423 break;
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7408
diff changeset
424 #endif
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents: 9380
diff changeset
425
6479
45ec7f24de06 Add uninit to the dvd stream.
albeu
parents: 6384
diff changeset
426 #ifdef USE_DVDREAD
45ec7f24de06 Add uninit to the dvd stream.
albeu
parents: 6384
diff changeset
427 case STREAMTYPE_DVD:
45ec7f24de06 Add uninit to the dvd stream.
albeu
parents: 6384
diff changeset
428 dvd_close(s->priv);
45ec7f24de06 Add uninit to the dvd stream.
albeu
parents: 6384
diff changeset
429 #endif
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
430 default:
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
431 if(s->close) s->close(s);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
432 }
10281
54bcbf28698a Networking support under MinGW.
diego
parents: 10242
diff changeset
433 if(s->fd>0) closesocket(s->fd);
54bcbf28698a Networking support under MinGW.
diego
parents: 10242
diff changeset
434 #ifdef HAVE_WINSOCK2
54bcbf28698a Networking support under MinGW.
diego
parents: 10242
diff changeset
435 mp_msg(MSGT_STREAM,MSGL_V,"WINSOCK2 uninit\n");
54bcbf28698a Networking support under MinGW.
diego
parents: 10242
diff changeset
436 WSACleanup(); // there might be a better place for this (-> later)
54bcbf28698a Networking support under MinGW.
diego
parents: 10242
diff changeset
437 #endif
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
438 // 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
439 // streams should destroy their priv on close
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
440 //if(s->priv) free(s->priv);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9787
diff changeset
441 if(s->url) free(s->url);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
442 free(s);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
443 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
444
5133
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 4893
diff changeset
445 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
446 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
447 s->priv = ds;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 4893
diff changeset
448 return s;
9841a86d66f9 Initial ogg demuxer. No seeking, a/v sync is broken. Support avi
albeu
parents: 4893
diff changeset
449 }