annotate libmpdemux/demuxer.h @ 2694:2924350d92ed

bgr32to16, bgr32to15 (needed for palette stuff) paletteto 32,16,15bgr all in c, will be optimized as soon as they are tested (assuming opt. is possible)
author michael
date Sun, 04 Nov 2001 19:36:24 +0000
parents 8c75a9a639c1
children 98769cea155c
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
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
14
62f483490686 sorry...
arpi_esp
parents:
diff changeset
15 #define DEMUXER_TIME_NONE 0
62f483490686 sorry...
arpi_esp
parents:
diff changeset
16 #define DEMUXER_TIME_PTS 1
62f483490686 sorry...
arpi_esp
parents:
diff changeset
17 #define DEMUXER_TIME_FILE 2
62f483490686 sorry...
arpi_esp
parents:
diff changeset
18 #define DEMUXER_TIME_BPS 3
62f483490686 sorry...
arpi_esp
parents:
diff changeset
19
62f483490686 sorry...
arpi_esp
parents:
diff changeset
20
1428
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1375
diff changeset
21 // Holds one packet/frame/whatever
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
22 typedef struct demux_packet_st {
62f483490686 sorry...
arpi_esp
parents:
diff changeset
23 int len;
62f483490686 sorry...
arpi_esp
parents:
diff changeset
24 float pts;
1485
b895f95e7657 AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents: 1428
diff changeset
25 off_t pos; // position in index (AVI) or file (MPG)
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
26 unsigned char* buffer;
979
3bcc435cd5a2 keyframe flag added
arpi_esp
parents: 889
diff changeset
27 int flags; // keyframe, etc
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
28 struct demux_packet_st* next;
62f483490686 sorry...
arpi_esp
parents:
diff changeset
29 } demux_packet_t;
62f483490686 sorry...
arpi_esp
parents:
diff changeset
30
62f483490686 sorry...
arpi_esp
parents:
diff changeset
31 typedef struct {
62f483490686 sorry...
arpi_esp
parents:
diff changeset
32 int buffer_pos; // current buffer position
62f483490686 sorry...
arpi_esp
parents:
diff changeset
33 int buffer_size; // current buffer size
62f483490686 sorry...
arpi_esp
parents:
diff changeset
34 unsigned char* buffer; // current buffer
62f483490686 sorry...
arpi_esp
parents:
diff changeset
35 float pts; // current buffer's pts
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 647
diff changeset
36 int pts_bytes; // number of bytes read after last pts stamp
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
37 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
38 off_t pos; // position in the input stream (file)
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1375
diff changeset
39 off_t dpos; // position in the demuxed stream
889
1b905517c684 AVI -bps desync problem solved
arpi_esp
parents: 746
diff changeset
40 int pack_no; // serial number of packet
979
3bcc435cd5a2 keyframe flag added
arpi_esp
parents: 889
diff changeset
41 int flags; // flags of current packet (keyframe etc)
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
42 //---------------
62f483490686 sorry...
arpi_esp
parents:
diff changeset
43 int packs; // number of packets in buffer
62f483490686 sorry...
arpi_esp
parents:
diff changeset
44 int bytes; // total bytes of packets in buffer
62f483490686 sorry...
arpi_esp
parents:
diff changeset
45 demux_packet_t *first; // read to current buffer from here
62f483490686 sorry...
arpi_esp
parents:
diff changeset
46 demux_packet_t *last; // append new packets from input stream to here
62f483490686 sorry...
arpi_esp
parents:
diff changeset
47 int id; // stream ID (for multiple audio/video streams)
62f483490686 sorry...
arpi_esp
parents:
diff changeset
48 struct demuxer_st *demuxer; // parent demuxer structure (stream handler)
62f483490686 sorry...
arpi_esp
parents:
diff changeset
49 // ---- asf -----
62f483490686 sorry...
arpi_esp
parents:
diff changeset
50 demux_packet_t *asf_packet; // read asf fragments here
62f483490686 sorry...
arpi_esp
parents:
diff changeset
51 int asf_seq;
2419
24ba3dfb8e89 compressed mov audio fixed
arpi
parents: 2310
diff changeset
52 // ---- mov -----
24ba3dfb8e89 compressed mov audio fixed
arpi
parents: 2310
diff changeset
53 unsigned int ss_mul,ss_div;
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
54 // ---- stream header ----
62f483490686 sorry...
arpi_esp
parents:
diff changeset
55 void* sh;
62f483490686 sorry...
arpi_esp
parents:
diff changeset
56 } demux_stream_t;
62f483490686 sorry...
arpi_esp
parents:
diff changeset
57
62f483490686 sorry...
arpi_esp
parents:
diff changeset
58 typedef struct demuxer_st {
62f483490686 sorry...
arpi_esp
parents:
diff changeset
59 stream_t *stream;
62f483490686 sorry...
arpi_esp
parents:
diff changeset
60 int synced; // stream synced (used by mpeg)
1428
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1375
diff changeset
61 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
62 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
63 int file_format; // file format: mpeg/avi/asf
1428
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1375
diff changeset
64 off_t movi_start;
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1375
diff changeset
65 off_t movi_end;
1623
5908dd344067 added demuxer->seekable flag to generalize seeking ability test
arpi
parents: 1496
diff changeset
66 int seekable; // flag
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
67 //
1485
b895f95e7657 AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents: 1428
diff changeset
68 demux_stream_t *audio; // audio buffer/demuxer
b895f95e7657 AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents: 1428
diff changeset
69 demux_stream_t *video; // video buffer/demuxer
b895f95e7657 AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents: 1428
diff changeset
70 demux_stream_t *sub; // dvd subtitle buffer/demuxer
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
71
62f483490686 sorry...
arpi_esp
parents:
diff changeset
72 // stream headers:
1485
b895f95e7657 AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents: 1428
diff changeset
73 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
74 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
75 char s_streams[32]; // dvd subtitles (flag)
b895f95e7657 AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents: 1428
diff changeset
76
b895f95e7657 AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
arpi
parents: 1428
diff changeset
77 void* priv; // fileformat-dependent data
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
78 } demuxer_t;
62f483490686 sorry...
arpi_esp
parents:
diff changeset
79
62f483490686 sorry...
arpi_esp
parents:
diff changeset
80 inline static demux_packet_t* new_demux_packet(int len){
62f483490686 sorry...
arpi_esp
parents:
diff changeset
81 demux_packet_t* dp=malloc(sizeof(demux_packet_t));
62f483490686 sorry...
arpi_esp
parents:
diff changeset
82 dp->len=len;
62f483490686 sorry...
arpi_esp
parents:
diff changeset
83 dp->buffer=malloc(len);
62f483490686 sorry...
arpi_esp
parents:
diff changeset
84 dp->next=NULL;
62f483490686 sorry...
arpi_esp
parents:
diff changeset
85 dp->pts=0;
62f483490686 sorry...
arpi_esp
parents:
diff changeset
86 dp->pos=0;
979
3bcc435cd5a2 keyframe flag added
arpi_esp
parents: 889
diff changeset
87 dp->flags=0;
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
88 return dp;
62f483490686 sorry...
arpi_esp
parents:
diff changeset
89 }
62f483490686 sorry...
arpi_esp
parents:
diff changeset
90
62f483490686 sorry...
arpi_esp
parents:
diff changeset
91 inline static void free_demux_packet(demux_packet_t* dp){
62f483490686 sorry...
arpi_esp
parents:
diff changeset
92 free(dp->buffer);
62f483490686 sorry...
arpi_esp
parents:
diff changeset
93 free(dp);
62f483490686 sorry...
arpi_esp
parents:
diff changeset
94 }
62f483490686 sorry...
arpi_esp
parents:
diff changeset
95
62f483490686 sorry...
arpi_esp
parents:
diff changeset
96 demux_stream_t* new_demuxer_stream(struct demuxer_st *demuxer,int id);
62f483490686 sorry...
arpi_esp
parents:
diff changeset
97 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
98 void free_demuxer_stream(demux_stream_t *ds);
76835bed88ca free demux/ds/sh
arpi
parents: 1623
diff changeset
99 void free_demuxer(demuxer_t *demuxer);
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
100
62f483490686 sorry...
arpi_esp
parents:
diff changeset
101 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
102 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
103
62f483490686 sorry...
arpi_esp
parents:
diff changeset
104 int demux_fill_buffer(demuxer_t *demux,demux_stream_t *ds);
62f483490686 sorry...
arpi_esp
parents:
diff changeset
105 int ds_fill_buffer(demux_stream_t *ds);
62f483490686 sorry...
arpi_esp
parents:
diff changeset
106
1428
a90d889eb649 largefile patch by Stephen Davies <steve@daviesfam.org>
arpi
parents: 1375
diff changeset
107 inline static off_t ds_tell(demux_stream_t *ds){
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
108 return (ds->dpos-ds->buffer_size)+ds->buffer_pos;
62f483490686 sorry...
arpi_esp
parents:
diff changeset
109 }
62f483490686 sorry...
arpi_esp
parents:
diff changeset
110
746
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 647
diff changeset
111 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
112 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
113 }
cd1f0d4de0b8 new audio playback and A-V sync code
arpi_esp
parents: 647
diff changeset
114
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
115 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
116 int demux_read_data_pack(demux_stream_t *ds,unsigned char* mem,int len);
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
117
62f483490686 sorry...
arpi_esp
parents:
diff changeset
118 #if 1
62f483490686 sorry...
arpi_esp
parents:
diff changeset
119 #define demux_getc(ds) (\
62f483490686 sorry...
arpi_esp
parents:
diff changeset
120 (ds->buffer_pos<ds->buffer_size) ? ds->buffer[ds->buffer_pos++] \
62f483490686 sorry...
arpi_esp
parents:
diff changeset
121 :((!ds_fill_buffer(ds))? (-1) : ds->buffer[ds->buffer_pos++] ) )
62f483490686 sorry...
arpi_esp
parents:
diff changeset
122 #else
62f483490686 sorry...
arpi_esp
parents:
diff changeset
123 inline static int demux_getc(demux_stream_t *ds){
62f483490686 sorry...
arpi_esp
parents:
diff changeset
124 if(ds->buffer_pos>=ds->buffer_size){
62f483490686 sorry...
arpi_esp
parents:
diff changeset
125 if(!ds_fill_buffer(ds)){
62f483490686 sorry...
arpi_esp
parents:
diff changeset
126 // printf("DEMUX_GETC: EOF reached!\n");
62f483490686 sorry...
arpi_esp
parents:
diff changeset
127 return -1; // EOF
62f483490686 sorry...
arpi_esp
parents:
diff changeset
128 }
62f483490686 sorry...
arpi_esp
parents:
diff changeset
129 }
62f483490686 sorry...
arpi_esp
parents:
diff changeset
130 // printf("[%02X]",ds->buffer[ds->buffer_pos]);
62f483490686 sorry...
arpi_esp
parents:
diff changeset
131 return ds->buffer[ds->buffer_pos++];
62f483490686 sorry...
arpi_esp
parents:
diff changeset
132 }
62f483490686 sorry...
arpi_esp
parents:
diff changeset
133 #endif
62f483490686 sorry...
arpi_esp
parents:
diff changeset
134
62f483490686 sorry...
arpi_esp
parents:
diff changeset
135 void ds_free_packs(demux_stream_t *ds);
62f483490686 sorry...
arpi_esp
parents:
diff changeset
136 int ds_get_packet(demux_stream_t *ds,unsigned char **start);
62f483490686 sorry...
arpi_esp
parents:
diff changeset
137 int ds_get_packet_sub(demux_stream_t *ds,unsigned char **start);
62f483490686 sorry...
arpi_esp
parents:
diff changeset
138
62f483490686 sorry...
arpi_esp
parents:
diff changeset
139
62f483490686 sorry...
arpi_esp
parents:
diff changeset
140 static inline int avi_stream_id(unsigned int id){
62f483490686 sorry...
arpi_esp
parents:
diff changeset
141 unsigned char *p=(unsigned char *)&id;
62f483490686 sorry...
arpi_esp
parents:
diff changeset
142 unsigned char a,b;
1309
598e3047ce13 Add some preliminary support for non-x86 architectures to mplayer
jkeil
parents: 979
diff changeset
143 #if WORDS_BIGENDIAN
598e3047ce13 Add some preliminary support for non-x86 architectures to mplayer
jkeil
parents: 979
diff changeset
144 a=p[3]-'0'; b=p[2]-'0';
598e3047ce13 Add some preliminary support for non-x86 architectures to mplayer
jkeil
parents: 979
diff changeset
145 #else
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
146 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
147 #endif
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
148 if(a>9 || b>9) return 100; // invalid ID
62f483490686 sorry...
arpi_esp
parents:
diff changeset
149 return a*10+b;
62f483490686 sorry...
arpi_esp
parents:
diff changeset
150 }
62f483490686 sorry...
arpi_esp
parents:
diff changeset
151
1496
8c3e93ef116d cleanup...
arpi
parents: 1490
diff changeset
152 demuxer_t* demux_open(stream_t *stream,int file_format,int aid,int vid,int sid);
8c3e93ef116d cleanup...
arpi
parents: 1490
diff changeset
153 int demux_seek(demuxer_t *demuxer,float rel_seek_secs,int flags);
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
154
2555
66837325b929 config.h cleanup, few things added to steram/demuxer headers
arpi
parents: 2419
diff changeset
155 // AVI demuxer params:
66837325b929 config.h cleanup, few things added to steram/demuxer headers
arpi
parents: 2419
diff changeset
156 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
157 extern int force_ni;
66837325b929 config.h cleanup, few things added to steram/demuxer headers
arpi
parents: 2419
diff changeset
158 extern int pts_from_bps;
589
62f483490686 sorry...
arpi_esp
parents:
diff changeset
159
1643
76835bed88ca free demux/ds/sh
arpi
parents: 1623
diff changeset
160
2555
66837325b929 config.h cleanup, few things added to steram/demuxer headers
arpi
parents: 2419
diff changeset
161
66837325b929 config.h cleanup, few things added to steram/demuxer headers
arpi
parents: 2419
diff changeset
162