diff --git a/libavformat/avio.h b/libavformat/avio.h index 28c7d58f50..e65f712623 100644 --- a/libavformat/avio.h +++ b/libavformat/avio.h @@ -353,6 +353,7 @@ ByteIOContext *av_alloc_put_byte( int64_t (*seek)(void *opaque, int64_t offset, int whence)); void put_byte(ByteIOContext *s, int b); +void put_nbyte(ByteIOContext *s, int b, int count); void put_buffer(ByteIOContext *s, const unsigned char *buf, int size); void put_le64(ByteIOContext *s, uint64_t val); void put_be64(ByteIOContext *s, uint64_t val); diff --git a/libavformat/aviobuf.c b/libavformat/aviobuf.c index faae089195..df76507866 100644 --- a/libavformat/aviobuf.c +++ b/libavformat/aviobuf.c @@ -113,6 +113,20 @@ void put_byte(ByteIOContext *s, int b) flush_buffer(s); } +void put_nbyte(ByteIOContext *s, int b, int count) +{ + while (count > 0) { + int len = FFMIN(s->buf_end - s->buf_ptr, count); + memset(s->buf_ptr, b, len); + s->buf_ptr += len; + + if (s->buf_ptr >= s->buf_end) + flush_buffer(s); + + count -= len; + } +} + void put_buffer(ByteIOContext *s, const unsigned char *buf, int size) { while (size > 0) {