summaryrefslogtreecommitdiffstats
path: root/demux/demux.c
diff options
context:
space:
mode:
Diffstat (limited to 'demux/demux.c')
-rw-r--r--demux/demux.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/demux/demux.c b/demux/demux.c
index 2c252e6c20..6908bbcca5 100644
--- a/demux/demux.c
+++ b/demux/demux.c
@@ -220,6 +220,7 @@ struct demux_internal {
bool enable_recording;
struct mp_recorder *recorder;
int64_t slave_unbuffered_read_bytes; // value repoted from demuxer impl.
+ int64_t hack_unbuffered_read_bytes; // for demux_get_bytes_read_hack()
int64_t cache_unbuffered_read_bytes; // for demux_reader_state.bytes_per_second
};
@@ -3049,6 +3050,7 @@ static void update_bytes_read(struct demux_internal *in)
in->slave_unbuffered_read_bytes = 0;
in->cache_unbuffered_read_bytes += new;
+ in->hack_unbuffered_read_bytes += new;
}
// must be called not locked
@@ -3105,6 +3107,23 @@ void demux_report_unbuffered_read_bytes(struct demuxer *demuxer, int64_t new)
in->slave_unbuffered_read_bytes += new;
}
+// Return bytes read since last query. It's a hack because it works only if
+// the demuxer thread is disabled.
+int64_t demux_get_bytes_read_hack(struct demuxer *demuxer)
+{
+ struct demux_internal *in = demuxer->in;
+
+ // Required because demuxer==in->d_user, and we access in->d_thread.
+ // Locking won't solve this, because we also need to access struct stream.
+ assert(!in->threading);
+
+ update_bytes_read(in);
+
+ int64_t res = in->hack_unbuffered_read_bytes;
+ in->hack_unbuffered_read_bytes = 0;
+ return res;
+}
+
void demux_get_bitrate_stats(struct demuxer *demuxer, double *rates)
{
struct demux_internal *in = demuxer->in;