Mercurial > libavformat.hg
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; |