Mercurial > mplayer.hg
annotate stream/stream.h @ 35078:d698d80bb438
Pass input to "strings" via stdin.
That disables any "clever" parsing that will fail if strings
was not updated to support that particular binary format.
This can easily happen when cross-compiling, but obviously
strings on OSX 10.6 was never update to handle the latest
(64 bit) binary format either and would previously just fail
(the obvious way of falling back to the generic algorithm in
that case would have been too user-friendly I guess...)
author | reimar |
---|---|
date | Wed, 12 Sep 2012 22:01:36 +0000 |
parents | 3fff1b2c4c97 |
children | ade40c1d69b8 |
rev | line source |
---|---|
30426
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30165
diff
changeset
|
1 /* |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30165
diff
changeset
|
2 * This file is part of MPlayer. |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30165
diff
changeset
|
3 * |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30165
diff
changeset
|
4 * MPlayer is free software; you can redistribute it and/or modify |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30165
diff
changeset
|
5 * it under the terms of the GNU General Public License as published by |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30165
diff
changeset
|
6 * the Free Software Foundation; either version 2 of the License, or |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30165
diff
changeset
|
7 * (at your option) any later version. |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30165
diff
changeset
|
8 * |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30165
diff
changeset
|
9 * MPlayer is distributed in the hope that it will be useful, |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30165
diff
changeset
|
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30165
diff
changeset
|
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30165
diff
changeset
|
12 * GNU General Public License for more details. |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30165
diff
changeset
|
13 * |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30165
diff
changeset
|
14 * You should have received a copy of the GNU General Public License along |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30165
diff
changeset
|
15 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30165
diff
changeset
|
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30165
diff
changeset
|
17 */ |
ce0122361a39
Add license header to all files missing it in the stream subdirectory.
diego
parents:
30165
diff
changeset
|
18 |
26029 | 19 #ifndef MPLAYER_STREAM_H |
20 #define MPLAYER_STREAM_H | |
578 | 21 |
30165 | 22 #include "config.h" |
31451
b109d4fd7f3f
Move dvbin_opts_conf extern variable declaration to stream.h.
diego
parents:
31434
diff
changeset
|
23 #include "m_option.h" |
5086 | 24 #include "mp_msg.h" |
30655
73d7c7884b0c
Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents:
30649
diff
changeset
|
25 #include "url.h" |
32438
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
31836
diff
changeset
|
26 #include <stdio.h> |
7412
ecef4f2191b2
some cosmetics - reordering declarations, 10l for cache2
arpi
parents:
7408
diff
changeset
|
27 #include <string.h> |
4029
3c87dee7a324
patch for missing include by Steven M. Schultz <sms@2BSD.COM>
pl
parents:
3998
diff
changeset
|
28 #include <inttypes.h> |
5292 | 29 #include <sys/types.h> |
30808
ce19feeb5cbb
Define O_BINARY in stream/stream.h unless it is defined yet, and use it
komh
parents:
30757
diff
changeset
|
30 #include <fcntl.h> |
ce19feeb5cbb
Define O_BINARY in stream/stream.h unless it is defined yet, and use it
komh
parents:
30757
diff
changeset
|
31 |
ce19feeb5cbb
Define O_BINARY in stream/stream.h unless it is defined yet, and use it
komh
parents:
30757
diff
changeset
|
32 #ifndef O_BINARY |
ce19feeb5cbb
Define O_BINARY in stream/stream.h unless it is defined yet, and use it
komh
parents:
30757
diff
changeset
|
33 #define O_BINARY 0 |
ce19feeb5cbb
Define O_BINARY in stream/stream.h unless it is defined yet, and use it
komh
parents:
30757
diff
changeset
|
34 #endif |
4029
3c87dee7a324
patch for missing include by Steven M. Schultz <sms@2BSD.COM>
pl
parents:
3998
diff
changeset
|
35 |
7407 | 36 #define STREAMTYPE_DUMMY -1 // for placeholders, when the actual reading is handled in the demuxer |
37 #define STREAMTYPE_FILE 0 // read from seekable file | |
38 #define STREAMTYPE_VCD 1 // raw mode-2 CDROM reading, 2324 bytes/sector | |
39 #define STREAMTYPE_STREAM 2 // same as FILE but no seeking (for net/stdin) | |
40 #define STREAMTYPE_DVD 3 // libdvdread | |
41 #define STREAMTYPE_MEMORY 4 // read data from memory area | |
42 #define STREAMTYPE_PLAYLIST 6 // FIXME!!! same as STREAMTYPE_FILE now | |
43 #define STREAMTYPE_DS 8 // read from a demuxer stream | |
44 #define STREAMTYPE_DVDNAV 9 // we cannot safely "seek" in this... | |
45 #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
|
46 #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
|
47 #define STREAMTYPE_VCDBINCUE 12 // vcd directly from bin/cue files |
9610 | 48 #define STREAMTYPE_DVB 13 |
14836
8b9738526dd7
added a stream module for the vstream client library
joey
parents:
13089
diff
changeset
|
49 #define STREAMTYPE_VSTREAM 14 |
15585 | 50 #define STREAMTYPE_SDP 15 |
18997 | 51 #define STREAMTYPE_PVR 16 |
19295
f6316aa3a7f2
conversion from stream_null to stream_tv was missing stream type
ben
parents:
19271
diff
changeset
|
52 #define STREAMTYPE_TV 17 |
19301 | 53 #define STREAMTYPE_MF 18 |
19568
bd821fd3e244
Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
19475
diff
changeset
|
54 #define STREAMTYPE_RADIO 19 |
31565
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
31525
diff
changeset
|
55 #define STREAMTYPE_BLURAY 20 |
31836
dcd515ac5f6c
Add support for bd:// streams as a test for a part of the AACS algorithm.
reimar
parents:
31835
diff
changeset
|
56 #define STREAMTYPE_BD 21 |
578 | 57 |
7412
ecef4f2191b2
some cosmetics - reordering declarations, 10l for cache2
arpi
parents:
7408
diff
changeset
|
58 #define STREAM_BUFFER_SIZE 2048 |
31835
73f85fc599e0
Add sanity-check for sector size to avoid strange crashes if it is
reimar
parents:
31683
diff
changeset
|
59 #define STREAM_MAX_SECTOR_SIZE (8*1024) |
7412
ecef4f2191b2
some cosmetics - reordering declarations, 10l for cache2
arpi
parents:
7408
diff
changeset
|
60 |
578 | 61 #define VCD_SECTOR_SIZE 2352 |
62 #define VCD_SECTOR_OFFS 24 | |
63 #define VCD_SECTOR_DATA 2324 | |
64 | |
9794 | 65 /// atm it will always use mode == STREAM_READ |
66 /// streams that use the new api should check the mode at open | |
67 #define STREAM_READ 0 | |
68 #define STREAM_WRITE 1 | |
69 /// Seek flags, if not mannualy set and s->seek isn't NULL | |
29920
4f740437ed2b
Finally rename the STREAM_SEEK define to MP_STREAM_SEEK, there are just too many
reimar
parents:
29888
diff
changeset
|
70 /// MP_STREAM_SEEK is automaticly set |
4f740437ed2b
Finally rename the STREAM_SEEK define to MP_STREAM_SEEK, there are just too many
reimar
parents:
29888
diff
changeset
|
71 #define MP_STREAM_SEEK_BW 2 |
4f740437ed2b
Finally rename the STREAM_SEEK define to MP_STREAM_SEEK, there are just too many
reimar
parents:
29888
diff
changeset
|
72 #define MP_STREAM_SEEK_FW 4 |
4f740437ed2b
Finally rename the STREAM_SEEK define to MP_STREAM_SEEK, there are just too many
reimar
parents:
29888
diff
changeset
|
73 #define MP_STREAM_SEEK (MP_STREAM_SEEK_BW|MP_STREAM_SEEK_FW) |
29888
5c39c41f38e8
Deobfuscate the special hack to disable cache for live555.
reimar
parents:
29263
diff
changeset
|
74 /** This is a HACK for live555 that does not respect the |
5c39c41f38e8
Deobfuscate the special hack to disable cache for live555.
reimar
parents:
29263
diff
changeset
|
75 separation between stream an demuxer and thus is not |
5c39c41f38e8
Deobfuscate the special hack to disable cache for live555.
reimar
parents:
29263
diff
changeset
|
76 actually a stream cache can not be used */ |
5c39c41f38e8
Deobfuscate the special hack to disable cache for live555.
reimar
parents:
29263
diff
changeset
|
77 #define STREAM_NON_CACHEABLE 8 |
9794 | 78 |
79 //////////// Open return code | |
25135
66f628d13442
Support stream redirection from http to mms, fix bug #927.
ulion
parents:
24297
diff
changeset
|
80 #define STREAM_REDIRECTED -2 |
9794 | 81 /// This can't open the requested protocol (used by stream wich have a |
82 /// * protocol when they don't know the requested protocol) | |
24257 | 83 #define STREAM_UNSUPPORTED -1 |
9794 | 84 #define STREAM_ERROR 0 |
85 #define STREAM_OK 1 | |
86 | |
87 #define MAX_STREAM_PROTOCOLS 10 | |
88 | |
9851 | 89 #define STREAM_CTRL_RESET 0 |
17696
66d7afee9a46
added new stream_control() and new command: STREAM_CTRL_GET_TIME_LENGTH
nicodvb
parents:
17012
diff
changeset
|
90 #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
|
91 #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
|
92 #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
|
93 #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
|
94 #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
|
95 #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
|
96 #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
|
97 #define STREAM_CTRL_GET_ASPECT_RATIO 8 |
25572
f6c0bce13b17
NEW STREAM_CTRLs: STREAM_CTRL_GET_NUM_ANGLES STREAM_CTRL_GET_ANGLE STREAM_CTRL_SET_ANGLE
nicodvb
parents:
25547
diff
changeset
|
98 #define STREAM_CTRL_GET_NUM_ANGLES 9 |
f6c0bce13b17
NEW STREAM_CTRLs: STREAM_CTRL_GET_NUM_ANGLES STREAM_CTRL_GET_ANGLE STREAM_CTRL_SET_ANGLE
nicodvb
parents:
25547
diff
changeset
|
99 #define STREAM_CTRL_GET_ANGLE 10 |
f6c0bce13b17
NEW STREAM_CTRLs: STREAM_CTRL_GET_NUM_ANGLES STREAM_CTRL_GET_ANGLE STREAM_CTRL_SET_ANGLE
nicodvb
parents:
25547
diff
changeset
|
100 #define STREAM_CTRL_SET_ANGLE 11 |
34386
206264c532f5
Add new stream control command STREAM_CTRL_GET_NUM_TITLES.
ib
parents:
34144
diff
changeset
|
101 #define STREAM_CTRL_GET_NUM_TITLES 12 |
34648
26eddbd6353a
Code cleanup: Use a stream_control instead of global functions to
reimar
parents:
34492
diff
changeset
|
102 #define STREAM_CTRL_GET_LANG 13 |
9794 | 103 |
34648
26eddbd6353a
Code cleanup: Use a stream_control instead of global functions to
reimar
parents:
34492
diff
changeset
|
104 enum stream_ctrl_type { |
26eddbd6353a
Code cleanup: Use a stream_control instead of global functions to
reimar
parents:
34492
diff
changeset
|
105 stream_ctrl_audio, |
26eddbd6353a
Code cleanup: Use a stream_control instead of global functions to
reimar
parents:
34492
diff
changeset
|
106 stream_ctrl_sub, |
26eddbd6353a
Code cleanup: Use a stream_control instead of global functions to
reimar
parents:
34492
diff
changeset
|
107 }; |
26eddbd6353a
Code cleanup: Use a stream_control instead of global functions to
reimar
parents:
34492
diff
changeset
|
108 |
26eddbd6353a
Code cleanup: Use a stream_control instead of global functions to
reimar
parents:
34492
diff
changeset
|
109 struct stream_lang_req { |
26eddbd6353a
Code cleanup: Use a stream_control instead of global functions to
reimar
parents:
34492
diff
changeset
|
110 enum stream_ctrl_type type; |
26eddbd6353a
Code cleanup: Use a stream_control instead of global functions to
reimar
parents:
34492
diff
changeset
|
111 int id; |
26eddbd6353a
Code cleanup: Use a stream_control instead of global functions to
reimar
parents:
34492
diff
changeset
|
112 char buf[40]; |
26eddbd6353a
Code cleanup: Use a stream_control instead of global functions to
reimar
parents:
34492
diff
changeset
|
113 }; |
27753
6c915906bbc6
Move DEFAULT_CDROM_DEVICE/DEFAULT_DVD_DEVICE to stream.h where it belongs.
diego
parents:
27397
diff
changeset
|
114 |
30655
73d7c7884b0c
Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents:
30649
diff
changeset
|
115 typedef enum { |
73d7c7884b0c
Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents:
30649
diff
changeset
|
116 streaming_stopped_e, |
73d7c7884b0c
Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents:
30649
diff
changeset
|
117 streaming_playing_e |
73d7c7884b0c
Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents:
30649
diff
changeset
|
118 } streaming_status; |
73d7c7884b0c
Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents:
30649
diff
changeset
|
119 |
73d7c7884b0c
Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents:
30649
diff
changeset
|
120 typedef struct streaming_control { |
73d7c7884b0c
Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents:
30649
diff
changeset
|
121 URL_t *url; |
73d7c7884b0c
Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents:
30649
diff
changeset
|
122 streaming_status status; |
73d7c7884b0c
Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents:
30649
diff
changeset
|
123 int buffering; // boolean |
73d7c7884b0c
Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents:
30649
diff
changeset
|
124 unsigned int prebuffer_size; |
73d7c7884b0c
Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents:
30649
diff
changeset
|
125 char *buffer; |
73d7c7884b0c
Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents:
30649
diff
changeset
|
126 unsigned int buffer_size; |
73d7c7884b0c
Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents:
30649
diff
changeset
|
127 unsigned int buffer_pos; |
73d7c7884b0c
Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents:
30649
diff
changeset
|
128 unsigned int bandwidth; // The downstream available |
73d7c7884b0c
Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents:
30649
diff
changeset
|
129 int (*streaming_read)( int fd, char *buffer, int buffer_size, struct streaming_control *stream_ctrl ); |
73d7c7884b0c
Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents:
30649
diff
changeset
|
130 int (*streaming_seek)( int fd, off_t pos, struct streaming_control *stream_ctrl ); |
73d7c7884b0c
Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents:
30649
diff
changeset
|
131 void *data; |
73d7c7884b0c
Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents:
30649
diff
changeset
|
132 } streaming_ctrl_t; |
3043
02a43ca97b52
Added a new struct to stream_t to handle, network streaming.
bertrand
parents:
2935
diff
changeset
|
133 |
31179 | 134 struct stream; |
9794 | 135 typedef struct stream_info_st { |
136 const char *info; | |
137 const char *name; | |
138 const char *author; | |
139 const char *comment; | |
140 /// mode isn't used atm (ie always READ) but it shouldn't be ignored | |
141 /// opts is at least in it's defaults settings and may have been | |
142 /// altered by url parsing if enabled and the options string parsing. | |
31179 | 143 int (*open)(struct stream* st, int mode, void* opts, int* file_format); |
25690
7b66e1a132de
stream_info_t opts and protocols point to constant data as well.
reimar
parents:
25572
diff
changeset
|
144 const char* protocols[MAX_STREAM_PROTOCOLS]; |
7b66e1a132de
stream_info_t opts and protocols point to constant data as well.
reimar
parents:
25572
diff
changeset
|
145 const void* opts; |
9794 | 146 int opts_url; /* If this is 1 we will parse the url as an option string |
147 * too. Otherwise options are only parsed from the | |
148 * options string given to open_stream_plugin */ | |
149 } stream_info_t; | |
150 | |
31179 | 151 typedef struct stream { |
9794 | 152 // Read |
31179 | 153 int (*fill_buffer)(struct stream *s, char* buffer, int max_len); |
9794 | 154 // Write |
31179 | 155 int (*write_buffer)(struct stream *s, char* buffer, int len); |
9794 | 156 // Seek |
31179 | 157 int (*seek)(struct stream *s,off_t pos); |
9794 | 158 // Control |
159 // Will be later used to let streams like dvd and cdda report | |
160 // their structure (ie tracks, chapters, etc) | |
31179 | 161 int (*control)(struct stream *s,int cmd,void* arg); |
9794 | 162 // Close |
31179 | 163 void (*close)(struct stream *s); |
9794 | 164 |
7407 | 165 int fd; // file descriptor, see man open(2) |
166 int type; // see STREAMTYPE_* | |
9794 | 167 int flags; |
168 int sector_size; // sector size (seek will be aligned on this size if non 0) | |
32529
0624fa95a2aa
Make the file protocol read up to 64 kB at once when the cache is used,
reimar
parents:
32472
diff
changeset
|
169 int read_chunk; // maximum amount of data to read at once to limit latency (0 for default) |
578 | 170 unsigned int buf_pos,buf_len; |
6224
79b2b4c3c435
off_t fields reordered, to avoid problems due to struct padding
arpi
parents:
5819
diff
changeset
|
171 off_t pos,start_pos,end_pos; |
79b2b4c3c435
off_t fields reordered, to avoid problems due to struct padding
arpi
parents:
5819
diff
changeset
|
172 int eof; |
21655 | 173 int mode; //STREAM_READ or STREAM_WRITE |
2322 | 174 unsigned int cache_pid; |
175 void* cache_data; | |
7329
9129781e5939
removed messy global 'tv_handle', use stream->priv for that purpose
arpi
parents:
7245
diff
changeset
|
176 void* priv; // used for DVD, TV, RTSP etc |
7407 | 177 char* url; // strdup() of filename/url |
31683
db0b49579eeb
Rename network build system variable and command line option to networking.
diego
parents:
31565
diff
changeset
|
178 #ifdef CONFIG_NETWORKING |
3043
02a43ca97b52
Added a new struct to stream_t to handle, network streaming.
bertrand
parents:
2935
diff
changeset
|
179 streaming_ctrl_t *streaming_ctrl; |
02a43ca97b52
Added a new struct to stream_t to handle, network streaming.
bertrand
parents:
2935
diff
changeset
|
180 #endif |
31835
73f85fc599e0
Add sanity-check for sector size to avoid strange crashes if it is
reimar
parents:
31683
diff
changeset
|
181 unsigned char buffer[STREAM_BUFFER_SIZE>STREAM_MAX_SECTOR_SIZE?STREAM_BUFFER_SIZE:STREAM_MAX_SECTOR_SIZE]; |
32438
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
31836
diff
changeset
|
182 FILE *capture_file; |
578 | 183 } stream_t; |
184 | |
31683
db0b49579eeb
Rename network build system variable and command line option to networking.
diego
parents:
31565
diff
changeset
|
185 #ifdef CONFIG_NETWORKING |
30655
73d7c7884b0c
Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents:
30649
diff
changeset
|
186 #include "network.h" |
73d7c7884b0c
Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents:
30649
diff
changeset
|
187 #endif |
73d7c7884b0c
Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents:
30649
diff
changeset
|
188 |
30649
77cc0ca2c757
Declare stream_fill_buffer() and stream_seek_long() unconditionally.
diego
parents:
30626
diff
changeset
|
189 int stream_fill_buffer(stream_t *s); |
77cc0ca2c757
Declare stream_fill_buffer() and stream_seek_long() unconditionally.
diego
parents:
30626
diff
changeset
|
190 int stream_seek_long(stream_t *s, off_t pos); |
32438
faefba58f413
Implement a basic capture feature, available through -capture.
diego
parents:
31836
diff
changeset
|
191 void stream_capture_do(stream_t *s); |
30649
77cc0ca2c757
Declare stream_fill_buffer() and stream_seek_long() unconditionally.
diego
parents:
30626
diff
changeset
|
192 |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26326
diff
changeset
|
193 #ifdef CONFIG_STREAM_CACHE |
34704 | 194 int stream_enable_cache(stream_t *stream,int64_t size,int64_t min,int64_t prefill); |
7412
ecef4f2191b2
some cosmetics - reordering declarations, 10l for cache2
arpi
parents:
7408
diff
changeset
|
195 int cache_stream_fill_buffer(stream_t *s); |
34714 | 196 int cache_stream_seek_long(stream_t *s,int64_t pos); |
2322 | 197 #else |
7412
ecef4f2191b2
some cosmetics - reordering declarations, 10l for cache2
arpi
parents:
7408
diff
changeset
|
198 // no cache, define wrappers: |
2322 | 199 #define cache_stream_fill_buffer(x) stream_fill_buffer(x) |
200 #define cache_stream_seek_long(x,y) stream_seek_long(x,y) | |
5292 | 201 #define stream_enable_cache(x,y,z,w) 1 |
2322 | 202 #endif |
21655 | 203 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
|
204 |
34492
1495455e6d22
Move static keyword to the beginning of function declarations.
diego
parents:
34386
diff
changeset
|
205 static inline int stream_read_char(stream_t *s) |
1495455e6d22
Move static keyword to the beginning of function declarations.
diego
parents:
34386
diff
changeset
|
206 { |
578 | 207 return (s->buf_pos<s->buf_len)?s->buffer[s->buf_pos++]: |
2322 | 208 (cache_stream_fill_buffer(s)?s->buffer[s->buf_pos++]:-256); |
578 | 209 // if(s->buf_pos<s->buf_len) return s->buffer[s->buf_pos++]; |
210 // stream_fill_buffer(s); | |
211 // if(s->buf_pos<s->buf_len) return s->buffer[s->buf_pos++]; | |
212 // return 0; // EOF | |
213 } | |
214 | |
34492
1495455e6d22
Move static keyword to the beginning of function declarations.
diego
parents:
34386
diff
changeset
|
215 static inline unsigned int stream_read_word(stream_t *s) |
1495455e6d22
Move static keyword to the beginning of function declarations.
diego
parents:
34386
diff
changeset
|
216 { |
578 | 217 int x,y; |
218 x=stream_read_char(s); | |
219 y=stream_read_char(s); | |
220 return (x<<8)|y; | |
221 } | |
222 | |
34492
1495455e6d22
Move static keyword to the beginning of function declarations.
diego
parents:
34386
diff
changeset
|
223 static inline unsigned int stream_read_dword(stream_t *s) |
1495455e6d22
Move static keyword to the beginning of function declarations.
diego
parents:
34386
diff
changeset
|
224 { |
578 | 225 unsigned int y; |
226 y=stream_read_char(s); | |
227 y=(y<<8)|stream_read_char(s); | |
228 y=(y<<8)|stream_read_char(s); | |
229 y=(y<<8)|stream_read_char(s); | |
230 return y; | |
231 } | |
232 | |
4189 | 233 #define stream_read_fourcc stream_read_dword_le |
234 | |
34492
1495455e6d22
Move static keyword to the beginning of function declarations.
diego
parents:
34386
diff
changeset
|
235 static inline unsigned int stream_read_word_le(stream_t *s) |
1495455e6d22
Move static keyword to the beginning of function declarations.
diego
parents:
34386
diff
changeset
|
236 { |
578 | 237 int x,y; |
238 x=stream_read_char(s); | |
239 y=stream_read_char(s); | |
240 return (y<<8)|x; | |
241 } | |
242 | |
34492
1495455e6d22
Move static keyword to the beginning of function declarations.
diego
parents:
34386
diff
changeset
|
243 static inline unsigned int stream_read_dword_le(stream_t *s) |
1495455e6d22
Move static keyword to the beginning of function declarations.
diego
parents:
34386
diff
changeset
|
244 { |
578 | 245 unsigned int y; |
246 y=stream_read_char(s); | |
247 y|=stream_read_char(s)<<8; | |
248 y|=stream_read_char(s)<<16; | |
249 y|=stream_read_char(s)<<24; | |
250 return y; | |
251 } | |
252 | |
34492
1495455e6d22
Move static keyword to the beginning of function declarations.
diego
parents:
34386
diff
changeset
|
253 static inline uint64_t stream_read_qword(stream_t *s) |
1495455e6d22
Move static keyword to the beginning of function declarations.
diego
parents:
34386
diff
changeset
|
254 { |
3998 | 255 uint64_t y; |
256 y = stream_read_char(s); | |
257 y=(y<<8)|stream_read_char(s); | |
258 y=(y<<8)|stream_read_char(s); | |
259 y=(y<<8)|stream_read_char(s); | |
260 y=(y<<8)|stream_read_char(s); | |
261 y=(y<<8)|stream_read_char(s); | |
262 y=(y<<8)|stream_read_char(s); | |
263 y=(y<<8)|stream_read_char(s); | |
264 return y; | |
265 } | |
266 | |
34492
1495455e6d22
Move static keyword to the beginning of function declarations.
diego
parents:
34386
diff
changeset
|
267 static inline uint64_t stream_read_qword_le(stream_t *s) |
1495455e6d22
Move static keyword to the beginning of function declarations.
diego
parents:
34386
diff
changeset
|
268 { |
11807
9a81d7b4c0b6
Added the new C based Matroska demuxer by Aurelien Jacobs.
mosu
parents:
10594
diff
changeset
|
269 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
|
270 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
|
271 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
|
272 return y; |
9a81d7b4c0b6
Added the new C based Matroska demuxer by Aurelien Jacobs.
mosu
parents:
10594
diff
changeset
|
273 } |
9a81d7b4c0b6
Added the new C based Matroska demuxer by Aurelien Jacobs.
mosu
parents:
10594
diff
changeset
|
274 |
34492
1495455e6d22
Move static keyword to the beginning of function declarations.
diego
parents:
34386
diff
changeset
|
275 static inline unsigned int stream_read_int24(stream_t *s) |
1495455e6d22
Move static keyword to the beginning of function declarations.
diego
parents:
34386
diff
changeset
|
276 { |
5301 | 277 unsigned int y; |
278 y = stream_read_char(s); | |
279 y=(y<<8)|stream_read_char(s); | |
280 y=(y<<8)|stream_read_char(s); | |
281 return y; | |
282 } | |
283 | |
34492
1495455e6d22
Move static keyword to the beginning of function declarations.
diego
parents:
34386
diff
changeset
|
284 static inline int stream_read(stream_t *s, char *mem, int total) |
1495455e6d22
Move static keyword to the beginning of function declarations.
diego
parents:
34386
diff
changeset
|
285 { |
2347 | 286 int len=total; |
578 | 287 while(len>0){ |
288 int x; | |
289 x=s->buf_len-s->buf_pos; | |
290 if(x==0){ | |
2347 | 291 if(!cache_stream_fill_buffer(s)) return total-len; // EOF |
578 | 292 x=s->buf_len-s->buf_pos; |
293 } | |
5086 | 294 if(s->buf_pos>s->buf_len) mp_msg(MSGT_DEMUX, MSGL_WARN, "stream_read: WARNING! s->buf_pos>s->buf_len\n"); |
578 | 295 if(x>len) x=len; |
296 memcpy(mem,&s->buffer[s->buf_pos],x); | |
297 s->buf_pos+=x; mem+=x; len-=x; | |
298 } | |
2347 | 299 return total; |
578 | 300 } |
301 | |
33906
3c172a874b4b
Convert stream_read_line function into more generic stream_read_until function.
reimar
parents:
33468
diff
changeset
|
302 uint8_t *stream_read_until(stream_t *s, uint8_t *mem, int max, uint8_t term, int utf16); |
34492
1495455e6d22
Move static keyword to the beginning of function declarations.
diego
parents:
34386
diff
changeset
|
303 static inline uint8_t *stream_read_line(stream_t *s, uint8_t *mem, |
1495455e6d22
Move static keyword to the beginning of function declarations.
diego
parents:
34386
diff
changeset
|
304 int max, int utf16) |
33906
3c172a874b4b
Convert stream_read_line function into more generic stream_read_until function.
reimar
parents:
33468
diff
changeset
|
305 { |
3c172a874b4b
Convert stream_read_line function into more generic stream_read_until function.
reimar
parents:
33468
diff
changeset
|
306 return stream_read_until(s, mem, max, '\n', utf16); |
3c172a874b4b
Convert stream_read_line function into more generic stream_read_until function.
reimar
parents:
33468
diff
changeset
|
307 } |
17879 | 308 |
34492
1495455e6d22
Move static keyword to the beginning of function declarations.
diego
parents:
34386
diff
changeset
|
309 static inline int stream_eof(stream_t *s) |
1495455e6d22
Move static keyword to the beginning of function declarations.
diego
parents:
34386
diff
changeset
|
310 { |
578 | 311 return s->eof; |
312 } | |
313 | |
34492
1495455e6d22
Move static keyword to the beginning of function declarations.
diego
parents:
34386
diff
changeset
|
314 static inline off_t stream_tell(stream_t *s) |
1495455e6d22
Move static keyword to the beginning of function declarations.
diego
parents:
34386
diff
changeset
|
315 { |
578 | 316 return s->pos+s->buf_pos-s->buf_len; |
317 } | |
318 | |
34492
1495455e6d22
Move static keyword to the beginning of function declarations.
diego
parents:
34386
diff
changeset
|
319 static inline int stream_seek(stream_t *s, off_t pos) |
1495455e6d22
Move static keyword to the beginning of function declarations.
diego
parents:
34386
diff
changeset
|
320 { |
578 | 321 |
34144
beafae9de2be
Employ correct off_t printf conversion specifiers; this time without typos.
diego
parents:
34140
diff
changeset
|
322 mp_dbg(MSGT_DEMUX, MSGL_DBG3, "seek to 0x%"PRIX64"\n", pos); |
578 | 323 |
32615
1bede0ded07e
Add validity check for stream_seek argument to avoid a integer overflow
reimar
parents:
32529
diff
changeset
|
324 if (pos < 0) { |
34144
beafae9de2be
Employ correct off_t printf conversion specifiers; this time without typos.
diego
parents:
34140
diff
changeset
|
325 mp_msg(MSGT_DEMUX, MSGL_ERR, |
beafae9de2be
Employ correct off_t printf conversion specifiers; this time without typos.
diego
parents:
34140
diff
changeset
|
326 "Invalid seek to negative position %"PRIx64"!\n", pos); |
32615
1bede0ded07e
Add validity check for stream_seek argument to avoid a integer overflow
reimar
parents:
32529
diff
changeset
|
327 pos = 0; |
1bede0ded07e
Add validity check for stream_seek argument to avoid a integer overflow
reimar
parents:
32529
diff
changeset
|
328 } |
578 | 329 if(pos<s->pos){ |
1428
a90d889eb649
largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents:
998
diff
changeset
|
330 off_t x=pos-(s->pos-s->buf_len); |
578 | 331 if(x>=0){ |
332 s->buf_pos=x; | |
333 // putchar('*');fflush(stdout); | |
334 return 1; | |
335 } | |
336 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28576
diff
changeset
|
337 |
2322 | 338 return cache_stream_seek_long(s,pos); |
578 | 339 } |
340 | |
34492
1495455e6d22
Move static keyword to the beginning of function declarations.
diego
parents:
34386
diff
changeset
|
341 static inline int stream_skip(stream_t *s, off_t len) |
1495455e6d22
Move static keyword to the beginning of function declarations.
diego
parents:
34386
diff
changeset
|
342 { |
31399
a12626be522c
100l, never just ignore a backwards skip, even if the stream is not
reimar
parents:
31257
diff
changeset
|
343 if( len<0 || (len>2*STREAM_BUFFER_SIZE && (s->flags & MP_STREAM_SEEK_FW)) ) { |
578 | 344 // negative or big skip! |
1491 | 345 return stream_seek(s,stream_tell(s)+len); |
578 | 346 } |
347 while(len>0){ | |
348 int x=s->buf_len-s->buf_pos; | |
349 if(x==0){ | |
2322 | 350 if(!cache_stream_fill_buffer(s)) return 0; // EOF |
578 | 351 x=s->buf_len-s->buf_pos; |
352 } | |
353 if(x>len) x=len; | |
354 //memcpy(mem,&s->buf[s->buf_pos],x); | |
355 s->buf_pos+=x; len-=x; | |
356 } | |
1491 | 357 return 1; |
578 | 358 } |
359 | |
360 void stream_reset(stream_t *s); | |
17712 | 361 int stream_control(stream_t *s, int cmd, void *arg); |
578 | 362 stream_t* new_stream(int fd,int type); |
363 void free_stream(stream_t *s); | |
2144 | 364 stream_t* new_memory_stream(unsigned char* data,int len); |
30697
9a49143918aa
Mark stream open filename parameter as const, the filename string is not
reimar
parents:
30656
diff
changeset
|
365 stream_t* open_stream(const char* filename,char** options,int* file_format); |
9a49143918aa
Mark stream open filename parameter as const, the filename string is not
reimar
parents:
30656
diff
changeset
|
366 stream_t* open_stream_full(const char* filename,int mode, char** options, int* file_format); |
9a49143918aa
Mark stream open filename parameter as const, the filename string is not
reimar
parents:
30656
diff
changeset
|
367 stream_t* open_output_stream(const char* filename,char** options); |
26326
5bfc1d8bece9
Remove the need for code using stream to export an mp_input_check_interrupt()
albeu
parents:
26029
diff
changeset
|
368 /// Set the callback to be used by libstream to check for user |
5bfc1d8bece9
Remove the need for code using stream to export an mp_input_check_interrupt()
albeu
parents:
26029
diff
changeset
|
369 /// interruption during long blocking operations (cache filling, etc). |
5bfc1d8bece9
Remove the need for code using stream to export an mp_input_check_interrupt()
albeu
parents:
26029
diff
changeset
|
370 void stream_set_interrupt_callback(int (*cb)(int)); |
31192
8e96ba5f4579
Document time scale for stream_check_interrupt argument.
reimar
parents:
31179
diff
changeset
|
371 /// Call the interrupt checking callback if there is one and |
8e96ba5f4579
Document time scale for stream_check_interrupt argument.
reimar
parents:
31179
diff
changeset
|
372 /// wait for time milliseconds |
26326
5bfc1d8bece9
Remove the need for code using stream to export an mp_input_check_interrupt()
albeu
parents:
26029
diff
changeset
|
373 int stream_check_interrupt(int time); |
32472
5d1d67cf8718
Add internal read and seek function to avoid a useless memcpy when using
reimar
parents:
32438
diff
changeset
|
374 /// Internal read function bypassing the stream buffer |
5d1d67cf8718
Add internal read and seek function to avoid a useless memcpy when using
reimar
parents:
32438
diff
changeset
|
375 int stream_read_internal(stream_t *s, void *buf, int len); |
5d1d67cf8718
Add internal read and seek function to avoid a useless memcpy when using
reimar
parents:
32438
diff
changeset
|
376 /// Internal seek function bypassing the stream buffer |
5d1d67cf8718
Add internal read and seek function to avoid a useless memcpy when using
reimar
parents:
32438
diff
changeset
|
377 int stream_seek_internal(stream_t *s, off_t newpos); |
2555
66837325b929
config.h cleanup, few things added to steram/demuxer headers
arpi
parents:
2347
diff
changeset
|
378 |
31565
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
31525
diff
changeset
|
379 extern int bluray_angle; |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
31525
diff
changeset
|
380 extern int bluray_chapter; |
31525
dd2b64511f05
Move dvd_speed extern variable declaration from stream_dvd_common.h to stream.h.
diego
parents:
31473
diff
changeset
|
381 extern int dvd_speed; |
2555
66837325b929
config.h cleanup, few things added to steram/demuxer headers
arpi
parents:
2347
diff
changeset
|
382 extern int dvd_title; |
66837325b929
config.h cleanup, few things added to steram/demuxer headers
arpi
parents:
2347
diff
changeset
|
383 extern int dvd_chapter; |
4291
e889d37f25b2
Add option -last-chapter for DVD playing/encoding
kmkaplan
parents:
4189
diff
changeset
|
384 extern int dvd_last_chapter; |
2555
66837325b929
config.h cleanup, few things added to steram/demuxer headers
arpi
parents:
2347
diff
changeset
|
385 extern int dvd_angle; |
998
8c83e3ff26cc
Added ifndef to prevent multiple header file inclusion.
bertrand
parents:
692
diff
changeset
|
386 |
31565
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
31525
diff
changeset
|
387 extern char *bluray_device; |
6623 | 388 extern char * audio_stream; |
31426
974cfaa54e83
Add declarations for open.c externally used variables to stream.h.
diego
parents:
31399
diff
changeset
|
389 extern char *cdrom_device; |
31434
d3db0dcba99f
Move dvd_device extern declaration from stream_dvd_common.h to stream.h.
diego
parents:
31426
diff
changeset
|
390 extern char *dvd_device; |
6623 | 391 |
31451
b109d4fd7f3f
Move dvbin_opts_conf extern variable declaration to stream.h.
diego
parents:
31434
diff
changeset
|
392 extern const m_option_t dvbin_opts_conf[]; |
b109d4fd7f3f
Move dvbin_opts_conf extern variable declaration to stream.h.
diego
parents:
31434
diff
changeset
|
393 |
31473
0efed9cafbb4
Move rtsp_destination extern declaration to stream.h.
diego
parents:
31451
diff
changeset
|
394 extern char *rtsp_destination; |
0efed9cafbb4
Move rtsp_destination extern declaration to stream.h.
diego
parents:
31451
diff
changeset
|
395 |
2935 | 396 typedef struct { |
397 int id; // 0 - 31 mpeg; 128 - 159 ac3; 160 - 191 pcm | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28576
diff
changeset
|
398 int language; |
6651 | 399 int type; |
400 int channels; | |
3751
d9d2ee82a243
subtitle_t + audio_stream_t -> stream_language_t (cleanup)
arpi
parents:
3726
diff
changeset
|
401 } stream_language_t; |
3048 | 402 |
26029 | 403 #endif /* MPLAYER_STREAM_H */ |