X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fresampled_source.h;h=0c90581a29a0d6f8184d787cf027bc4260ddf71b;hb=cd5847300396cb68c9ef393128c7cceb488483fd;hp=1f6947aeaca49c85055a6a0cbf2e6c6677153290;hpb=3b54a75aa9c03edb32d3960c5aacba640e1901e0;p=ardour.git diff --git a/libs/ardour/ardour/resampled_source.h b/libs/ardour/ardour/resampled_source.h index 1f6947aeac..0c90581a29 100644 --- a/libs/ardour/ardour/resampled_source.h +++ b/libs/ardour/ardour/resampled_source.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2007 Paul Davis + Copyright (C) 2007 Paul Davis 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 @@ -22,33 +22,41 @@ #include +#include "ardour/libardour_visibility.h" #include "ardour/types.h" #include "ardour/importable_source.h" namespace ARDOUR { -class ResampledImportableSource : public ImportableSource +class LIBARDOUR_API ResampledImportableSource : public ImportableSource { public: - ResampledImportableSource (boost::shared_ptr, nframes_t rate, SrcQuality); + ResampledImportableSource (boost::shared_ptr, framecnt_t rate, SrcQuality); ~ResampledImportableSource (); - - nframes_t read (Sample* buffer, nframes_t nframes); - float ratio() const { return src_data.src_ratio; } - uint32_t channels() const { return source->channels(); } - nframes_t length() const { return source->length(); } - nframes_t samplerate() const { return source->samplerate(); } - void seek (nframes_t pos) { source->seek (pos); } - nframes64_t natural_position() const { return source->natural_position(); } - + + framecnt_t read (Sample* buffer, framecnt_t nframes); + float ratio() const { return _src_data.src_ratio; } + uint32_t channels() const { return source->channels(); } + framecnt_t length() const { return source->length(); } + framecnt_t samplerate() const { return source->samplerate(); } + void seek (framepos_t); + framepos_t natural_position() const; + + bool clamped_at_unity () const { + /* resampling may generate inter-sample peaks with magnitude > 1 */ + return false; + } + static const uint32_t blocksize; - + private: boost::shared_ptr source; - float* input; - SRC_STATE* src_state; - SRC_DATA src_data; + float* _input; + int _src_type; + SRC_STATE* _src_state; + SRC_DATA _src_data; + bool _end_of_input; }; }