• Home
  • Raw
  • Download

Lines Matching full:s

48     AVIOContext *s = obj;  in ff_avio_child_next()  local
49 return prev ? NULL : s->opaque; in ff_avio_child_next()
76 static void fill_buffer(AVIOContext *s);
77 static int url_resetbuf(AVIOContext *s, int flags);
79 static int set_buf_size(AVIOContext *s, int buf_size);
90 AVIOContext *const s = &ctx->pub; in ffio_init_context() local
94 s->buffer = buffer; in ffio_init_context()
96 s->buffer_size = buffer_size; in ffio_init_context()
97 s->buf_ptr = buffer; in ffio_init_context()
98 s->buf_ptr_max = buffer; in ffio_init_context()
99 s->opaque = opaque; in ffio_init_context()
100 s->direct = 0; in ffio_init_context()
102 url_resetbuf(s, write_flag ? AVIO_FLAG_WRITE : AVIO_FLAG_READ); in ffio_init_context()
104 s->write_packet = write_packet; in ffio_init_context()
105 s->read_packet = read_packet; in ffio_init_context()
106 s->seek = seek; in ffio_init_context()
107 s->pos = 0; in ffio_init_context()
108 s->eof_reached = 0; in ffio_init_context()
109 s->error = 0; in ffio_init_context()
110 s->seekable = seek ? AVIO_SEEKABLE_NORMAL : 0; in ffio_init_context()
111 s->min_packet_size = 0; in ffio_init_context()
112 s->max_packet_size = 0; in ffio_init_context()
113 s->update_checksum = NULL; in ffio_init_context()
117 s->pos = buffer_size; in ffio_init_context()
118 s->buf_end = s->buffer + buffer_size; in ffio_init_context()
120 s->read_pause = NULL; in ffio_init_context()
121 s->read_seek = NULL; in ffio_init_context()
123 s->write_data_type = NULL; in ffio_init_context()
124 s->ignore_boundary_point = 0; in ffio_init_context()
130 s->written = 0; in ffio_init_context()
144 FFIOContext *s = av_malloc(sizeof(*s)); in avio_alloc_context() local
145 if (!s) in avio_alloc_context()
147 ffio_init_context(s, buffer, buffer_size, write_flag, opaque, in avio_alloc_context()
149 return &s->pub; in avio_alloc_context()
157 static void writeout(AVIOContext *s, const uint8_t *data, int len) in writeout() argument
159 FFIOContext *const ctx = ffiocontext(s); in writeout()
160 if (!s->error) { in writeout()
162 if (s->write_data_type) in writeout()
163 ret = s->write_data_type(s->opaque, (uint8_t *)data, in writeout()
167 else if (s->write_packet) in writeout()
168 ret = s->write_packet(s->opaque, (uint8_t *)data, len); in writeout()
170 s->error = ret; in writeout()
173 s->bytes_written = ctx->bytes_written; in writeout()
175 if (s->pos + len > ctx->written_output_size) { in writeout()
176 ctx->written_output_size = s->pos + len; in writeout()
179 s->written = ctx->written_output_size; in writeout()
191 s->pos += len; in writeout()
194 static void flush_buffer(AVIOContext *s) in flush_buffer() argument
196 s->buf_ptr_max = FFMAX(s->buf_ptr, s->buf_ptr_max); in flush_buffer()
197 if (s->write_flag && s->buf_ptr_max > s->buffer) { in flush_buffer()
198 writeout(s, s->buffer, s->buf_ptr_max - s->buffer); in flush_buffer()
199 if (s->update_checksum) { in flush_buffer()
200 s->checksum = s->update_checksum(s->checksum, s->checksum_ptr, in flush_buffer()
201 s->buf_ptr_max - s->checksum_ptr); in flush_buffer()
202 s->checksum_ptr = s->buffer; in flush_buffer()
205 s->buf_ptr = s->buf_ptr_max = s->buffer; in flush_buffer()
206 if (!s->write_flag) in flush_buffer()
207 s->buf_end = s->buffer; in flush_buffer()
210 void avio_w8(AVIOContext *s, int b) in avio_w8() argument
213 *s->buf_ptr++ = b; in avio_w8()
214 if (s->buf_ptr >= s->buf_end) in avio_w8()
215 flush_buffer(s); in avio_w8()
218 void ffio_fill(AVIOContext *s, int b, int64_t count) in ffio_fill() argument
221 int len = FFMIN(s->buf_end - s->buf_ptr, count); in ffio_fill()
222 memset(s->buf_ptr, b, len); in ffio_fill()
223 s->buf_ptr += len; in ffio_fill()
225 if (s->buf_ptr >= s->buf_end) in ffio_fill()
226 flush_buffer(s); in ffio_fill()
232 void avio_write(AVIOContext *s, const unsigned char *buf, int size) in avio_write() argument
234 if (s->direct && !s->update_checksum) { in avio_write()
235 avio_flush(s); in avio_write()
236 writeout(s, buf, size); in avio_write()
240 int len = FFMIN(s->buf_end - s->buf_ptr, size); in avio_write()
241 memcpy(s->buf_ptr, buf, len); in avio_write()
242 s->buf_ptr += len; in avio_write()
244 if (s->buf_ptr >= s->buf_end) in avio_write()
245 flush_buffer(s); in avio_write()
252 void avio_flush(AVIOContext *s) in avio_flush() argument
254 int seekback = s->write_flag ? FFMIN(0, s->buf_ptr - s->buf_ptr_max) : 0; in avio_flush()
255 flush_buffer(s); in avio_flush()
257 avio_seek(s, seekback, SEEK_CUR); in avio_flush()
260 int64_t avio_seek(AVIOContext *s, int64_t offset, int whence) in avio_seek() argument
262 FFIOContext *const ctx = ffiocontext(s); in avio_seek()
270 if(!s) in avio_seek()
274 return s->seek ? s->seek(s->opaque, offset, AVSEEK_SIZE) : AVERROR(ENOSYS); in avio_seek()
276 buffer_size = s->buf_end - s->buffer; in avio_seek()
277 // pos is the absolute position that the beginning of s->buffer corresponds to in the file in avio_seek()
278 pos = s->pos - (s->write_flag ? 0 : buffer_size); in avio_seek()
284 offset1 = pos + (s->buf_ptr - s->buffer); in avio_seek()
296 int tmp = ctx->short_seek_get(s->opaque); in avio_seek()
300 offset1 = offset - pos; // "offset1" is the relative offset from the beginning of s->buffer in avio_seek()
301 s->buf_ptr_max = FFMAX(s->buf_ptr_max, s->buf_ptr); in avio_seek()
302 if ((!s->direct || !s->seek) && in avio_seek()
303 offset1 >= 0 && offset1 <= (s->write_flag ? s->buf_ptr_max - s->buffer : buffer_size)) { in avio_seek()
305 s->buf_ptr = s->buffer + offset1; in avio_seek()
306 } else if ((!(s->seekable & AVIO_SEEKABLE_NORMAL) || in avio_seek()
308 !s->write_flag && offset1 >= 0 && in avio_seek()
309 (!s->direct || !s->seek) && in avio_seek()
311 while(s->pos < offset && !s->eof_reached) in avio_seek()
312 fill_buffer(s); in avio_seek()
313 if (s->eof_reached) in avio_seek()
315 s->buf_ptr = s->buf_end - (s->pos - offset); in avio_seek()
316 } else if(!s->write_flag && offset1 < 0 && -offset1 < buffer_size>>1 && s->seek && offset > 0) { in avio_seek()
320 if ((res = s->seek(s->opaque, pos, SEEK_SET)) < 0) in avio_seek()
322 s->buf_end = in avio_seek()
323 s->buf_ptr = s->buffer; in avio_seek()
324 s->pos = pos; in avio_seek()
325 s->eof_reached = 0; in avio_seek()
326 fill_buffer(s); in avio_seek()
327 return avio_seek(s, offset, SEEK_SET | force); in avio_seek()
330 if (s->write_flag) { in avio_seek()
331 flush_buffer(s); in avio_seek()
333 if (!s->seek) in avio_seek()
335 if ((res = s->seek(s->opaque, offset, SEEK_SET)) < 0) in avio_seek()
338 if (!s->write_flag) in avio_seek()
339 s->buf_end = s->buffer; in avio_seek()
340 s->buf_ptr = s->buf_ptr_max = s->buffer; in avio_seek()
341 s->pos = offset; in avio_seek()
343 s->eof_reached = 0; in avio_seek()
347 int64_t avio_skip(AVIOContext *s, int64_t offset) in avio_skip() argument
349 return avio_seek(s, offset, SEEK_CUR); in avio_skip()
352 int64_t avio_size(AVIOContext *s) in avio_size() argument
354 FFIOContext *const ctx = ffiocontext(s); in avio_size()
357 if (!s) in avio_size()
363 if (!s->seek) in avio_size()
365 size = s->seek(s->opaque, 0, AVSEEK_SIZE); in avio_size()
367 if ((size = s->seek(s->opaque, -1, SEEK_END)) < 0) in avio_size()
370 s->seek(s->opaque, s->pos, SEEK_SET); in avio_size()
375 int avio_feof(AVIOContext *s) in avio_feof() argument
377 if(!s) in avio_feof()
379 if(s->eof_reached){ in avio_feof()
380 s->eof_reached=0; in avio_feof()
381 fill_buffer(s); in avio_feof()
383 return s->eof_reached; in avio_feof()
386 void avio_wl32(AVIOContext *s, unsigned int val) in avio_wl32() argument
388 avio_w8(s, (uint8_t) val ); in avio_wl32()
389 avio_w8(s, (uint8_t)(val >> 8 )); in avio_wl32()
390 avio_w8(s, (uint8_t)(val >> 16)); in avio_wl32()
391 avio_w8(s, val >> 24 ); in avio_wl32()
394 void avio_wb32(AVIOContext *s, unsigned int val) in avio_wb32() argument
396 avio_w8(s, val >> 24 ); in avio_wb32()
397 avio_w8(s, (uint8_t)(val >> 16)); in avio_wb32()
398 avio_w8(s, (uint8_t)(val >> 8 )); in avio_wb32()
399 avio_w8(s, (uint8_t) val ); in avio_wb32()
402 int avio_put_str(AVIOContext *s, const char *str) in avio_put_str() argument
407 avio_write(s, (const unsigned char *) str, len); in avio_put_str()
409 avio_w8(s, 0); in avio_put_str()
413 static inline int put_str16(AVIOContext *s, const char *str, const int be) in put_str16() argument
424 PUT_UTF16(ch, tmp, be ? avio_wb16(s, tmp) : avio_wl16(s, tmp); in put_str16()
428 av_log(s, AV_LOG_ERROR, "Invalid UTF8 sequence in avio_put_str16%s\n", be ? "be" : "le"); in put_str16()
434 avio_wb16(s, 0); in put_str16()
436 avio_wl16(s, 0); in put_str16()
444 int avio_put_str16 ## type(AVIOContext *s, const char *str) \
446 return put_str16(s, str, big_endian); \
454 void avio_wl64(AVIOContext *s, uint64_t val) in avio_wl64() argument
456 avio_wl32(s, (uint32_t)(val & 0xffffffff)); in avio_wl64()
457 avio_wl32(s, (uint32_t)(val >> 32)); in avio_wl64()
460 void avio_wb64(AVIOContext *s, uint64_t val) in avio_wb64() argument
462 avio_wb32(s, (uint32_t)(val >> 32)); in avio_wb64()
463 avio_wb32(s, (uint32_t)(val & 0xffffffff)); in avio_wb64()
466 void avio_wl16(AVIOContext *s, unsigned int val) in avio_wl16() argument
468 avio_w8(s, (uint8_t)val); in avio_wl16()
469 avio_w8(s, (int)val >> 8); in avio_wl16()
472 void avio_wb16(AVIOContext *s, unsigned int val) in avio_wb16() argument
474 avio_w8(s, (int)val >> 8); in avio_wb16()
475 avio_w8(s, (uint8_t)val); in avio_wb16()
478 void avio_wl24(AVIOContext *s, unsigned int val) in avio_wl24() argument
480 avio_wl16(s, val & 0xffff); in avio_wl24()
481 avio_w8(s, (int)val >> 16); in avio_wl24()
484 void avio_wb24(AVIOContext *s, unsigned int val) in avio_wb24() argument
486 avio_wb16(s, (int)val >> 8); in avio_wb24()
487 avio_w8(s, (uint8_t)val); in avio_wb24()
490 void avio_write_marker(AVIOContext *s, int64_t time, enum AVIODataMarkerType type) in avio_write_marker() argument
492 FFIOContext *const ctx = ffiocontext(s); in avio_write_marker()
494 if (s->buf_ptr - s->buffer >= s->min_packet_size) in avio_write_marker()
495 avio_flush(s); in avio_write_marker()
498 if (!s->write_data_type) in avio_write_marker()
501 if (type == AVIO_DATA_MARKER_BOUNDARY_POINT && s->ignore_boundary_point) in avio_write_marker()
522 avio_flush(s); in avio_write_marker()
527 static int read_packet_wrapper(AVIOContext *s, uint8_t *buf, int size) in read_packet_wrapper() argument
531 if (!s->read_packet) in read_packet_wrapper()
533 ret = s->read_packet(s->opaque, buf, size); in read_packet_wrapper()
534 av_assert2(ret || s->max_packet_size); in read_packet_wrapper()
540 static void fill_buffer(AVIOContext *s) in fill_buffer() argument
542 FFIOContext *const ctx = (FFIOContext *)s; in fill_buffer()
543 int max_buffer_size = s->max_packet_size ? in fill_buffer()
544 s->max_packet_size : IO_BUFFER_SIZE; in fill_buffer()
545 uint8_t *dst = s->buf_end - s->buffer + max_buffer_size <= s->buffer_size ? in fill_buffer()
546 s->buf_end : s->buffer; in fill_buffer()
547 int len = s->buffer_size - (dst - s->buffer); in fill_buffer()
550 if (!s->read_packet && s->buf_ptr >= s->buf_end) in fill_buffer()
551 s->eof_reached = 1; in fill_buffer()
554 if (s->eof_reached) in fill_buffer()
557 if (s->update_checksum && dst == s->buffer) { in fill_buffer()
558 if (s->buf_end > s->checksum_ptr) in fill_buffer()
559 s->checksum = s->update_checksum(s->checksum, s->checksum_ptr, in fill_buffer()
560 s->buf_end - s->checksum_ptr); in fill_buffer()
561 s->checksum_ptr = s->buffer; in fill_buffer()
565 if (s->read_packet && ctx->orig_buffer_size && in fill_buffer()
566 s->buffer_size > ctx->orig_buffer_size && len >= ctx->orig_buffer_size) { in fill_buffer()
567 if (dst == s->buffer && s->buf_ptr != dst) { in fill_buffer()
568 int ret = set_buf_size(s, ctx->orig_buffer_size); in fill_buffer()
570 av_log(s, AV_LOG_WARNING, "Failed to decrease buffer size\n"); in fill_buffer()
572 s->checksum_ptr = dst = s->buffer; in fill_buffer()
577 len = read_packet_wrapper(s, dst, len); in fill_buffer()
581 s->eof_reached = 1; in fill_buffer()
583 s->eof_reached = 1; in fill_buffer()
584 s->error= len; in fill_buffer()
586 s->pos += len; in fill_buffer()
587 s->buf_ptr = dst; in fill_buffer()
588 s->buf_end = dst + len; in fill_buffer()
589 ffiocontext(s)->bytes_read += len; in fill_buffer()
590 s->bytes_read = ffiocontext(s)->bytes_read; in fill_buffer()
612 unsigned long ffio_get_checksum(AVIOContext *s) in ffio_get_checksum() argument
614 s->checksum = s->update_checksum(s->checksum, s->checksum_ptr, in ffio_get_checksum()
615 s->buf_ptr - s->checksum_ptr); in ffio_get_checksum()
616 s->update_checksum = NULL; in ffio_get_checksum()
617 return s->checksum; in ffio_get_checksum()
620 void ffio_init_checksum(AVIOContext *s, in ffio_init_checksum() argument
624 s->update_checksum = update_checksum; in ffio_init_checksum()
625 if (s->update_checksum) { in ffio_init_checksum()
626 s->checksum = checksum; in ffio_init_checksum()
627 s->checksum_ptr = s->buf_ptr; in ffio_init_checksum()
632 int avio_r8(AVIOContext *s) in avio_r8() argument
634 if (s->buf_ptr >= s->buf_end) in avio_r8()
635 fill_buffer(s); in avio_r8()
636 if (s->buf_ptr < s->buf_end) in avio_r8()
637 return *s->buf_ptr++; in avio_r8()
641 int avio_read(AVIOContext *s, unsigned char *buf, int size) in avio_read() argument
647 len = FFMIN(s->buf_end - s->buf_ptr, size); in avio_read()
648 if (len == 0 || s->write_flag) { in avio_read()
649 if((s->direct || size > s->buffer_size) && !s->update_checksum && s->read_packet) { in avio_read()
651 len = read_packet_wrapper(s, buf, size); in avio_read()
655 s->eof_reached = 1; in avio_read()
658 s->eof_reached = 1; in avio_read()
659 s->error= len; in avio_read()
662 s->pos += len; in avio_read()
663 ffiocontext(s)->bytes_read += len; in avio_read()
664 s->bytes_read = ffiocontext(s)->bytes_read; in avio_read()
668 s->buf_ptr = s->buffer; in avio_read()
669 s->buf_end = s->buffer/* + len*/; in avio_read()
672 fill_buffer(s); in avio_read()
673 len = s->buf_end - s->buf_ptr; in avio_read()
678 memcpy(buf, s->buf_ptr, len); in avio_read()
680 s->buf_ptr += len; in avio_read()
685 if (s->error) return s->error; in avio_read()
686 if (avio_feof(s)) return AVERROR_EOF; in avio_read()
691 int ffio_read_size(AVIOContext *s, unsigned char *buf, int size) in ffio_read_size() argument
693 int ret = avio_read(s, buf, size); in ffio_read_size()
701 int ffio_read_indirect(AVIOContext *s, unsigned char *buf, int size, const unsigned char **data) in ffio_read_indirect() argument
703 if (s->buf_end - s->buf_ptr >= size && !s->write_flag) { in ffio_read_indirect()
704 *data = s->buf_ptr; in ffio_read_indirect()
705 s->buf_ptr += size; in ffio_read_indirect()
709 return avio_read(s, buf, size); in ffio_read_indirect()
713 int avio_read_partial(AVIOContext *s, unsigned char *buf, int size) in avio_read_partial() argument
720 if (s->read_packet && s->write_flag) { in avio_read_partial()
721 len = read_packet_wrapper(s, buf, size); in avio_read_partial()
723 s->pos += len; in avio_read_partial()
727 len = s->buf_end - s->buf_ptr; in avio_read_partial()
729 fill_buffer(s); in avio_read_partial()
730 len = s->buf_end - s->buf_ptr; in avio_read_partial()
734 memcpy(buf, s->buf_ptr, len); in avio_read_partial()
735 s->buf_ptr += len; in avio_read_partial()
737 if (s->error) return s->error; in avio_read_partial()
738 if (avio_feof(s)) return AVERROR_EOF; in avio_read_partial()
743 unsigned int avio_rl16(AVIOContext *s) in avio_rl16() argument
746 val = avio_r8(s); in avio_rl16()
747 val |= avio_r8(s) << 8; in avio_rl16()
751 unsigned int avio_rl24(AVIOContext *s) in avio_rl24() argument
754 val = avio_rl16(s); in avio_rl24()
755 val |= avio_r8(s) << 16; in avio_rl24()
759 unsigned int avio_rl32(AVIOContext *s) in avio_rl32() argument
762 val = avio_rl16(s); in avio_rl32()
763 val |= avio_rl16(s) << 16; in avio_rl32()
767 uint64_t avio_rl64(AVIOContext *s) in avio_rl64() argument
770 val = (uint64_t)avio_rl32(s); in avio_rl64()
771 val |= (uint64_t)avio_rl32(s) << 32; in avio_rl64()
775 unsigned int avio_rb16(AVIOContext *s) in avio_rb16() argument
778 val = avio_r8(s) << 8; in avio_rb16()
779 val |= avio_r8(s); in avio_rb16()
783 unsigned int avio_rb24(AVIOContext *s) in avio_rb24() argument
786 val = avio_rb16(s) << 8; in avio_rb24()
787 val |= avio_r8(s); in avio_rb24()
790 unsigned int avio_rb32(AVIOContext *s) in avio_rb32() argument
793 val = avio_rb16(s) << 16; in avio_rb32()
794 val |= avio_rb16(s); in avio_rb32()
798 int ff_get_line(AVIOContext *s, char *buf, int maxlen) in ff_get_line() argument
804 c = avio_r8(s); in ff_get_line()
808 if (c == '\r' && avio_r8(s) != '\n' && !avio_feof(s)) in ff_get_line()
809 avio_skip(s, -1); in ff_get_line()
815 int ff_get_chomp_line(AVIOContext *s, char *buf, int maxlen) in ff_get_chomp_line() argument
817 int len = ff_get_line(s, buf, maxlen); in ff_get_chomp_line()
828 static int64_t read_string_to_bprint(AVIOContext *s, AVBPrint *bp, in read_string_to_bprint() argument
843 c = avio_r8(s); in read_string_to_bprint()
855 c == '\r' && avio_r8(s) != '\n' && !avio_feof(s)) in read_string_to_bprint()
856 avio_skip(s, -1); in read_string_to_bprint()
858 if (!c && s->error) in read_string_to_bprint()
859 return s->error; in read_string_to_bprint()
861 if (!c && !read && avio_feof(s)) in read_string_to_bprint()
867 static int64_t read_string_to_bprint_overwrite(AVIOContext *s, AVBPrint *bp, in read_string_to_bprint_overwrite() argument
874 ret = read_string_to_bprint(s, bp, mode, max_len); in read_string_to_bprint_overwrite()
884 int64_t ff_read_line_to_bprint_overwrite(AVIOContext *s, AVBPrint *bp) in ff_read_line_to_bprint_overwrite() argument
886 return read_string_to_bprint_overwrite(s, bp, FFBPrintReadLine, -1); in ff_read_line_to_bprint_overwrite()
889 int64_t ff_read_string_to_bprint_overwrite(AVIOContext *s, AVBPrint *bp, in ff_read_string_to_bprint_overwrite() argument
892 return read_string_to_bprint_overwrite(s, bp, FFBPrintReadString, max_len); in ff_read_string_to_bprint_overwrite()
895 int avio_get_str(AVIOContext *s, int maxlen, char *buf, int buflen) in avio_get_str() argument
904 if (!(buf[i] = avio_r8(s))) in avio_get_str()
908 if (!avio_r8(s)) in avio_get_str()
937 uint64_t avio_rb64(AVIOContext *s) in GET_STR16()
940 val = (uint64_t)avio_rb32(s) << 32; in GET_STR16()
941 val |= (uint64_t)avio_rb32(s); in GET_STR16()
956 int ffio_fdopen(AVIOContext **s, URLContext *h) in ffio_fdopen() argument
976 *s = avio_alloc_context(buffer, buffer_size, h->flags & AVIO_FLAG_WRITE, h, in ffio_fdopen()
980 if (!*s) { in ffio_fdopen()
984 (*s)->protocol_whitelist = av_strdup(h->protocol_whitelist); in ffio_fdopen()
985 if (!(*s)->protocol_whitelist && h->protocol_whitelist) { in ffio_fdopen()
986 avio_closep(s); in ffio_fdopen()
989 (*s)->protocol_blacklist = av_strdup(h->protocol_blacklist); in ffio_fdopen()
990 if (!(*s)->protocol_blacklist && h->protocol_blacklist) { in ffio_fdopen()
991 avio_closep(s); in ffio_fdopen()
994 (*s)->direct = h->flags & AVIO_FLAG_DIRECT; in ffio_fdopen()
996 (*s)->seekable = h->is_streamed ? 0 : AVIO_SEEKABLE_NORMAL; in ffio_fdopen()
997 (*s)->max_packet_size = max_packet_size; in ffio_fdopen()
998 (*s)->min_packet_size = h->min_packet_size; in ffio_fdopen()
1000 (*s)->read_pause = (int (*)(void *, int))h->prot->url_read_pause; in ffio_fdopen()
1001 (*s)->read_seek = in ffio_fdopen()
1005 (*s)->seekable |= AVIO_SEEKABLE_TIME; in ffio_fdopen()
1007 ((FFIOContext*)(*s))->short_seek_get = (int (*)(void *))ffurl_get_short_seek; in ffio_fdopen()
1008 (*s)->av_class = &ff_avio_class; in ffio_fdopen()
1012 URLContext* ffio_geturlcontext(AVIOContext *s) in ffio_geturlcontext() argument
1014 if (!s) in ffio_geturlcontext()
1017 if (s->opaque && s->read_packet == (int (*)(void *, uint8_t *, int))ffurl_read) in ffio_geturlcontext()
1018 return s->opaque; in ffio_geturlcontext()
1047 static void update_checksum(AVIOContext *s) in update_checksum() argument
1049 if (s->update_checksum && s->buf_ptr > s->checksum_ptr) { in update_checksum()
1050 s->checksum = s->update_checksum(s->checksum, s->checksum_ptr, in update_checksum()
1051 s->buf_ptr - s->checksum_ptr); in update_checksum()
1055 int ffio_ensure_seekback(AVIOContext *s, int64_t buf_size) in ffio_ensure_seekback() argument
1058 int max_buffer_size = s->max_packet_size ? in ffio_ensure_seekback()
1059 s->max_packet_size : IO_BUFFER_SIZE; in ffio_ensure_seekback()
1060 ptrdiff_t filled = s->buf_end - s->buf_ptr; in ffio_ensure_seekback()
1062 if (buf_size <= s->buf_end - s->buf_ptr) in ffio_ensure_seekback()
1070 if (buf_size + s->buf_ptr - s->buffer <= s->buffer_size || s->seekable || !s->read_packet) in ffio_ensure_seekback()
1072 av_assert0(!s->write_flag); in ffio_ensure_seekback()
1074 if (buf_size <= s->buffer_size) { in ffio_ensure_seekback()
1075 update_checksum(s); in ffio_ensure_seekback()
1076 memmove(s->buffer, s->buf_ptr, filled); in ffio_ensure_seekback()
1081 update_checksum(s); in ffio_ensure_seekback()
1082 memcpy(buffer, s->buf_ptr, filled); in ffio_ensure_seekback()
1083 av_free(s->buffer); in ffio_ensure_seekback()
1084 s->buffer = buffer; in ffio_ensure_seekback()
1085 s->buffer_size = buf_size; in ffio_ensure_seekback()
1087 s->buf_ptr = s->buffer; in ffio_ensure_seekback()
1088 s->buf_end = s->buffer + filled; in ffio_ensure_seekback()
1089 s->checksum_ptr = s->buffer; in ffio_ensure_seekback()
1093 int ffio_limit(AVIOContext *s, int size) in ffio_limit() argument
1095 FFIOContext *const ctx = ffiocontext(s); in ffio_limit()
1097 int64_t pos = avio_tell(s); in ffio_limit()
1100 int64_t newsize = avio_size(s); in ffio_limit()
1119 static int set_buf_size(AVIOContext *s, int buf_size) in set_buf_size() argument
1126 av_free(s->buffer); in set_buf_size()
1127 s->buffer = buffer; in set_buf_size()
1128 ffiocontext(s)->orig_buffer_size = in set_buf_size()
1129 s->buffer_size = buf_size; in set_buf_size()
1130 s->buf_ptr = s->buf_ptr_max = buffer; in set_buf_size()
1131 url_resetbuf(s, s->write_flag ? AVIO_FLAG_WRITE : AVIO_FLAG_READ); in set_buf_size()
1135 int ffio_realloc_buf(AVIOContext *s, int buf_size) in ffio_realloc_buf() argument
1140 if (!s->buffer_size) in ffio_realloc_buf()
1141 return set_buf_size(s, buf_size); in ffio_realloc_buf()
1143 if (buf_size <= s->buffer_size) in ffio_realloc_buf()
1150 data_size = s->write_flag ? (s->buf_ptr - s->buffer) : (s->buf_end - s->buf_ptr); in ffio_realloc_buf()
1152 memcpy(buffer, s->write_flag ? s->buffer : s->buf_ptr, data_size); in ffio_realloc_buf()
1153 av_free(s->buffer); in ffio_realloc_buf()
1154 s->buffer = buffer; in ffio_realloc_buf()
1155 ffiocontext(s)->orig_buffer_size = buf_size; in ffio_realloc_buf()
1156 s->buffer_size = buf_size; in ffio_realloc_buf()
1157 s->buf_ptr = s->write_flag ? (s->buffer + data_size) : s->buffer; in ffio_realloc_buf()
1158 if (s->write_flag) in ffio_realloc_buf()
1159 s->buf_ptr_max = s->buffer + data_size; in ffio_realloc_buf()
1161 s->buf_end = s->write_flag ? (s->buffer + s->buffer_size) : (s->buf_ptr + data_size); in ffio_realloc_buf()
1166 static int url_resetbuf(AVIOContext *s, int flags) in url_resetbuf() argument
1171 s->buf_end = s->buffer + s->buffer_size; in url_resetbuf()
1172 s->write_flag = 1; in url_resetbuf()
1174 s->buf_end = s->buffer; in url_resetbuf()
1175 s->write_flag = 0; in url_resetbuf()
1180 int ffio_rewind_with_probe_data(AVIOContext *s, unsigned char **bufp, int buf_size) in ffio_rewind_with_probe_data() argument
1187 if (s->write_flag) { in ffio_rewind_with_probe_data()
1192 buffer_size = s->buf_end - s->buffer; in ffio_rewind_with_probe_data()
1195 if ((buffer_start = s->pos - buffer_size) > buf_size) { in ffio_rewind_with_probe_data()
1203 alloc_size = FFMAX(s->buffer_size, new_size); in ffio_rewind_with_probe_data()
1209 memcpy(buf + buf_size, s->buffer + overlap, buffer_size - overlap); in ffio_rewind_with_probe_data()
1213 av_free(s->buffer); in ffio_rewind_with_probe_data()
1214 s->buf_ptr = s->buffer = buf; in ffio_rewind_with_probe_data()
1215 s->buffer_size = alloc_size; in ffio_rewind_with_probe_data()
1216 s->pos = buf_size; in ffio_rewind_with_probe_data()
1217 s->buf_end = s->buf_ptr + buf_size; in ffio_rewind_with_probe_data()
1218 s->eof_reached = 0; in ffio_rewind_with_probe_data()
1223 int avio_open(AVIOContext **s, const char *filename, int flags) in avio_open() argument
1225 return avio_open2(s, filename, flags, NULL, NULL); in avio_open()
1228 int ffio_open_whitelist(AVIOContext **s, const char *filename, int flags, in ffio_open_whitelist() argument
1236 *s = NULL; in ffio_open_whitelist()
1241 err = ffio_fdopen(s, h); in ffio_open_whitelist()
1249 int avio_open2(AVIOContext **s, const char *filename, int flags, in avio_open2() argument
1252 return ffio_open_whitelist(s, filename, flags, int_cb, options, NULL, NULL); in avio_open2()
1255 int avio_close(AVIOContext *s) in avio_close() argument
1257 FFIOContext *const ctx = ffiocontext(s); in avio_close()
1261 if (!s) in avio_close()
1264 avio_flush(s); in avio_close()
1265 h = s->opaque; in avio_close()
1266 s->opaque = NULL; in avio_close()
1268 av_freep(&s->buffer); in avio_close()
1269 if (s->write_flag) in avio_close()
1270 av_log(s, AV_LOG_VERBOSE, in avio_close()
1274 av_log(s, AV_LOG_VERBOSE, "Statistics: %"PRId64" bytes read, %d seeks\n", in avio_close()
1276 av_opt_free(s); in avio_close()
1278 error = s->error; in avio_close()
1279 avio_context_free(&s); in avio_close()
1288 int avio_closep(AVIOContext **s) in avio_closep() argument
1290 int ret = avio_close(*s); in avio_closep()
1291 *s = NULL; in avio_closep()
1295 int avio_vprintf(AVIOContext *s, const char *fmt, va_list ap) in avio_vprintf() argument
1303 s->error = AVERROR(ENOMEM); in avio_vprintf()
1306 avio_write(s, bp.str, bp.len); in avio_vprintf()
1311 int avio_printf(AVIOContext *s, const char *fmt, ...) in avio_printf() argument
1317 ret = avio_vprintf(s, fmt, ap); in avio_printf()
1323 void avio_print_string_array(AVIOContext *s, const char *strings[]) in avio_print_string_array() argument
1326 avio_write(s, (const unsigned char *)*strings, strlen(*strings)); in avio_print_string_array()
1329 int avio_pause(AVIOContext *s, int pause) in avio_pause() argument
1331 if (!s->read_pause) in avio_pause()
1333 return s->read_pause(s->opaque, pause); in avio_pause()
1336 int64_t avio_seek_time(AVIOContext *s, int stream_index, in avio_seek_time() argument
1340 if (!s->read_seek) in avio_seek_time()
1342 ret = s->read_seek(s->opaque, stream_index, timestamp, flags); in avio_seek_time()
1345 s->buf_ptr = s->buf_end; // Flush buffer in avio_seek_time()
1346 pos = s->seek(s->opaque, 0, SEEK_CUR); in avio_seek_time()
1348 s->pos = pos; in avio_seek_time()
1373 int avio_accept(AVIOContext *s, AVIOContext **c) in avio_accept() argument
1376 URLContext *sc = s->opaque; in avio_accept()
1462 static int url_open_dyn_buf_internal(AVIOContext **s, int max_packet_size) in url_open_dyn_buf_internal() argument
1478 *s = &ret->pb.pub; in url_open_dyn_buf_internal()
1479 (*s)->max_packet_size = max_packet_size; in url_open_dyn_buf_internal()
1483 int avio_open_dyn_buf(AVIOContext **s) in avio_open_dyn_buf() argument
1485 return url_open_dyn_buf_internal(s, 0); in avio_open_dyn_buf()
1488 int ffio_open_dyn_packet_buf(AVIOContext **s, int max_packet_size) in ffio_open_dyn_packet_buf() argument
1492 return url_open_dyn_buf_internal(s, max_packet_size); in ffio_open_dyn_packet_buf()
1495 int avio_get_dyn_buf(AVIOContext *s, uint8_t **pbuffer) in avio_get_dyn_buf() argument
1499 if (!s) { in avio_get_dyn_buf()
1503 d = s->opaque; in avio_get_dyn_buf()
1505 if (!s->error && !d->size) { in avio_get_dyn_buf()
1507 return FFMAX(s->buf_ptr, s->buf_ptr_max) - s->buffer; in avio_get_dyn_buf()
1510 avio_flush(s); in avio_get_dyn_buf()
1517 void ffio_reset_dyn_buf(AVIOContext *s) in ffio_reset_dyn_buf() argument
1519 DynBuffer *d = s->opaque; in ffio_reset_dyn_buf()
1520 int max_packet_size = s->max_packet_size; in ffio_reset_dyn_buf()
1522 ffio_init_context(ffiocontext(s), d->io_buffer, d->io_buffer_size, in ffio_reset_dyn_buf()
1523 1, d, NULL, s->write_packet, s->seek); in ffio_reset_dyn_buf()
1524 s->max_packet_size = max_packet_size; in ffio_reset_dyn_buf()
1528 int avio_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer) in avio_close_dyn_buf() argument
1534 if (!s) { in avio_close_dyn_buf()
1540 if (!s->max_packet_size) { in avio_close_dyn_buf()
1541 ffio_fill(s, 0, AV_INPUT_BUFFER_PADDING_SIZE); in avio_close_dyn_buf()
1545 avio_flush(s); in avio_close_dyn_buf()
1547 d = s->opaque; in avio_close_dyn_buf()
1551 avio_context_free(&s); in avio_close_dyn_buf()
1556 void ffio_free_dyn_buf(AVIOContext **s) in ffio_free_dyn_buf() argument
1560 if (!*s) in ffio_free_dyn_buf()
1563 d = (*s)->opaque; in ffio_free_dyn_buf()
1565 avio_context_free(s); in ffio_free_dyn_buf()
1578 int ffio_open_null_buf(AVIOContext **s) in ffio_open_null_buf() argument
1580 int ret = url_open_dyn_buf_internal(s, 0); in ffio_open_null_buf()
1582 AVIOContext *pb = *s; in ffio_open_null_buf()
1588 int ffio_close_null_buf(AVIOContext *s) in ffio_close_null_buf() argument
1590 DynBuffer *d = s->opaque; in ffio_close_null_buf()
1593 avio_flush(s); in ffio_close_null_buf()
1597 avio_context_free(&s); in ffio_close_null_buf()