aboutsummaryrefslogtreecommitdiff
path: root/src/pipe.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pipe.c')
-rw-r--r--src/pipe.c26
1 files changed, 13 insertions, 13 deletions
diff --git a/src/pipe.c b/src/pipe.c
index d8131432..43d1ba1e 100644
--- a/src/pipe.c
+++ b/src/pipe.c
@@ -19,7 +19,6 @@
#include "config.h"
#include "pipe.h"
-#include "buffer.h"
#include "chunk.h"
#include <glib.h>
@@ -33,7 +32,7 @@ struct music_pipe {
/** a pointer to the tail of the chunk */
struct music_chunk **tail_r;
- /** the current number of chunks */
+ /** the current number of samples */
unsigned size;
/** a mutex which protects #head and #tail_r */
@@ -123,7 +122,7 @@ music_pipe_shift(struct music_pipe *mp)
assert(!music_chunk_is_empty(chunk));
mp->head = chunk->next;
- --mp->size;
+ mp->size -= chunk->frame->nb_samples;
if (mp->head == NULL) {
assert(mp->size == 0);
@@ -149,20 +148,22 @@ music_pipe_shift(struct music_pipe *mp)
return chunk;
}
-void
-music_pipe_clear(struct music_pipe *mp, struct music_buffer *buffer)
+void music_pipe_clear(struct music_pipe *mp)
{
- struct music_chunk *chunk;
+ struct music_chunk *chunk;
- while ((chunk = music_pipe_shift(mp)) != NULL)
- music_buffer_return(buffer, chunk);
+ while ((chunk = music_pipe_shift(mp)) != NULL) {
+ if (chunk->other)
+ music_chunk_free(chunk->other);
+ music_chunk_free(chunk);
+ }
}
void
music_pipe_push(struct music_pipe *mp, struct music_chunk *chunk)
{
assert(!music_chunk_is_empty(chunk));
- assert(chunk->length == 0 || audio_format_valid(&chunk->audio_format));
+ assert(!chunk->frame || audio_format_valid(&chunk->audio_format));
g_mutex_lock(mp->mutex);
@@ -171,7 +172,7 @@ music_pipe_push(struct music_pipe *mp, struct music_chunk *chunk)
music_chunk_check_format(chunk, &mp->audio_format));
#ifndef NDEBUG
- if (!audio_format_defined(&mp->audio_format) && chunk->length > 0)
+ if (!audio_format_defined(&mp->audio_format) && chunk->frame)
mp->audio_format = chunk->audio_format;
#endif
@@ -179,13 +180,12 @@ music_pipe_push(struct music_pipe *mp, struct music_chunk *chunk)
*mp->tail_r = chunk;
mp->tail_r = &chunk->next;
- ++mp->size;
+ mp->size += chunk->frame->nb_samples;
g_mutex_unlock(mp->mutex);
}
-unsigned
-music_pipe_size(const struct music_pipe *mp)
+unsigned music_pipe_size(struct music_pipe *mp)
{
g_mutex_lock(mp->mutex);
unsigned size = mp->size;