annotate avio.h @ 1206:e60bf67d9bf8 libavformat

The reader ignores the size of the ASF data object and keeps on reading even beyond it. Therefore if the ASF file includes an index object at its end, the reader will treat the index like data, but of course will fail since it thinks that the data is corrupted. When reading an asf file with an index object, ffmpeg will complain at the end of the file that it read an invalid header. Patch by Kohn Emil Dan, < emild A cs P technion P ac P il > Original thead: Date: Apr 18, 2006 4:11 PM Subject: [Ffmpeg-devel] Two ASF related bugs and fixes
author gpoirier
date Sat, 29 Jul 2006 16:07:19 +0000
parents bfea7dcd2698
children 8bf9be9bb107
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
1 #ifndef AVIO_H
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
2 #define AVIO_H
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
3
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
4 /* output byte stream handling */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
5
65
a58a8a53eb46 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 19
diff changeset
6 typedef int64_t offset_t;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
7
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
8 /* unbuffered I/O */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
9
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
10 struct URLContext {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
11 struct URLProtocol *prot;
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 823
diff changeset
12 int flags;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
13 int is_streamed; /* true if streamed (no seek possible), default = false */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
14 int max_packet_size; /* if non zero, the stream is packetized with this max packet size */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
15 void *priv_data;
19
81e87c8de3dc added url_get_filename()
bellard
parents: 0
diff changeset
16 char filename[1]; /* specified filename */
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
17 };
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
18
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
19 typedef struct URLContext URLContext;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
20
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
21 typedef struct URLPollEntry {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
22 URLContext *handle;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
23 int events;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
24 int revents;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
25 } URLPollEntry;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
26
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
27 #define URL_RDONLY 0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
28 #define URL_WRONLY 1
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
29 #define URL_RDWR 2
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
30
177
16c4e43f34e5 added primitive aborting system
bellard
parents: 65
diff changeset
31 typedef int URLInterruptCB(void);
16c4e43f34e5 added primitive aborting system
bellard
parents: 65
diff changeset
32
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
33 int url_open(URLContext **h, const char *filename, int flags);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
34 int url_read(URLContext *h, unsigned char *buf, int size);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
35 int url_write(URLContext *h, unsigned char *buf, int size);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
36 offset_t url_seek(URLContext *h, offset_t pos, int whence);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
37 int url_close(URLContext *h);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
38 int url_exist(const char *filename);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
39 offset_t url_filesize(URLContext *h);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
40 int url_get_max_packet_size(URLContext *h);
19
81e87c8de3dc added url_get_filename()
bellard
parents: 0
diff changeset
41 void url_get_filename(URLContext *h, char *buf, int buf_size);
81e87c8de3dc added url_get_filename()
bellard
parents: 0
diff changeset
42
177
16c4e43f34e5 added primitive aborting system
bellard
parents: 65
diff changeset
43 /* the callback is called in blocking functions to test regulary if
16c4e43f34e5 added primitive aborting system
bellard
parents: 65
diff changeset
44 asynchronous interruption is needed. -EINTR is returned in this
16c4e43f34e5 added primitive aborting system
bellard
parents: 65
diff changeset
45 case by the interrupted function. 'NULL' means no interrupt
16c4e43f34e5 added primitive aborting system
bellard
parents: 65
diff changeset
46 callback is given. */
16c4e43f34e5 added primitive aborting system
bellard
parents: 65
diff changeset
47 void url_set_interrupt_cb(URLInterruptCB *interrupt_cb);
16c4e43f34e5 added primitive aborting system
bellard
parents: 65
diff changeset
48
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
49 /* not implemented */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
50 int url_poll(URLPollEntry *poll_table, int n, int timeout);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
51
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
52 typedef struct URLProtocol {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
53 const char *name;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
54 int (*url_open)(URLContext *h, const char *filename, int flags);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
55 int (*url_read)(URLContext *h, unsigned char *buf, int size);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
56 int (*url_write)(URLContext *h, unsigned char *buf, int size);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
57 offset_t (*url_seek)(URLContext *h, offset_t pos, int whence);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
58 int (*url_close)(URLContext *h);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
59 struct URLProtocol *next;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
60 } URLProtocol;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
61
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
62 extern URLProtocol *first_protocol;
177
16c4e43f34e5 added primitive aborting system
bellard
parents: 65
diff changeset
63 extern URLInterruptCB *url_interrupt_cb;
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
64
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
65 int register_protocol(URLProtocol *protocol);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
66
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
67 typedef struct {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
68 unsigned char *buffer;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
69 int buffer_size;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
70 unsigned char *buf_ptr, *buf_end;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
71 void *opaque;
65
a58a8a53eb46 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 19
diff changeset
72 int (*read_packet)(void *opaque, uint8_t *buf, int buf_size);
554
e1f17fcfb92c write error handling
michael
parents: 418
diff changeset
73 int (*write_packet)(void *opaque, uint8_t *buf, int buf_size);
778
4fbe04f998bf Fix url_fsize for large files patch by (Wolfram Gloger: wmglo, dent med uni-muenchen de)
michael
parents: 764
diff changeset
74 offset_t (*seek)(void *opaque, offset_t offset, int whence);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
75 offset_t pos; /* position in the file of the current buffer */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
76 int must_flush; /* true if the next seek should flush */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
77 int eof_reached; /* true if eof reached */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
78 int write_flag; /* true if open for writing */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
79 int is_streamed;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
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
e1f17fcfb92c write error handling
michael
parents: 418
diff changeset
84 int error; ///< contains the error code or 0 if no error happened
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
85 } ByteIOContext;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
86
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
87 int init_put_byte(ByteIOContext *s,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
88 unsigned char *buffer,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
89 int buffer_size,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
90 int write_flag,
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
91 void *opaque,
65
a58a8a53eb46 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 19
diff changeset
92 int (*read_packet)(void *opaque, uint8_t *buf, int buf_size),
554
e1f17fcfb92c write error handling
michael
parents: 418
diff changeset
93 int (*write_packet)(void *opaque, uint8_t *buf, int buf_size),
778
4fbe04f998bf Fix url_fsize for large files patch by (Wolfram Gloger: wmglo, dent med uni-muenchen de)
michael
parents: 764
diff changeset
94 offset_t (*seek)(void *opaque, offset_t offset, int whence));
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
95
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
96 void put_byte(ByteIOContext *s, int b);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
97 void put_buffer(ByteIOContext *s, const unsigned char *buf, int size);
65
a58a8a53eb46 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 19
diff changeset
98 void put_le64(ByteIOContext *s, uint64_t val);
a58a8a53eb46 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 19
diff changeset
99 void put_be64(ByteIOContext *s, uint64_t val);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
100 void put_le32(ByteIOContext *s, unsigned int val);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
101 void put_be32(ByteIOContext *s, unsigned int val);
937
a887adfe9dc5 add a Creative VOC (de)muxer
aurel
parents: 885
diff changeset
102 void put_le24(ByteIOContext *s, unsigned int val);
822
2614d3c1f415 kill duplicated get/put_be24()
michael
parents: 778
diff changeset
103 void put_be24(ByteIOContext *s, unsigned int val);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
104 void put_le16(ByteIOContext *s, unsigned int val);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
105 void put_be16(ByteIOContext *s, unsigned int val);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
106 void put_tag(ByteIOContext *s, const char *tag);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
107
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
108 void put_strz(ByteIOContext *s, const char *buf);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
109
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
110 offset_t url_fseek(ByteIOContext *s, offset_t offset, int whence);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
111 void url_fskip(ByteIOContext *s, offset_t offset);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
112 offset_t url_ftell(ByteIOContext *s);
764
cdb845a57ae4 drop most url_fileno() calls (allows to use ByteIOContext directly in caller apps instead of URLProtocol)
aurel
parents: 554
diff changeset
113 offset_t url_fsize(ByteIOContext *s);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
114 int url_feof(ByteIOContext *s);
554
e1f17fcfb92c write error handling
michael
parents: 418
diff changeset
115 int url_ferror(ByteIOContext *s);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
116
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
117 #define URL_EOF (-1)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
118 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
119 #ifdef __GNUC__
265
786e8286ea4a Patch for attribute(printf) by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michaelni
parents: 206
diff changeset
120 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
121 #else
3a493a2e5bba libavformat/avio.h compilation problem in VisualC++ by (lethean at realtime dot ssu dot ac dot kr)
michaelni
parents: 177
diff changeset
122 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
123 #endif
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
124 char *url_fgets(ByteIOContext *s, char *buf, int buf_size);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
125
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
126 void put_flush_packet(ByteIOContext *s);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
127
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
128 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
129 int get_partial_buffer(ByteIOContext *s, unsigned char *buf, int size);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
130 int get_byte(ByteIOContext *s);
937
a887adfe9dc5 add a Creative VOC (de)muxer
aurel
parents: 885
diff changeset
131 unsigned int get_le24(ByteIOContext *s);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
132 unsigned int get_le32(ByteIOContext *s);
65
a58a8a53eb46 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 19
diff changeset
133 uint64_t get_le64(ByteIOContext *s);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
134 unsigned int get_le16(ByteIOContext *s);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
135
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
136 char *get_strz(ByteIOContext *s, char *buf, int maxlen);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
137 unsigned int get_be16(ByteIOContext *s);
822
2614d3c1f415 kill duplicated get/put_be24()
michael
parents: 778
diff changeset
138 unsigned int get_be24(ByteIOContext *s);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
139 unsigned int get_be32(ByteIOContext *s);
65
a58a8a53eb46 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 19
diff changeset
140 uint64_t get_be64(ByteIOContext *s);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
141
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
142 static inline int url_is_streamed(ByteIOContext *s)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
143 {
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
144 return s->is_streamed;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
145 }
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
146
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
147 int url_fdopen(ByteIOContext *s, URLContext *h);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
148 int url_setbufsize(ByteIOContext *s, int buf_size);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
149 int url_fopen(ByteIOContext *s, const char *filename, int flags);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
150 int url_fclose(ByteIOContext *s);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
151 URLContext *url_fileno(ByteIOContext *s);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
152 int url_fget_max_packet_size(ByteIOContext *s);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
153
65
a58a8a53eb46 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 19
diff changeset
154 int url_open_buf(ByteIOContext *s, uint8_t *buf, int buf_size, int flags);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
155 int url_close_buf(ByteIOContext *s);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
156
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
157 int url_open_dyn_buf(ByteIOContext *s);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
158 int url_open_dyn_packet_buf(ByteIOContext *s, int max_packet_size);
65
a58a8a53eb46 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 19
diff changeset
159 int url_close_dyn_buf(ByteIOContext *s, uint8_t **pbuffer);
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
160
418
41da3366d341 checksuming for nut & nice checksum API for libavformat
michael
parents: 389
diff changeset
161 unsigned long get_checksum(ByteIOContext *s);
41da3366d341 checksuming for nut & nice checksum API for libavformat
michael
parents: 389
diff changeset
162 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
163
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
164 /* file.c */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
165 extern URLProtocol file_protocol;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
166 extern URLProtocol pipe_protocol;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
167
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
168 /* udp.c */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
169 extern URLProtocol udp_protocol;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
170 int udp_set_remote_url(URLContext *h, const char *uri);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
171 int udp_get_local_port(URLContext *h);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
172 int udp_get_file_handle(URLContext *h);
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
173
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
174 /* tcp.c */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
175 extern URLProtocol tcp_protocol;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
176
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
177 /* http.c */
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
178 extern URLProtocol http_protocol;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
179
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
180 #endif
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
181