1 #ifndef INCLUDED_AUDIOIO_FLAC_H 2 #define INCLUDED_AUDIOIO_FLAC_H 3 4 #include <string> 5 #include <cstdio> 6 #include "audioio-buffered.h" 7 #include "audioio-forked-stream.h" 8 9 /** 10 * Interface to FLAC decoders and encoders using UNIX pipe i/o. 11 * 12 * @author Kai Vehmanen 13 */ 14 class FLAC_FORKED_INTERFACE : public AUDIO_IO_BUFFERED, 15 public AUDIO_IO_FORKED_STREAM { 16 17 private: 18 19 static std::string default_input_cmd; 20 static std::string default_output_cmd; 21 22 public: 23 24 static void set_input_cmd(const std::string& value); 25 static void set_output_cmd(const std::string& value); 26 27 public: 28 29 FLAC_FORKED_INTERFACE (const std::string& name = ""); 30 virtual ~FLAC_FORKED_INTERFACE(void); 31 clone(void)32 virtual FLAC_FORKED_INTERFACE* clone(void) const { return new FLAC_FORKED_INTERFACE(*this); } new_expr(void)33 virtual FLAC_FORKED_INTERFACE* new_expr(void) const { return new FLAC_FORKED_INTERFACE(*this); } 34 name(void)35 virtual std::string name(void) const { return("FLAC stream"); } description(void)36 virtual std::string description(void) const { return("Interface to FLAC decoders and encoders using UNIX pipe i/o."); } parameter_names(void)37 virtual std::string parameter_names(void) const { return("label"); } locked_audio_format(void)38 virtual bool locked_audio_format(void) const { return(true); } 39 supported_io_modes(void)40 virtual int supported_io_modes(void) const { return(io_read | io_write); } supports_seeking(void)41 virtual bool supports_seeking(void) const { return(false); } 42 43 virtual void open(void) throw(AUDIO_IO::SETUP_ERROR &); 44 virtual void close(void); 45 46 virtual long int read_samples(void* target_buffer, long int samples); 47 virtual void write_samples(void* target_buffer, long int samples); 48 finished(void)49 virtual bool finished(void) const { return(finished_rep); } 50 51 virtual void set_parameter(int param, std::string value); 52 virtual std::string get_parameter(int param) const; 53 54 virtual void start_io(void); 55 virtual void stop_io(void); 56 57 protected: 58 59 /* functions called by AUDIO_IO_FORKED_STREAM that require 60 * the use of AUDIO_IO methods */ 61 do_supports_seeking(void)62 virtual bool do_supports_seeking(void) const { return supports_seeking(); } do_set_position_in_samples(SAMPLE_SPECS::sample_pos_t pos)63 virtual void do_set_position_in_samples(SAMPLE_SPECS::sample_pos_t pos) { set_position_in_samples(pos); } 64 65 private: 66 67 bool triggered_rep; 68 bool finished_rep; 69 long int bytes_rep; 70 int filedes_rep; 71 FILE* f1_rep; 72 73 void fork_input_process(void); 74 void fork_output_process(void); 75 }; 76 77 #endif 78