annotate libmpdemux/demuxer.h @ 4559:5dc383bb1c82

added mga_top_reserved module parameter to skip a configurable amount of space at the top of video memory. this is needed to prevent corruption of the kernel's console font when using the "fastfont" option with matroxfb.
author rfelker
date Thu, 07 Feb 2002 02:07:29 +0000
parents 716b00618bfc
children e534c7dc0cc0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
1
647
feffffff5d0e demux buffer increased 4m->8m
arpi_esp
parents: 589
diff changeset
2 #define MAX_PACKS 4096
feffffff5d0e demux buffer increased 4m->8m
arpi_esp
parents: 589
diff changeset
3 #define MAX_PACK_BYTES 0x800000
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
4
62f483490686 sorry...
arpi_esp
parents:
diff changeset
5 #define DEMUXER_TYPE_UNKNOWN 0
62f483490686 sorry...
arpi_esp
parents:
diff changeset
6 #define DEMUXER_TYPE_MPEG_ES 1
62f483490686 sorry...
arpi_esp
parents:
diff changeset
7 #define DEMUXER_TYPE_MPEG_PS 2
62f483490686 sorry...
arpi_esp
parents:
diff changeset
8 #define DEMUXER_TYPE_AVI 3
62f483490686 sorry...
arpi_esp
parents:
diff changeset
9 #define DEMUXER_TYPE_AVI_NI 4
62f483490686 sorry...
arpi_esp
parents:
diff changeset
10 #define DEMUXER_TYPE_AVI_NINI 5
62f483490686 sorry...
arpi_esp
parents:
diff changeset
11 #define DEMUXER_TYPE_ASF 6
1490
71424eb2b282 MOV file support - not works yet
arpi
parents: 1485
diff changeset
12 #define DEMUXER_TYPE_MOV 7
2687
8c75a9a639c1 vivo demuxer
arpi
parents: 2555
diff changeset
13 #define DEMUXER_TYPE_VIVO 8
2790
98769cea155c added tv subsystem
alex
parents: 2687
diff changeset
14 #define DEMUXER_TYPE_TV 9
3101
637e540831b9 mostly complete support for loading and decoding FLI/FLC animations
melanson
parents: 3071
diff changeset
15 #define DEMUXER_TYPE_FLI 10
3777
026ccd3dc489 added real demuxer
alex
parents: 3101
diff changeset
16 #define DEMUXER_TYPE_REAL 11
3786
7ebf504c92d6 yuv4mpeg2 (mjpegtools) support by Rik Snel <rsnel@cube.dyndns.org>
arpi
parents: 3777
diff changeset
17 #define DEMUXER_TYPE_Y4M 12
3801
3cea69dda1b3 added NuppelVideo demuxer, based on Panagiotis Issaris' patch
alex
parents: 3786
diff changeset
18 #define DEMUXER_TYPE_NUV 13
4189
6871d97e4261 initial support for FILM file demuxing
melanson
parents: 3801
diff changeset
19 #define DEMUXER_TYPE_FILM 14
4451
5627d5b58083 implemented RoQ file demuxing
melanson
parents: 4189
diff changeset
20 #define DEMUXER_TYPE_ROQ 15
4551
716b00618bfc add mfi support
pontscho
parents: 4451
diff changeset
21 #define DEMUXER_TYPE_MF 16
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
22
62f483490686 sorry...
arpi_esp
parents:
diff changeset
23 #define DEMUXER_TIME_NONE 0
62f483490686 sorry...
arpi_esp
parents:
diff changeset
24 #define DEMUXER_TIME_PTS 1
62f483490686 sorry...
arpi_esp
parents:
diff changeset
25 #define DEMUXER_TIME_FILE 2
62f483490686 sorry...
arpi_esp
parents:
diff changeset
26 #define DEMUXER_TIME_BPS 3
62f483490686 sorry...
arpi_esp
parents:
diff changeset
27
62f483490686 sorry...
arpi_esp
parents:
diff changeset
28
1428
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1375
diff changeset
29 // Holds one packet/frame/whatever
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
30 typedef struct demux_packet_st {
62f483490686 sorry...
arpi_esp
parents:
diff changeset
31 int len;
62f483490686 sorry...
arpi_esp
parents:
diff changeset
32 float pts;
1485
b895f95e7657 AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents: 1428
diff changeset
33 off_t pos; // position in index (AVI) or file (MPG)
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
34 unsigned char* buffer;
979
3bcc435cd5a2 keyframe flag added
arpi_esp
parents: 889
diff changeset
35 int flags; // keyframe, etc
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
36 struct demux_packet_st* next;
62f483490686 sorry...
arpi_esp
parents:
diff changeset
37 } demux_packet_t;
62f483490686 sorry...
arpi_esp
parents:
diff changeset
38
62f483490686 sorry...
arpi_esp
parents:
diff changeset
39 typedef struct {
62f483490686 sorry...
arpi_esp
parents:
diff changeset
40 int buffer_pos; // current buffer position
62f483490686 sorry...
arpi_esp
parents:
diff changeset
41 int buffer_size; // current buffer size
62f483490686 sorry...
arpi_esp
parents:
diff changeset
42 unsigned char* buffer; // current buffer
62f483490686 sorry...
arpi_esp
parents:
diff changeset
43 float pts; // current buffer's pts
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 647
diff changeset
44 int pts_bytes; // number of bytes read after last pts stamp
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
45 int eof; // end of demuxed stream? (true if all buffer empty)
1428
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1375
diff changeset
46 off_t pos; // position in the input stream (file)
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1375
diff changeset
47 off_t dpos; // position in the demuxed stream
889
1b905517c684 AVI -bps desync problem solved
arpi_esp
parents: 746
diff changeset
48 int pack_no; // serial number of packet
979
3bcc435cd5a2 keyframe flag added
arpi_esp
parents: 889
diff changeset
49 int flags; // flags of current packet (keyframe etc)
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
50 //---------------
62f483490686 sorry...
arpi_esp
parents:
diff changeset
51 int packs; // number of packets in buffer
62f483490686 sorry...
arpi_esp
parents:
diff changeset
52 int bytes; // total bytes of packets in buffer
62f483490686 sorry...
arpi_esp
parents:
diff changeset
53 demux_packet_t *first; // read to current buffer from here
62f483490686 sorry...
arpi_esp
parents:
diff changeset
54 demux_packet_t *last; // append new packets from input stream to here
62f483490686 sorry...
arpi_esp
parents:
diff changeset
55 int id; // stream ID (for multiple audio/video streams)
62f483490686 sorry...
arpi_esp
parents:
diff changeset
56 struct demuxer_st *demuxer; // parent demuxer structure (stream handler)
62f483490686 sorry...
arpi_esp
parents:
diff changeset
57 // ---- asf -----
62f483490686 sorry...
arpi_esp
parents:
diff changeset
58 demux_packet_t *asf_packet; // read asf fragments here
62f483490686 sorry...
arpi_esp
parents:
diff changeset
59 int asf_seq;
2419
24ba3dfb8e89 compressed mov audio fixed
arpi
parents: 2310
diff changeset
60 // ---- mov -----
24ba3dfb8e89 compressed mov audio fixed
arpi
parents: 2310
diff changeset
61 unsigned int ss_mul,ss_div;
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
62 // ---- stream header ----
62f483490686 sorry...
arpi_esp
parents:
diff changeset
63 void* sh;
62f483490686 sorry...
arpi_esp
parents:
diff changeset
64 } demux_stream_t;
62f483490686 sorry...
arpi_esp
parents:
diff changeset
65
3050
9ed968c05954 added demuxer_info
alex
parents: 2790
diff changeset
66 typedef struct demuxer_info_st {
9ed968c05954 added demuxer_info
alex
parents: 2790
diff changeset
67 char *name;
9ed968c05954 added demuxer_info
alex
parents: 2790
diff changeset
68 char *author;
9ed968c05954 added demuxer_info
alex
parents: 2790
diff changeset
69 char *encoder;
9ed968c05954 added demuxer_info
alex
parents: 2790
diff changeset
70 char *comments;
3071
a5f378f982cc added demux_info
alex
parents: 3050
diff changeset
71 char *copyright;
3050
9ed968c05954 added demuxer_info
alex
parents: 2790
diff changeset
72 } demuxer_info_t;
9ed968c05954 added demuxer_info
alex
parents: 2790
diff changeset
73
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
74 typedef struct demuxer_st {
62f483490686 sorry...
arpi_esp
parents:
diff changeset
75 stream_t *stream;
62f483490686 sorry...
arpi_esp
parents:
diff changeset
76 int synced; // stream synced (used by mpeg)
1428
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1375
diff changeset
77 off_t filepos; // input stream current pos.
1375
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
78 int type; // demuxer type: mpeg PS, mpeg ES, avi, avi-ni, avi-nini, asf
dbcb5b5e1fae file-format detection stuff moved out from mplayer.c to demuxer.c and dec_video.c
arpi
parents: 1331
diff changeset
79 int file_format; // file format: mpeg/avi/asf
1428
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1375
diff changeset
80 off_t movi_start;
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1375
diff changeset
81 off_t movi_end;
1623
5908dd344067 added demuxer->seekable flag to generalize seeking ability test
arpi
parents: 1496
diff changeset
82 int seekable; // flag
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
83 //
1485
b895f95e7657 AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents: 1428
diff changeset
84 demux_stream_t *audio; // audio buffer/demuxer
b895f95e7657 AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents: 1428
diff changeset
85 demux_stream_t *video; // video buffer/demuxer
b895f95e7657 AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents: 1428
diff changeset
86 demux_stream_t *sub; // dvd subtitle buffer/demuxer
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
87
62f483490686 sorry...
arpi_esp
parents:
diff changeset
88 // stream headers:
1485
b895f95e7657 AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents: 1428
diff changeset
89 void* a_streams[256]; // audio streams (sh_audio_t)
b895f95e7657 AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents: 1428
diff changeset
90 void* v_streams[256]; // video sterams (sh_video_t)
b895f95e7657 AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents: 1428
diff changeset
91 char s_streams[32]; // dvd subtitles (flag)
b895f95e7657 AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents: 1428
diff changeset
92
b895f95e7657 AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents: 1428
diff changeset
93 void* priv; // fileformat-dependent data
3050
9ed968c05954 added demuxer_info
alex
parents: 2790
diff changeset
94 demuxer_info_t info;
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
95 } demuxer_t;
62f483490686 sorry...
arpi_esp
parents:
diff changeset
96
62f483490686 sorry...
arpi_esp
parents:
diff changeset
97 inline static demux_packet_t* new_demux_packet(int len){
62f483490686 sorry...
arpi_esp
parents:
diff changeset
98 demux_packet_t* dp=malloc(sizeof(demux_packet_t));
62f483490686 sorry...
arpi_esp
parents:
diff changeset
99 dp->len=len;
62f483490686 sorry...
arpi_esp
parents:
diff changeset
100 dp->buffer=malloc(len);
62f483490686 sorry...
arpi_esp
parents:
diff changeset
101 dp->next=NULL;
62f483490686 sorry...
arpi_esp
parents:
diff changeset
102 dp->pts=0;
62f483490686 sorry...
arpi_esp
parents:
diff changeset
103 dp->pos=0;
979
3bcc435cd5a2 keyframe flag added
arpi_esp
parents: 889
diff changeset
104 dp->flags=0;
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
105 return dp;
62f483490686 sorry...
arpi_esp
parents:
diff changeset
106 }
62f483490686 sorry...
arpi_esp
parents:
diff changeset
107
62f483490686 sorry...
arpi_esp
parents:
diff changeset
108 inline static void free_demux_packet(demux_packet_t* dp){
62f483490686 sorry...
arpi_esp
parents:
diff changeset
109 free(dp->buffer);
62f483490686 sorry...
arpi_esp
parents:
diff changeset
110 free(dp);
62f483490686 sorry...
arpi_esp
parents:
diff changeset
111 }
62f483490686 sorry...
arpi_esp
parents:
diff changeset
112
62f483490686 sorry...
arpi_esp
parents:
diff changeset
113 demux_stream_t* new_demuxer_stream(struct demuxer_st *demuxer,int id);
62f483490686 sorry...
arpi_esp
parents:
diff changeset
114 demuxer_t* new_demuxer(stream_t *stream,int type,int a_id,int v_id,int s_id);
1643
76835bed88ca free demux/ds/sh
arpi
parents: 1623
diff changeset
115 void free_demuxer_stream(demux_stream_t *ds);
76835bed88ca free demux/ds/sh
arpi
parents: 1623
diff changeset
116 void free_demuxer(demuxer_t *demuxer);
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
117
62f483490686 sorry...
arpi_esp
parents:
diff changeset
118 void ds_add_packet(demux_stream_t *ds,demux_packet_t* dp);
1428
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1375
diff changeset
119 void ds_read_packet(demux_stream_t *ds,stream_t *stream,int len,float pts,off_t pos,int flags);
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
120
62f483490686 sorry...
arpi_esp
parents:
diff changeset
121 int demux_fill_buffer(demuxer_t *demux,demux_stream_t *ds);
62f483490686 sorry...
arpi_esp
parents:
diff changeset
122 int ds_fill_buffer(demux_stream_t *ds);
62f483490686 sorry...
arpi_esp
parents:
diff changeset
123
1428
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1375
diff changeset
124 inline static off_t ds_tell(demux_stream_t *ds){
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
125 return (ds->dpos-ds->buffer_size)+ds->buffer_pos;
62f483490686 sorry...
arpi_esp
parents:
diff changeset
126 }
62f483490686 sorry...
arpi_esp
parents:
diff changeset
127
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 647
diff changeset
128 inline static int ds_tell_pts(demux_stream_t *ds){
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 647
diff changeset
129 return (ds->pts_bytes-ds->buffer_size)+ds->buffer_pos;
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 647
diff changeset
130 }
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 647
diff changeset
131
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
132 int demux_read_data(demux_stream_t *ds,unsigned char* mem,int len);
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 647
diff changeset
133 int demux_read_data_pack(demux_stream_t *ds,unsigned char* mem,int len);
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
134
62f483490686 sorry...
arpi_esp
parents:
diff changeset
135 #if 1
62f483490686 sorry...
arpi_esp
parents:
diff changeset
136 #define demux_getc(ds) (\
62f483490686 sorry...
arpi_esp
parents:
diff changeset
137 (ds->buffer_pos<ds->buffer_size) ? ds->buffer[ds->buffer_pos++] \
62f483490686 sorry...
arpi_esp
parents:
diff changeset
138 :((!ds_fill_buffer(ds))? (-1) : ds->buffer[ds->buffer_pos++] ) )
62f483490686 sorry...
arpi_esp
parents:
diff changeset
139 #else
62f483490686 sorry...
arpi_esp
parents:
diff changeset
140 inline static int demux_getc(demux_stream_t *ds){
62f483490686 sorry...
arpi_esp
parents:
diff changeset
141 if(ds->buffer_pos>=ds->buffer_size){
62f483490686 sorry...
arpi_esp
parents:
diff changeset
142 if(!ds_fill_buffer(ds)){
62f483490686 sorry...
arpi_esp
parents:
diff changeset
143 // printf("DEMUX_GETC: EOF reached!\n");
62f483490686 sorry...
arpi_esp
parents:
diff changeset
144 return -1; // EOF
62f483490686 sorry...
arpi_esp
parents:
diff changeset
145 }
62f483490686 sorry...
arpi_esp
parents:
diff changeset
146 }
62f483490686 sorry...
arpi_esp
parents:
diff changeset
147 // printf("[%02X]",ds->buffer[ds->buffer_pos]);
62f483490686 sorry...
arpi_esp
parents:
diff changeset
148 return ds->buffer[ds->buffer_pos++];
62f483490686 sorry...
arpi_esp
parents:
diff changeset
149 }
62f483490686 sorry...
arpi_esp
parents:
diff changeset
150 #endif
62f483490686 sorry...
arpi_esp
parents:
diff changeset
151
62f483490686 sorry...
arpi_esp
parents:
diff changeset
152 void ds_free_packs(demux_stream_t *ds);
62f483490686 sorry...
arpi_esp
parents:
diff changeset
153 int ds_get_packet(demux_stream_t *ds,unsigned char **start);
62f483490686 sorry...
arpi_esp
parents:
diff changeset
154 int ds_get_packet_sub(demux_stream_t *ds,unsigned char **start);
62f483490686 sorry...
arpi_esp
parents:
diff changeset
155
62f483490686 sorry...
arpi_esp
parents:
diff changeset
156
62f483490686 sorry...
arpi_esp
parents:
diff changeset
157 static inline int avi_stream_id(unsigned int id){
62f483490686 sorry...
arpi_esp
parents:
diff changeset
158 unsigned char *p=(unsigned char *)&id;
62f483490686 sorry...
arpi_esp
parents:
diff changeset
159 unsigned char a,b;
1309
598e3047ce13 Add some preliminary support for non-x86 architectures to mplayer
jkeil
parents: 979
diff changeset
160 #if WORDS_BIGENDIAN
598e3047ce13 Add some preliminary support for non-x86 architectures to mplayer
jkeil
parents: 979
diff changeset
161 a=p[3]-'0'; b=p[2]-'0';
598e3047ce13 Add some preliminary support for non-x86 architectures to mplayer
jkeil
parents: 979
diff changeset
162 #else
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
163 a=p[0]-'0'; b=p[1]-'0';
1309
598e3047ce13 Add some preliminary support for non-x86 architectures to mplayer
jkeil
parents: 979
diff changeset
164 #endif
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
165 if(a>9 || b>9) return 100; // invalid ID
62f483490686 sorry...
arpi_esp
parents:
diff changeset
166 return a*10+b;
62f483490686 sorry...
arpi_esp
parents:
diff changeset
167 }
62f483490686 sorry...
arpi_esp
parents:
diff changeset
168
1496
8c3e93ef116d cleanup...
arpi
parents: 1490
diff changeset
169 demuxer_t* demux_open(stream_t *stream,int file_format,int aid,int vid,int sid);
8c3e93ef116d cleanup...
arpi
parents: 1490
diff changeset
170 int demux_seek(demuxer_t *demuxer,float rel_seek_secs,int flags);
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
171
2555
66837325b929 config.h cleanup, few things added to steram/demuxer headers
arpi
parents: 2419
diff changeset
172 // AVI demuxer params:
66837325b929 config.h cleanup, few things added to steram/demuxer headers
arpi
parents: 2419
diff changeset
173 extern int index_mode; // -1=untouched 0=don't use index 1=use (geneate) index
66837325b929 config.h cleanup, few things added to steram/demuxer headers
arpi
parents: 2419
diff changeset
174 extern int force_ni;
66837325b929 config.h cleanup, few things added to steram/demuxer headers
arpi
parents: 2419
diff changeset
175 extern int pts_from_bps;
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
176
3071
a5f378f982cc added demux_info
alex
parents: 3050
diff changeset
177 int demux_info_add(demuxer_t *demuxer, char *opt, char *param);
a5f378f982cc added demux_info
alex
parents: 3050
diff changeset
178 int demux_info_print(demuxer_t *demuxer);