diff options
Diffstat (limited to 'src/pipe.c')
-rw-r--r-- | src/pipe.c | 26 |
1 files changed, 13 insertions, 13 deletions
@@ -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; |