summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--demux/demux.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/demux/demux.c b/demux/demux.c
index 39828627fc..737ee68f23 100644
--- a/demux/demux.c
+++ b/demux/demux.c
@@ -619,8 +619,21 @@ void demux_add_packet(struct sh_stream *stream, demux_packet_t *dp)
dp->stream = stream->index;
dp->next = NULL;
- ds->fw_packs++;
- ds->fw_bytes += demux_packet_estimate_total_size(dp);
+ // (keep in mind that even if the reader went out of data, the queue is not
+ // necessarily empty due to the backbuffer)
+ if (!ds->reader_head && (!ds->skip_to_keyframe || dp->keyframe)) {
+ ds->reader_head = dp;
+ ds->skip_to_keyframe = false;
+ }
+
+ size_t bytes = demux_packet_estimate_total_size(dp);
+ if (ds->reader_head) {
+ ds->fw_packs++;
+ ds->fw_bytes += bytes;
+ } else {
+ ds->bw_bytes += bytes;
+ }
+
if (ds->queue_tail) {
// next packet in stream
ds->queue_tail->next = dp;
@@ -629,12 +642,6 @@ void demux_add_packet(struct sh_stream *stream, demux_packet_t *dp)
// first packet in stream
ds->queue_head = ds->queue_tail = dp;
}
- // (keep in mind that even if the reader went out of data, the queue is not
- // necessarily empty due to the backbuffer)
- if (!ds->reader_head && (!ds->skip_to_keyframe || dp->keyframe)) {
- ds->reader_head = dp;
- ds->skip_to_keyframe = false;
- }
// (In theory it'd be more efficient to make this incremental.)
if (ds->back_pts == MP_NOPTS_VALUE && dp->keyframe)