diff options
author | Eric Wong <normalperson@yhbt.net> | 2008-08-26 04:22:58 -0700 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2008-08-26 04:26:48 -0700 |
commit | 9cb6d62a0302d8e49b2225b97602379db7566b5e (patch) | |
tree | 0ae4fc4a8376c4f6e78dfebae0724c78e346f9a9 /src/metadata_pipe.h | |
parent | 4be65a911b6024dc924d1e7d016cab8c42179f71 (diff) | |
download | mpd-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.h | 49 |
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 */ |