Originally committed as revision 10709 to svn://svn.ffmpeg.org/ffmpeg/trunk
Björn Axelsson authored on 2007/10/11 23:57:47... | ... |
@@ -203,6 +203,11 @@ int url_fdopen(ByteIOContext *s, URLContext *h); |
203 | 203 |
|
204 | 204 |
/** @warning must be called before any I/O */ |
205 | 205 |
int url_setbufsize(ByteIOContext *s, int buf_size); |
206 |
+/** Reset the buffer for reading or writing. |
|
207 |
+ * @note Will drop any data currently in the buffer without transmitting it. |
|
208 |
+ * @param flags URL_RDONLY to set up the buffer for reading, or URL_WRONLY |
|
209 |
+ * to set up the buffer for writing. */ |
|
210 |
+int url_resetbuf(ByteIOContext *s, int flags); |
|
206 | 211 |
|
207 | 212 |
/** @note when opened as read/write, the buffers are only used for |
208 | 213 |
writing */ |
... | ... |
@@ -38,11 +38,7 @@ int init_put_byte(ByteIOContext *s, |
38 | 38 |
s->buffer = buffer; |
39 | 39 |
s->buffer_size = buffer_size; |
40 | 40 |
s->buf_ptr = buffer; |
41 |
- s->write_flag = write_flag; |
|
42 |
- if (!s->write_flag) |
|
43 |
- s->buf_end = buffer; |
|
44 |
- else |
|
45 |
- s->buf_end = buffer + buffer_size; |
|
41 |
+ url_resetbuf(s, write_flag ? URL_WRONLY : URL_RDONLY); |
|
46 | 42 |
s->opaque = opaque; |
47 | 43 |
s->write_packet = write_packet; |
48 | 44 |
s->read_packet = read_packet; |
... | ... |
@@ -534,10 +530,23 @@ int url_setbufsize(ByteIOContext *s, int buf_size) |
534 | 534 |
s->buffer = buffer; |
535 | 535 |
s->buffer_size = buf_size; |
536 | 536 |
s->buf_ptr = buffer; |
537 |
- if (!s->write_flag) |
|
538 |
- s->buf_end = buffer; |
|
539 |
- else |
|
540 |
- s->buf_end = buffer + buf_size; |
|
537 |
+ url_resetbuf(s, s->write_flag ? URL_WRONLY : URL_RDONLY); |
|
538 |
+ return 0; |
|
539 |
+} |
|
540 |
+ |
|
541 |
+int url_resetbuf(ByteIOContext *s, int flags) |
|
542 |
+{ |
|
543 |
+ URLContext *h = s->opaque; |
|
544 |
+ if ((flags & URL_RDWR) || (h && h->flags != flags && !h->flags & URL_RDWR)) |
|
545 |
+ return AVERROR(EINVAL); |
|
546 |
+ |
|
547 |
+ if (flags & URL_WRONLY) { |
|
548 |
+ s->buf_end = s->buffer + s->buffer_size; |
|
549 |
+ s->write_flag = 1; |
|
550 |
+ } else { |
|
551 |
+ s->buf_end = s->buffer; |
|
552 |
+ s->write_flag = 0; |
|
553 |
+ } |
|
541 | 554 |
return 0; |
542 | 555 |
} |
543 | 556 |
|