output/recorder: implement send_tag()

This commit is contained in:
Max Kellermann 2014-12-26 14:57:21 +01:00
parent a31129333c
commit b3435ae432
2 changed files with 23 additions and 1 deletions

1
NEWS
View File

@ -14,6 +14,7 @@ ver 0.20 (not yet released)
* output
- jack: reduce CPU usage
- pulse: set channel map to WAVE-EX
- recorder: record tags
* mixer
- null: new plugin
* reset song priority on playback

View File

@ -23,6 +23,7 @@
#include "encoder/EncoderPlugin.hxx"
#include "encoder/EncoderList.hxx"
#include "config/ConfigError.hxx"
#include "Log.hxx"
#include "util/Error.hxx"
#include "util/Domain.hxx"
#include "system/fd_util.h"
@ -75,6 +76,8 @@ struct RecorderOutput {
* Writes pending data from the encoder to the output file.
*/
bool EncoderToFile(Error &error);
void SendTag(const Tag &tag);
};
static constexpr Domain recorder_output_domain("recorder_output");
@ -243,6 +246,24 @@ recorder_output_close(AudioOutput *ao)
recorder.Close();
}
inline void
RecorderOutput::SendTag(const Tag &tag)
{
Error error;
if (!encoder_pre_tag(encoder, error) ||
!EncoderToFile(error) ||
!encoder_tag(encoder, &tag, error))
LogError(error);
}
static void
recorder_output_send_tag(AudioOutput *ao, const Tag *tag)
{
RecorderOutput &recorder = *(RecorderOutput *)ao;
recorder.SendTag(*tag);
}
static size_t
recorder_output_play(AudioOutput *ao, const void *chunk, size_t size,
Error &error)
@ -264,7 +285,7 @@ const struct AudioOutputPlugin recorder_output_plugin = {
recorder_output_open,
recorder_output_close,
nullptr,
nullptr,
recorder_output_send_tag,
recorder_output_play,
nullptr,
nullptr,