sintonia/library/ecasound-2.7.2/libecasound/audioio-proxy.h

140 lines
3.9 KiB
C++

#ifndef INCLUDED_AUDIO_IO_PROXY_H
#define INCLUDED_AUDIO_IO_PROXY_H
#include <kvu_dbc.h>
#include "audioio.h"
#include "audioio-barrier.h"
class SAMPLE_BUFFER;
/**
* Generic interface for objects that act as
* proxies for other objects of type AUDIO_IO.
*
* Related design patterns:
* - Proxy (GoF207
*
* Guide lines for subclassing:
* - reimplement (or explicitly use the existing implementation)
* all public getter and setter functions
* -> rationale: otherwise the class might return invalid
* data not related to the proxied child object, or setting
* parameters never affect the proxy target
*
* @author Kai Vehmanen
*/
class AUDIO_IO_PROXY
: public AUDIO_IO,
public AUDIO_IO_BARRIER
{
public:
/** @name Public functions */
/*@{*/
AUDIO_IO_PROXY (void);
virtual ~AUDIO_IO_PROXY(void);
/*@}*/
/** @name Reimplemented functions from ECA_OBJECT */
/*@{*/
virtual std::string name(void) const { return(string("Proxy => ") + child_repp->name()); }
virtual std::string description(void) const { return(child_repp->description()); }
/*@}*/
/** @name Reimplemented functions from DYNAMIC_PARAMETERS */
/*@{*/
virtual bool variable_params(void) const { return true; }
virtual std::string parameter_names(void) const;
virtual void set_parameter(int param, std::string value);
virtual std::string get_parameter(int param) const;
/*@}*/
/** @name Reimplemented functions from DYNAMIC_OBJECT<string> */
/*@{*/
virtual AUDIO_IO_PROXY* clone(void) const { return(new AUDIO_IO_PROXY()); }
virtual AUDIO_IO_PROXY* new_expr(void) const { return(new AUDIO_IO_PROXY()); }
/*@}*/
/** @name Reimplemented functions from ECA_AUDIO_POSITION */
/*@{*/
virtual SAMPLE_SPECS::sample_pos_t seek_position(SAMPLE_SPECS::sample_pos_t pos) { return child_repp->seek_position(pos); }
virtual bool supports_seeking(void) const { return child_repp->supports_seeking(); }
virtual bool supports_seeking_sample_accurate(void) const { return child_repp->supports_seeking_sample_accurate(); }
/*@}*/
/** @name Reimplemented functions from AUDIO_IO */
/*@{*/
virtual int supported_io_modes(void) const { return(child_repp->supported_io_modes()); }
virtual bool supports_nonblocking_mode(void) const { return(child_repp->supports_nonblocking_mode()); }
virtual bool finite_length_stream(void) const { return( child_repp->finite_length_stream()); }
virtual bool locked_audio_format(void) const { return(child_repp->locked_audio_format()); }
virtual void set_buffersize(long int samples);
virtual long int buffersize(void) const { return(buffersize_rep); }
virtual void read_buffer(SAMPLE_BUFFER* sbuf) { child_repp->read_buffer(sbuf); }
virtual void write_buffer(SAMPLE_BUFFER* sbuf) { child_repp->write_buffer(sbuf); }
virtual bool finished(void) const { return(child_repp->finished()); }
/*@}*/
/** @name Reimplemented functions from ECA_AUDIO_FORMAT */
/*@{*/
virtual void set_channels(SAMPLE_SPECS::channel_t v);
virtual void set_sample_format(Sample_format v) throw(ECA_ERROR&);
virtual void set_audio_format(const ECA_AUDIO_FORMAT& f_str);
virtual void toggle_interleaved_channels(bool v);
/*@}*/
/** @name Reimplemented functions from ECA_SAMPLERATE_AWARE */
/*@{*/
virtual void set_samples_per_second(SAMPLE_SPECS::sample_rate_t v);
/*@}*/
/** @name Reimplemented functions from AUDIO_IO_BARRIER */
/*@{*/
virtual void start_io(void);
virtual void stop_io(void);
/*@}*/
protected:
void set_child(AUDIO_IO* v);
void release_child_no_delete(void);
void pre_child_open(void);
void post_child_open(void);
bool is_child_initialized(void) const { return child_initialized_rep; }
std::string child_params_as_string(int first, std::vector<std::string>* params);
AUDIO_IO* child(void) const { return child_repp; }
private:
AUDIO_IO* child_repp;
long int buffersize_rep;
bool child_initialized_rep;
};
#endif // INCLUDED_AUDIO_IO_PROXY