Go to the documentation of this file.
   35 #define IO_BUFFER_SIZE 32768 
   42 #define SHORT_SEEK_THRESHOLD 32768 
   54                   int (*
read_packet)(
void *opaque, uint8_t *buf, 
int buf_size),
 
   55                   int (*
write_packet)(
void *opaque, 
const uint8_t *buf, 
int buf_size),
 
   60     memset(
ctx, 0, 
sizeof(*
ctx));
 
   63     ctx->orig_buffer_size =
 
   64     s->buffer_size = buffer_size;
 
   79     s->min_packet_size = 0;
 
   80     s->max_packet_size = 0;
 
   81     s->update_checksum = 
NULL;
 
   86         s->buf_end = 
s->buffer + buffer_size;
 
   91     s->write_data_type       = 
NULL;
 
   92     s->ignore_boundary_point = 0;
 
  113                   int (*
read_packet)(
void *opaque, uint8_t *buf, 
int buf_size),
 
  114                   int (*
write_packet)(
void *opaque, 
const uint8_t *buf, 
int buf_size),
 
  135         if (
s->write_data_type)
 
  136             ret = 
s->write_data_type(
s->opaque, 
data,
 
  140         else if (
s->write_packet)
 
  145             ctx->bytes_written += 
len;
 
  146             s->bytes_written = 
ctx->bytes_written;
 
  148             if (
s->pos + 
len > 
ctx->written_output_size) {
 
  149                 ctx->written_output_size = 
s->pos + 
len;
 
  158     ctx->writeout_count++;
 
  164     s->buf_ptr_max = 
FFMAX(
s->buf_ptr, 
s->buf_ptr_max);
 
  165     if (
s->write_flag && 
s->buf_ptr_max > 
s->buffer) {
 
  167         if (
s->update_checksum) {
 
  168             s->checksum     = 
s->update_checksum(
s->checksum, 
s->checksum_ptr,
 
  169                                                  s->buf_ptr_max - 
s->checksum_ptr);
 
  170             s->checksum_ptr = 
s->buffer;
 
  173     s->buf_ptr = 
s->buf_ptr_max = 
s->buffer;
 
  175         s->buf_end = 
s->buffer;
 
  182     if (
s->buf_ptr >= 
s->buf_end)
 
  189         int len = 
FFMIN(
s->buf_end - 
s->buf_ptr, count);
 
  190         memset(
s->buf_ptr, 
b, 
len);
 
  193         if (
s->buf_ptr >= 
s->buf_end)
 
  204     if (
s->direct && !
s->update_checksum) {
 
  211         memcpy(
s->buf_ptr, buf, 
len);
 
  214         if (
s->buf_ptr >= 
s->buf_end)
 
  224     int seekback = 
s->write_flag ? 
FFMIN(0, 
s->buf_ptr - 
s->buf_ptr_max) : 0;
 
  246     buffer_size = 
s->buf_end - 
s->buffer;
 
  248     pos = 
s->pos - (
s->write_flag ? 0 : buffer_size);
 
  250     if (whence != SEEK_CUR && whence != SEEK_SET)
 
  253     if (whence == SEEK_CUR) {
 
  254         offset1 = 
pos + (
s->buf_ptr - 
s->buffer);
 
  257         if (
offset > INT64_MAX - offset1)
 
  264     short_seek = 
ctx->short_seek_threshold;
 
  265     if (
ctx->short_seek_get) {
 
  266         int tmp = 
ctx->short_seek_get(
s->opaque);
 
  267         short_seek = 
FFMAX(
tmp, short_seek);
 
  271     s->buf_ptr_max = 
FFMAX(
s->buf_ptr_max, 
s->buf_ptr);
 
  272     if ((!
s->direct || !
s->seek) &&
 
  273         offset1 >= 0 && offset1 <= (
s->write_flag ? 
s->buf_ptr_max - 
s->buffer : buffer_size)) {
 
  275         s->buf_ptr = 
s->buffer + offset1;
 
  277                offset1 <= buffer_size + short_seek) &&
 
  278                !
s->write_flag && offset1 >= 0 &&
 
  279                (!
s->direct || !
s->seek) &&
 
  280               (whence != SEEK_END || force)) {
 
  281         while(
s->pos < 
offset && !
s->eof_reached)
 
  285         s->buf_ptr = 
s->buf_end - (
s->pos - 
offset);
 
  286     } 
else if(!
s->write_flag && offset1 < 0 && -offset1 < buffer_size>>1 && 
s->seek && 
offset > 0) {
 
  290         if ((res = 
s->seek(
s->opaque, 
pos, SEEK_SET)) < 0)
 
  293         s->buf_ptr = 
s->buffer;
 
  305         if ((res = 
s->seek(
s->opaque, 
offset, SEEK_SET)) < 0)
 
  309             s->buf_end = 
s->buffer;
 
  310         s->buf_ptr = 
s->buf_ptr_max = 
s->buffer;
 
  330     if (
ctx->written_output_size)
 
  331         return ctx->written_output_size;
 
  337         if ((
size = 
s->seek(
s->opaque, -1, SEEK_END)) < 0)
 
  340         s->seek(
s->opaque, 
s->pos, SEEK_SET);
 
  353     return s->eof_reached;
 
  385     const uint8_t *q = str;
 
  413 #define PUT_STR16(type, big_endian)                          \ 
  414 int avio_put_str16 ## type(AVIOContext *s, const char *str)  \ 
  416 return put_str16(s, str, big_endian);                        \ 
  464         if (
s->buf_ptr - 
s->buffer >= 
s->min_packet_size)
 
  468     if (!
s->write_data_type)
 
  494     ctx->last_time = time;
 
  503     ret = 
s->read_packet(
s->opaque, buf, 
size);
 
  513     int max_buffer_size = 
s->max_packet_size ?
 
  515     uint8_t *dst        = 
s->buf_end - 
s->buffer + max_buffer_size <= 
s->buffer_size ?
 
  516                           s->buf_end : 
s->buffer;
 
  517     int len             = 
s->buffer_size - (dst - 
s->buffer);
 
  520     if (!
s->read_packet && 
s->buf_ptr >= 
s->buf_end)
 
  527     if (
s->update_checksum && dst == 
s->buffer) {
 
  528         if (
s->buf_end > 
s->checksum_ptr)
 
  529             s->checksum = 
s->update_checksum(
s->checksum, 
s->checksum_ptr,
 
  530                                              s->buf_end - 
s->checksum_ptr);
 
  531         s->checksum_ptr = 
s->buffer;
 
  535     if (
s->read_packet && 
ctx->orig_buffer_size &&
 
  536         s->buffer_size > 
ctx->orig_buffer_size  && 
len >= 
ctx->orig_buffer_size) {
 
  537         if (dst == 
s->buffer && 
s->buf_ptr != dst) {
 
  542             s->checksum_ptr = dst = 
s->buffer;
 
  544         len = 
ctx->orig_buffer_size;
 
  552     } 
else if (
len < 0) {
 
  558         s->buf_end = dst + 
len;
 
  584     s->checksum = 
s->update_checksum(
s->checksum, 
s->checksum_ptr,
 
  585                                      s->buf_ptr - 
s->checksum_ptr);
 
  586     s->update_checksum = 
NULL;
 
  592                    unsigned long checksum)
 
  595     if (
s->update_checksum) {
 
  596         s->checksum     = checksum;
 
  597         s->checksum_ptr = 
s->buf_ptr;
 
  604     if (
s->buf_ptr >= 
s->buf_end)
 
  606     if (
s->buf_ptr < 
s->buf_end)
 
  607         return *
s->buf_ptr++;
 
  618         if (
len == 0 || 
s->write_flag) {
 
  619             if((
s->direct || 
size > 
s->buffer_size) && !
s->update_checksum && 
s->read_packet) {
 
  627                 } 
else if (
len < 0) {
 
  638                     s->buf_ptr = 
s->buffer;
 
  639                     s->buf_end = 
s->buffer;
 
  643                 len = 
s->buf_end - 
s->buf_ptr;
 
  648             memcpy(buf, 
s->buf_ptr, 
len);
 
  655         if (
s->error)      
return s->error;
 
  673     if (
s->buf_end - 
s->buf_ptr >= 
size && !
s->write_flag) {
 
  690     if (
s->read_packet && 
s->write_flag) {
 
  697     len = 
s->buf_end - 
s->buf_ptr;
 
  700         len = 
s->buf_end - 
s->buf_ptr;
 
  704     memcpy(buf, 
s->buf_ptr, 
len);
 
  707         if (
s->error)      
return s->error;
 
  775         if (
c && 
i < maxlen-1)
 
  777     } 
while (
c != 
'\n' && 
c != 
'\r' && 
c);
 
  818         } 
while (!end && 
len < 
sizeof(
tmp) &&
 
  819                  ((max_len < 0) || (
read + 
len < max_len)));
 
  822     } 
while (!end && ((max_len < 0) || (
read < max_len)));
 
  872     buflen = 
FFMIN(buflen - 1, maxlen);
 
  873     for (
i = 0; 
i < buflen; 
i++)
 
  877     for (; 
i < maxlen; 
i++)
 
  883 #define GET_STR16(type, read) \ 
  884     int avio_get_str16 ##type(AVIOContext *pb, int maxlen, char *buf, int buflen)\ 
  889         return AVERROR(EINVAL); \ 
  890     while (ret + 1 < maxlen) {\ 
  893         GET_UTF16(ch, (ret += 2) <= maxlen ? read(pb) : 0, break;)\ 
  896         PUT_UTF8(ch, tmp, if (q - buf < buflen - 1) *q++ = tmp;)\ 
  932         unsigned bits = 
byte & 0x7f;
 
  935             leb |= 
bits << (
i * 7);
 
  950     for (
int i = 0; 
i < 
len; 
i++) {
 
  951         byte = 
val >> (7 * 
i) & 0x7f;
 
  960                       const unsigned char *ending)
 
  962     int ending_len = ending ? strlen(ending) : 1;
 
  973             if (last == 
'\r' || last == 
'\n')
 
  983         if (
size > 0 && last == 
'\r' && buf[0] == 
'\n') {
 
  992     const char *
opts[] = {
 
  993         "headers", 
"user_agent", 
"cookies", 
"http_proxy", 
"referer", 
"rw_timeout", 
"icy", 
NULL };
 
  994     const char **opt = 
opts;
 
 1000             if (buf[0] != 
'\0') {
 
 1016     if (
s->update_checksum && 
s->buf_ptr > 
s->checksum_ptr) {
 
 1017         s->checksum = 
s->update_checksum(
s->checksum, 
s->checksum_ptr,
 
 1018                                          s->buf_ptr - 
s->checksum_ptr);
 
 1025     int max_buffer_size = 
s->max_packet_size ?
 
 1027     ptrdiff_t filled = 
s->buf_end - 
s->buf_ptr;
 
 1029     if (buf_size <= s->buf_end - 
s->buf_ptr)
 
 1032     if (buf_size > INT_MAX - max_buffer_size)
 
 1035     buf_size += max_buffer_size - 1;
 
 1037     if (buf_size + 
s->buf_ptr - 
s->buffer <= 
s->buffer_size || 
s->seekable || !
s->read_packet)
 
 1041     if (buf_size <= s->buffer_size) {
 
 1043         memmove(
s->buffer, 
s->buf_ptr, filled);
 
 1049         memcpy(
buffer, 
s->buf_ptr, filled);
 
 1052         s->buffer_size = buf_size;
 
 1054     s->buf_ptr = 
s->buffer;
 
 1055     s->buf_end = 
s->buffer + filled;
 
 1056     s->checksum_ptr = 
s->buffer;
 
 1063     if (
ctx->maxsize >= 0) {
 
 1066         if (remaining < 
size) {
 
 1068             if (!
ctx->maxsize || 
ctx->maxsize < newsize)
 
 1069                 ctx->maxsize = newsize - !newsize;
 
 1070             if (
pos > 
ctx->maxsize && 
ctx->maxsize >= 0)
 
 1072             if (
ctx->maxsize >= 0)
 
 1073                 remaining = 
ctx->maxsize - 
pos;
 
 1076         if (
ctx->maxsize >= 0 && remaining < size && size > 1) {
 
 1078                    "Truncating packet of size %d to %"PRId64
"\n",
 
 1079                    size, remaining + !remaining);
 
 1080             size = remaining + !remaining;
 
 1096     s->buffer_size = buf_size;
 
 1097     s->buf_ptr = 
s->buf_ptr_max = 
buffer;
 
 1107     if (!
s->buffer_size)
 
 1110     if (buf_size <= s->buffer_size)
 
 1117     data_size = 
s->write_flag ? (
s->buf_ptr - 
s->buffer) : (
s->buf_end - 
s->buf_ptr);
 
 1119         memcpy(
buffer, 
s->write_flag ? 
s->buffer : 
s->buf_ptr, data_size);
 
 1123     s->buffer_size = buf_size;
 
 1124     s->buf_ptr = 
s->write_flag ? (
s->buffer + data_size) : 
s->buffer;
 
 1126         s->buf_ptr_max = 
s->buffer + data_size;
 
 1128     s->buf_end = 
s->write_flag ? (
s->buffer + 
s->buffer_size) : (
s->buf_ptr + data_size);
 
 1138         s->buf_end = 
s->buffer + 
s->buffer_size;
 
 1141         s->buf_end = 
s->buffer;
 
 1151     int overlap, new_size, alloc_size;
 
 1152     uint8_t *buf = *bufp;
 
 1154     if (
s->write_flag) {
 
 1159     buffer_size = 
s->buf_end - 
s->buffer;
 
 1162     if ((buffer_start = 
s->pos - buffer_size) > buf_size) {
 
 1167     overlap = buf_size - buffer_start;
 
 1168     new_size = buf_size + buffer_size - overlap;
 
 1170     alloc_size = 
FFMAX(
s->buffer_size, new_size);
 
 1171     if (alloc_size > buf_size)
 
 1172         if (!(buf = (*bufp) = 
av_realloc_f(buf, 1, alloc_size)))
 
 1175     if (new_size > buf_size) {
 
 1176         memcpy(buf + buf_size, 
s->buffer + overlap, buffer_size - overlap);
 
 1177         buf_size = new_size;
 
 1181     s->buf_ptr = 
s->buffer = buf;
 
 1182     s->buffer_size = alloc_size;
 
 1184     s->buf_end = 
s->buf_ptr + buf_size;
 
 1220     for(; *strings; strings++)
 
 1221         avio_write(
s, (
const unsigned char *)*strings, strlen(*strings));
 
 1228     return s->read_pause(
s->opaque, pause);
 
 1237     ret = 
s->read_seek(
s->opaque, stream_index, timestamp, 
flags);
 
 1240         s->buf_ptr = 
s->buf_end; 
 
 1241         pos = 
s->seek(
s->opaque, 0, SEEK_CUR);
 
 1283     new_size = (unsigned)
d->pos + buf_size;
 
 1284     if (new_size < d->
pos || new_size > INT_MAX)
 
 1286     if (new_size > 
d->allocated_size) {
 
 1287         unsigned new_allocated_size = 
d->allocated_size ? 
d->allocated_size
 
 1290         while (new_size > new_allocated_size)
 
 1291             new_allocated_size += new_allocated_size / 2 + 1;
 
 1293         new_allocated_size = 
FFMIN(new_allocated_size, INT_MAX);
 
 1295         if ((err = 
av_reallocp(&
d->buffer, new_allocated_size)) < 0) {
 
 1296             d->allocated_size = 0;
 
 1300         d->allocated_size = new_allocated_size;
 
 1302     memcpy(
d->buffer + 
d->pos, buf, buf_size);
 
 1304     if (
d->pos > 
d->size)
 
 1311     unsigned char buf1[4];
 
 1328     if (whence == SEEK_CUR)
 
 1330     else if (whence == SEEK_END)
 
 1344     unsigned io_buffer_size = max_packet_size ? max_packet_size : 1024;
 
 1346     if (
sizeof(*
ret) + io_buffer_size < io_buffer_size)
 
 1352     d->io_buffer_size = io_buffer_size;
 
 1357     (*s)->max_packet_size = max_packet_size;
 
 1368     if (max_packet_size <= 0)
 
 1383     if (!
s->error && !
d->size) {
 
 1384         *pbuffer = 
d->io_buffer;
 
 1385         return FFMAX(
s->buf_ptr, 
s->buf_ptr_max) - 
s->buffer;
 
 1390     *pbuffer = 
d->buffer;
 
 1398     int max_packet_size = 
s->max_packet_size;
 
 1401                       1, 
d, 
NULL, 
s->write_packet, 
s->seek);
 
 1402     s->max_packet_size = max_packet_size;
 
 1403     d->pos = 
d->size = 0;
 
 1418     if (!
s->max_packet_size) {
 
 1426     *pbuffer = 
d->buffer;
 
 1431     return size - padding;
 
 1451     if (
d->pos > 
d->size)
 
  
unsigned int ffio_read_leb(AVIOContext *s)
Read a unsigned integer coded as a variable number of up to eight little-endian bytes,...
 
#define AV_OPT_SEARCH_CHILDREN
Search in possible children of the given object first.
 
int ff_get_chomp_line(AVIOContext *s, char *buf, int maxlen)
Same as ff_get_line but strip the white-space characters in the text tail.
 
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 be(in the first position) for now. Options ------- Then comes the options array. This is what will define the user accessible options. For example
 
#define AV_LOG_WARNING
Something somehow does not look correct.
 
static int put_str16(AVIOContext *s, const char *str, const int be)
 
int avio_feof(AVIOContext *s)
Similar to feof() but also returns nonzero on read errors.
 
void avio_print_string_array(AVIOContext *s, const char *const strings[])
Write a NULL terminated array of strings to the context.
 
@ AVIO_DATA_MARKER_BOUNDARY_POINT
A point in the output bytestream where a demuxer can start parsing (for non self synchronizing bytest...
 
static int av_bprint_is_complete(const AVBPrint *buf)
Test if the print buffer is complete (not truncated).
 
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
 
int avio_get_dyn_buf(AVIOContext *s, uint8_t **pbuffer)
Return the written size and a pointer to the buffer.
 
static int url_open_dyn_buf_internal(AVIOContext **s, int max_packet_size)
 
void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max)
 
static av_always_inline FFIOContext * ffiocontext(AVIOContext *ctx)
 
unsigned int avio_rl24(AVIOContext *s)
 
static int64_t dyn_buf_seek(void *opaque, int64_t offset, int whence)
 
#define AVERROR_EOF
End of file.
 
void avio_wl24(AVIOContext *s, unsigned int val)
 
static av_const int av_isspace(int c)
Locale-independent conversion of ASCII isspace.
 
unsigned long ffio_get_checksum(AVIOContext *s)
 
int ffio_open_null_buf(AVIOContext **s)
Open a write-only fake memory stream.
 
#define AVSEEK_SIZE
ORing this as the "whence" parameter to a seek function causes it to return the filesize without seek...
 
int64_t avio_seek_time(AVIOContext *s, int stream_index, int64_t timestamp, int flags)
Seek to a given timestamp relative to some component stream.
 
int avio_put_str(AVIOContext *s, const char *str)
Write a NULL-terminated string.
 
void avio_wl32(AVIOContext *s, unsigned int val)
 
int avio_read_to_bprint(AVIOContext *h, AVBPrint *pb, size_t max_size)
Read contents of h into print buffer, up to max_size bytes, or up to EOF.
 
unsigned long ff_crcEDB88320_update(unsigned long checksum, const uint8_t *buf, unsigned int len)
 
AVIODataMarkerType
Different data types that can be returned via the AVIO write_data_type callback.
 
void avio_w8(AVIOContext *s, int b)
 
static void update_checksum(AVIOContext *s)
 
static void fill_buffer(AVIOContext *s)
 
void ffio_reset_dyn_buf(AVIOContext *s)
Reset a dynamic buffer.
 
static av_always_inline int64_t avio_tell(AVIOContext *s)
ftell() equivalent for AVIOContext.
 
static double val(void *priv, double ch)
 
void avio_wb24(AVIOContext *s, unsigned int val)
 
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 type
 
void avio_wl16(AVIOContext *s, unsigned int val)
 
#define AV_DICT_DONT_STRDUP_VAL
Take ownership of a value that's been allocated with av_malloc() or another memory allocation functio...
 
#define GET_UTF8(val, GET_BYTE, ERROR)
Convert a UTF-8 character (up to 4 bytes) to its 32-bit UCS-4 encoded form.
 
static void flush_buffer(AVIOContext *s)
 
int ffio_copy_url_options(AVIOContext *pb, AVDictionary **avio_opts)
Read url related dictionary options from the AVIOContext and write to the given dictionary.
 
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
 
void avio_write_marker(AVIOContext *s, int64_t time, enum AVIODataMarkerType type)
Mark the written bytestream as a specific type.
 
void avio_flush(AVIOContext *s)
Force flushing of buffered data.
 
int64_t ff_read_string_to_bprint_overwrite(AVIOContext *s, AVBPrint *bp, int64_t max_len)
Read a whole null-terminated string of text from AVIOContext to an AVBPrint buffer overwriting its co...
 
static int read_packet(void *opaque, uint8_t *buf, int buf_size)
 
int64_t bytes_read
Bytes read statistic.
 
void avio_wb32(AVIOContext *s, unsigned int val)
 
int ffio_read_size(AVIOContext *s, unsigned char *buf, int size)
Read size bytes from AVIOContext into buf.
 
static int null_buf_write(void *opaque, const uint8_t *buf, int buf_size)
 
int avio_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer)
Return the written size and a pointer to the buffer.
 
void ffio_write_lines(AVIOContext *s, const unsigned char *buf, int size, const unsigned char *ending)
Write a sequence of text lines, converting line endings.
 
void ffio_fill(AVIOContext *s, int b, int64_t count)
 
int ffio_read_indirect(AVIOContext *s, unsigned char *buf, int size, const unsigned char **data)
Read size bytes from AVIOContext, returning a pointer.
 
#define av_assert0(cond)
assert() equivalent, that is always enabled.
 
#define AVIO_FLAG_WRITE
write-only
 
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
 
static int dyn_packet_buf_write(void *opaque, const uint8_t *buf, int buf_size)
 
void avio_context_free(AVIOContext **ps)
Free the supplied IO context and everything associated with it.
 
void ffio_init_write_context(FFIOContext *s, uint8_t *buffer, int buffer_size)
Wrap a buffer in an AVIOContext for writing.
 
#define av_realloc_f(p, o, n)
 
int ffio_limit(AVIOContext *s, int size)
 
int avio_read(AVIOContext *s, unsigned char *buf, int size)
Read size bytes from AVIOContext into buf.
 
@ AVIO_DATA_MARKER_TRAILER
Trailer data, which doesn't contain actual content, but only for finalizing the output file.
 
#define PUT_UTF16(val, tmp, PUT_16BIT)
 
int orig_buffer_size
Original buffer size used after probing to ensure seekback and to reset the buffer size.
 
int avio_printf(AVIOContext *s, const char *fmt,...)
 
static int64_t read_string_to_bprint(AVIOContext *s, AVBPrint *bp, FFBPrintReadStringMode mode, int64_t max_len)
 
static void BS_FUNC() seek(BSCTX *bc, unsigned pos)
Seek to the given bit position.
 
#define SHORT_SEEK_THRESHOLD
Do seeks within this distance ahead of the current buffer by skipping data instead of calling the pro...
 
int avio_vprintf(AVIOContext *s, const char *fmt, va_list ap)
Writes a formatted string to the context taking a va_list.
 
static int read_packet_wrapper(AVIOContext *s, uint8_t *buf, int size)
 
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
 
int avio_pause(AVIOContext *s, int pause)
Pause and resume playing - only meaningful if using a network streaming protocol (e....
 
unsigned int avio_rb24(AVIOContext *s)
 
unsigned int avio_rb16(AVIOContext *s)
 
int ffio_realloc_buf(AVIOContext *s, int buf_size)
Reallocate a given buffer for AVIOContext.
 
int64_t ff_read_line_to_bprint_overwrite(AVIOContext *s, AVBPrint *bp)
Read a whole line of text from AVIOContext to an AVBPrint buffer overwriting its contents.
 
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_WB32 unsigned int_TMPL AV_WB24 unsigned int_TMPL AV_WB16 unsigned int_TMPL byte
 
int av_bprint_finalize(AVBPrint *buf, char **ret_str)
Finalize a print buffer.
 
void ffio_free_dyn_buf(AVIOContext **s)
Free a dynamic buffer.
 
int ffio_ensure_seekback(AVIOContext *s, int64_t buf_size)
Ensures that the requested seekback buffer size will be available.
 
int av_reallocp(void *ptr, size_t size)
Allocate, reallocate, or free a block of memory through a pointer to a pointer.
 
#define AV_NOPTS_VALUE
Undefined timestamp value.
 
unsigned int avio_rl16(AVIOContext *s)
 
uint64_t avio_rl64(AVIOContext *s)
 
int ffio_rewind_with_probe_data(AVIOContext *s, unsigned char **bufp, int buf_size)
Rewind the AVIOContext using the specified buffer containing the first buf_size bytes of the file.
 
@ AVIO_DATA_MARKER_SYNC_POINT
A point in the output bytestream where a decoder can start decoding (i.e.
 
const AVCRC * av_crc_get_table(AVCRCId crc_id)
Get an initialized standard CRC table.
 
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
 
static int dyn_buf_write(void *opaque, const uint8_t *buf, int buf_size)
 
unsigned int avio_rl32(AVIOContext *s)
 
void avio_write(AVIOContext *s, const unsigned char *buf, int size)
 
int64_t avio_seek(AVIOContext *s, int64_t offset, int whence)
fseek() equivalent for AVIOContext.
 
void ffio_init_checksum(AVIOContext *s, unsigned long(*update_checksum)(unsigned long c, const uint8_t *p, unsigned int len), unsigned long checksum)
 
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
 
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'.
 
#define i(width, name, range_min, range_max)
 
AVIOContext * avio_alloc_context(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, const uint8_t *buf, int buf_size), int64_t(*seek)(void *opaque, int64_t offset, int whence))
Allocate and initialize an AVIOContext for buffered I/O.
 
#define PUT_STR16(type, big_endian)
 
uint64_t ffio_read_varlen(AVIOContext *bc)
 
static int64_t read_string_to_bprint_overwrite(AVIOContext *s, AVBPrint *bp, FFBPrintReadStringMode mode, int64_t max_len)
 
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
 
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
 
int ff_get_line(AVIOContext *s, char *buf, int maxlen)
Read a whole line of text from AVIOContext.
 
#define GET_STR16(type, read)
 
void ffio_init_read_context(FFIOContext *s, const uint8_t *buffer, int buffer_size)
Wrap a buffer in an AVIOContext for reading.
 
static int write_packet(Muxer *mux, OutputStream *ost, AVPacket *pkt)
 
void avio_wb64(AVIOContext *s, uint64_t val)
 
@ AVIO_DATA_MARKER_UNKNOWN
This is any, unlabelled data.
 
int avio_get_str(AVIOContext *s, int maxlen, char *buf, int buflen)
Read a string from pb into buf.
 
#define AV_INPUT_BUFFER_PADDING_SIZE
 
unsigned long ff_crc04C11DB7_update(unsigned long checksum, const uint8_t *buf, unsigned int len)
 
int avio_r8(AVIOContext *s)
 
#define AVIO_SEEKABLE_NORMAL
Seeking works like for a local file.
 
the frame and frame 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 AVFrame structures Several references can point to the same frame buffer
 
uint32_t av_crc(const AVCRC *ctx, uint32_t crc, const uint8_t *buffer, size_t length)
Calculate the CRC of a block.
 
static int url_resetbuf(AVIOContext *s, int flags)
 
void av_vbprintf(AVBPrint *buf, const char *fmt, va_list vl_arg)
Append a formatted string to a print buffer.
 
void av_bprint_clear(AVBPrint *buf)
Reset the string to "" but keep internal allocated data.
 
@ AVIO_DATA_MARKER_HEADER
Header data; this needs to be present for the stream to be decodeable.
 
unsigned long ff_crcA001_update(unsigned long checksum, const uint8_t *buf, unsigned int len)
 
#define AVSEEK_FORCE
Passing this flag as the "whence" parameter to a seek function causes it to seek by any means (like r...
 
int(* write_packet)(void *opaque, const uint8_t *buf, int buf_size)
 
#define AVIO_FLAG_READ
read-only
 
int avio_open_dyn_buf(AVIOContext **s)
Open a write only memory stream.
 
void avio_wb16(AVIOContext *s, unsigned int val)
 
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
 
static int set_buf_size(AVIOContext *s, int buf_size)
 
unsigned int avio_rb32(AVIOContext *s)
 
#define flags(name, subs,...)
 
void ffio_init_context(FFIOContext *ctx, 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, const uint8_t *buf, int buf_size), int64_t(*seek)(void *opaque, int64_t offset, int whence))
 
int av_opt_get(void *obj, const char *name, int search_flags, uint8_t **out_val)
 
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
 
int ffio_close_null_buf(AVIOContext *s)
Close a null buffer.
 
static void writeout(AVIOContext *s, const uint8_t *data, int len)
 
int64_t avio_size(AVIOContext *s)
Get the filesize.
 
int avio_read_partial(AVIOContext *s, unsigned char *buf, int size)
Read size bytes from AVIOContext into buf.
 
void av_bprint_append_data(AVBPrint *buf, const char *data, unsigned size)
Append data to a print buffer.
 
void avio_wl64(AVIOContext *s, uint64_t val)
 
int64_t avio_skip(AVIOContext *s, int64_t offset)
Skip given number of bytes forward.
 
void ffio_write_leb(AVIOContext *s, unsigned val)
 
static uint32_t BS_FUNC() read(BSCTX *bc, unsigned int n)
Return n bits from the buffer, n has to be in the 0-32 range.
 
uint64_t avio_rb64(AVIOContext *s)
 
@ AVIO_DATA_MARKER_FLUSH_POINT
A point in the output bytestream where the underlying AVIOContext might flush the buffer depending on...