diff options
Diffstat (limited to 'kradio3/plugins/recording/encoder_pcm.cpp')
-rw-r--r-- | kradio3/plugins/recording/encoder_pcm.cpp | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/kradio3/plugins/recording/encoder_pcm.cpp b/kradio3/plugins/recording/encoder_pcm.cpp new file mode 100644 index 0000000..27c671b --- /dev/null +++ b/kradio3/plugins/recording/encoder_pcm.cpp @@ -0,0 +1,78 @@ +/*************************************************************************** + encoder_pcm.cpp + ------------------- + begin : Sat Aug 20 2005 + copyright : (C) 2005 by Martin Witte + email : [email protected] + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include "encoder_pcm.h" + + +#include <klocale.h> + +RecordingEncodingPCM::RecordingEncodingPCM(QObject *parent, SoundStreamID ssid, + const RecordingConfig &cfg, const RadioStation *rs, + const QString &filename) + : RecordingEncoding(parent, ssid, cfg, rs, filename), + m_output(NULL) +{ + m_config.m_SoundFormat.m_Encoding = "raw"; + openOutput(filename); +} + + +RecordingEncodingPCM::~RecordingEncodingPCM() +{ + closeOutput(); +} + + + +void RecordingEncodingPCM::encode(const char *buffer, size_t buffer_size, char *&export_buffer, size_t &export_buffer_size) +{ + if (m_error) + return; + m_encodedSize += buffer_size; + + export_buffer = const_cast<char*>(buffer); + export_buffer_size = buffer_size; + int err = sf_write_raw(m_output, const_cast<char*>(buffer), buffer_size); + + if (err != (int)buffer_size) { + m_error = true; + m_errorString += i18n("Error %1 writing output. ").arg(QString().setNum(err)); + } +} + + +bool RecordingEncodingPCM::openOutput(const QString &output) +{ + SF_INFO sinfo; + m_config.getSoundFileInfo(sinfo, false); + m_output = sf_open(output.ascii(), SFM_WRITE, &sinfo); + + if (!m_output) { + m_error = true; + m_errorString += i18n("Cannot open output file %1. ").arg(output); + } + return !m_error; +} + + +void RecordingEncodingPCM::closeOutput() +{ + if (m_output) sf_close (m_output); + m_output = NULL; +} + + |