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)