From 9bcf29e9ce11bbc6a421b39eded8f4eb7d94a912 Mon Sep 17 00:00:00 2001 From: Jon Bergli Heier Date: Tue, 28 Dec 2010 20:39:20 +0100 Subject: Added decoder/encoder factories. --- decoder.cpp | 19 +++++++++++++++++++ decoder.h | 10 ++++++++++ decoders/mpg123_decoder.cpp | 2 -- encoder.cpp | 18 ++++++++++++++++++ encoder.h | 10 ++++++++++ main.cpp | 4 ++++ 6 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 decoder.cpp create mode 100644 encoder.cpp diff --git a/decoder.cpp b/decoder.cpp new file mode 100644 index 0000000..e80c714 --- /dev/null +++ b/decoder.cpp @@ -0,0 +1,19 @@ +#include "decoder.h" +#include "decoders/mpg123_decoder.h" + +#include + +namespace decoder { + typedef boost::function DecoderFactory; + std::map decoder_factories; + +void init() { + mpg123_init(); // initialize the mpg123 library + decoder_factories["mpg123"] = boost::factory(); +} + +DecoderBase *get_decoder(const std::string& name) { + return decoder_factories[name](); +} + +}; diff --git a/decoder.h b/decoder.h index 7e76088..b4dcdb6 100644 --- a/decoder.h +++ b/decoder.h @@ -2,10 +2,20 @@ #define DECODER_H #include +#include +#include +#include + +#include class DecoderBase { public: virtual size_t decode(const uint8_t *input, size_t input_size, uint8_t *output, size_t output_size) = 0; }; +namespace decoder { + void init(); + DecoderBase *get_decoder(const std::string& name); +}; + #endif diff --git a/decoders/mpg123_decoder.cpp b/decoders/mpg123_decoder.cpp index 41aef40..0c2629f 100644 --- a/decoders/mpg123_decoder.cpp +++ b/decoders/mpg123_decoder.cpp @@ -6,8 +6,6 @@ #include DecoderMpg123::DecoderMpg123() { - mpg123_init(); - int error; handle = mpg123_new("generic", &error); if(error) { diff --git a/encoder.cpp b/encoder.cpp new file mode 100644 index 0000000..9bea59b --- /dev/null +++ b/encoder.cpp @@ -0,0 +1,18 @@ +#include "encoder.h" +#include "encoders/lame_encoder.h" + +#include + +namespace encoder { + typedef boost::function EncoderFactory; + std::map encoder_factories; + +void init() { + encoder_factories["lame"] = boost::factory(); +} + +EncoderBase *get_encoder(const std::string& name) { + return encoder_factories[name](); +} + +}; diff --git a/encoder.h b/encoder.h index a9a0e5c..9949b52 100644 --- a/encoder.h +++ b/encoder.h @@ -2,6 +2,11 @@ #define ENCODER_H #include +#include +#include +#include + +#include class EncoderBase { public: @@ -9,4 +14,9 @@ class EncoderBase { virtual size_t flush(uint8_t *output, size_t output_size) = 0; }; +namespace encoder { + void init(); + EncoderBase *get_encoder(const std::string& name); +}; + #endif diff --git a/main.cpp b/main.cpp index 3827607..2c0ada7 100644 --- a/main.cpp +++ b/main.cpp @@ -1,4 +1,6 @@ #include "music.h" +#include "decoder.h" +#include "encoder.h" #include "httpd.h" #include @@ -9,6 +11,8 @@ int main(int argc, char **argv) { try { music::init(argv[1]); + decoder::init(); + encoder::init(); boost::asio::io_service io_service; HTTPServer httpd(io_service); -- cgit v1.2.3