diff options
author | Max Kellermann <max@duempel.org> | 2011-07-20 20:54:34 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2011-07-20 20:54:34 +0200 |
commit | 838f7cd210dbd3f071d48d54c168c123c3d20c58 (patch) | |
tree | 7ded7d68cbd7130b542094f08b50c4e10972a075 /src/encoder_plugin.h | |
parent | 13539961b25940ca6d28c28ab7972c244681e3b5 (diff) | |
download | mpd-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 '')
-rw-r--r-- | src/encoder_plugin.h | 24 |
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. |