From 9cb6d62a0302d8e49b2225b97602379db7566b5e Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 26 Aug 2008 04:22:58 -0700 Subject: 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. --- src/metadata_pipe.h | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 src/metadata_pipe.h (limited to 'src/metadata_pipe.h') 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 */ -- cgit v1.2.3