|
- /*
- Copyright (C) 2008 Grame
-
- 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.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
- */
-
- #ifndef __JackAudioAdapterInterface__
- #define __JackAudioAdapterInterface__
-
- #include "JackResampler.h"
- #include "JackFilters.h"
- #include <stdio.h>
-
- namespace Jack
- {
-
- #ifdef JACK_MONITOR
-
- #define TABLE_MAX 100000
-
- struct Measure
- {
- int delta;
- int time1;
- int time2;
- float r1;
- float r2;
- int pos1;
- int pos2;
- };
-
- struct MeasureTable
- {
-
- Measure fTable[TABLE_MAX];
- int fCount;
-
- MeasureTable() :fCount(0)
- {}
-
- void Write(int time1, int time2, float r1, float r2, int pos1, int pos2);
- void Save(unsigned int fHostBufferSize, unsigned int fHostSampleRate, unsigned int fAdaptedSampleRate, unsigned int fAdaptedBufferSize);
-
- };
-
- #endif
-
- /*!
- \brief Base class for audio adapters.
- */
-
- class JackAudioAdapterInterface
- {
-
- protected:
-
- #ifdef JACK_MONITOR
- MeasureTable fTable;
- #endif
- //channels
- int fCaptureChannels;
- int fPlaybackChannels;
-
- //host parameters
- jack_nframes_t fHostBufferSize;
- jack_nframes_t fHostSampleRate;
-
- //adapted parameters
- jack_nframes_t fAdaptedBufferSize;
- jack_nframes_t fAdaptedSampleRate;
-
- //PI controller
- JackPIControler fPIControler;
-
- JackResampler** fCaptureRingBuffer;
- JackResampler** fPlaybackRingBuffer;
-
- unsigned int fQuality;
- unsigned int fRingbufferCurSize;
- jack_time_t fPullAndPushTime;
-
- bool fRunning;
- bool fAdaptative;
-
- void ResetRingBuffers();
- void AdaptRingBufferSize();
- void GrowRingBufferSize();
-
- public:
-
- JackAudioAdapterInterface(jack_nframes_t buffer_size, jack_nframes_t sample_rate, jack_nframes_t ring_buffer_size = DEFAULT_ADAPTATIVE_SIZE):
- fCaptureChannels(0),
- fPlaybackChannels(0),
- fHostBufferSize(buffer_size),
- fHostSampleRate(sample_rate),
- fAdaptedBufferSize(buffer_size),
- fAdaptedSampleRate(sample_rate),
- fPIControler(sample_rate / sample_rate, 256),
- fCaptureRingBuffer(NULL), fPlaybackRingBuffer(NULL),
- fQuality(0),
- fRingbufferCurSize(ring_buffer_size),
- fPullAndPushTime(0),
- fRunning(false),
- fAdaptative(true)
- {}
-
- JackAudioAdapterInterface(jack_nframes_t host_buffer_size,
- jack_nframes_t host_sample_rate,
- jack_nframes_t adapted_buffer_size,
- jack_nframes_t adapted_sample_rate,
- jack_nframes_t ring_buffer_size = DEFAULT_ADAPTATIVE_SIZE) :
- fCaptureChannels(0),
- fPlaybackChannels(0),
- fHostBufferSize(host_buffer_size),
- fHostSampleRate(host_sample_rate),
- fAdaptedBufferSize(adapted_buffer_size),
- fAdaptedSampleRate(adapted_sample_rate),
- fPIControler(host_sample_rate / host_sample_rate, 256),
- fQuality(0),
- fRingbufferCurSize(ring_buffer_size),
- fPullAndPushTime(0),
- fRunning(false),
- fAdaptative(true)
- {}
-
- virtual ~JackAudioAdapterInterface()
- {}
-
- virtual void Reset();
-
- virtual void Create();
- virtual void Destroy();
-
- virtual int Open()
- {
- return 0;
- }
-
- virtual int Close()
- {
- return 0;
- }
-
- virtual int SetHostBufferSize(jack_nframes_t buffer_size);
- virtual int SetAdaptedBufferSize(jack_nframes_t buffer_size);
- virtual int SetBufferSize(jack_nframes_t buffer_size);
- virtual int SetHostSampleRate(jack_nframes_t sample_rate);
- virtual int SetAdaptedSampleRate(jack_nframes_t sample_rate);
- virtual int SetSampleRate(jack_nframes_t sample_rate);
- void SetInputs(int inputs);
- void SetOutputs(int outputs);
- int GetInputs();
- int GetOutputs();
-
- virtual int GetInputLatency(int port_index) { return 0; }
- virtual int GetOutputLatency(int port_index) { return 0; }
-
- int PushAndPull(jack_default_audio_sample_t** inputBuffer, jack_default_audio_sample_t** outputBuffer, unsigned int frames);
- int PullAndPush(jack_default_audio_sample_t** inputBuffer, jack_default_audio_sample_t** outputBuffer, unsigned int frames);
-
- };
-
- }
-
- #endif
|