annotate stream/stream.h @ 24576:6704a924d4aa

According to MSDN a thread must call CoUninitialize once for each successful call it has made to CoInitialize or CoInitializeEx, including any call that returns S_FALSE. Only the CoUninitialize call corresponding to the CoInitialize or CoInitializeEx call that initialized the library can close it. patch by Gianluigi Tiesi, mplayer netfarm it
author diego
date Sun, 23 Sep 2007 20:37:33 +0000
parents a5ae2d4973b8
children 66f628d13442
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
23689
3f0d00abc073 Do not use leading underscores in multiple inclusion guards, they are reserved.
diego
parents: 22540
diff changeset
1 #ifndef STREAM_H
3f0d00abc073 Do not use leading underscores in multiple inclusion guards, they are reserved.
diego
parents: 22540
diff changeset
2 #define STREAM_H
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
3
5086
69778ca88835 mp_msg'ized (for i18n ;)
alex
parents: 4825
diff changeset
4 #include "mp_msg.h"
7412
ecef4f2191b2 some cosmetics - reordering declarations, 10l for cache2
arpi
parents: 7408
diff changeset
5 #include <string.h>
4029
3c87dee7a324 patch for missing include by Steven M. Schultz <sms@2BSD.COM>
pl
parents: 3998
diff changeset
6 #include <inttypes.h>
5292
1863e0c6af59 sys/types.h required for off_t
arpi
parents: 5133
diff changeset
7 #include <sys/types.h>
4029
3c87dee7a324 patch for missing include by Steven M. Schultz <sms@2BSD.COM>
pl
parents: 3998
diff changeset
8
7407
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
9 #define STREAMTYPE_DUMMY -1 // for placeholders, when the actual reading is handled in the demuxer
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
10 #define STREAMTYPE_FILE 0 // read from seekable file
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
11 #define STREAMTYPE_VCD 1 // raw mode-2 CDROM reading, 2324 bytes/sector
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
12 #define STREAMTYPE_STREAM 2 // same as FILE but no seeking (for net/stdin)
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
13 #define STREAMTYPE_DVD 3 // libdvdread
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
14 #define STREAMTYPE_MEMORY 4 // read data from memory area
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
15 #define STREAMTYPE_PLAYLIST 6 // FIXME!!! same as STREAMTYPE_FILE now
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
16 #define STREAMTYPE_DS 8 // read from a demuxer stream
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
17 #define STREAMTYPE_DVDNAV 9 // we cannot safely "seek" in this...
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
18 #define STREAMTYPE_CDDA 10 // raw audio CD reader
7630
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7412
diff changeset
19 #define STREAMTYPE_SMB 11 // smb:// url, using libsmbclient (samba)
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8164
diff changeset
20 #define STREAMTYPE_VCDBINCUE 12 // vcd directly from bin/cue files
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents: 8782
diff changeset
21 #define STREAMTYPE_DVB 13
14836
8b9738526dd7 added a stream module for the vstream client library
joey
parents: 13089
diff changeset
22 #define STREAMTYPE_VSTREAM 14
15585
281d155fb37f ported all network streams to the new API
nicodvb
parents: 14836
diff changeset
23 #define STREAMTYPE_SDP 15
18997
73b8f5ff772d added new pvr:// input for ivtv based cards
ben
parents: 18732
diff changeset
24 #define STREAMTYPE_PVR 16
19295
f6316aa3a7f2 conversion from stream_null to stream_tv was missing stream type
ben
parents: 19271
diff changeset
25 #define STREAMTYPE_TV 17
19301
097e5bc71210 added dedicated file for mf:// input
ben
parents: 19295
diff changeset
26 #define STREAMTYPE_MF 18
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents: 19475
diff changeset
27 #define STREAMTYPE_RADIO 19
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
28
7412
ecef4f2191b2 some cosmetics - reordering declarations, 10l for cache2
arpi
parents: 7408
diff changeset
29 #define STREAM_BUFFER_SIZE 2048
ecef4f2191b2 some cosmetics - reordering declarations, 10l for cache2
arpi
parents: 7408
diff changeset
30
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
31 #define VCD_SECTOR_SIZE 2352
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
32 #define VCD_SECTOR_OFFS 24
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
33 #define VCD_SECTOR_DATA 2324
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
34
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
35 /// atm it will always use mode == STREAM_READ
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
36 /// streams that use the new api should check the mode at open
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
37 #define STREAM_READ 0
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
38 #define STREAM_WRITE 1
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
39 /// Seek flags, if not mannualy set and s->seek isn't NULL
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
40 /// STREAM_SEEK is automaticly set
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
41 #define STREAM_SEEK_BW 2
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
42 #define STREAM_SEEK_FW 4
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
43 #define STREAM_SEEK (STREAM_SEEK_BW|STREAM_SEEK_FW)
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
44
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
45 //////////// Open return code
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
46 /// This can't open the requested protocol (used by stream wich have a
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
47 /// * protocol when they don't know the requested protocol)
24257
d261f5109660 cosmetics: typo fix UNSUPORTED --> UNSUPPORTED
diego
parents: 24079
diff changeset
48 #define STREAM_UNSUPPORTED -1
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
49 #define STREAM_ERROR 0
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
50 #define STREAM_OK 1
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
51
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
52 #define MAX_STREAM_PROTOCOLS 10
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
53
9851
6a348d3ed626 A new control called upon stream reset.
albeu
parents: 9825
diff changeset
54 #define STREAM_CTRL_RESET 0
17696
66d7afee9a46 added new stream_control() and new command: STREAM_CTRL_GET_TIME_LENGTH
nicodvb
parents: 17012
diff changeset
55 #define STREAM_CTRL_GET_TIME_LENGTH 1
19434
f2da98669a77 new STREAM_CTRL_SEEK_TO_CHAPTER (will be used by streams dvd[nav], maybe [s]vcd
nicodvb
parents: 19301
diff changeset
56 #define STREAM_CTRL_SEEK_TO_CHAPTER 2
19437
c73bf418b291 new stream_ctrl to get currently playing chapter (needed for stream-driven relative chapter seeking)
nicodvb
parents: 19434
diff changeset
57 #define STREAM_CTRL_GET_CURRENT_CHAPTER 3
19475
1f117b5fb5a1 added STREAM_CTRL_GET_NUM_CHAPTERS to get total number of chapters from the stream reader
nicodvb
parents: 19437
diff changeset
58 #define STREAM_CTRL_GET_NUM_CHAPTERS 4
20744
30091c3ad3cd added definitions of STREAM_CTRL_GET_CURRENT_TIME STREAM_CTRL_SEEK_TO_TIME
nicodvb
parents: 19568
diff changeset
59 #define STREAM_CTRL_GET_CURRENT_TIME 5
30091c3ad3cd added definitions of STREAM_CTRL_GET_CURRENT_TIME STREAM_CTRL_SEEK_TO_TIME
nicodvb
parents: 19568
diff changeset
60 #define STREAM_CTRL_SEEK_TO_TIME 6
21657
5f5ed194b54b new STREAM_CTRL_GET_SIZE to get size of output stream
nicodvb
parents: 21655
diff changeset
61 #define STREAM_CTRL_GET_SIZE 7
24297
a5ae2d4973b8 introduced STREAM_CTRL_GET_ASPECT_RATIO to report the aspect ratio read from the stream layer (if supported)
nicodvb
parents: 24257
diff changeset
62 #define STREAM_CTRL_GET_ASPECT_RATIO 8
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
63
10121
d42177a0da2a Changed the STREAMING defines to MPLAYER_NETWORK to avoid name definition clash.
bertrand
parents: 9886
diff changeset
64 #ifdef MPLAYER_NETWORK
3043
02a43ca97b52 Added a new struct to stream_t to handle, network streaming.
bertrand
parents: 2935
diff changeset
65 #include "network.h"
02a43ca97b52 Added a new struct to stream_t to handle, network streaming.
bertrand
parents: 2935
diff changeset
66 #endif
02a43ca97b52 Added a new struct to stream_t to handle, network streaming.
bertrand
parents: 2935
diff changeset
67
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
68 struct stream_st;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
69 typedef struct stream_info_st {
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
70 const char *info;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
71 const char *name;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
72 const char *author;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
73 const char *comment;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
74 /// mode isn't used atm (ie always READ) but it shouldn't be ignored
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
75 /// opts is at least in it's defaults settings and may have been
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
76 /// altered by url parsing if enabled and the options string parsing.
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
77 int (*open)(struct stream_st* st, int mode, void* opts, int* file_format);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
78 char* protocols[MAX_STREAM_PROTOCOLS];
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
79 void* opts;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
80 int opts_url; /* If this is 1 we will parse the url as an option string
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
81 * too. Otherwise options are only parsed from the
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
82 * options string given to open_stream_plugin */
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
83 } stream_info_t;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
84
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents: 7854
diff changeset
85 typedef struct stream_st {
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
86 // Read
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
87 int (*fill_buffer)(struct stream_st *s, char* buffer, int max_len);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
88 // Write
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
89 int (*write_buffer)(struct stream_st *s, char* buffer, int len);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
90 // Seek
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
91 int (*seek)(struct stream_st *s,off_t pos);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
92 // Control
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
93 // Will be later used to let streams like dvd and cdda report
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
94 // their structure (ie tracks, chapters, etc)
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
95 int (*control)(struct stream_st *s,int cmd,void* arg);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
96 // Close
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
97 void (*close)(struct stream_st *s);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
98
7407
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
99 int fd; // file descriptor, see man open(2)
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
100 int type; // see STREAMTYPE_*
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
101 int flags;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
102 int sector_size; // sector size (seek will be aligned on this size if non 0)
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
103 unsigned int buf_pos,buf_len;
6224
79b2b4c3c435 off_t fields reordered, to avoid problems due to struct padding
arpi
parents: 5819
diff changeset
104 off_t pos,start_pos,end_pos;
79b2b4c3c435 off_t fields reordered, to avoid problems due to struct padding
arpi
parents: 5819
diff changeset
105 int eof;
21655
b7e2f8fd263e added member and definitions for output streams
nicodvb
parents: 20744
diff changeset
106 int mode; //STREAM_READ or STREAM_WRITE
2322
e22ec6fce385 cache2 support
arpi
parents: 2310
diff changeset
107 unsigned int cache_pid;
e22ec6fce385 cache2 support
arpi
parents: 2310
diff changeset
108 void* cache_data;
7329
9129781e5939 removed messy global 'tv_handle', use stream->priv for that purpose
arpi
parents: 7245
diff changeset
109 void* priv; // used for DVD, TV, RTSP etc
7407
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
110 char* url; // strdup() of filename/url
10121
d42177a0da2a Changed the STREAMING defines to MPLAYER_NETWORK to avoid name definition clash.
bertrand
parents: 9886
diff changeset
111 #ifdef MPLAYER_NETWORK
3043
02a43ca97b52 Added a new struct to stream_t to handle, network streaming.
bertrand
parents: 2935
diff changeset
112 streaming_ctrl_t *streaming_ctrl;
02a43ca97b52 Added a new struct to stream_t to handle, network streaming.
bertrand
parents: 2935
diff changeset
113 #endif
7407
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
114 unsigned char buffer[STREAM_BUFFER_SIZE>VCD_SECTOR_SIZE?STREAM_BUFFER_SIZE:VCD_SECTOR_SIZE];
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
115 } stream_t;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
116
2322
e22ec6fce385 cache2 support
arpi
parents: 2310
diff changeset
117 #ifdef USE_STREAM_CACHE
4825
41d2da3bd082 Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents: 4551
diff changeset
118 int stream_enable_cache(stream_t *stream,int size,int min,int prefill);
7412
ecef4f2191b2 some cosmetics - reordering declarations, 10l for cache2
arpi
parents: 7408
diff changeset
119 int cache_stream_fill_buffer(stream_t *s);
ecef4f2191b2 some cosmetics - reordering declarations, 10l for cache2
arpi
parents: 7408
diff changeset
120 int cache_stream_seek_long(stream_t *s,off_t pos);
2322
e22ec6fce385 cache2 support
arpi
parents: 2310
diff changeset
121 #else
7412
ecef4f2191b2 some cosmetics - reordering declarations, 10l for cache2
arpi
parents: 7408
diff changeset
122 // no cache, define wrappers:
22540
52c574919687 Fix live555 compilation when stream cache is disabled.
diego
parents: 21657
diff changeset
123 int stream_fill_buffer(stream_t *s);
52c574919687 Fix live555 compilation when stream cache is disabled.
diego
parents: 21657
diff changeset
124 int stream_seek_long(stream_t *s,off_t pos);
2322
e22ec6fce385 cache2 support
arpi
parents: 2310
diff changeset
125 #define cache_stream_fill_buffer(x) stream_fill_buffer(x)
e22ec6fce385 cache2 support
arpi
parents: 2310
diff changeset
126 #define cache_stream_seek_long(x,y) stream_seek_long(x,y)
5292
1863e0c6af59 sys/types.h required for off_t
arpi
parents: 5133
diff changeset
127 #define stream_enable_cache(x,y,z,w) 1
2322
e22ec6fce385 cache2 support
arpi
parents: 2310
diff changeset
128 #endif
15954
341bfd887e36 small warning fix:
rathann
parents: 15585
diff changeset
129 void fixup_network_stream_cache(stream_t *stream);
21655
b7e2f8fd263e added member and definitions for output streams
nicodvb
parents: 20744
diff changeset
130 int stream_write_buffer(stream_t *s, unsigned char *buf, int len);
1428
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 998
diff changeset
131
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
132 inline static int stream_read_char(stream_t *s){
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
133 return (s->buf_pos<s->buf_len)?s->buffer[s->buf_pos++]:
2322
e22ec6fce385 cache2 support
arpi
parents: 2310
diff changeset
134 (cache_stream_fill_buffer(s)?s->buffer[s->buf_pos++]:-256);
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
135 // if(s->buf_pos<s->buf_len) return s->buffer[s->buf_pos++];
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
136 // stream_fill_buffer(s);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
137 // if(s->buf_pos<s->buf_len) return s->buffer[s->buf_pos++];
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
138 // return 0; // EOF
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
139 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
140
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
141 inline static unsigned int stream_read_word(stream_t *s){
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
142 int x,y;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
143 x=stream_read_char(s);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
144 y=stream_read_char(s);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
145 return (x<<8)|y;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
146 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
147
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
148 inline static unsigned int stream_read_dword(stream_t *s){
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
149 unsigned int y;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
150 y=stream_read_char(s);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
151 y=(y<<8)|stream_read_char(s);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
152 y=(y<<8)|stream_read_char(s);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
153 y=(y<<8)|stream_read_char(s);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
154 return y;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
155 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
156
4189
6871d97e4261 initial support for FILM file demuxing
melanson
parents: 4042
diff changeset
157 #define stream_read_fourcc stream_read_dword_le
6871d97e4261 initial support for FILM file demuxing
melanson
parents: 4042
diff changeset
158
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
159 inline static unsigned int stream_read_word_le(stream_t *s){
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
160 int x,y;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
161 x=stream_read_char(s);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
162 y=stream_read_char(s);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
163 return (y<<8)|x;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
164 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
165
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
166 inline static unsigned int stream_read_dword_le(stream_t *s){
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
167 unsigned int y;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
168 y=stream_read_char(s);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
169 y|=stream_read_char(s)<<8;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
170 y|=stream_read_char(s)<<16;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
171 y|=stream_read_char(s)<<24;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
172 return y;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
173 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
174
3998
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
175 inline static uint64_t stream_read_qword(stream_t *s){
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
176 uint64_t y;
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
177 y = stream_read_char(s);
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
178 y=(y<<8)|stream_read_char(s);
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
179 y=(y<<8)|stream_read_char(s);
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
180 y=(y<<8)|stream_read_char(s);
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
181 y=(y<<8)|stream_read_char(s);
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
182 y=(y<<8)|stream_read_char(s);
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
183 y=(y<<8)|stream_read_char(s);
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
184 y=(y<<8)|stream_read_char(s);
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
185 return y;
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
186 }
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
187
11807
9a81d7b4c0b6 Added the new C based Matroska demuxer by Aurelien Jacobs.
mosu
parents: 10594
diff changeset
188 inline static uint64_t stream_read_qword_le(stream_t *s){
9a81d7b4c0b6 Added the new C based Matroska demuxer by Aurelien Jacobs.
mosu
parents: 10594
diff changeset
189 uint64_t y;
24079
f40ff9321699 Fix a bug in stream_read_qword_le due to sign extension from int to uint64_t.
reimar
parents: 23689
diff changeset
190 y = stream_read_dword_le(s);
f40ff9321699 Fix a bug in stream_read_qword_le due to sign extension from int to uint64_t.
reimar
parents: 23689
diff changeset
191 y|=(uint64_t)stream_read_dword_le(s)<<32;
11807
9a81d7b4c0b6 Added the new C based Matroska demuxer by Aurelien Jacobs.
mosu
parents: 10594
diff changeset
192 return y;
9a81d7b4c0b6 Added the new C based Matroska demuxer by Aurelien Jacobs.
mosu
parents: 10594
diff changeset
193 }
9a81d7b4c0b6 Added the new C based Matroska demuxer by Aurelien Jacobs.
mosu
parents: 10594
diff changeset
194
5301
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents: 5292
diff changeset
195 inline static unsigned int stream_read_int24(stream_t *s){
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents: 5292
diff changeset
196 unsigned int y;
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents: 5292
diff changeset
197 y = stream_read_char(s);
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents: 5292
diff changeset
198 y=(y<<8)|stream_read_char(s);
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents: 5292
diff changeset
199 y=(y<<8)|stream_read_char(s);
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents: 5292
diff changeset
200 return y;
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents: 5292
diff changeset
201 }
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents: 5292
diff changeset
202
2347
f6a10f4b6119 stream_read() now returns no. of bytes readed
arpi
parents: 2322
diff changeset
203 inline static int stream_read(stream_t *s,char* mem,int total){
f6a10f4b6119 stream_read() now returns no. of bytes readed
arpi
parents: 2322
diff changeset
204 int len=total;
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
205 while(len>0){
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
206 int x;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
207 x=s->buf_len-s->buf_pos;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
208 if(x==0){
2347
f6a10f4b6119 stream_read() now returns no. of bytes readed
arpi
parents: 2322
diff changeset
209 if(!cache_stream_fill_buffer(s)) return total-len; // EOF
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
210 x=s->buf_len-s->buf_pos;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
211 }
5086
69778ca88835 mp_msg'ized (for i18n ;)
alex
parents: 4825
diff changeset
212 if(s->buf_pos>s->buf_len) mp_msg(MSGT_DEMUX, MSGL_WARN, "stream_read: WARNING! s->buf_pos>s->buf_len\n");
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
213 if(x>len) x=len;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
214 memcpy(mem,&s->buffer[s->buf_pos],x);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
215 s->buf_pos+=x; mem+=x; len-=x;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
216 }
2347
f6a10f4b6119 stream_read() now returns no. of bytes readed
arpi
parents: 2322
diff changeset
217 return total;
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
218 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
219
17879
0ca3fb62d2da Move the subread from FILE to stream_t.
albeu
parents: 17713
diff changeset
220 inline static unsigned char* stream_read_line(stream_t *s,unsigned char* mem, int max) {
0ca3fb62d2da Move the subread from FILE to stream_t.
albeu
parents: 17713
diff changeset
221 int len;
0ca3fb62d2da Move the subread from FILE to stream_t.
albeu
parents: 17713
diff changeset
222 unsigned char* end,*ptr = mem;;
0ca3fb62d2da Move the subread from FILE to stream_t.
albeu
parents: 17713
diff changeset
223 do {
0ca3fb62d2da Move the subread from FILE to stream_t.
albeu
parents: 17713
diff changeset
224 len = s->buf_len-s->buf_pos;
0ca3fb62d2da Move the subread from FILE to stream_t.
albeu
parents: 17713
diff changeset
225 // try to fill the buffer
0ca3fb62d2da Move the subread from FILE to stream_t.
albeu
parents: 17713
diff changeset
226 if(len <= 0 &&
0ca3fb62d2da Move the subread from FILE to stream_t.
albeu
parents: 17713
diff changeset
227 (!cache_stream_fill_buffer(s) ||
0ca3fb62d2da Move the subread from FILE to stream_t.
albeu
parents: 17713
diff changeset
228 (len = s->buf_len-s->buf_pos) <= 0)) break;
17880
c0fa48581ccf Fix compilation with stupid C++ compilers that shock on valid C
albeu
parents: 17879
diff changeset
229 end = (unsigned char*) memchr((void*)(s->buffer+s->buf_pos),'\n',len);
17879
0ca3fb62d2da Move the subread from FILE to stream_t.
albeu
parents: 17713
diff changeset
230 if(end) len = end - (s->buffer+s->buf_pos) + 1;
0ca3fb62d2da Move the subread from FILE to stream_t.
albeu
parents: 17713
diff changeset
231 if(len > 0 && max > 1) {
0ca3fb62d2da Move the subread from FILE to stream_t.
albeu
parents: 17713
diff changeset
232 int l = len > max-1 ? max-1 : len;
0ca3fb62d2da Move the subread from FILE to stream_t.
albeu
parents: 17713
diff changeset
233 memcpy(ptr,s->buffer+s->buf_pos,l);
0ca3fb62d2da Move the subread from FILE to stream_t.
albeu
parents: 17713
diff changeset
234 max -= l;
0ca3fb62d2da Move the subread from FILE to stream_t.
albeu
parents: 17713
diff changeset
235 ptr += l;
0ca3fb62d2da Move the subread from FILE to stream_t.
albeu
parents: 17713
diff changeset
236 }
0ca3fb62d2da Move the subread from FILE to stream_t.
albeu
parents: 17713
diff changeset
237 s->buf_pos += len;
0ca3fb62d2da Move the subread from FILE to stream_t.
albeu
parents: 17713
diff changeset
238 } while(!end);
0ca3fb62d2da Move the subread from FILE to stream_t.
albeu
parents: 17713
diff changeset
239 if(s->eof && ptr == mem) return NULL;
0ca3fb62d2da Move the subread from FILE to stream_t.
albeu
parents: 17713
diff changeset
240 if(max > 0) ptr[0] = 0;
0ca3fb62d2da Move the subread from FILE to stream_t.
albeu
parents: 17713
diff changeset
241 return mem;
0ca3fb62d2da Move the subread from FILE to stream_t.
albeu
parents: 17713
diff changeset
242 }
0ca3fb62d2da Move the subread from FILE to stream_t.
albeu
parents: 17713
diff changeset
243
0ca3fb62d2da Move the subread from FILE to stream_t.
albeu
parents: 17713
diff changeset
244
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
245 inline static int stream_eof(stream_t *s){
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
246 return s->eof;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
247 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
248
1428
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 998
diff changeset
249 inline static off_t stream_tell(stream_t *s){
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
250 return s->pos+s->buf_pos-s->buf_len;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
251 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
252
1428
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 998
diff changeset
253 inline static int stream_seek(stream_t *s,off_t pos){
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
254
5086
69778ca88835 mp_msg'ized (for i18n ;)
alex
parents: 4825
diff changeset
255 mp_dbg(MSGT_DEMUX, MSGL_DBG3, "seek to 0x%qX\n",(long long)pos);
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
256
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
257 if(pos<s->pos){
1428
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 998
diff changeset
258 off_t x=pos-(s->pos-s->buf_len);
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
259 if(x>=0){
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
260 s->buf_pos=x;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
261 // putchar('*');fflush(stdout);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
262 return 1;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
263 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
264 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
265
2322
e22ec6fce385 cache2 support
arpi
parents: 2310
diff changeset
266 return cache_stream_seek_long(s,pos);
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
267 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
268
3962
449fc79d1ae3 stream_skip len s/be off_t
steve
parents: 3753
diff changeset
269 inline static int stream_skip(stream_t *s,off_t len){
12018
2c2fb4457982 Seek in HTTP streams and stdin seek fixes
rtognimp
parents: 11965
diff changeset
270 if( (len<0 && (s->flags & STREAM_SEEK_BW)) || (len>2*STREAM_BUFFER_SIZE && (s->flags & STREAM_SEEK_FW)) ) {
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
271 // negative or big skip!
1491
41e82ba06d1b return type of stream_seek changed void->int
arpi
parents: 1428
diff changeset
272 return stream_seek(s,stream_tell(s)+len);
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
273 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
274 while(len>0){
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
275 int x=s->buf_len-s->buf_pos;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
276 if(x==0){
2322
e22ec6fce385 cache2 support
arpi
parents: 2310
diff changeset
277 if(!cache_stream_fill_buffer(s)) return 0; // EOF
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
278 x=s->buf_len-s->buf_pos;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
279 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
280 if(x>len) x=len;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
281 //memcpy(mem,&s->buf[s->buf_pos],x);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
282 s->buf_pos+=x; len-=x;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
283 }
1491
41e82ba06d1b return type of stream_seek changed void->int
arpi
parents: 1428
diff changeset
284 return 1;
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
285 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
286
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
287 void stream_reset(stream_t *s);
17712
a320248c2450 stream_control() returns int, not void
nicodvb
parents: 17697
diff changeset
288 int stream_control(stream_t *s, int cmd, void *arg);
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
289 stream_t* new_stream(int fd,int type);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
290 void free_stream(stream_t *s);
2144
99f079ff9374 new_memory_stream() added
arpi
parents: 1594
diff changeset
291 stream_t* new_memory_stream(unsigned char* data,int len);
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
292 stream_t* open_stream(char* filename,char** options,int* file_format);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
293 stream_t* open_stream_full(char* filename,int mode, char** options, int* file_format);
21655
b7e2f8fd263e added member and definitions for output streams
nicodvb
parents: 20744
diff changeset
294 stream_t* open_output_stream(char* filename,char** options);
2555
66837325b929 config.h cleanup, few things added to steram/demuxer headers
arpi
parents: 2347
diff changeset
295
66837325b929 config.h cleanup, few things added to steram/demuxer headers
arpi
parents: 2347
diff changeset
296 extern int dvd_title;
66837325b929 config.h cleanup, few things added to steram/demuxer headers
arpi
parents: 2347
diff changeset
297 extern int dvd_chapter;
4291
e889d37f25b2 Add option -last-chapter for DVD playing/encoding
kmkaplan
parents: 4189
diff changeset
298 extern int dvd_last_chapter;
2555
66837325b929 config.h cleanup, few things added to steram/demuxer headers
arpi
parents: 2347
diff changeset
299 extern int dvd_angle;
998
8c83e3ff26cc Added ifndef to prevent multiple header file inclusion.
bertrand
parents: 692
diff changeset
300
6623
7bc4c6ba9485 add -audiofile support for gui
pontscho
parents: 6384
diff changeset
301 extern char * audio_stream;
7bc4c6ba9485 add -audiofile support for gui
pontscho
parents: 6384
diff changeset
302
2935
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
303 typedef struct {
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
304 int id; // 0 - 31 mpeg; 128 - 159 ac3; 160 - 191 pcm
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
305 int language;
6651
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6623
diff changeset
306 int type;
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6623
diff changeset
307 int channels;
3751
d9d2ee82a243 subtitle_t + audio_stream_t -> stream_language_t (cleanup)
arpi
parents: 3726
diff changeset
308 } stream_language_t;
3048
b01551d725d4 add subtitle language detect.
pontscho
parents: 3043
diff changeset
309
23689
3f0d00abc073 Do not use leading underscores in multiple inclusion guards, they are reserved.
diego
parents: 22540
diff changeset
310 #endif // STREAM_H