avio_internal.h
Go to the documentation of this file.
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 
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 into buf.
42  * This reads at most 1 packet. If that is not enough fewer bytes will be
43  * returned.
44  * @return number of bytes read or AVERROR
45  */
46 int ffio_read_partial(AVIOContext *s, unsigned char *buf, int size);
47 
48 void ffio_fill(AVIOContext *s, int b, int count);
49 
51 {
52  avio_wl32(pb, MKTAG(s[0], s[1], s[2], s[3]));
53 }
54 
55 /**
56  * Rewind the AVIOContext using the specified buffer containing the first buf_size bytes of the file.
57  * Used after probing to avoid seeking.
58  * Joins buf and s->buffer, taking any overlap into consideration.
59  * @note s->buffer must overlap with buf or they can't be joined and the function fails
60  *
61  * @param s The read-only AVIOContext to rewind
62  * @param buf The probe buffer containing the first buf_size bytes of the file
63  * @param buf_size The size of buf
64  * @return 0 in case of success, a negative value corresponding to an
65  * AVERROR code in case of failure
66  */
67 int ffio_rewind_with_probe_data(AVIOContext *s, unsigned char **buf, int buf_size);
68 
69 uint64_t ffio_read_varlen(AVIOContext *bc);
70 
71 /** @warning must be called before any I/O */
72 int ffio_set_buf_size(AVIOContext *s, int buf_size);
73 
74 int ffio_limit(AVIOContext *s, int size);
75 
77  unsigned long (*update_checksum)(unsigned long c, const uint8_t *p, unsigned int len),
78  unsigned long checksum);
79 unsigned long ffio_get_checksum(AVIOContext *s);
80 unsigned long ff_crc04C11DB7_update(unsigned long checksum, const uint8_t *buf,
81  unsigned int len);
82 
83 /**
84  * Open a write only packetized memory stream with a maximum packet
85  * size of 'max_packet_size'. The stream is stored in a memory buffer
86  * with a big-endian 4 byte header giving the packet size in bytes.
87  *
88  * @param s new IO context
89  * @param max_packet_size maximum packet size (must be > 0)
90  * @return zero if no error.
91  */
92 int ffio_open_dyn_packet_buf(AVIOContext **s, int max_packet_size);
93 
94 /**
95  * Create and initialize a AVIOContext for accessing the
96  * resource referenced by the URLContext h.
97  * @note When the URLContext h has been opened in read+write mode, the
98  * AVIOContext can be used only for writing.
99  *
100  * @param s Used to return the pointer to the created AVIOContext.
101  * In case of failure the pointed to value is set to NULL.
102  * @return 0 in case of success, a negative value corresponding to an
103  * AVERROR code in case of failure
104  */
105 int ffio_fdopen(AVIOContext **s, URLContext *h);
106 
107 #endif /* AVFORMAT_AVIO_INTERNAL_H */
uint64_t ffio_read_varlen(AVIOContext *bc)
Definition: aviobuf.c:683
const char * s
Definition: avisynth_c.h:668
Bytestream IO Context.
Definition: avio.h:68
Buffered I/O operations.
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:755
static int write_packet(AVFormatContext *s, AVPacket *pkt)
int ffio_limit(AVIOContext *s, int size)
void avio_wl32(AVIOContext *s, unsigned int val)
Definition: aviobuf.c:291
uint8_t
#define b
Definition: input.c:42
static av_always_inline void ffio_wfourcc(AVIOContext *pb, const uint8_t *s)
Definition: avio_internal.h:50
int ffio_set_buf_size(AVIOContext *s, int buf_size)
Definition: aviobuf.c:726
int ffio_read_partial(AVIOContext *s, unsigned char *buf, int size)
Read size bytes from AVIOContext into buf.
Definition: aviobuf.c:526
static const uint8_t offset[127][2]
Definition: vf_spp.c:70
int size
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:457
void ffio_fill(AVIOContext *s, int b, int count)
Definition: aviobuf.c:159
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:981
unsigned long ff_crc04C11DB7_update(unsigned long checksum, const uint8_t *buf, unsigned int len)
Definition: aviobuf.c:443
const AVClass ffio_url_class
Definition: aviobuf.c:59
void * buf
Definition: avisynth_c.h:594
Definition: url.h:41
static int read_packet(AVFormatContext *ctx, AVPacket *pkt)
Definition: libcdio.c:114
Describe the class of an AVClass context structure.
Definition: log.h:50
unsigned long ffio_get_checksum(AVIOContext *s)
Definition: aviobuf.c:449
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:71
static double c[64]
the buffer and buffer reference mechanism is intended to as much as expensive copies of that data while still allowing the filters to produce correct results The data is stored in buffers represented by AVFilterBuffer structures They must not be accessed but through references stored in AVFilterBufferRef structures Several references can point to the same buffer
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:694
void INT64 INT64 count
Definition: avisynth_c.h:594
unbuffered private I/O API
#define av_always_inline
Definition: attributes.h:41
#define MKTAG(a, b, c, d)
Definition: common.h:282