annotate stream/stream.h @ 37030:5e89e80fa241

Add example/current default Coverity compile options. Suggestions for improvements welcome.
author reimar
date Sun, 06 Apr 2014 17:17:42 +0000
parents 7766530caa76
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
4129c8cfa742 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 25690
diff changeset
19 #ifndef MPLAYER_STREAM_H
4129c8cfa742 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 25690
diff changeset
20 #define MPLAYER_STREAM_H
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
21
30165
b4cbeff5153e Add a few missing header #includes and #defines.
diego
parents: 29920
diff changeset
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
69778ca88835 mp_msg'ized (for i18n ;)
alex
parents: 4825
diff changeset
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
1863e0c6af59 sys/types.h required for off_t
arpi
parents: 5133
diff changeset
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
7407
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
32 #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
33 #define STREAMTYPE_FILE 0 // read from seekable file
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
34 #define STREAMTYPE_VCD 1 // raw mode-2 CDROM reading, 2324 bytes/sector
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
35 #define STREAMTYPE_STREAM 2 // same as FILE but no seeking (for net/stdin)
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
36 #define STREAMTYPE_DVD 3 // libdvdread
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
37 #define STREAMTYPE_MEMORY 4 // read data from memory area
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
38 #define STREAMTYPE_PLAYLIST 6 // FIXME!!! same as STREAMTYPE_FILE now
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
39 #define STREAMTYPE_DS 8 // read from a demuxer stream
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
40 #define STREAMTYPE_DVDNAV 9 // we cannot safely "seek" in this...
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
41 #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
42 #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
43 #define STREAMTYPE_VCDBINCUE 12 // vcd directly from bin/cue files
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents: 8782
diff changeset
44 #define STREAMTYPE_DVB 13
14836
8b9738526dd7 added a stream module for the vstream client library
joey
parents: 13089
diff changeset
45 #define STREAMTYPE_VSTREAM 14
15585
281d155fb37f ported all network streams to the new API
nicodvb
parents: 14836
diff changeset
46 #define STREAMTYPE_SDP 15
18997
73b8f5ff772d added new pvr:// input for ivtv based cards
ben
parents: 18732
diff changeset
47 #define STREAMTYPE_PVR 16
19295
f6316aa3a7f2 conversion from stream_null to stream_tv was missing stream type
ben
parents: 19271
diff changeset
48 #define STREAMTYPE_TV 17
19301
097e5bc71210 added dedicated file for mf:// input
ben
parents: 19295
diff changeset
49 #define STREAMTYPE_MF 18
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents: 19475
diff changeset
50 #define STREAMTYPE_RADIO 19
31565
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents: 31525
diff changeset
51 #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
52 #define STREAMTYPE_BD 21
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
53
7412
ecef4f2191b2 some cosmetics - reordering declarations, 10l for cache2
arpi
parents: 7408
diff changeset
54 #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
55 #define STREAM_MAX_SECTOR_SIZE (8*1024)
7412
ecef4f2191b2 some cosmetics - reordering declarations, 10l for cache2
arpi
parents: 7408
diff changeset
56
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
57 #define VCD_SECTOR_SIZE 2352
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
58 #define VCD_SECTOR_OFFS 24
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
59 #define VCD_SECTOR_DATA 2324
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
60
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
61 /// atm it will always use mode == STREAM_READ
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
62 /// streams that use the new api should check the mode at open
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
63 #define STREAM_READ 0
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
64 #define STREAM_WRITE 1
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
65 /// 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
66 /// 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
67 #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
68 #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
69 #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
70 /** 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
71 separation between stream an demuxer and thus is not
5c39c41f38e8 Deobfuscate the special hack to disable cache for live555.
reimar
parents: 29263
diff changeset
72 actually a stream cache can not be used */
5c39c41f38e8 Deobfuscate the special hack to disable cache for live555.
reimar
parents: 29263
diff changeset
73 #define STREAM_NON_CACHEABLE 8
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
74
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
75 //////////// Open return code
25135
66f628d13442 Support stream redirection from http to mms, fix bug #927.
ulion
parents: 24297
diff changeset
76 #define STREAM_REDIRECTED -2
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
77 /// This can't open the requested protocol (used by stream wich have a
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
78 /// * protocol when they don't know the requested protocol)
24257
d261f5109660 cosmetics: typo fix UNSUPORTED --> UNSUPPORTED
diego
parents: 24079
diff changeset
79 #define STREAM_UNSUPPORTED -1
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
80 #define STREAM_ERROR 0
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
81 #define STREAM_OK 1
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
82
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
83 #define MAX_STREAM_PROTOCOLS 10
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
84
9851
6a348d3ed626 A new control called upon stream reset.
albeu
parents: 9825
diff changeset
85 #define STREAM_CTRL_RESET 0
17696
66d7afee9a46 added new stream_control() and new command: STREAM_CTRL_GET_TIME_LENGTH
nicodvb
parents: 17012
diff changeset
86 #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
87 #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
88 #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
89 #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
90 #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
91 #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
92 #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
93 #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
94 #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
95 #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
96 #define STREAM_CTRL_SET_ANGLE 11
34386
206264c532f5 Add new stream control command STREAM_CTRL_GET_NUM_TITLES.
ib
parents: 34144
diff changeset
97 #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
98 #define STREAM_CTRL_GET_LANG 13
35169
3b2c280da1af Add new stream control command STREAM_CTRL_GET_CURRENT_TITLE for DVDs.
ib
parents: 35159
diff changeset
99 #define STREAM_CTRL_GET_CURRENT_TITLE 14
36428
7766530caa76 Add new stream control command STREAM_CTRL_GET_CURRENT_CHANNEL.
ib
parents: 36337
diff changeset
100 #define STREAM_CTRL_GET_CURRENT_CHANNEL 15
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
101
34648
26eddbd6353a Code cleanup: Use a stream_control instead of global functions to
reimar
parents: 34492
diff changeset
102 enum stream_ctrl_type {
26eddbd6353a Code cleanup: Use a stream_control instead of global functions to
reimar
parents: 34492
diff changeset
103 stream_ctrl_audio,
26eddbd6353a Code cleanup: Use a stream_control instead of global functions to
reimar
parents: 34492
diff changeset
104 stream_ctrl_sub,
26eddbd6353a Code cleanup: Use a stream_control instead of global functions to
reimar
parents: 34492
diff changeset
105 };
26eddbd6353a Code cleanup: Use a stream_control instead of global functions to
reimar
parents: 34492
diff changeset
106
26eddbd6353a Code cleanup: Use a stream_control instead of global functions to
reimar
parents: 34492
diff changeset
107 struct stream_lang_req {
26eddbd6353a Code cleanup: Use a stream_control instead of global functions to
reimar
parents: 34492
diff changeset
108 enum stream_ctrl_type type;
26eddbd6353a Code cleanup: Use a stream_control instead of global functions to
reimar
parents: 34492
diff changeset
109 int id;
26eddbd6353a Code cleanup: Use a stream_control instead of global functions to
reimar
parents: 34492
diff changeset
110 char buf[40];
26eddbd6353a Code cleanup: Use a stream_control instead of global functions to
reimar
parents: 34492
diff changeset
111 };
27753
6c915906bbc6 Move DEFAULT_CDROM_DEVICE/DEFAULT_DVD_DEVICE to stream.h where it belongs.
diego
parents: 27397
diff changeset
112
30655
73d7c7884b0c Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents: 30649
diff changeset
113 typedef enum {
73d7c7884b0c Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents: 30649
diff changeset
114 streaming_stopped_e,
73d7c7884b0c Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents: 30649
diff changeset
115 streaming_playing_e
73d7c7884b0c Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents: 30649
diff changeset
116 } streaming_status;
73d7c7884b0c Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents: 30649
diff changeset
117
73d7c7884b0c Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents: 30649
diff changeset
118 typedef struct streaming_control {
73d7c7884b0c Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents: 30649
diff changeset
119 URL_t *url;
73d7c7884b0c Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents: 30649
diff changeset
120 streaming_status status;
73d7c7884b0c Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents: 30649
diff changeset
121 int buffering; // boolean
73d7c7884b0c Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents: 30649
diff changeset
122 unsigned int prebuffer_size;
73d7c7884b0c Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents: 30649
diff changeset
123 char *buffer;
73d7c7884b0c Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents: 30649
diff changeset
124 unsigned int buffer_size;
73d7c7884b0c Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents: 30649
diff changeset
125 unsigned int buffer_pos;
73d7c7884b0c Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents: 30649
diff changeset
126 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
127 int (*streaming_read)( int fd, char *buffer, int buffer_size, struct streaming_control *stream_ctrl );
35885
3389262720da Fix previous commit, off_t must be replaced by int64_t
reimar
parents: 35881
diff changeset
128 int (*streaming_seek)( int fd, int64_t pos, struct streaming_control *stream_ctrl );
30655
73d7c7884b0c Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents: 30649
diff changeset
129 void *data;
73d7c7884b0c Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents: 30649
diff changeset
130 } streaming_ctrl_t;
3043
02a43ca97b52 Added a new struct to stream_t to handle, network streaming.
bertrand
parents: 2935
diff changeset
131
31179
de190efe4da3 Drop pointless _st suffix from 'struct stream'.
diego
parents: 30808
diff changeset
132 struct stream;
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
133 typedef struct stream_info_st {
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
134 const char *info;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
135 const char *name;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
136 const char *author;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
137 const char *comment;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
138 /// 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
139 /// opts is at least in it's defaults settings and may have been
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
140 /// altered by url parsing if enabled and the options string parsing.
31179
de190efe4da3 Drop pointless _st suffix from 'struct stream'.
diego
parents: 30808
diff changeset
141 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
142 const char* protocols[MAX_STREAM_PROTOCOLS];
7b66e1a132de stream_info_t opts and protocols point to constant data as well.
reimar
parents: 25572
diff changeset
143 const void* opts;
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
144 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
145 * too. Otherwise options are only parsed from the
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
146 * options string given to open_stream_plugin */
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
147 } stream_info_t;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
148
31179
de190efe4da3 Drop pointless _st suffix from 'struct stream'.
diego
parents: 30808
diff changeset
149 typedef struct stream {
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
150 // Read
31179
de190efe4da3 Drop pointless _st suffix from 'struct stream'.
diego
parents: 30808
diff changeset
151 int (*fill_buffer)(struct stream *s, char* buffer, int max_len);
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
152 // Write
31179
de190efe4da3 Drop pointless _st suffix from 'struct stream'.
diego
parents: 30808
diff changeset
153 int (*write_buffer)(struct stream *s, char* buffer, int len);
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
154 // Seek
35885
3389262720da Fix previous commit, off_t must be replaced by int64_t
reimar
parents: 35881
diff changeset
155 int (*seek)(struct stream *s, int64_t pos);
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
156 // Control
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
157 // Will be later used to let streams like dvd and cdda report
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
158 // their structure (ie tracks, chapters, etc)
31179
de190efe4da3 Drop pointless _st suffix from 'struct stream'.
diego
parents: 30808
diff changeset
159 int (*control)(struct stream *s,int cmd,void* arg);
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
160 // Close
31179
de190efe4da3 Drop pointless _st suffix from 'struct stream'.
diego
parents: 30808
diff changeset
161 void (*close)(struct stream *s);
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
162
7407
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
163 int fd; // file descriptor, see man open(2)
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
164 int type; // see STREAMTYPE_*
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
165 int flags;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
166 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
167 int read_chunk; // maximum amount of data to read at once to limit latency (0 for default)
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
168 unsigned int buf_pos,buf_len;
35885
3389262720da Fix previous commit, off_t must be replaced by int64_t
reimar
parents: 35881
diff changeset
169 int64_t pos,start_pos,end_pos;
6224
79b2b4c3c435 off_t fields reordered, to avoid problems due to struct padding
arpi
parents: 5819
diff changeset
170 int eof;
21655
b7e2f8fd263e added member and definitions for output streams
nicodvb
parents: 20744
diff changeset
171 int mode; //STREAM_READ or STREAM_WRITE
2322
e22ec6fce385 cache2 support
arpi
parents: 2310
diff changeset
172 unsigned int cache_pid;
e22ec6fce385 cache2 support
arpi
parents: 2310
diff changeset
173 void* cache_data;
7329
9129781e5939 removed messy global 'tv_handle', use stream->priv for that purpose
arpi
parents: 7245
diff changeset
174 void* priv; // used for DVD, TV, RTSP etc
7407
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
175 char* url; // strdup() of filename/url
31683
db0b49579eeb Rename network build system variable and command line option to networking.
diego
parents: 31565
diff changeset
176 #ifdef CONFIG_NETWORKING
3043
02a43ca97b52 Added a new struct to stream_t to handle, network streaming.
bertrand
parents: 2935
diff changeset
177 streaming_ctrl_t *streaming_ctrl;
02a43ca97b52 Added a new struct to stream_t to handle, network streaming.
bertrand
parents: 2935
diff changeset
178 #endif
31835
73f85fc599e0 Add sanity-check for sector size to avoid strange crashes if it is
reimar
parents: 31683
diff changeset
179 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
180 FILE *capture_file;
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
181 } stream_t;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
182
31683
db0b49579eeb Rename network build system variable and command line option to networking.
diego
parents: 31565
diff changeset
183 #ifdef CONFIG_NETWORKING
30655
73d7c7884b0c Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents: 30649
diff changeset
184 #include "network.h"
73d7c7884b0c Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents: 30649
diff changeset
185 #endif
73d7c7884b0c Move struct streaming_control from network.h to stream.h, where it is used.
diego
parents: 30649
diff changeset
186
30649
77cc0ca2c757 Declare stream_fill_buffer() and stream_seek_long() unconditionally.
diego
parents: 30626
diff changeset
187 int stream_fill_buffer(stream_t *s);
35885
3389262720da Fix previous commit, off_t must be replaced by int64_t
reimar
parents: 35881
diff changeset
188 int stream_seek_long(stream_t *s, int64_t pos);
32438
faefba58f413 Implement a basic capture feature, available through -capture.
diego
parents: 31836
diff changeset
189 void stream_capture_do(stream_t *s);
30649
77cc0ca2c757 Declare stream_fill_buffer() and stream_seek_long() unconditionally.
diego
parents: 30626
diff changeset
190
27341
e7c989f7a7c9 Start unifying names of internal preprocessor directives.
diego
parents: 26326
diff changeset
191 #ifdef CONFIG_STREAM_CACHE
34704
cc658103f214 Allow using a cache size of up to 4 TB.
reimar
parents: 34648
diff changeset
192 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
193 int cache_stream_fill_buffer(stream_t *s);
34714
3fff1b2c4c97 Fix header file after r34793.
ib
parents: 34704
diff changeset
194 int cache_stream_seek_long(stream_t *s,int64_t pos);
2322
e22ec6fce385 cache2 support
arpi
parents: 2310
diff changeset
195 #else
7412
ecef4f2191b2 some cosmetics - reordering declarations, 10l for cache2
arpi
parents: 7408
diff changeset
196 // no cache, define wrappers:
2322
e22ec6fce385 cache2 support
arpi
parents: 2310
diff changeset
197 #define cache_stream_fill_buffer(x) stream_fill_buffer(x)
e22ec6fce385 cache2 support
arpi
parents: 2310
diff changeset
198 #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
199 #define stream_enable_cache(x,y,z,w) 1
2322
e22ec6fce385 cache2 support
arpi
parents: 2310
diff changeset
200 #endif
21655
b7e2f8fd263e added member and definitions for output streams
nicodvb
parents: 20744
diff changeset
201 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
202
34492
1495455e6d22 Move static keyword to the beginning of function declarations.
diego
parents: 34386
diff changeset
203 static inline int stream_read_char(stream_t *s)
1495455e6d22 Move static keyword to the beginning of function declarations.
diego
parents: 34386
diff changeset
204 {
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
205 return (s->buf_pos<s->buf_len)?s->buffer[s->buf_pos++]:
2322
e22ec6fce385 cache2 support
arpi
parents: 2310
diff changeset
206 (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
207 // 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
208 // stream_fill_buffer(s);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
209 // 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
210 // return 0; // EOF
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
211 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
212
34492
1495455e6d22 Move static keyword to the beginning of function declarations.
diego
parents: 34386
diff changeset
213 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
214 {
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
215 int x,y;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
216 x=stream_read_char(s);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
217 y=stream_read_char(s);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
218 return (x<<8)|y;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
219 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
220
34492
1495455e6d22 Move static keyword to the beginning of function declarations.
diego
parents: 34386
diff changeset
221 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
222 {
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
223 unsigned int y;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
224 y=stream_read_char(s);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
225 y=(y<<8)|stream_read_char(s);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
226 y=(y<<8)|stream_read_char(s);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
227 y=(y<<8)|stream_read_char(s);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
228 return y;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
229 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
230
4189
6871d97e4261 initial support for FILM file demuxing
melanson
parents: 4042
diff changeset
231 #define stream_read_fourcc stream_read_dword_le
6871d97e4261 initial support for FILM file demuxing
melanson
parents: 4042
diff changeset
232
34492
1495455e6d22 Move static keyword to the beginning of function declarations.
diego
parents: 34386
diff changeset
233 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
234 {
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
235 int x,y;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
236 x=stream_read_char(s);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
237 y=stream_read_char(s);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
238 return (y<<8)|x;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
239 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
240
34492
1495455e6d22 Move static keyword to the beginning of function declarations.
diego
parents: 34386
diff changeset
241 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
242 {
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
243 unsigned int y;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
244 y=stream_read_char(s);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
245 y|=stream_read_char(s)<<8;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
246 y|=stream_read_char(s)<<16;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
247 y|=stream_read_char(s)<<24;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
248 return y;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
249 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
250
34492
1495455e6d22 Move static keyword to the beginning of function declarations.
diego
parents: 34386
diff changeset
251 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
252 {
3998
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
253 uint64_t y;
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
254 y = stream_read_char(s);
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
255 y=(y<<8)|stream_read_char(s);
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
256 y=(y<<8)|stream_read_char(s);
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
257 y=(y<<8)|stream_read_char(s);
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
258 y=(y<<8)|stream_read_char(s);
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
259 y=(y<<8)|stream_read_char(s);
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
260 y=(y<<8)|stream_read_char(s);
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
261 y=(y<<8)|stream_read_char(s);
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
262 return y;
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
263 }
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
264
34492
1495455e6d22 Move static keyword to the beginning of function declarations.
diego
parents: 34386
diff changeset
265 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
266 {
11807
9a81d7b4c0b6 Added the new C based Matroska demuxer by Aurelien Jacobs.
mosu
parents: 10594
diff changeset
267 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
268 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
269 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
270 return y;
9a81d7b4c0b6 Added the new C based Matroska demuxer by Aurelien Jacobs.
mosu
parents: 10594
diff changeset
271 }
9a81d7b4c0b6 Added the new C based Matroska demuxer by Aurelien Jacobs.
mosu
parents: 10594
diff changeset
272
34492
1495455e6d22 Move static keyword to the beginning of function declarations.
diego
parents: 34386
diff changeset
273 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
274 {
5301
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents: 5292
diff changeset
275 unsigned int y;
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents: 5292
diff changeset
276 y = stream_read_char(s);
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents: 5292
diff changeset
277 y=(y<<8)|stream_read_char(s);
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents: 5292
diff changeset
278 y=(y<<8)|stream_read_char(s);
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents: 5292
diff changeset
279 return y;
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents: 5292
diff changeset
280 }
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents: 5292
diff changeset
281
34492
1495455e6d22 Move static keyword to the beginning of function declarations.
diego
parents: 34386
diff changeset
282 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
283 {
2347
f6a10f4b6119 stream_read() now returns no. of bytes readed
arpi
parents: 2322
diff changeset
284 int len=total;
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
285 while(len>0){
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
286 int x;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
287 x=s->buf_len-s->buf_pos;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
288 if(x==0){
2347
f6a10f4b6119 stream_read() now returns no. of bytes readed
arpi
parents: 2322
diff changeset
289 if(!cache_stream_fill_buffer(s)) return total-len; // EOF
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
290 x=s->buf_len-s->buf_pos;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
291 }
5086
69778ca88835 mp_msg'ized (for i18n ;)
alex
parents: 4825
diff changeset
292 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
293 if(x>len) x=len;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
294 memcpy(mem,&s->buffer[s->buf_pos],x);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
295 s->buf_pos+=x; mem+=x; len-=x;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
296 }
2347
f6a10f4b6119 stream_read() now returns no. of bytes readed
arpi
parents: 2322
diff changeset
297 return total;
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
298 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
299
33906
3c172a874b4b Convert stream_read_line function into more generic stream_read_until function.
reimar
parents: 33468
diff changeset
300 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
301 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
302 int max, int utf16)
33906
3c172a874b4b Convert stream_read_line function into more generic stream_read_until function.
reimar
parents: 33468
diff changeset
303 {
3c172a874b4b Convert stream_read_line function into more generic stream_read_until function.
reimar
parents: 33468
diff changeset
304 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
305 }
17879
0ca3fb62d2da Move the subread from FILE to stream_t.
albeu
parents: 17713
diff changeset
306
34492
1495455e6d22 Move static keyword to the beginning of function declarations.
diego
parents: 34386
diff changeset
307 static inline int stream_eof(stream_t *s)
1495455e6d22 Move static keyword to the beginning of function declarations.
diego
parents: 34386
diff changeset
308 {
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
309 return s->eof;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
310 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
311
35885
3389262720da Fix previous commit, off_t must be replaced by int64_t
reimar
parents: 35881
diff changeset
312 static inline int64_t stream_tell(stream_t *s)
34492
1495455e6d22 Move static keyword to the beginning of function declarations.
diego
parents: 34386
diff changeset
313 {
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
314 return s->pos+s->buf_pos-s->buf_len;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
315 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
316
35885
3389262720da Fix previous commit, off_t must be replaced by int64_t
reimar
parents: 35881
diff changeset
317 static inline int stream_seek(stream_t *s, int64_t pos)
34492
1495455e6d22 Move static keyword to the beginning of function declarations.
diego
parents: 34386
diff changeset
318 {
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
319
34144
beafae9de2be Employ correct off_t printf conversion specifiers; this time without typos.
diego
parents: 34140
diff changeset
320 mp_dbg(MSGT_DEMUX, MSGL_DBG3, "seek to 0x%"PRIX64"\n", pos);
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
321
32615
1bede0ded07e Add validity check for stream_seek argument to avoid a integer overflow
reimar
parents: 32529
diff changeset
322 if (pos < 0) {
34144
beafae9de2be Employ correct off_t printf conversion specifiers; this time without typos.
diego
parents: 34140
diff changeset
323 mp_msg(MSGT_DEMUX, MSGL_ERR,
beafae9de2be Employ correct off_t printf conversion specifiers; this time without typos.
diego
parents: 34140
diff changeset
324 "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
325 pos = 0;
1bede0ded07e Add validity check for stream_seek argument to avoid a integer overflow
reimar
parents: 32529
diff changeset
326 }
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
327 if(pos<s->pos){
35885
3389262720da Fix previous commit, off_t must be replaced by int64_t
reimar
parents: 35881
diff changeset
328 int64_t x=pos-(s->pos-s->buf_len);
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
329 if(x>=0){
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
330 s->buf_pos=x;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
331 // putchar('*');fflush(stdout);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
332 return 1;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
333 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
334 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28576
diff changeset
335
2322
e22ec6fce385 cache2 support
arpi
parents: 2310
diff changeset
336 return cache_stream_seek_long(s,pos);
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
337 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
338
35885
3389262720da Fix previous commit, off_t must be replaced by int64_t
reimar
parents: 35881
diff changeset
339 static inline int stream_skip(stream_t *s, int64_t len)
34492
1495455e6d22 Move static keyword to the beginning of function declarations.
diego
parents: 34386
diff changeset
340 {
31399
a12626be522c 100l, never just ignore a backwards skip, even if the stream is not
reimar
parents: 31257
diff changeset
341 if( len<0 || (len>2*STREAM_BUFFER_SIZE && (s->flags & MP_STREAM_SEEK_FW)) ) {
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
342 // negative or big skip!
1491
41e82ba06d1b return type of stream_seek changed void->int
arpi
parents: 1428
diff changeset
343 return stream_seek(s,stream_tell(s)+len);
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
344 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
345 while(len>0){
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
346 int x=s->buf_len-s->buf_pos;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
347 if(x==0){
2322
e22ec6fce385 cache2 support
arpi
parents: 2310
diff changeset
348 if(!cache_stream_fill_buffer(s)) return 0; // EOF
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
349 x=s->buf_len-s->buf_pos;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
350 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
351 if(x>len) x=len;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
352 //memcpy(mem,&s->buf[s->buf_pos],x);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
353 s->buf_pos+=x; len-=x;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
354 }
1491
41e82ba06d1b return type of stream_seek changed void->int
arpi
parents: 1428
diff changeset
355 return 1;
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
356 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
357
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
358 void stream_reset(stream_t *s);
17712
a320248c2450 stream_control() returns int, not void
nicodvb
parents: 17697
diff changeset
359 int stream_control(stream_t *s, int cmd, void *arg);
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
360 stream_t* new_stream(int fd,int type);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
361 void free_stream(stream_t *s);
2144
99f079ff9374 new_memory_stream() added
arpi
parents: 1594
diff changeset
362 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
363 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
364 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
365 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
366 /// 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
367 /// 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
368 void stream_set_interrupt_callback(int (*cb)(int));
31192
8e96ba5f4579 Document time scale for stream_check_interrupt argument.
reimar
parents: 31179
diff changeset
369 /// Call the interrupt checking callback if there is one and
8e96ba5f4579 Document time scale for stream_check_interrupt argument.
reimar
parents: 31179
diff changeset
370 /// 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
371 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
372 /// 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
373 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
374 /// Internal seek function bypassing the stream buffer
35885
3389262720da Fix previous commit, off_t must be replaced by int64_t
reimar
parents: 35881
diff changeset
375 int stream_seek_internal(stream_t *s, int64_t newpos);
2555
66837325b929 config.h cleanup, few things added to steram/demuxer headers
arpi
parents: 2347
diff changeset
376
31565
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents: 31525
diff changeset
377 extern int bluray_angle;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents: 31525
diff changeset
378 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
379 extern int dvd_speed;
2555
66837325b929 config.h cleanup, few things added to steram/demuxer headers
arpi
parents: 2347
diff changeset
380 extern int dvd_chapter;
4291
e889d37f25b2 Add option -last-chapter for DVD playing/encoding
kmkaplan
parents: 4189
diff changeset
381 extern int dvd_last_chapter;
2555
66837325b929 config.h cleanup, few things added to steram/demuxer headers
arpi
parents: 2347
diff changeset
382 extern int dvd_angle;
998
8c83e3ff26cc Added ifndef to prevent multiple header file inclusion.
bertrand
parents: 692
diff changeset
383
31565
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents: 31525
diff changeset
384 extern char *bluray_device;
6623
7bc4c6ba9485 add -audiofile support for gui
pontscho
parents: 6384
diff changeset
385 extern char * audio_stream;
31426
974cfaa54e83 Add declarations for open.c externally used variables to stream.h.
diego
parents: 31399
diff changeset
386 extern char *cdrom_device;
31434
d3db0dcba99f Move dvd_device extern declaration from stream_dvd_common.h to stream.h.
diego
parents: 31426
diff changeset
387 extern char *dvd_device;
6623
7bc4c6ba9485 add -audiofile support for gui
pontscho
parents: 6384
diff changeset
388
31451
b109d4fd7f3f Move dvbin_opts_conf extern variable declaration to stream.h.
diego
parents: 31434
diff changeset
389 extern const m_option_t dvbin_opts_conf[];
b109d4fd7f3f Move dvbin_opts_conf extern variable declaration to stream.h.
diego
parents: 31434
diff changeset
390
31473
0efed9cafbb4 Move rtsp_destination extern declaration to stream.h.
diego
parents: 31451
diff changeset
391 extern char *rtsp_destination;
0efed9cafbb4 Move rtsp_destination extern declaration to stream.h.
diego
parents: 31451
diff changeset
392
2935
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
393 typedef struct {
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
394 int id; // 0 - 31 mpeg; 128 - 159 ac3; 160 - 191 pcm
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28576
diff changeset
395 int language;
6651
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6623
diff changeset
396 int type;
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6623
diff changeset
397 int channels;
3751
d9d2ee82a243 subtitle_t + audio_stream_t -> stream_language_t (cleanup)
arpi
parents: 3726
diff changeset
398 } stream_language_t;
3048
b01551d725d4 add subtitle language detect.
pontscho
parents: 3043
diff changeset
399
36337
805ff0c5b699 Support -alang and -slang for bluray://
reimar
parents: 36080
diff changeset
400 int bluray_id_from_lang(stream_t *s, enum stream_ctrl_type type, const char *lang);
805ff0c5b699 Support -alang and -slang for bluray://
reimar
parents: 36080
diff changeset
401
36080
a5fd69f820f3 Make -chapter always available, even when compiled without DVD support.
reimar
parents: 35952
diff changeset
402 int parse_chapter_range(const m_option_t *conf, const char *range);
a5fd69f820f3 Make -chapter always available, even when compiled without DVD support.
reimar
parents: 35952
diff changeset
403
26029
4129c8cfa742 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 25690
diff changeset
404 #endif /* MPLAYER_STREAM_H */