13
0
livetrax/libs/audiographer/audiographer/general/sr_converter.h
Carl Hetherington 73192bc1a7 Remove all use of nframes_t.
git-svn-id: svn://localhost/ardour2/branches/3.0@8166 d708f5d6-7413-0410-9779-e7cbd77b26cf
2010-12-03 22:26:29 +00:00

65 lines
1.5 KiB
C++

#ifndef AUDIOGRAPHER_SR_CONVERTER_H
#define AUDIOGRAPHER_SR_CONVERTER_H
#include <samplerate.h>
#include "audiographer/flag_debuggable.h"
#include "audiographer/sink.h"
#include "audiographer/throwing.h"
#include "audiographer/types.h"
#include "audiographer/utils/listed_source.h"
namespace AudioGrapher
{
/// Samplerate converter
class SampleRateConverter
: public ListedSource<float>
, public Sink<float>
, public FlagDebuggable<>
, public Throwing<>
{
public:
/// Constructor. \n RT safe
SampleRateConverter (uint32_t channels);
~SampleRateConverter ();
/// Init converter \n Not RT safe
void init (framecnt_t in_rate, framecnt_t out_rate, int quality = 0);
/// Returns max amount of frames that will be output \n RT safe
framecnt_t allocate_buffers (framecnt_t max_frames);
/** Does sample rate conversion.
* Note that outpt size may vary a lot.
* May or may not output several contexts of data.
* \n Should be RT safe.
* \TODO Check RT safety from libsamplerate
*/
void process (ProcessContext<float> const & c);
using Sink<float>::process;
private:
void set_end_of_input (ProcessContext<float> const & c);
void reset ();
bool active;
uint32_t channels;
framecnt_t max_frames_in;
float * leftover_data;
framecnt_t leftover_frames;
framecnt_t max_leftover_frames;
float * data_out;
framecnt_t data_out_size;
SRC_DATA src_data;
SRC_STATE* src_state;
};
} // namespace
#endif // AUDIOGRAPHER_SR_CONVERTER_H