annotate libmpdemux/stream.h @ 10252:d275152390ee

I've found some time to implement the encoding support for the new DivX API. Now it's possible to play and encode movies with the latest DivX release. One thing that doesn't work is the new Video Buffer Verifier (VBV) multipass encoding. The encoder segfaults. Maybe it just isn't supported with the standard profile of the released binary encoder. Andreas Hess <jaska@gmx.net>
author arpi
date Fri, 06 Jun 2003 19:57:37 +0000
parents d42177a0da2a
children 57bdcdb061d7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
998
8c83e3ff26cc Added ifndef to prevent multiple header file inclusion.
bertrand
parents: 692
diff changeset
1 #ifndef __STREAM_H
8c83e3ff26cc Added ifndef to prevent multiple header file inclusion.
bertrand
parents: 692
diff changeset
2 #define __STREAM_H
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
3
5086
69778ca88835 mp_msg'ized (for i18n ;)
alex
parents: 4825
diff changeset
4 #include "mp_msg.h"
7412
ecef4f2191b2 some cosmetics - reordering declarations, 10l for cache2
arpi
parents: 7408
diff changeset
5 #include <string.h>
4029
3c87dee7a324 patch for missing include by Steven M. Schultz <sms@2BSD.COM>
pl
parents: 3998
diff changeset
6 #include <inttypes.h>
5292
1863e0c6af59 sys/types.h required for off_t
arpi
parents: 5133
diff changeset
7 #include <sys/types.h>
4029
3c87dee7a324 patch for missing include by Steven M. Schultz <sms@2BSD.COM>
pl
parents: 3998
diff changeset
8
7407
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
9 #define STREAMTYPE_DUMMY -1 // for placeholders, when the actual reading is handled in the demuxer
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
10 #define STREAMTYPE_FILE 0 // read from seekable file
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
11 #define STREAMTYPE_VCD 1 // raw mode-2 CDROM reading, 2324 bytes/sector
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
12 #define STREAMTYPE_STREAM 2 // same as FILE but no seeking (for net/stdin)
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
13 #define STREAMTYPE_DVD 3 // libdvdread
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
14 #define STREAMTYPE_MEMORY 4 // read data from memory area
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
15 #define STREAMTYPE_PLAYLIST 6 // FIXME!!! same as STREAMTYPE_FILE now
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
16 #define STREAMTYPE_DS 8 // read from a demuxer stream
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
17 #define STREAMTYPE_DVDNAV 9 // we cannot safely "seek" in this...
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
18 #define STREAMTYPE_CDDA 10 // raw audio CD reader
7630
4c51ce16c4a2 smb:// (samba client) support by Vladimir Moushkov <vlindos_mpdev@abv.bg>
arpi
parents: 7412
diff changeset
19 #define STREAMTYPE_SMB 11 // smb:// url, using libsmbclient (samba)
8782
6af7a6595cc9 cdrwin-style bin/cue VCD image support (-vcd <track> -cuefile file.cue)
arpi
parents: 8164
diff changeset
20 #define STREAMTYPE_VCDBINCUE 12 // vcd directly from bin/cue files
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents: 8782
diff changeset
21 #define STREAMTYPE_DVB 13
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
22
7412
ecef4f2191b2 some cosmetics - reordering declarations, 10l for cache2
arpi
parents: 7408
diff changeset
23 #define STREAM_BUFFER_SIZE 2048
ecef4f2191b2 some cosmetics - reordering declarations, 10l for cache2
arpi
parents: 7408
diff changeset
24
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
25 #define VCD_SECTOR_SIZE 2352
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
26 #define VCD_SECTOR_OFFS 24
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
27 #define VCD_SECTOR_DATA 2324
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
28
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
29 /// atm it will always use mode == STREAM_READ
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
30 /// streams that use the new api should check the mode at open
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
31 #define STREAM_READ 0
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
32 #define STREAM_WRITE 1
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
33 /// Seek flags, if not mannualy set and s->seek isn't NULL
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
34 /// STREAM_SEEK is automaticly set
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
35 #define STREAM_SEEK_BW 2
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
36 #define STREAM_SEEK_FW 4
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
37 #define STREAM_SEEK (STREAM_SEEK_BW|STREAM_SEEK_FW)
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
38
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
39 //////////// Open return code
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
40 /// This can't open the requested protocol (used by stream wich have a
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
41 /// * protocol when they don't know the requested protocol)
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
42 #define STREAM_UNSUPORTED -1
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
43 #define STREAM_ERROR 0
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
44 #define STREAM_OK 1
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
45
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
46 #define MAX_STREAM_PROTOCOLS 10
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
47
9851
6a348d3ed626 A new control called upon stream reset.
albeu
parents: 9825
diff changeset
48 #define STREAM_CTRL_RESET 0
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
49
10121
d42177a0da2a Changed the STREAMING defines to MPLAYER_NETWORK to avoid name definition clash.
bertrand
parents: 9886
diff changeset
50 #ifdef MPLAYER_NETWORK
3043
02a43ca97b52 Added a new struct to stream_t to handle, network streaming.
bertrand
parents: 2935
diff changeset
51 #include "network.h"
02a43ca97b52 Added a new struct to stream_t to handle, network streaming.
bertrand
parents: 2935
diff changeset
52 #endif
02a43ca97b52 Added a new struct to stream_t to handle, network streaming.
bertrand
parents: 2935
diff changeset
53
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
54 struct stream_st;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
55 typedef struct stream_info_st {
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
56 const char *info;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
57 const char *name;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
58 const char *author;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
59 const char *comment;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
60 /// 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
61 /// opts is at least in it's defaults settings and may have been
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
62 /// altered by url parsing if enabled and the options string parsing.
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
63 int (*open)(struct stream_st* st, int mode, void* opts, int* file_format);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
64 char* protocols[MAX_STREAM_PROTOCOLS];
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
65 void* opts;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
66 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
67 * too. Otherwise options are only parsed from the
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
68 * options string given to open_stream_plugin */
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
69 } stream_info_t;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
70
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents: 7854
diff changeset
71 typedef struct stream_st {
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
72 // Read
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
73 int (*fill_buffer)(struct stream_st *s, char* buffer, int max_len);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
74 // Write
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
75 int (*write_buffer)(struct stream_st *s, char* buffer, int len);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
76 // Seek
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
77 int (*seek)(struct stream_st *s,off_t pos);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
78 // Control
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
79 // Will be later used to let streams like dvd and cdda report
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
80 // their structure (ie tracks, chapters, etc)
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
81 int (*control)(struct stream_st *s,int cmd,void* arg);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
82 // Close
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
83 void (*close)(struct stream_st *s);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
84
7407
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
85 int fd; // file descriptor, see man open(2)
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
86 int type; // see STREAMTYPE_*
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
87 int flags;
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
88 int sector_size; // sector size (seek will be aligned on this size if non 0)
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
89 unsigned int buf_pos,buf_len;
6224
79b2b4c3c435 off_t fields reordered, to avoid problems due to struct padding
arpi
parents: 5819
diff changeset
90 off_t pos,start_pos,end_pos;
79b2b4c3c435 off_t fields reordered, to avoid problems due to struct padding
arpi
parents: 5819
diff changeset
91 int eof;
2322
e22ec6fce385 cache2 support
arpi
parents: 2310
diff changeset
92 unsigned int cache_pid;
e22ec6fce385 cache2 support
arpi
parents: 2310
diff changeset
93 void* cache_data;
7329
9129781e5939 removed messy global 'tv_handle', use stream->priv for that purpose
arpi
parents: 7245
diff changeset
94 void* priv; // used for DVD, TV, RTSP etc
7407
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
95 char* url; // strdup() of filename/url
10121
d42177a0da2a Changed the STREAMING defines to MPLAYER_NETWORK to avoid name definition clash.
bertrand
parents: 9886
diff changeset
96 #ifdef MPLAYER_NETWORK
3043
02a43ca97b52 Added a new struct to stream_t to handle, network streaming.
bertrand
parents: 2935
diff changeset
97 streaming_ctrl_t *streaming_ctrl;
02a43ca97b52 Added a new struct to stream_t to handle, network streaming.
bertrand
parents: 2935
diff changeset
98 #endif
7407
8780415baa87 stream layer cleanup - part 1
arpi
parents: 7406
diff changeset
99 unsigned char buffer[STREAM_BUFFER_SIZE>VCD_SECTOR_SIZE?STREAM_BUFFER_SIZE:VCD_SECTOR_SIZE];
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
100 } stream_t;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
101
2322
e22ec6fce385 cache2 support
arpi
parents: 2310
diff changeset
102 #ifdef USE_STREAM_CACHE
4825
41d2da3bd082 Make blocking call in libmpdemux interuptable (only with new input,
albeu
parents: 4551
diff changeset
103 int stream_enable_cache(stream_t *stream,int size,int min,int prefill);
7412
ecef4f2191b2 some cosmetics - reordering declarations, 10l for cache2
arpi
parents: 7408
diff changeset
104 int cache_stream_fill_buffer(stream_t *s);
ecef4f2191b2 some cosmetics - reordering declarations, 10l for cache2
arpi
parents: 7408
diff changeset
105 int cache_stream_seek_long(stream_t *s,off_t pos);
2322
e22ec6fce385 cache2 support
arpi
parents: 2310
diff changeset
106 #else
7412
ecef4f2191b2 some cosmetics - reordering declarations, 10l for cache2
arpi
parents: 7408
diff changeset
107 // no cache, define wrappers:
2322
e22ec6fce385 cache2 support
arpi
parents: 2310
diff changeset
108 #define cache_stream_fill_buffer(x) stream_fill_buffer(x)
e22ec6fce385 cache2 support
arpi
parents: 2310
diff changeset
109 #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
110 #define stream_enable_cache(x,y,z,w) 1
2322
e22ec6fce385 cache2 support
arpi
parents: 2310
diff changeset
111 #endif
1428
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 998
diff changeset
112
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
113 inline static int stream_read_char(stream_t *s){
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
114 return (s->buf_pos<s->buf_len)?s->buffer[s->buf_pos++]:
2322
e22ec6fce385 cache2 support
arpi
parents: 2310
diff changeset
115 (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
116 // 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
117 // stream_fill_buffer(s);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
118 // 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
119 // return 0; // EOF
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
120 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
121
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
122 inline static unsigned int stream_read_word(stream_t *s){
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
123 int x,y;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
124 x=stream_read_char(s);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
125 y=stream_read_char(s);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
126 return (x<<8)|y;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
127 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
128
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
129 inline static unsigned int stream_read_dword(stream_t *s){
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
130 unsigned int y;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
131 y=stream_read_char(s);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
132 y=(y<<8)|stream_read_char(s);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
133 y=(y<<8)|stream_read_char(s);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
134 y=(y<<8)|stream_read_char(s);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
135 return y;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
136 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
137
4189
6871d97e4261 initial support for FILM file demuxing
melanson
parents: 4042
diff changeset
138 #define stream_read_fourcc stream_read_dword_le
6871d97e4261 initial support for FILM file demuxing
melanson
parents: 4042
diff changeset
139
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
140 inline static unsigned int stream_read_word_le(stream_t *s){
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
141 int x,y;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
142 x=stream_read_char(s);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
143 y=stream_read_char(s);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
144 return (y<<8)|x;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
145 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
146
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
147 inline static unsigned int stream_read_dword_le(stream_t *s){
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
148 unsigned int y;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
149 y=stream_read_char(s);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
150 y|=stream_read_char(s)<<8;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
151 y|=stream_read_char(s)<<16;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
152 y|=stream_read_char(s)<<24;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
153 return y;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
154 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
155
3998
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
156 inline static uint64_t stream_read_qword(stream_t *s){
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
157 uint64_t y;
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
158 y = stream_read_char(s);
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
159 y=(y<<8)|stream_read_char(s);
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
160 y=(y<<8)|stream_read_char(s);
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
161 y=(y<<8)|stream_read_char(s);
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
162 y=(y<<8)|stream_read_char(s);
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
163 y=(y<<8)|stream_read_char(s);
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
164 y=(y<<8)|stream_read_char(s);
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
165 y=(y<<8)|stream_read_char(s);
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
166 return y;
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
167 }
0dbec5edd431 added stream_read_qword by Chris Bednar
alex
parents: 3962
diff changeset
168
5301
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents: 5292
diff changeset
169 inline static unsigned int stream_read_int24(stream_t *s){
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents: 5292
diff changeset
170 unsigned int y;
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents: 5292
diff changeset
171 y = stream_read_char(s);
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents: 5292
diff changeset
172 y=(y<<8)|stream_read_char(s);
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents: 5292
diff changeset
173 y=(y<<8)|stream_read_char(s);
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents: 5292
diff changeset
174 return y;
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents: 5292
diff changeset
175 }
d72c3169a343 Improved MP4 parsing (finally)
atmos4
parents: 5292
diff changeset
176
2347
f6a10f4b6119 stream_read() now returns no. of bytes readed
arpi
parents: 2322
diff changeset
177 inline static int stream_read(stream_t *s,char* mem,int total){
f6a10f4b6119 stream_read() now returns no. of bytes readed
arpi
parents: 2322
diff changeset
178 int len=total;
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
179 while(len>0){
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
180 int x;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
181 x=s->buf_len-s->buf_pos;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
182 if(x==0){
2347
f6a10f4b6119 stream_read() now returns no. of bytes readed
arpi
parents: 2322
diff changeset
183 if(!cache_stream_fill_buffer(s)) return total-len; // EOF
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
184 x=s->buf_len-s->buf_pos;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
185 }
5086
69778ca88835 mp_msg'ized (for i18n ;)
alex
parents: 4825
diff changeset
186 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
187 if(x>len) x=len;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
188 memcpy(mem,&s->buffer[s->buf_pos],x);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
189 s->buf_pos+=x; mem+=x; len-=x;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
190 }
2347
f6a10f4b6119 stream_read() now returns no. of bytes readed
arpi
parents: 2322
diff changeset
191 return total;
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
192 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
193
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
194 inline static int stream_eof(stream_t *s){
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
195 return s->eof;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
196 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
197
1428
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 998
diff changeset
198 inline static off_t stream_tell(stream_t *s){
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
199 return s->pos+s->buf_pos-s->buf_len;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
200 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
201
1428
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 998
diff changeset
202 inline static int stream_seek(stream_t *s,off_t pos){
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
203
5086
69778ca88835 mp_msg'ized (for i18n ;)
alex
parents: 4825
diff changeset
204 mp_dbg(MSGT_DEMUX, MSGL_DBG3, "seek to 0x%qX\n",(long long)pos);
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
205
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
206 if(pos<s->pos){
1428
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 998
diff changeset
207 off_t x=pos-(s->pos-s->buf_len);
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
208 if(x>=0){
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
209 s->buf_pos=x;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
210 // putchar('*');fflush(stdout);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
211 return 1;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
212 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
213 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
214
2322
e22ec6fce385 cache2 support
arpi
parents: 2310
diff changeset
215 return cache_stream_seek_long(s,pos);
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
216 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
217
3962
449fc79d1ae3 stream_skip len s/be off_t
steve
parents: 3753
diff changeset
218 inline static int stream_skip(stream_t *s,off_t len){
692
14a2f35921a0 allow playing from stdin
arpi_esp
parents: 598
diff changeset
219 if(len<0 || (len>2*STREAM_BUFFER_SIZE && s->type!=STREAMTYPE_STREAM)){
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
220 // negative or big skip!
1491
41e82ba06d1b return type of stream_seek changed void->int
arpi
parents: 1428
diff changeset
221 return stream_seek(s,stream_tell(s)+len);
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
222 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
223 while(len>0){
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
224 int x=s->buf_len-s->buf_pos;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
225 if(x==0){
2322
e22ec6fce385 cache2 support
arpi
parents: 2310
diff changeset
226 if(!cache_stream_fill_buffer(s)) return 0; // EOF
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
227 x=s->buf_len-s->buf_pos;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
228 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
229 if(x>len) x=len;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
230 //memcpy(mem,&s->buf[s->buf_pos],x);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
231 s->buf_pos+=x; len-=x;
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
232 }
1491
41e82ba06d1b return type of stream_seek changed void->int
arpi
parents: 1428
diff changeset
233 return 1;
578
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
234 }
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
235
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
236 void stream_reset(stream_t *s);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
237 stream_t* new_stream(int fd,int type);
c2377cd0069f something moved to brand new stream.h
arpi_esp
parents:
diff changeset
238 void free_stream(stream_t *s);
2144
99f079ff9374 new_memory_stream() added
arpi
parents: 1594
diff changeset
239 stream_t* new_memory_stream(unsigned char* data,int len);
9794
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
240 stream_t* open_stream(char* filename,char** options,int* file_format);
f67d87b2d3c7 Stream modularization, the first step.
albeu
parents: 9746
diff changeset
241 stream_t* open_stream_full(char* filename,int mode, char** options, int* file_format);
2555
66837325b929 config.h cleanup, few things added to steram/demuxer headers
arpi
parents: 2347
diff changeset
242
66837325b929 config.h cleanup, few things added to steram/demuxer headers
arpi
parents: 2347
diff changeset
243 //#ifdef USE_DVDREAD
4407
760481d8421c warning (proper) fix
pl
parents: 4343
diff changeset
244 struct config;
2555
66837325b929 config.h cleanup, few things added to steram/demuxer headers
arpi
parents: 2347
diff changeset
245 extern int dvd_title;
66837325b929 config.h cleanup, few things added to steram/demuxer headers
arpi
parents: 2347
diff changeset
246 extern int dvd_chapter;
4291
e889d37f25b2 Add option -last-chapter for DVD playing/encoding
kmkaplan
parents: 4189
diff changeset
247 extern int dvd_last_chapter;
2555
66837325b929 config.h cleanup, few things added to steram/demuxer headers
arpi
parents: 2347
diff changeset
248 extern int dvd_angle;
4343
b0c8eed7473c Extended DVD chapter specification. Remove -last-chapter option.
kmkaplan
parents: 4315
diff changeset
249 int dvd_parse_chapter_range(struct config*, const char*);
2555
66837325b929 config.h cleanup, few things added to steram/demuxer headers
arpi
parents: 2347
diff changeset
250 //#endif
998
8c83e3ff26cc Added ifndef to prevent multiple header file inclusion.
bertrand
parents: 692
diff changeset
251
9611
4847392922be dvbin_param_on moved
arpi
parents: 9610
diff changeset
252 extern int dvbin_param_on;
4847392922be dvbin_param_on moved
arpi
parents: 9610
diff changeset
253
6623
7bc4c6ba9485 add -audiofile support for gui
pontscho
parents: 6384
diff changeset
254 extern char * audio_stream;
7bc4c6ba9485 add -audiofile support for gui
pontscho
parents: 6384
diff changeset
255
5471
348c7d83e710 dvdnav_stream functions - dvdnav patch by Kees Cook <mplayer@outflux.net>
arpi
parents: 5380
diff changeset
256 #ifdef USE_DVDNAV
348c7d83e710 dvdnav_stream functions - dvdnav patch by Kees Cook <mplayer@outflux.net>
arpi
parents: 5380
diff changeset
257 #include "dvdnav_stream.h"
348c7d83e710 dvdnav_stream functions - dvdnav patch by Kees Cook <mplayer@outflux.net>
arpi
parents: 5380
diff changeset
258 #endif
348c7d83e710 dvdnav_stream functions - dvdnav patch by Kees Cook <mplayer@outflux.net>
arpi
parents: 5380
diff changeset
259
2935
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
260 #ifdef USE_DVDREAD
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
261
5819
194bca17117b DVDKIT support
arpi
parents: 5471
diff changeset
262 #ifdef USE_MPDVDKIT
7245
c5a023ac99bd gcc 2.95.4 doesn't like VAR==value without spaces
arpi
parents: 7196
diff changeset
263 #if (USE_MPDVDKIT == 2)
7196
9aca112abac7 1000l - libmpdvdkit2 fix, thx Nexus
arpi
parents: 6651
diff changeset
264 #include "../libmpdvdkit2/dvd_reader.h"
9aca112abac7 1000l - libmpdvdkit2 fix, thx Nexus
arpi
parents: 6651
diff changeset
265 #include "../libmpdvdkit2/ifo_types.h"
9aca112abac7 1000l - libmpdvdkit2 fix, thx Nexus
arpi
parents: 6651
diff changeset
266 #include "../libmpdvdkit2/ifo_read.h"
9aca112abac7 1000l - libmpdvdkit2 fix, thx Nexus
arpi
parents: 6651
diff changeset
267 #include "../libmpdvdkit2/nav_read.h"
9aca112abac7 1000l - libmpdvdkit2 fix, thx Nexus
arpi
parents: 6651
diff changeset
268 #else
5819
194bca17117b DVDKIT support
arpi
parents: 5471
diff changeset
269 #include "../libmpdvdkit/dvd_reader.h"
194bca17117b DVDKIT support
arpi
parents: 5471
diff changeset
270 #include "../libmpdvdkit/ifo_types.h"
194bca17117b DVDKIT support
arpi
parents: 5471
diff changeset
271 #include "../libmpdvdkit/ifo_read.h"
194bca17117b DVDKIT support
arpi
parents: 5471
diff changeset
272 #include "../libmpdvdkit/nav_read.h"
7196
9aca112abac7 1000l - libmpdvdkit2 fix, thx Nexus
arpi
parents: 6651
diff changeset
273 #endif
5819
194bca17117b DVDKIT support
arpi
parents: 5471
diff changeset
274 #else
2935
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
275 #include <dvdread/dvd_reader.h>
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
276 #include <dvdread/ifo_types.h>
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
277 #include <dvdread/ifo_read.h>
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
278 #include <dvdread/nav_read.h>
5819
194bca17117b DVDKIT support
arpi
parents: 5471
diff changeset
279 #endif
2935
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
280
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
281 typedef struct {
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
282 int id; // 0 - 31 mpeg; 128 - 159 ac3; 160 - 191 pcm
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
283 int language;
6651
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6623
diff changeset
284 int type;
8f49c75a2824 - add icon (nice, but very ugly hakk:)
pontscho
parents: 6623
diff changeset
285 int channels;
3751
d9d2ee82a243 subtitle_t + audio_stream_t -> stream_language_t (cleanup)
arpi
parents: 3726
diff changeset
286 } stream_language_t;
3048
b01551d725d4 add subtitle language detect.
pontscho
parents: 3043
diff changeset
287
b01551d725d4 add subtitle language detect.
pontscho
parents: 3043
diff changeset
288 typedef struct {
2935
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
289 dvd_reader_t *dvd;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
290 dvd_file_t *title;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
291 ifo_handle_t *vmg_file;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
292 tt_srpt_t *tt_srpt;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
293 ifo_handle_t *vts_file;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
294 vts_ptt_srpt_t *vts_ptt_srpt;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
295 pgc_t *cur_pgc;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
296 //
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
297 int cur_cell;
4291
e889d37f25b2 Add option -last-chapter for DVD playing/encoding
kmkaplan
parents: 4189
diff changeset
298 int last_cell;
2935
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
299 int cur_pack;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
300 int cell_last_pack;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
301 // Navi:
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
302 int packs_left;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
303 dsi_t dsi_pack;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
304 int angle_seek;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
305 // audio datas
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
306 int nr_of_channels;
3751
d9d2ee82a243 subtitle_t + audio_stream_t -> stream_language_t (cleanup)
arpi
parents: 3726
diff changeset
307 stream_language_t audio_streams[32];
3048
b01551d725d4 add subtitle language detect.
pontscho
parents: 3043
diff changeset
308 // subtitles
b01551d725d4 add subtitle language detect.
pontscho
parents: 3043
diff changeset
309 int nr_of_subtitles;
3751
d9d2ee82a243 subtitle_t + audio_stream_t -> stream_language_t (cleanup)
arpi
parents: 3726
diff changeset
310 stream_language_t subtitles[32];
2935
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
311 } dvd_priv_t;
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
312
3753
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3751
diff changeset
313 int dvd_aid_from_lang(stream_t *stream, unsigned char* lang);
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3751
diff changeset
314 int dvd_sid_from_lang(stream_t *stream, unsigned char* lang);
7854
d6c29d863f15 dvd chapter detect function from Gregory Kovriga
pontscho
parents: 7630
diff changeset
315 int dvd_chapter_from_cell(dvd_priv_t *dvd,int title,int cell);
3753
d3fc41a04cb7 dvd language->aid/sid functions
arpi
parents: 3751
diff changeset
316
2935
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
317 #endif
bc6cb25ad067 add dvd audio stream detect
pontscho
parents: 2790
diff changeset
318
998
8c83e3ff26cc Added ifndef to prevent multiple header file inclusion.
bertrand
parents: 692
diff changeset
319 #endif // __STREAM_H