comparison aviobuf.c @ 1326:142fb755fbf5 libavformat

support forward seeking in non seekable streams
author michael
date Tue, 26 Sep 2006 17:09:03 +0000
parents 9e739042d95c
children 0899bfe4105c
comparison
equal deleted inserted replaced
1325:9e739042d95c 1326:142fb755fbf5
20 #include "avio.h" 20 #include "avio.h"
21 #include <stdarg.h> 21 #include <stdarg.h>
22 22
23 #define IO_BUFFER_SIZE 32768 23 #define IO_BUFFER_SIZE 32768
24 24
25 static void fill_buffer(ByteIOContext *s);
26
25 int init_put_byte(ByteIOContext *s, 27 int init_put_byte(ByteIOContext *s,
26 unsigned char *buffer, 28 unsigned char *buffer,
27 int buffer_size, 29 int buffer_size,
28 int write_flag, 30 int write_flag,
29 void *opaque, 31 void *opaque,
120 offset1 = offset - pos; 122 offset1 = offset - pos;
121 if (!s->must_flush && 123 if (!s->must_flush &&
122 offset1 >= 0 && offset1 < (s->buf_end - s->buffer)) { 124 offset1 >= 0 && offset1 < (s->buf_end - s->buffer)) {
123 /* can do the seek inside the buffer */ 125 /* can do the seek inside the buffer */
124 s->buf_ptr = s->buffer + offset1; 126 s->buf_ptr = s->buffer + offset1;
127 } else if(s->is_streamed && !s->write_flag &&
128 offset1 >= 0 && offset1 < (s->buf_end - s->buffer) + (1<<16)){
129 while(s->pos < offset && !s->eof_reached)
130 fill_buffer(s);
131 s->buf_ptr = s->buf_end + offset - s->pos;
125 } else { 132 } else {
126 #ifdef CONFIG_MUXERS 133 #ifdef CONFIG_MUXERS
127 if (s->write_flag) { 134 if (s->write_flag) {
128 flush_buffer(s); 135 flush_buffer(s);
129 s->must_flush = 1; 136 s->must_flush = 1;