Mercurial > libavformat.hg
annotate avio.h @ 584:4e3bab6555ae libavformat
When playing
ftp://ftp.mplayerhq.hu/MPlayer/samples/V-codecs/QPEG/VWbig6.avi with my
decoder (should appear soon) it hadn't changed palette even there are
palette change chunks in that AVI.
Here is small patch to make it work (zero number of colors to change in
that chunk actually means to change ALL colors).
patch by (Kostya <cannonball>at<bw-team>dot<com>)
author | michael |
---|---|
date | Fri, 12 Nov 2004 01:32:35 +0000 |
parents | e1f17fcfb92c |
children | cdb845a57ae4 |
rev | line source |
---|---|
0 | 1 #ifndef AVIO_H |
2 #define AVIO_H | |
3 | |
4 /* output byte stream handling */ | |
5 | |
65 | 6 typedef int64_t offset_t; |
0 | 7 |
8 /* unbuffered I/O */ | |
9 | |
10 struct URLContext { | |
11 struct URLProtocol *prot; | |
12 int flags; | |
13 int is_streamed; /* true if streamed (no seek possible), default = false */ | |
14 int max_packet_size; /* if non zero, the stream is packetized with this max packet size */ | |
15 void *priv_data; | |
19 | 16 char filename[1]; /* specified filename */ |
0 | 17 }; |
18 | |
19 typedef struct URLContext URLContext; | |
20 | |
21 typedef struct URLPollEntry { | |
22 URLContext *handle; | |
23 int events; | |
24 int revents; | |
25 } URLPollEntry; | |
26 | |
27 #define URL_RDONLY 0 | |
28 #define URL_WRONLY 1 | |
29 #define URL_RDWR 2 | |
30 | |
177 | 31 typedef int URLInterruptCB(void); |
32 | |
0 | 33 int url_open(URLContext **h, const char *filename, int flags); |
34 int url_read(URLContext *h, unsigned char *buf, int size); | |
35 int url_write(URLContext *h, unsigned char *buf, int size); | |
36 offset_t url_seek(URLContext *h, offset_t pos, int whence); | |
37 int url_close(URLContext *h); | |
38 int url_exist(const char *filename); | |
39 offset_t url_filesize(URLContext *h); | |
40 int url_get_max_packet_size(URLContext *h); | |
19 | 41 void url_get_filename(URLContext *h, char *buf, int buf_size); |
42 | |
177 | 43 /* the callback is called in blocking functions to test regulary if |
44 asynchronous interruption is needed. -EINTR is returned in this | |
45 case by the interrupted function. 'NULL' means no interrupt | |
46 callback is given. */ | |
47 void url_set_interrupt_cb(URLInterruptCB *interrupt_cb); | |
48 | |
0 | 49 /* not implemented */ |
50 int url_poll(URLPollEntry *poll_table, int n, int timeout); | |
51 | |
52 typedef struct URLProtocol { | |
53 const char *name; | |
54 int (*url_open)(URLContext *h, const char *filename, int flags); | |
55 int (*url_read)(URLContext *h, unsigned char *buf, int size); | |
56 int (*url_write)(URLContext *h, unsigned char *buf, int size); | |
57 offset_t (*url_seek)(URLContext *h, offset_t pos, int whence); | |
58 int (*url_close)(URLContext *h); | |
59 struct URLProtocol *next; | |
60 } URLProtocol; | |
61 | |
62 extern URLProtocol *first_protocol; | |
177 | 63 extern URLInterruptCB *url_interrupt_cb; |
0 | 64 |
65 int register_protocol(URLProtocol *protocol); | |
66 | |
67 typedef struct { | |
68 unsigned char *buffer; | |
69 int buffer_size; | |
70 unsigned char *buf_ptr, *buf_end; | |
71 void *opaque; | |
65 | 72 int (*read_packet)(void *opaque, uint8_t *buf, int buf_size); |
554 | 73 int (*write_packet)(void *opaque, uint8_t *buf, int buf_size); |
0 | 74 int (*seek)(void *opaque, offset_t offset, int whence); |
75 offset_t pos; /* position in the file of the current buffer */ | |
76 int must_flush; /* true if the next seek should flush */ | |
77 int eof_reached; /* true if eof reached */ | |
78 int write_flag; /* true if open for writing */ | |
79 int is_streamed; | |
80 int max_packet_size; | |
418
41da3366d341
checksuming for nut & nice checksum API for libavformat
michael
parents:
389
diff
changeset
|
81 unsigned long checksum; |
41da3366d341
checksuming for nut & nice checksum API for libavformat
michael
parents:
389
diff
changeset
|
82 unsigned char *checksum_ptr; |
41da3366d341
checksuming for nut & nice checksum API for libavformat
michael
parents:
389
diff
changeset
|
83 unsigned long (*update_checksum)(unsigned long checksum, const uint8_t *buf, unsigned int size); |
554 | 84 int error; ///< contains the error code or 0 if no error happened |
0 | 85 } ByteIOContext; |
86 | |
87 int init_put_byte(ByteIOContext *s, | |
88 unsigned char *buffer, | |
89 int buffer_size, | |
90 int write_flag, | |
91 void *opaque, | |
65 | 92 int (*read_packet)(void *opaque, uint8_t *buf, int buf_size), |
554 | 93 int (*write_packet)(void *opaque, uint8_t *buf, int buf_size), |
0 | 94 int (*seek)(void *opaque, offset_t offset, int whence)); |
95 | |
96 void put_byte(ByteIOContext *s, int b); | |
97 void put_buffer(ByteIOContext *s, const unsigned char *buf, int size); | |
65 | 98 void put_le64(ByteIOContext *s, uint64_t val); |
99 void put_be64(ByteIOContext *s, uint64_t val); | |
0 | 100 void put_le32(ByteIOContext *s, unsigned int val); |
101 void put_be32(ByteIOContext *s, unsigned int val); | |
102 void put_le16(ByteIOContext *s, unsigned int val); | |
103 void put_be16(ByteIOContext *s, unsigned int val); | |
104 void put_tag(ByteIOContext *s, const char *tag); | |
105 | |
106 void put_be64_double(ByteIOContext *s, double val); | |
107 void put_strz(ByteIOContext *s, const char *buf); | |
108 | |
109 offset_t url_fseek(ByteIOContext *s, offset_t offset, int whence); | |
110 void url_fskip(ByteIOContext *s, offset_t offset); | |
111 offset_t url_ftell(ByteIOContext *s); | |
112 int url_feof(ByteIOContext *s); | |
554 | 113 int url_ferror(ByteIOContext *s); |
0 | 114 |
115 #define URL_EOF (-1) | |
116 int url_fgetc(ByteIOContext *s); | |
206
3a493a2e5bba
libavformat/avio.h compilation problem in VisualC++ by (lethean at realtime dot ssu dot ac dot kr)
michaelni
parents:
177
diff
changeset
|
117 #ifdef __GNUC__ |
265
786e8286ea4a
Patch for attribute(printf) by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michaelni
parents:
206
diff
changeset
|
118 int url_fprintf(ByteIOContext *s, const char *fmt, ...) __attribute__ ((__format__ (__printf__, 2, 3))); |
206
3a493a2e5bba
libavformat/avio.h compilation problem in VisualC++ by (lethean at realtime dot ssu dot ac dot kr)
michaelni
parents:
177
diff
changeset
|
119 #else |
3a493a2e5bba
libavformat/avio.h compilation problem in VisualC++ by (lethean at realtime dot ssu dot ac dot kr)
michaelni
parents:
177
diff
changeset
|
120 int url_fprintf(ByteIOContext *s, const char *fmt, ...); |
3a493a2e5bba
libavformat/avio.h compilation problem in VisualC++ by (lethean at realtime dot ssu dot ac dot kr)
michaelni
parents:
177
diff
changeset
|
121 #endif |
0 | 122 char *url_fgets(ByteIOContext *s, char *buf, int buf_size); |
123 | |
124 void put_flush_packet(ByteIOContext *s); | |
125 | |
126 int get_buffer(ByteIOContext *s, unsigned char *buf, int size); | |
389
e14fcd57ad2f
decode latency patch by (Leon van Stuivenberg <l dot vanstuivenberg at chello dot nl>)
michael
parents:
265
diff
changeset
|
127 int get_partial_buffer(ByteIOContext *s, unsigned char *buf, int size); |
0 | 128 int get_byte(ByteIOContext *s); |
129 unsigned int get_le32(ByteIOContext *s); | |
65 | 130 uint64_t get_le64(ByteIOContext *s); |
0 | 131 unsigned int get_le16(ByteIOContext *s); |
132 | |
133 double get_be64_double(ByteIOContext *s); | |
134 char *get_strz(ByteIOContext *s, char *buf, int maxlen); | |
135 unsigned int get_be16(ByteIOContext *s); | |
136 unsigned int get_be32(ByteIOContext *s); | |
65 | 137 uint64_t get_be64(ByteIOContext *s); |
0 | 138 |
139 static inline int url_is_streamed(ByteIOContext *s) | |
140 { | |
141 return s->is_streamed; | |
142 } | |
143 | |
144 int url_fdopen(ByteIOContext *s, URLContext *h); | |
145 int url_setbufsize(ByteIOContext *s, int buf_size); | |
146 int url_fopen(ByteIOContext *s, const char *filename, int flags); | |
147 int url_fclose(ByteIOContext *s); | |
148 URLContext *url_fileno(ByteIOContext *s); | |
149 int url_fget_max_packet_size(ByteIOContext *s); | |
150 | |
65 | 151 int url_open_buf(ByteIOContext *s, uint8_t *buf, int buf_size, int flags); |
0 | 152 int url_close_buf(ByteIOContext *s); |
153 | |
154 int url_open_dyn_buf(ByteIOContext *s); | |
155 int url_open_dyn_packet_buf(ByteIOContext *s, int max_packet_size); | |
65 | 156 int url_close_dyn_buf(ByteIOContext *s, uint8_t **pbuffer); |
0 | 157 |
418
41da3366d341
checksuming for nut & nice checksum API for libavformat
michael
parents:
389
diff
changeset
|
158 unsigned long get_checksum(ByteIOContext *s); |
41da3366d341
checksuming for nut & nice checksum API for libavformat
michael
parents:
389
diff
changeset
|
159 void init_checksum(ByteIOContext *s, unsigned long (*update_checksum)(unsigned long c, const uint8_t *p, unsigned int len), unsigned long checksum); |
41da3366d341
checksuming for nut & nice checksum API for libavformat
michael
parents:
389
diff
changeset
|
160 unsigned long update_adler32(unsigned long adler, const uint8_t *buf, unsigned int len); |
41da3366d341
checksuming for nut & nice checksum API for libavformat
michael
parents:
389
diff
changeset
|
161 |
0 | 162 /* file.c */ |
163 extern URLProtocol file_protocol; | |
164 extern URLProtocol pipe_protocol; | |
165 | |
166 /* udp.c */ | |
167 extern URLProtocol udp_protocol; | |
168 int udp_set_remote_url(URLContext *h, const char *uri); | |
169 int udp_get_local_port(URLContext *h); | |
170 int udp_get_file_handle(URLContext *h); | |
171 | |
172 /* tcp.c */ | |
173 extern URLProtocol tcp_protocol; | |
174 | |
175 /* http.c */ | |
176 extern URLProtocol http_protocol; | |
177 | |
178 #endif | |
179 |