aboutsummaryrefslogtreecommitdiffstats
path: root/src/encoder_plugin.h
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2011-07-20 20:54:34 +0200
committerMax Kellermann <max@duempel.org>2011-07-20 20:54:34 +0200
commit838f7cd210dbd3f071d48d54c168c123c3d20c58 (patch)
tree7ded7d68cbd7130b542094f08b50c4e10972a075 /src/encoder_plugin.h
parent13539961b25940ca6d28c28ab7972c244681e3b5 (diff)
downloadmpd-838f7cd210dbd3f071d48d54c168c123c3d20c58.tar.gz
mpd-838f7cd210dbd3f071d48d54c168c123c3d20c58.tar.xz
mpd-838f7cd210dbd3f071d48d54c168c123c3d20c58.zip
encoder_plugin: add method pre_tag()
In the "vorbis" plugin, this is a copy of the old flush() method, while flush() gets a lot of code remove, it just sets the "flush" flag and nothing else. It doesn't start a new stream now, which should fix a few problems in some players.
Diffstat (limited to 'src/encoder_plugin.h')
-rw-r--r--src/encoder_plugin.h24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/encoder_plugin.h b/src/encoder_plugin.h
index 13fb231f4..fb00413e6 100644
--- a/src/encoder_plugin.h
+++ b/src/encoder_plugin.h
@@ -50,6 +50,8 @@ struct encoder_plugin {
bool (*flush)(struct encoder *encoder, GError **error);
+ bool (*pre_tag)(struct encoder *encoder, GError **error);
+
bool (*tag)(struct encoder *encoder, const struct tag *tag,
GError **error);
@@ -148,8 +150,30 @@ encoder_flush(struct encoder *encoder, GError **error)
}
/**
+ * Prepare for sending a tag to the encoder. This is used by some
+ * encoders to flush the previous sub-stream, in preparation to begin
+ * a new one.
+ *
+ * @param encoder the encoder
+ * @param tag the tag object
+ * @param error location to store the error occuring, or NULL to ignore errors.
+ * @return true on success
+ */
+static inline bool
+encoder_pre_tag(struct encoder *encoder, GError **error)
+{
+ /* this method is optional */
+ return encoder->plugin->pre_tag != NULL
+ ? encoder->plugin->pre_tag(encoder, error)
+ : true;
+}
+
+/**
* Sends a tag to the encoder.
*
+ * Instructions: call encoder_pre_tag(); then obtain flushed data with
+ * encoder_read(); finally call encoder_tag().
+ *
* @param encoder the encoder
* @param tag the tag object
* @param error location to store the error occuring, or NULL to ignore errors.