music_pipe: added functions chunk_init() and chunk_free()
These two functions will care about memory allocation and deallocation in the future.
This commit is contained in:
parent
85b6ff7b59
commit
fcc11bc9d8
48
src/pipe.c
48
src/pipe.c
|
@ -26,6 +26,18 @@
|
||||||
|
|
||||||
struct music_pipe music_pipe;
|
struct music_pipe music_pipe;
|
||||||
|
|
||||||
|
static void
|
||||||
|
music_chunk_init(struct music_chunk *chunk)
|
||||||
|
{
|
||||||
|
chunk->length = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
music_chunk_free(struct music_chunk *chunk)
|
||||||
|
{
|
||||||
|
(void)chunk;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
music_pipe_init(unsigned int size, struct notify *notify)
|
music_pipe_init(unsigned int size, struct notify *notify)
|
||||||
{
|
{
|
||||||
|
@ -37,19 +49,16 @@ music_pipe_init(unsigned int size, struct notify *notify)
|
||||||
music_pipe.end = 0;
|
music_pipe.end = 0;
|
||||||
music_pipe.lazy = false;
|
music_pipe.lazy = false;
|
||||||
music_pipe.notify = notify;
|
music_pipe.notify = notify;
|
||||||
music_pipe.chunks[0].length = 0;
|
music_chunk_init(&music_pipe.chunks[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void music_pipe_free(void)
|
void music_pipe_free(void)
|
||||||
{
|
{
|
||||||
assert(music_pipe.chunks != NULL);
|
assert(music_pipe.chunks != NULL);
|
||||||
g_free(music_pipe.chunks);
|
|
||||||
}
|
|
||||||
|
|
||||||
void music_pipe_clear(void)
|
music_pipe_clear();
|
||||||
{
|
|
||||||
music_pipe.end = music_pipe.begin;
|
g_free(music_pipe.chunks);
|
||||||
music_pipe.chunks[music_pipe.end].length = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** return the index of the chunk after i */
|
/** return the index of the chunk after i */
|
||||||
|
@ -61,6 +70,19 @@ static inline unsigned successor(unsigned i)
|
||||||
return i == music_pipe.num_chunks ? 0 : i;
|
return i == music_pipe.num_chunks ? 0 : i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void music_pipe_clear(void)
|
||||||
|
{
|
||||||
|
unsigned i;
|
||||||
|
|
||||||
|
for (i = music_pipe.begin; i != music_pipe.end; i = successor(i))
|
||||||
|
music_chunk_free(&music_pipe.chunks[i]);
|
||||||
|
|
||||||
|
music_chunk_free(&music_pipe.chunks[music_pipe.end]);
|
||||||
|
|
||||||
|
music_pipe.end = music_pipe.begin;
|
||||||
|
music_chunk_init(&music_pipe.chunks[music_pipe.end]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mark the tail chunk as "full" and wake up the player if is waiting
|
* Mark the tail chunk as "full" and wake up the player if is waiting
|
||||||
* for the decoder.
|
* for the decoder.
|
||||||
|
@ -73,7 +95,8 @@ static void output_buffer_expand(unsigned i)
|
||||||
assert(i != music_pipe.end);
|
assert(i != music_pipe.end);
|
||||||
|
|
||||||
music_pipe.end = i;
|
music_pipe.end = i;
|
||||||
music_pipe.chunks[i].length = 0;
|
music_chunk_init(&music_pipe.chunks[i]);
|
||||||
|
|
||||||
if (was_empty)
|
if (was_empty)
|
||||||
/* if the buffer was empty, the player thread might be
|
/* if the buffer was empty, the player thread might be
|
||||||
waiting for us; wake it up now that another decoded
|
waiting for us; wake it up now that another decoded
|
||||||
|
@ -107,6 +130,8 @@ void music_pipe_shift(void)
|
||||||
assert(music_pipe.begin != music_pipe.end);
|
assert(music_pipe.begin != music_pipe.end);
|
||||||
assert(music_pipe.begin < music_pipe.num_chunks);
|
assert(music_pipe.begin < music_pipe.num_chunks);
|
||||||
|
|
||||||
|
music_chunk_free(&music_pipe.chunks[music_pipe.begin]);
|
||||||
|
|
||||||
music_pipe.begin = successor(music_pipe.begin);
|
music_pipe.begin = successor(music_pipe.begin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -241,6 +266,9 @@ size_t music_pipe_append(const void *data0, size_t datalen,
|
||||||
void music_pipe_skip(unsigned num)
|
void music_pipe_skip(unsigned num)
|
||||||
{
|
{
|
||||||
int i = music_pipe_absolute(num);
|
int i = music_pipe_absolute(num);
|
||||||
if (i >= 0)
|
if (i < 0)
|
||||||
music_pipe.begin = i;
|
return;
|
||||||
|
|
||||||
|
while (music_pipe.begin != (unsigned)i)
|
||||||
|
music_pipe_shift();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue