FFmpeg
avio_internal.h
Go to the documentation of this file.
1 /*
2  * This file is part of FFmpeg.
3  *
4  * FFmpeg is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * FFmpeg is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with FFmpeg; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17  */
18 
19 #ifndef AVFORMAT_AVIO_INTERNAL_H
20 #define AVFORMAT_AVIO_INTERNAL_H
21 
22 #include "avio.h"
23 #include "url.h"
24 
25 #include "libavutil/log.h"
26 
27 extern const AVClass ff_avio_class;
28 
30  unsigned char *buffer,
31  int buffer_size,
32  int write_flag,
33  void *opaque,
34  int (*read_packet)(void *opaque, uint8_t *buf, int buf_size),
35  int (*write_packet)(void *opaque, uint8_t *buf, int buf_size),
36  int64_t (*seek)(void *opaque, int64_t offset, int whence));
37 
38 
39 /**
40  * Read size bytes from AVIOContext, returning a pointer.
41  * Note that the data pointed at by the returned pointer is only
42  * valid until the next call that references the same IO context.
43  * @param s IO context
44  * @param buf pointer to buffer into which to assemble the requested
45  * data if it is not available in contiguous addresses in the
46  * underlying buffer
47  * @param size number of bytes requested
48  * @param data address at which to store pointer: this will be a
49  * a direct pointer into the underlying buffer if the requested
50  * number of bytes are available at contiguous addresses, otherwise
51  * will be a copy of buf
52  * @return number of bytes read or AVERROR
53  */
54 int ffio_read_indirect(AVIOContext *s, unsigned char *buf, int size, const unsigned char **data);
55 
56 void ffio_fill(AVIOContext *s, int b, int count);
57 
59 {
60  avio_wl32(pb, MKTAG(s[0], s[1], s[2], s[3]));
61 }
62 
63 /**
64  * Rewind the AVIOContext using the specified buffer containing the first buf_size bytes of the file.
65  * Used after probing to avoid seeking.
66  * Joins buf and s->buffer, taking any overlap into consideration.
67  * @note s->buffer must overlap with buf or they can't be joined and the function fails
68  *
69  * @param s The read-only AVIOContext to rewind
70  * @param buf The probe buffer containing the first buf_size bytes of the file
71  * @param buf_size The size of buf
72  * @return >= 0 in case of success, a negative value corresponding to an
73  * AVERROR code in case of failure
74  */
75 int ffio_rewind_with_probe_data(AVIOContext *s, unsigned char **buf, int buf_size);
76 
77 uint64_t ffio_read_varlen(AVIOContext *bc);
78 
79 /**
80  * Read size bytes from AVIOContext into buf.
81  * Check that exactly size bytes have been read.
82  * @return number of bytes read or AVERROR
83  */
84 int ffio_read_size(AVIOContext *s, unsigned char *buf, int size);
85 
86 /** @warning must be called before any I/O */
87 int ffio_set_buf_size(AVIOContext *s, int buf_size);
88 
89 /**
90  * Reallocate a given buffer for AVIOContext.
91  *
92  * @param s the AVIOContext to realloc.
93  * @param buf_size required new buffer size.
94  * @return 0 on success, a negative AVERROR on failure.
95  */
96 int ffio_realloc_buf(AVIOContext *s, int buf_size);
97 
98 /**
99  * Ensures that the requested seekback buffer size will be available
100  *
101  * Will ensure that when reading sequentially up to buf_size, seeking
102  * within the current pos and pos+buf_size is possible.
103  * Once the stream position moves outside this window this guarantee is lost.
104  */
105 int ffio_ensure_seekback(AVIOContext *s, int64_t buf_size);
106 
107 int ffio_limit(AVIOContext *s, int size);
108 
110  unsigned long (*update_checksum)(unsigned long c, const uint8_t *p, unsigned int len),
111  unsigned long checksum);
112 unsigned long ffio_get_checksum(AVIOContext *s);
113 unsigned long ff_crc04C11DB7_update(unsigned long checksum, const uint8_t *buf,
114  unsigned int len);
115 unsigned long ff_crcEDB88320_update(unsigned long checksum, const uint8_t *buf,
116  unsigned int len);
117 unsigned long ff_crcA001_update(unsigned long checksum, const uint8_t *buf,
118  unsigned int len);
119 
120 /**
121  * Open a write only packetized memory stream with a maximum packet
122  * size of 'max_packet_size'. The stream is stored in a memory buffer
123  * with a big-endian 4 byte header giving the packet size in bytes.
124  *
125  * @param s new IO context
126  * @param max_packet_size maximum packet size (must be > 0)
127  * @return zero if no error.
128  */
129 int ffio_open_dyn_packet_buf(AVIOContext **s, int max_packet_size);
130 
131 /**
132  * Create and initialize a AVIOContext for accessing the
133  * resource referenced by the URLContext h.
134  * @note When the URLContext h has been opened in read+write mode, the
135  * AVIOContext can be used only for writing.
136  *
137  * @param s Used to return the pointer to the created AVIOContext.
138  * In case of failure the pointed to value is set to NULL.
139  * @return >= 0 in case of success, a negative value corresponding to an
140  * AVERROR code in case of failure
141  */
143 
144 /**
145  * Return the URLContext associated with the AVIOContext
146  *
147  * @param s IO context
148  * @return pointer to URLContext or NULL.
149  */
151 
152 /**
153  * Open a write-only fake memory stream. The written data is not stored
154  * anywhere - this is only used for measuring the amount of data
155  * written.
156  *
157  * @param s new IO context
158  * @return zero if no error.
159  */
161 
162 int ffio_open_whitelist(AVIOContext **s, const char *url, int flags,
164  const char *whitelist, const char *blacklist);
165 
166 /**
167  * Close a null buffer.
168  *
169  * @param s an IO context opened by ffio_open_null_buf
170  * @return the number of bytes written to the null buffer
171  */
173 
174 /**
175  * Free a dynamic buffer.
176  *
177  * @param s a pointer to an IO context opened by avio_open_dyn_buf()
178  */
180 
181 #endif /* AVFORMAT_AVIO_INTERNAL_H */
static void write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost, int unqueue)
Definition: ffmpeg.c:690
uint64_t ffio_read_varlen(AVIOContext *bc)
Definition: aviobuf.c:932
Bytestream IO Context.
Definition: avio.h:161
Buffered I/O operations.
ptrdiff_t const GLvoid * data
Definition: opengl_enc.c:100
int ffio_close_null_buf(AVIOContext *s)
Close a null buffer.
Definition: aviobuf.c:1519
int ffio_rewind_with_probe_data(AVIOContext *s, unsigned char **buf, int buf_size)
Rewind the AVIOContext using the specified buffer containing the first buf_size bytes of the file...
Definition: aviobuf.c:1144
int ffio_read_size(AVIOContext *s, unsigned char *buf, int size)
Read size bytes from AVIOContext into buf.
Definition: aviobuf.c:699
int ffio_realloc_buf(AVIOContext *s, int buf_size)
Reallocate a given buffer for AVIOContext.
Definition: aviobuf.c:1099
int ffio_limit(AVIOContext *s, int size)
Definition: utils.c:247
void avio_wl32(AVIOContext *s, unsigned int val)
Definition: aviobuf.c:372
uint8_t
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf offset
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
Definition: undefined.txt:32
unsigned long ff_crcEDB88320_update(unsigned long checksum, const uint8_t *buf, unsigned int len)
Definition: aviobuf.c:609
int ffio_read_indirect(AVIOContext *s, unsigned char *buf, int size, const unsigned char **data)
Read size bytes from AVIOContext, returning a pointer.
Definition: aviobuf.c:707
const AVClass ff_avio_class
Definition: aviobuf.c:69
ptrdiff_t size
Definition: opengl_enc.c:100
static av_always_inline void ffio_wfourcc(AVIOContext *pb, const uint8_t *s)
Definition: avio_internal.h:58
Callback for checking whether to abort blocking functions.
Definition: avio.h:58
const AVIOInterruptCB int_cb
Definition: ffmpeg.c:481
int ffio_set_buf_size(AVIOContext *s, int buf_size)
Definition: aviobuf.c:1083
GLsizei count
Definition: opengl_enc.c:108
void ffio_init_checksum(AVIOContext *s, unsigned long(*update_checksum)(unsigned long c, const uint8_t *p, unsigned int len), unsigned long checksum)
Definition: aviobuf.c:629
#define b
Definition: input.c:41
void ffio_fill(AVIOContext *s, int b, int count)
Definition: aviobuf.c:204
int ffio_open_dyn_packet_buf(AVIOContext **s, int max_packet_size)
Open a write only packetized memory stream with a maximum packet size of 'max_packet_size'.
Definition: aviobuf.c:1435
unsigned long ff_crc04C11DB7_update(unsigned long checksum, const uint8_t *buf, unsigned int len)
Definition: aviobuf.c:603
#define s(width, name)
Definition: cbs_vp9.c:257
unsigned long ff_crcA001_update(unsigned long checksum, const uint8_t *buf, unsigned int len)
Definition: aviobuf.c:615
static volatile int checksum
Definition: adler32.c:30
void ffio_free_dyn_buf(AVIOContext **s)
Free a dynamic buffer.
Definition: aviobuf.c:1489
static int read_packet(void *opaque, uint8_t *buf, int buf_size)
Definition: avio_reading.c:42
void * buf
Definition: avisynth_c.h:766
Definition: url.h:38
Describe the class of an AVClass context structure.
Definition: log.h:67
unsigned long ffio_get_checksum(AVIOContext *s)
Definition: aviobuf.c:621
int ffio_open_null_buf(AVIOContext **s)
Open a write-only fake memory stream.
Definition: aviobuf.c:1509
int ffio_open_whitelist(AVIOContext **s, const char *url, int flags, const AVIOInterruptCB *int_cb, AVDictionary **options, const char *whitelist, const char *blacklist)
Definition: aviobuf.c:1192
URLContext * ffio_geturlcontext(AVIOContext *s)
Return the URLContext associated with the AVIOContext.
Definition: aviobuf.c:1041
#define flags(name, subs,...)
Definition: cbs_av1.c:561
int ffio_ensure_seekback(AVIOContext *s, int64_t buf_size)
Ensures that the requested seekback buffer size will be available.
Definition: aviobuf.c:1054
const OptionDef options[]
Definition: ffmpeg_opt.c:3374
int ffio_init_context(AVIOContext *s, unsigned char *buffer, int buffer_size, int write_flag, void *opaque, int(*read_packet)(void *opaque, uint8_t *buf, int buf_size), int(*write_packet)(void *opaque, uint8_t *buf, int buf_size), int64_t(*seek)(void *opaque, int64_t offset, int whence))
Definition: aviobuf.c:81
int len
int ffio_fdopen(AVIOContext **s, URLContext *h)
Create and initialize a AVIOContext for accessing the resource referenced by the URLContext h...
Definition: aviobuf.c:983
unbuffered private I/O API
#define av_always_inline
Definition: attributes.h:39
#define MKTAG(a, b, c, d)
Definition: common.h:366
GLuint buffer
Definition: opengl_enc.c:101