aboutsummaryrefslogtreecommitdiffstats
path: root/src/metadata_pipe.h
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2008-08-26 04:22:58 -0700
committerEric Wong <normalperson@yhbt.net>2008-08-26 04:26:48 -0700
commit9cb6d62a0302d8e49b2225b97602379db7566b5e (patch)
tree0ae4fc4a8376c4f6e78dfebae0724c78e346f9a9 /src/metadata_pipe.h
parent4be65a911b6024dc924d1e7d016cab8c42179f71 (diff)
downloadmpd-9cb6d62a0302d8e49b2225b97602379db7566b5e.tar.gz
mpd-9cb6d62a0302d8e49b2225b97602379db7566b5e.tar.xz
mpd-9cb6d62a0302d8e49b2225b97602379db7566b5e.zip
Reimplement dynamic metadata handling
This has been tested for both playback of streams and outputting to streams, and seems to work fine with minimal locking. This reuses the sequence number infrastructure in OutputBuffer for synchronizing metadata payloads; so (IMNSHO) should be much more understandable than various flags being set here and there.. It could still use some cleanup and much testing, but synchronization issues should be minimal.
Diffstat (limited to 'src/metadata_pipe.h')
-rw-r--r--src/metadata_pipe.h49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/metadata_pipe.h b/src/metadata_pipe.h
new file mode 100644
index 000000000..e54c67584
--- /dev/null
+++ b/src/metadata_pipe.h
@@ -0,0 +1,49 @@
+/* the Music Player Daemon (MPD)
+ * Copyright (C) 2003-2007 by Warren Dukes (warren.dukes@gmail.com)
+ * This project's homepage is: http://www.musicpd.org
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef METADATA_PIPE_H
+#define METADATA_PIPE_H
+
+#include "tag.h"
+#include "mpd_types.h"
+
+void init_metadata_pipe(void);
+
+/*
+ * Called by the decoder thread, this inserts a tag pointer into the pipe
+ * DO NOT FREE the tag placed into the pipe; that is that job of the
+ * caller of metadata_pipe_recv() or metadata_pipe_clear().
+ */
+void metadata_pipe_send(MpdTag * tag, float metadata_time);
+
+/*
+ * Reads and consumes one MpdTag pointer off the pipe. The caller
+ * of this MUST free the MpdTag pointer after it is done using it.
+ */
+MpdTag * metadata_pipe_recv(void);
+
+/*
+ * Returns the last read MpdTag from metadata_pipe_recv(), caller
+ * must free this pointer when it is done using it.
+ */
+MpdTag * metadata_pipe_current(void);
+
+/* Clears all MpdTag pointers on the pipe, freeing all associated elements */
+void metadata_pipe_clear(void);
+
+#endif /* METADATA_PIPE_H */