diff options
author | Jon Bergli Heier <snakebite@jvnv.net> | 2010-12-28 15:14:45 +0100 |
---|---|---|
committer | Jon Bergli Heier <snakebite@jvnv.net> | 2010-12-28 15:14:45 +0100 |
commit | 398114468e86df5cacf2ad3ff09e9822e074e4b4 (patch) | |
tree | b5426c87652c13eaadce066d6b72de64d03b7dad | |
parent | 31a118b91767e8951b14366d24a436f4cbffb7b1 (diff) |
Added LAME encoder.
-rw-r--r-- | SConstruct | 3 | ||||
-rw-r--r-- | encoder.h | 12 | ||||
-rw-r--r-- | encoders/lame_encoder.cpp | 26 | ||||
-rw-r--r-- | encoders/lame_encoder.h | 19 |
4 files changed, 59 insertions, 1 deletions
@@ -6,6 +6,7 @@ conf = Configure(env) conf.CheckLib('boost_system') conf.CheckLib('boost_filesystem') conf.CheckLib('boost_regex') +conf.CheckLib('mp3lame') env = conf.Finish() if GetOption('release'): @@ -15,6 +16,6 @@ else: env.ParseConfig('pkg-config --cflags --libs libmpg123') -env.Program('audistd', Glob('*.cpp') + Glob('decoders/*.cpp')) +env.Program('audistd', Glob('*.cpp') + Glob('decoders/*.cpp') + Glob('encoders/*.cpp')) # vim: syn=python diff --git a/encoder.h b/encoder.h new file mode 100644 index 0000000..a9a0e5c --- /dev/null +++ b/encoder.h @@ -0,0 +1,12 @@ +#ifndef ENCODER_H +#define ENCODER_H + +#include <boost/cstdint.hpp> + +class EncoderBase { + public: + virtual size_t encode(uint8_t *input, size_t input_size, uint8_t *output, size_t output_size) = 0; + virtual size_t flush(uint8_t *output, size_t output_size) = 0; +}; + +#endif diff --git a/encoders/lame_encoder.cpp b/encoders/lame_encoder.cpp new file mode 100644 index 0000000..4cbfc9c --- /dev/null +++ b/encoders/lame_encoder.cpp @@ -0,0 +1,26 @@ +#include "lame_encoder.h" + +#include <stdexcept> + +EncoderLame::EncoderLame() { + gfp = lame_init(); + int error = lame_init_params(gfp); + + if(error < 0) { + throw std::runtime_error("failed to initialize LAME"); + } +} + +EncoderLame::~EncoderLame() { + lame_close(gfp); +} + +size_t EncoderLame::encode(uint8_t *input, size_t input_size, uint8_t *output, size_t output_size) { + size_t size = lame_encode_buffer_interleaved(gfp, (short*)input, input_size / 4, output, output_size); + return size; +} + +size_t EncoderLame::flush(uint8_t *output, size_t output_size) { + size_t size = lame_encode_flush(gfp, output, output_size); + return size; +} diff --git a/encoders/lame_encoder.h b/encoders/lame_encoder.h new file mode 100644 index 0000000..47f9666 --- /dev/null +++ b/encoders/lame_encoder.h @@ -0,0 +1,19 @@ +#ifndef LAME_ENCODER_H +#define LAME_ENCODER_H + +#include "encoder.h" + +#include <lame/lame.h> + +class EncoderLame : public EncoderBase { + private: + lame_global_flags *gfp; + + public: + EncoderLame(); + ~EncoderLame(); + size_t encode(uint8_t *input, size_t input_size, uint8_t *output, size_t output_size); + size_t flush(uint8_t *output, size_t output_size); +}; + +#endif |