free_buffer: Keep h->offset in sync so we know where we are in the file.
authorNicolas Pennequin <nicolas.pennequin@free.fr>
Sat, 4 Aug 2007 21:00:52 +0000 (4 23:00 +0200)
committerNicolas Pennequin <nicolas.pennequin@free.fr>
Sat, 4 Aug 2007 21:00:52 +0000 (4 23:00 +0200)
testplugin.c

index 2ae948e..109b10e 100644 (file)
@@ -78,6 +78,7 @@ struct memory_handle {
     size_t offset;       /* Offset at which we started reading the file */
     struct memory_handle *next;
 };
+/* at all times, we have: filesize == offset + available + filerem */
 
 
 static char *buffer;
@@ -370,8 +371,8 @@ static ssize_t buffer_handle(int handle_id)
         rb->close(h->fd);
     }
 
-    DEBUGF("buffered %ld bytes (%ld of %ld available, remaining: %ld)\n",
-           ret, h->available, h->filesize, h->filerem);
+    DEBUGF("buffered %ld bytes (%ld of %ld available, rem: %ld, off: %ld)\n",
+           ret, h->available, h->filesize, h->filerem, h->offset);
 
     graph_view(100);
 
@@ -399,6 +400,7 @@ static void free_buffer(int handle_id)
         if (!h) return;
         h->data = RINGBUF_ADD(h->data, delta);
         h->ridx = RINGBUF_ADD(h->ridx, delta);
+        h->widx = RINGBUF_ADD(h->widx, delta);
         DEBUGF("free_buffer(%d): metadata, moved by %ld bytes\n",
                handle_id, delta);
     }
@@ -410,6 +412,7 @@ static void free_buffer(int handle_id)
         if (!h) return;
         h->data = RINGBUF_ADD(h->data, delta);
         h->available -= delta;
+        h->offset += delta;
         DEBUGF("free_buffer(%d): audio, %ld bytes freed\n", handle_id, delta);
     }
 }