encoder/Interface: convert PreparedEncoder to abstract class

This commit is contained in:
Max Kellermann
2016-05-04 18:29:31 +02:00
parent e7edc02647
commit b376536a3b
15 changed files with 110 additions and 301 deletions

View File

@@ -44,10 +44,15 @@ public:
}
};
struct PreparedWaveEncoder {
PreparedEncoder encoder;
class PreparedWaveEncoder final : public PreparedEncoder {
/* virtual methods from class PreparedEncoder */
Encoder *Open(AudioFormat &audio_format, Error &) override {
return new WaveEncoder(audio_format);
}
PreparedWaveEncoder():encoder(wave_encoder_plugin) {}
const char *GetMimeType() const override {
return "audio/wav";
}
};
struct WaveHeader {
@@ -96,16 +101,7 @@ static PreparedEncoder *
wave_encoder_init(gcc_unused const ConfigBlock &block,
gcc_unused Error &error)
{
auto *encoder = new PreparedWaveEncoder();
return &encoder->encoder;
}
static void
wave_encoder_finish(PreparedEncoder *_encoder)
{
auto *encoder = (PreparedWaveEncoder *)_encoder;
delete encoder;
return new PreparedWaveEncoder();
}
WaveEncoder::WaveEncoder(AudioFormat &audio_format)
@@ -151,14 +147,6 @@ WaveEncoder::WaveEncoder(AudioFormat &audio_format)
buffer.Append(sizeof(*header));
}
static Encoder *
wave_encoder_open(gcc_unused PreparedEncoder *_encoder,
AudioFormat &audio_format,
gcc_unused Error &error)
{
return new WaveEncoder(audio_format);
}
static size_t
pcm16_to_wave(uint16_t *dst16, const uint16_t *src16, size_t length)
{
@@ -239,16 +227,7 @@ WaveEncoder::Write(const void *src, size_t length,
return true;
}
static const char *
wave_encoder_get_mime_type(gcc_unused PreparedEncoder *_encoder)
{
return "audio/wav";
}
const EncoderPlugin wave_encoder_plugin = {
"wave",
wave_encoder_init,
wave_encoder_finish,
wave_encoder_open,
wave_encoder_get_mime_type,
};