audio_frame2_resampler: hide implementation

use pimpl pattern
This commit is contained in:
Martin Pulec
2022-10-14 12:47:09 +02:00
parent a5c059da60
commit 20c2d8540c
2 changed files with 20 additions and 10 deletions

View File

@@ -62,17 +62,23 @@
using namespace std;
class audio_frame2_resampler::impl {
public:
virtual std::tuple<bool, audio_frame2> resample(audio_frame2 &a, std::vector<audio_frame2::channel> &out, int new_sample_rate_num, int new_sample_rate_den) = 0;
virtual ~impl() {}
};
tuple<bool, audio_frame2> audio_frame2_resampler::resample(audio_frame2 &a, vector<audio_frame2::channel> &out, int new_sample_rate_num, int new_sample_rate_den)
{
if (!impl) {
if (!m_impl) {
LOG(LOG_LEVEL_ERROR) << "Audio frame resampler: cannot resample, Soxr/SpeexDSP was not compiled in!\n";
return { false, audio_frame2{} };
}
return impl->resample(a, out, new_sample_rate_num, new_sample_rate_den);
return m_impl->resample(a, out, new_sample_rate_num, new_sample_rate_den);
}
#ifdef HAVE_SOXR
class soxr_resampler : public audio_frame2_resampler::interface {
class soxr_resampler : public audio_frame2_resampler::impl {
public:
tuple<bool, audio_frame2> resample(audio_frame2 &a, vector<audio_frame2::channel> &new_channels, int new_sample_rate_num, int new_sample_rate_den);
@@ -201,7 +207,10 @@ tuple<bool, audio_frame2> soxr_resampler::resample(audio_frame2 &a, vector<audio
audio_frame2_resampler::audio_frame2_resampler() {
#ifdef HAVE_SOXR
impl = unique_ptr<audio_frame2_resampler::interface>(new soxr_resampler());
m_impl = unique_ptr<audio_frame2_resampler::impl>(new soxr_resampler());
#endif
}
audio_frame2_resampler::~audio_frame2_resampler() = default;
audio_frame2_resampler::audio_frame2_resampler(audio_frame2_resampler&&) = default;
audio_frame2_resampler& audio_frame2_resampler::operator=(audio_frame2_resampler&&) = default;

View File

@@ -47,14 +47,15 @@
class audio_frame2_resampler {
public:
audio_frame2_resampler();
class interface {
public:
virtual std::tuple<bool, audio_frame2> resample(audio_frame2 &a, std::vector<audio_frame2::channel> &out, int new_sample_rate_num, int new_sample_rate_den) = 0;
virtual ~interface() {}
};
~audio_frame2_resampler();
audio_frame2_resampler(audio_frame2_resampler&&);
audio_frame2_resampler& operator=(audio_frame2_resampler&&);
std::tuple<bool, audio_frame2> resample(audio_frame2 &a, std::vector<audio_frame2::channel> &out, int new_sample_rate_num, int new_sample_rate_den);
class impl;
private:
std::unique_ptr<interface> impl;
std::unique_ptr<impl> m_impl;
};
#endif // defined AUDIO_RESAMPLER_HPP_60C123AE_99B1_4726_AA2C_EFDB2C723952