aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Allmann <joshua.allmann@gmail.com>2010-07-01 20:15:49 +0000
committerMartin Storsjö <martin@martin.st>2010-07-01 20:15:49 +0000
commitde1807bbc4ea29e9492484e1104d4da33cd6ba28 (patch)
tree8c6361d7b3f62430961979e2e6409973f51949a8
parent4449df6baf245465715844ce96886600128b3a83 (diff)
downloadffmpeg-de1807bbc4ea29e9492484e1104d4da33cd6ba28.tar.gz
Pad the buffer in url_close_dyn_buf, for buffers opened with url_open_dyn_buf
Patch by Josh Allmann, joshua dot allmann at gmail Originally committed as revision 23942 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavformat/avio.h5
-rw-r--r--libavformat/aviobuf.c10
2 files changed, 13 insertions, 2 deletions
diff --git a/libavformat/avio.h b/libavformat/avio.h
index dc8fdd6f7d..a95504838c 100644
--- a/libavformat/avio.h
+++ b/libavformat/avio.h
@@ -530,7 +530,10 @@ int url_open_dyn_packet_buf(ByteIOContext **s, int max_packet_size);
/**
* Return the written size and a pointer to the buffer. The buffer
- * must be freed with av_free().
+ * must be freed with av_free(). If the buffer is opened with
+ * url_open_dyn_buf, then padding of FF_INPUT_BUFFER_PADDING_SIZE is
+ * added; if opened with url_open_dyn_packet_buf, no padding is added.
+ *
* @param s IO context
* @param pbuffer pointer to a byte buffer
* @return the length of the byte buffer
diff --git a/libavformat/aviobuf.c b/libavformat/aviobuf.c
index 8684903464..df4ea60227 100644
--- a/libavformat/aviobuf.c
+++ b/libavformat/aviobuf.c
@@ -894,6 +894,14 @@ int url_close_dyn_buf(ByteIOContext *s, uint8_t **pbuffer)
{
DynBuffer *d = s->opaque;
int size;
+ static const char padbuf[FF_INPUT_BUFFER_PADDING_SIZE] = {0};
+ int padding = 0;
+
+ /* don't attempt to pad fixed-size packet buffers */
+ if (!s->max_packet_size) {
+ put_buffer(s, padbuf, sizeof(padbuf));
+ padding = FF_INPUT_BUFFER_PADDING_SIZE;
+ }
put_flush_packet(s);
@@ -901,6 +909,6 @@ int url_close_dyn_buf(ByteIOContext *s, uint8_t **pbuffer)
size = d->size;
av_free(d);
av_free(s);
- return size;
+ return size - padding;
}
#endif /* CONFIG_MUXERS || CONFIG_NETWORK */