Commit | Line | Data |
---|---|---|
2ba45a60 DM |
1 | /* |
2 | * | |
3 | * This file is part of FFmpeg. | |
4 | * | |
5 | * FFmpeg is free software; you can redistribute it and/or | |
6 | * modify it under the terms of the GNU Lesser General Public | |
7 | * License as published by the Free Software Foundation; either | |
8 | * version 2.1 of the License, or (at your option) any later version. | |
9 | * | |
10 | * FFmpeg is distributed in the hope that it will be useful, | |
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 | * Lesser General Public License for more details. | |
14 | * | |
15 | * You should have received a copy of the GNU Lesser General Public | |
16 | * License along with FFmpeg; if not, write to the Free Software | |
17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
18 | */ | |
19 | ||
20 | #ifndef AVFORMAT_AVIO_INTERNAL_H | |
21 | #define AVFORMAT_AVIO_INTERNAL_H | |
22 | ||
23 | #include "avio.h" | |
24 | #include "url.h" | |
25 | ||
26 | #include "libavutil/log.h" | |
27 | ||
28 | extern const AVClass ffio_url_class; | |
29 | ||
30 | int ffio_init_context(AVIOContext *s, | |
31 | unsigned char *buffer, | |
32 | int buffer_size, | |
33 | int write_flag, | |
34 | void *opaque, | |
35 | int (*read_packet)(void *opaque, uint8_t *buf, int buf_size), | |
36 | int (*write_packet)(void *opaque, uint8_t *buf, int buf_size), | |
37 | int64_t (*seek)(void *opaque, int64_t offset, int whence)); | |
38 | ||
39 | ||
40 | /** | |
41 | * Read size bytes from AVIOContext, returning a pointer. | |
42 | * Note that the data pointed at by the returned pointer is only | |
43 | * valid until the next call that references the same IO context. | |
44 | * @param s IO context | |
45 | * @param buf pointer to buffer into which to assemble the requested | |
46 | * data if it is not available in contiguous addresses in the | |
47 | * underlying buffer | |
48 | * @param size number of bytes requested | |
49 | * @param data address at which to store pointer: this will be a | |
50 | * a direct pointer into the underlying buffer if the requested | |
51 | * number of bytes are available at contiguous addresses, otherwise | |
52 | * will be a copy of buf | |
53 | * @return number of bytes read or AVERROR | |
54 | */ | |
55 | int ffio_read_indirect(AVIOContext *s, unsigned char *buf, int size, const unsigned char **data); | |
56 | ||
57 | /** | |
58 | * Read size bytes from AVIOContext into buf. | |
59 | * This reads at most 1 packet. If that is not enough fewer bytes will be | |
60 | * returned. | |
61 | * @return number of bytes read or AVERROR | |
62 | */ | |
63 | int ffio_read_partial(AVIOContext *s, unsigned char *buf, int size); | |
64 | ||
65 | void ffio_fill(AVIOContext *s, int b, int count); | |
66 | ||
67 | static av_always_inline void ffio_wfourcc(AVIOContext *pb, const uint8_t *s) | |
68 | { | |
69 | avio_wl32(pb, MKTAG(s[0], s[1], s[2], s[3])); | |
70 | } | |
71 | ||
72 | /** | |
73 | * Rewind the AVIOContext using the specified buffer containing the first buf_size bytes of the file. | |
74 | * Used after probing to avoid seeking. | |
75 | * Joins buf and s->buffer, taking any overlap into consideration. | |
76 | * @note s->buffer must overlap with buf or they can't be joined and the function fails | |
77 | * | |
78 | * @param s The read-only AVIOContext to rewind | |
79 | * @param buf The probe buffer containing the first buf_size bytes of the file | |
80 | * @param buf_size The size of buf | |
81 | * @return >= 0 in case of success, a negative value corresponding to an | |
82 | * AVERROR code in case of failure | |
83 | */ | |
84 | int ffio_rewind_with_probe_data(AVIOContext *s, unsigned char **buf, int buf_size); | |
85 | ||
86 | uint64_t ffio_read_varlen(AVIOContext *bc); | |
87 | ||
88 | /** @warning must be called before any I/O */ | |
89 | int ffio_set_buf_size(AVIOContext *s, int buf_size); | |
90 | ||
91 | /** | |
92 | * Ensures that the requested seekback buffer size will be available | |
93 | * | |
94 | * Will ensure that when reading sequentially up to buf_size, seeking | |
95 | * within the current pos and pos+buf_size is possible. | |
96 | * Once the stream position moves outside this window this guarantee is lost. | |
97 | */ | |
98 | int ffio_ensure_seekback(AVIOContext *s, int64_t buf_size); | |
99 | ||
100 | int ffio_limit(AVIOContext *s, int size); | |
101 | ||
102 | void ffio_init_checksum(AVIOContext *s, | |
103 | unsigned long (*update_checksum)(unsigned long c, const uint8_t *p, unsigned int len), | |
104 | unsigned long checksum); | |
105 | unsigned long ffio_get_checksum(AVIOContext *s); | |
106 | unsigned long ff_crc04C11DB7_update(unsigned long checksum, const uint8_t *buf, | |
107 | unsigned int len); | |
108 | unsigned long ff_crcA001_update(unsigned long checksum, const uint8_t *buf, | |
109 | unsigned int len); | |
110 | ||
111 | /** | |
112 | * Open a write only packetized memory stream with a maximum packet | |
113 | * size of 'max_packet_size'. The stream is stored in a memory buffer | |
114 | * with a big-endian 4 byte header giving the packet size in bytes. | |
115 | * | |
116 | * @param s new IO context | |
117 | * @param max_packet_size maximum packet size (must be > 0) | |
118 | * @return zero if no error. | |
119 | */ | |
120 | int ffio_open_dyn_packet_buf(AVIOContext **s, int max_packet_size); | |
121 | ||
122 | /** | |
123 | * Create and initialize a AVIOContext for accessing the | |
124 | * resource referenced by the URLContext h. | |
125 | * @note When the URLContext h has been opened in read+write mode, the | |
126 | * AVIOContext can be used only for writing. | |
127 | * | |
128 | * @param s Used to return the pointer to the created AVIOContext. | |
129 | * In case of failure the pointed to value is set to NULL. | |
130 | * @return >= 0 in case of success, a negative value corresponding to an | |
131 | * AVERROR code in case of failure | |
132 | */ | |
133 | int ffio_fdopen(AVIOContext **s, URLContext *h); | |
134 | ||
135 | /** | |
136 | * Open a write-only fake memory stream. The written data is not stored | |
137 | * anywhere - this is only used for measuring the amount of data | |
138 | * written. | |
139 | * | |
140 | * @param s new IO context | |
141 | * @return zero if no error. | |
142 | */ | |
143 | int ffio_open_null_buf(AVIOContext **s); | |
144 | ||
145 | /** | |
146 | * Close a null buffer. | |
147 | * | |
148 | * @param s an IO context opened by ffio_open_null_buf | |
149 | * @return the number of bytes written to the null buffer | |
150 | */ | |
151 | int ffio_close_null_buf(AVIOContext *s); | |
152 | ||
153 | #endif /* AVFORMAT_AVIO_INTERNAL_H */ |