[FFmpeg-cvslog] Merge commit '3f75e5116b900f1428aa13041fc7d6301bf1988a'
James Almer
git at videolan.org
Fri Apr 14 01:51:53 EEST 2017
ffmpeg | branch: master | James Almer <jamrial at gmail.com> | Thu Apr 13 19:49:20 2017 -0300| [34d7f337c1608c72be8c36355018dc894f0560ce] | committer: James Almer
Merge commit '3f75e5116b900f1428aa13041fc7d6301bf1988a'
* commit '3f75e5116b900f1428aa13041fc7d6301bf1988a':
avio: Keep track of the amount of data written
Merged-by: James Almer <jamrial at gmail.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=34d7f337c1608c72be8c36355018dc894f0560ce
---
libavformat/avio.h | 2 ++
libavformat/aviobuf.c | 7 +++++++
libavformat/version.h | 2 +-
3 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/libavformat/avio.h b/libavformat/avio.h
index 6f4ed8440d..525eb7129e 100644
--- a/libavformat/avio.h
+++ b/libavformat/avio.h
@@ -327,6 +327,8 @@ typedef struct AVIOContext {
* This is current internal only, do not use from outside.
*/
int (*short_seek_get)(void *opaque);
+
+ int64_t written;
} AVIOContext;
/**
diff --git a/libavformat/aviobuf.c b/libavformat/aviobuf.c
index ef6a0d4e9b..0a7c39eacd 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);
diff --git a/libavformat/version.h b/libavformat/version.h
index 0920b48145..411fd6613d 100644
--- a/libavformat/version.h
+++ b/libavformat/version.h
@@ -33,7 +33,7 @@
// Also please add any ticket numbers that you believe might be affected here
#define LIBAVFORMAT_VERSION_MAJOR 57
#define LIBAVFORMAT_VERSION_MINOR 72
-#define LIBAVFORMAT_VERSION_MICRO 100
+#define LIBAVFORMAT_VERSION_MICRO 101
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
LIBAVFORMAT_VERSION_MINOR, \
======================================================================
diff --cc libavformat/avio.h
index 6f4ed8440d,7bf7985c5e..525eb7129e
--- a/libavformat/avio.h
+++ b/libavformat/avio.h
@@@ -321,12 -176,7 +321,14 @@@ typedef struct AVIOContext
*/
enum AVIODataMarkerType current_type;
int64_t last_time;
+
+ /**
+ * A callback that is used instead of short_seek_threshold.
+ * This is current internal only, do not use from outside.
+ */
+ int (*short_seek_get)(void *opaque);
++
+ int64_t written;
} AVIOContext;
/**
diff --cc libavformat/aviobuf.c
index ef6a0d4e9b,6d83a9661b..0a7c39eacd
--- a/libavformat/aviobuf.c
+++ b/libavformat/aviobuf.c
@@@ -119,7 -144,6 +119,8 @@@ int ffio_init_context(AVIOContext *s
s->ignore_boundary_point = 0;
s->current_type = AVIO_DATA_MARKER_UNKNOWN;
s->last_time = AV_NOPTS_VALUE;
+ s->short_seek_get = NULL;
++ s->written = 0;
return 0;
}
@@@ -141,34 -165,32 +142,37 @@@ AVIOContext *avio_alloc_context
return s;
}
-static void flush_buffer(AVIOContext *s)
+static void writeout(AVIOContext *s, const uint8_t *data, int len)
{
- if (s->buf_ptr > s->buffer) {
- int size = s->buf_ptr - s->buffer;
- if (!s->error) {
- int ret = 0;
- if (s->write_data_type)
- ret = s->write_data_type(s->opaque, s->buffer,
- size,
- s->current_type,
- s->last_time);
- else if (s->write_packet)
- ret = s->write_packet(s->opaque, s->buffer,
- size);
- if (ret < 0) {
- s->error = ret;
- } else {
- if (s->pos + size > s->written)
- s->written = s->pos + size;
- }
- }
- if (s->current_type == AVIO_DATA_MARKER_SYNC_POINT ||
- s->current_type == AVIO_DATA_MARKER_BOUNDARY_POINT) {
- s->current_type = AVIO_DATA_MARKER_UNKNOWN;
+ if (!s->error) {
+ int ret = 0;
+ if (s->write_data_type)
+ ret = s->write_data_type(s->opaque, (uint8_t *)data,
+ len,
+ s->current_type,
+ s->last_time);
+ else if (s->write_packet)
+ 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;
}
- s->last_time = AV_NOPTS_VALUE;
+ }
+ if (s->current_type == AVIO_DATA_MARKER_SYNC_POINT ||
+ s->current_type == AVIO_DATA_MARKER_BOUNDARY_POINT) {
+ s->current_type = AVIO_DATA_MARKER_UNKNOWN;
+ }
+ s->last_time = AV_NOPTS_VALUE;
+ s->writeout_count ++;
+ s->pos += len;
+}
+
+static void flush_buffer(AVIOContext *s)
+{
+ if (s->write_flag && s->buf_ptr > s->buffer) {
+ writeout(s, s->buffer, s->buf_ptr - s->buffer);
if (s->update_checksum) {
s->checksum = s->update_checksum(s->checksum, s->checksum_ptr,
s->buf_ptr - s->checksum_ptr);
diff --cc libavformat/version.h
index 0920b48145,3fa2c4443b..411fd6613d
--- a/libavformat/version.h
+++ b/libavformat/version.h
@@@ -29,11 -29,9 +29,11 @@@
#include "libavutil/version.h"
-#define LIBAVFORMAT_VERSION_MAJOR 57
-#define LIBAVFORMAT_VERSION_MINOR 10
-#define LIBAVFORMAT_VERSION_MICRO 2
+// Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium)
+// Also please add any ticket numbers that you believe might be affected here
+#define LIBAVFORMAT_VERSION_MAJOR 57
+#define LIBAVFORMAT_VERSION_MINOR 72
- #define LIBAVFORMAT_VERSION_MICRO 100
++#define LIBAVFORMAT_VERSION_MICRO 101
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
LIBAVFORMAT_VERSION_MINOR, \
More information about the ffmpeg-cvslog
mailing list