OutputBuffer should be a more generic low-level library, without
dependencies to the other headers.  This patch adds the field
"notify", which is used to signal the player thread.  It is passed in
the constructor, and removes the need to compile with the decode.h
header.
---

 src/outputBuffer.c |    7 ++++---
 src/outputBuffer.h |    5 ++++-
 src/playerData.c   |    2 +-
 3 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/src/outputBuffer.c b/src/outputBuffer.c
index 97a9e78..aee2f83 100644
--- a/src/outputBuffer.c
+++ b/src/outputBuffer.c
@@ -21,7 +21,7 @@
 
 #include "utils.h"
 
-void ob_init(unsigned int size)
+void ob_init(unsigned int size, Notify *notify)
 {
        assert(size > 0);
 
@@ -31,6 +31,7 @@ void ob_init(unsigned int size)
        ob.begin = 0;
        ob.end = 0;
        ob.lazy = 0;
+       ob.notify = notify;
        ob.chunks[0].chunkSize = 0;
 }
 
@@ -61,7 +62,7 @@ static inline unsigned successor(unsigned i)
  */
 static void output_buffer_expand(unsigned i)
 {
-       int was_empty = !ob.lazy || ob_is_empty();
+       int was_empty = ob.notify != NULL && (!ob.lazy || ob_is_empty());
 
        assert(i == (ob.end + 1) % ob.size);
        assert(i != ob.end);
@@ -72,7 +73,7 @@ static void output_buffer_expand(unsigned i)
                /* if the buffer was empty, the player thread might be
                   waiting for us; wake it up now that another decoded
                   buffer has become available. */
-               notify_signal(&pc.notify);
+               notify_signal(ob.notify);
 }
 
 void ob_flush(void)
diff --git a/src/outputBuffer.h b/src/outputBuffer.h
index ebbc0d2..fb3b430 100644
--- a/src/outputBuffer.h
+++ b/src/outputBuffer.h
@@ -19,6 +19,7 @@
 #ifndef OUTPUT_BUFFER_H
 #define OUTPUT_BUFFER_H
 
+#include "notify.h"
 #include "pcm_utils.h"
 
 #define OUTPUT_BUFFER_DC_STOP   -1
@@ -55,9 +56,11 @@ typedef struct _OutputBuffer {
 
        AudioFormat audioFormat;
        ConvState convState;
+
+       Notify *notify;
 } OutputBuffer;
 
-void ob_init(unsigned int size);
+void ob_init(unsigned int size, Notify *notify);
 
 void ob_free(void);
 
diff --git a/src/playerData.c b/src/playerData.c
index f268c85..6af3c59 100644
--- a/src/playerData.c
+++ b/src/playerData.c
@@ -72,7 +72,7 @@ void initPlayerData(void)
                buffered_before_play = buffered_chunks;
        }
 
-       ob_init(buffered_chunks);
+       ob_init(buffered_chunks, &pc.notify);
 
        notify_init(&pc.notify);
        pc.error = PLAYER_ERROR_NOERROR;


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Musicpd-dev-team mailing list
Musicpd-dev-team@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/musicpd-dev-team

Reply via email to