1 #pragma once
2 
3 #include "sources/audiosource.h"
4 
5 namespace mixxx {
6 
7 class AudioSourceProxy : public AudioSource {
8   public:
AudioSourceProxy(AudioSourcePointer && pAudioSource)9     explicit AudioSourceProxy(
10             AudioSourcePointer&& pAudioSource)
11             : AudioSourceProxy(
12                   std::move(pAudioSource),
13                   pAudioSource->getSignalInfo()) {
14     }
AudioSourceProxy(AudioSourcePointer && pAudioSource,const audio::SignalInfo & signalInfo)15     AudioSourceProxy(
16             AudioSourcePointer&& pAudioSource,
17             const audio::SignalInfo& signalInfo)
18             : AudioSource(*pAudioSource, signalInfo),
19               m_pAudioSource(std::move(pAudioSource)) {
20     }
21 
close()22     void close() override {
23         m_pAudioSource->close();
24     }
25 
26   protected:
tryOpen(OpenMode mode,const OpenParams & params)27     OpenResult tryOpen(
28             OpenMode mode,
29             const OpenParams& params) override {
30         return tryOpenOn(*m_pAudioSource, mode, params);
31     }
32 
readSampleFramesClamped(const WritableSampleFrames & sampleFrames)33     ReadableSampleFrames readSampleFramesClamped(
34             const WritableSampleFrames& sampleFrames) override {
35         DEBUG_ASSERT(getSignalInfo() == m_pAudioSource->getSignalInfo());
36         DEBUG_ASSERT(getBitrate() == m_pAudioSource->getBitrate());
37         DEBUG_ASSERT(frameIndexRange() == m_pAudioSource->frameIndexRange());
38         return readSampleFramesClampedOn(*m_pAudioSource, sampleFrames);
39     }
40 
adjustFrameIndexRange(IndexRange frameIndexRange)41     void adjustFrameIndexRange(
42             IndexRange frameIndexRange) final {
43         // Ugly hack to keep both sources (inherited base + inner delegate) in sync!
44         AudioSource::adjustFrameIndexRange(frameIndexRange);
45         adjustFrameIndexRangeOn(*m_pAudioSource, frameIndexRange);
46     }
47 
48     const AudioSourcePointer m_pAudioSource;
49 };
50 
51 } // namespace mixxx
52