X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=libavformat%2Faviobuf.c;h=0a7c39eacdb76b7e436945d2d507dfdb1844bf38;hb=e0beaff4877a97e45db27adea3ffbcabaaea7b94;hp=ef6a0d4e9ba3d17a4fe554bbeb7f9d3b2f519c51;hpb=0050449a0744eed0d900073c9ea3e6b375abf0f7;p=ffmpeg diff --git a/libavformat/aviobuf.c b/libavformat/aviobuf.c index ef6a0d4e9ba..0a7c39eacdb 100644 --- a/libavformat/aviobuf.c +++ b/libavformat/aviobuf.c @@ -120,6 +120,7 @@ int ffio_init_context(AVIOContext *s, s->current_type = AVIO_DATA_MARKER_UNKNOWN; s->last_time = AV_NOPTS_VALUE; s->short_seek_get = NULL; + s->written = 0; return 0; } @@ -154,6 +155,9 @@ static void writeout(AVIOContext *s, const uint8_t *data, int len) ret = s->write_packet(s->opaque, (uint8_t *)data, len); if (ret < 0) { s->error = ret; + } else { + if (s->pos + len > s->written) + s->written = s->pos + len; } } if (s->current_type == AVIO_DATA_MARKER_SYNC_POINT || @@ -323,6 +327,9 @@ int64_t avio_size(AVIOContext *s) if (!s) return AVERROR(EINVAL); + if (s->written) + return s->written; + if (!s->seek) return AVERROR(ENOSYS); size = s->seek(s->opaque, 0, AVSEEK_SIZE);