[FFmpeg-cvslog] r10709 - in trunk/libavformat: avio.h aviobuf.c
benoit
subversion
Thu Oct 11 16:57:47 CEST 2007
Author: benoit
Date: Thu Oct 11 16:57:47 2007
New Revision: 10709
Log:
Add functionality to set the direction of a ByteIOContext buffer.
Patch by Bj?rn Axelsson bjorn axelsson intinor se
Original thread: [FFmpeg-devel] [PATCH] MMS protocol support patch 1
Date: 09/19/2007 05:51 PM
Modified:
trunk/libavformat/avio.h
trunk/libavformat/aviobuf.c
Modified: trunk/libavformat/avio.h
==============================================================================
--- trunk/libavformat/avio.h (original)
+++ trunk/libavformat/avio.h Thu Oct 11 16:57:47 2007
@@ -203,6 +203,11 @@ int url_fdopen(ByteIOContext *s, URLCont
/** @warning must be called before any I/O */
int url_setbufsize(ByteIOContext *s, int buf_size);
+/** Reset the buffer for reading or writing.
+ * @note Will drop any data currently in the buffer without transmitting it.
+ * @param flags URL_RDONLY to set up the buffer for reading, or URL_WRONLY
+ * to set up the buffer for writing. */
+int url_resetbuf(ByteIOContext *s, int flags);
/** @note when opened as read/write, the buffers are only used for
writing */
Modified: trunk/libavformat/aviobuf.c
==============================================================================
--- trunk/libavformat/aviobuf.c (original)
+++ trunk/libavformat/aviobuf.c Thu Oct 11 16:57:47 2007
@@ -38,11 +38,7 @@ int init_put_byte(ByteIOContext *s,
s->buffer = buffer;
s->buffer_size = buffer_size;
s->buf_ptr = buffer;
- s->write_flag = write_flag;
- if (!s->write_flag)
- s->buf_end = buffer;
- else
- s->buf_end = buffer + buffer_size;
+ url_resetbuf(s, write_flag ? URL_WRONLY : URL_RDONLY);
s->opaque = opaque;
s->write_packet = write_packet;
s->read_packet = read_packet;
@@ -534,10 +530,23 @@ int url_setbufsize(ByteIOContext *s, int
s->buffer = buffer;
s->buffer_size = buf_size;
s->buf_ptr = buffer;
- if (!s->write_flag)
- s->buf_end = buffer;
- else
- s->buf_end = buffer + buf_size;
+ url_resetbuf(s, s->write_flag ? URL_WRONLY : URL_RDONLY);
+ return 0;
+}
+
+int url_resetbuf(ByteIOContext *s, int flags)
+{
+ URLContext *h = s->opaque;
+ if ((flags & URL_RDWR) || (h && h->flags != flags && !h->flags & URL_RDWR))
+ return AVERROR(EINVAL);
+
+ if (flags & URL_WRONLY) {
+ s->buf_end = s->buffer + s->buffer_size;
+ s->write_flag = 1;
+ } else {
+ s->buf_end = s->buffer;
+ s->write_flag = 0;
+ }
return 0;
}
More information about the ffmpeg-cvslog
mailing list