Add support for recording to .flac
[ardour.git] / libs / backends / portaudio / portaudio_io.h
index 6daa13d5eaaf577301e0fa7d9374aec333a7f9fe..34eef43186ae74065a051f09d3f59e4cd59ffda8 100644 (file)
@@ -35,27 +35,11 @@ public:
        PortAudioIO (void);
        ~PortAudioIO (void);
 
-       enum ErrorCode {
-               NoError = 0,
-               InitializationError,
-               DeInitializationError,
-               DeviceConfigNotSupportedError,
-               StreamOpenError,
-               StreamStartError,
-               StreamStopError,
-               StreamCloseError,
-               IOError,
-               BufferUnderrunError,
-               BufferOverrunError
-       };
-
        enum StandardDevices {
                DeviceNone = -2,
                DeviceDefault = -1
        };
 
-       bool     initialize_pa ();
-
        void host_api_list (std::vector<std::string>&);
        bool set_host_api (const std::string& host_api_name);
        std::string get_host_api () const { return _host_api_name; }
@@ -65,7 +49,7 @@ public:
        PaDeviceIndex get_default_input_device () const;
        PaDeviceIndex get_default_output_device () const;
 
-       void     discover();
+       bool     update_devices();
        void     input_device_list (std::map<int, std::string> &devices) const;
        void     output_device_list (std::map<int, std::string> &devices) const;
 
@@ -74,24 +58,34 @@ public:
 
 #ifdef WITH_ASIO
        bool get_asio_buffer_properties (int device_id,
-                                        long& min_size_frames,
-                                        long& max_size_frames,
-                                        long& preferred_size_frames,
+                                        long& min_size_samples,
+                                        long& max_size_samples,
+                                        long& preferred_size_samples,
                                         long& granularity);
 
-       bool get_asio_buffer_sizes (int device_id, std::vector<uint32_t>& buffer_size);
+       bool get_asio_buffer_sizes(int device_id,
+                                  std::vector<uint32_t>& buffer_size,
+                                  bool preferred_only);
 #endif
 
        std::string control_app_name (int device_id) const;
        void launch_control_app (int device_id);
 
-       void     pcm_stop (void);
-       int      pcm_start (void);
+       PaErrorCode open_blocking_stream(int device_input,
+                                        int device_output,
+                                        double sample_rate,
+                                        uint32_t samples_per_period);
+
+       PaErrorCode open_callback_stream(int device_input,
+                                        int device_output,
+                                        double sample_rate,
+                                        uint32_t samples_per_period,
+                                        PaStreamCallback* callback,
+                                        void* data);
+
+       PaErrorCode start_stream(void);
 
-       ErrorCode pcm_setup(int device_input,
-                           int device_output,
-                           double sample_rate,
-                           uint32_t samples_per_period);
+       PaErrorCode close_stream(void);
 
        uint32_t n_playback_channels (void) const { return _playback_channels; }
        uint32_t n_capture_channels (void) const { return _capture_channels; }
@@ -108,8 +102,15 @@ public:
        int      get_capture_channel (uint32_t chn, float *input, uint32_t n_samples);
        int      set_playback_channel (uint32_t chn, const float *input, uint32_t n_samples);
 
+       float* get_capture_buffer () { return _input_buffer; }
+       float* get_playback_buffer () { return _output_buffer; }
+
 private: // Methods
 
+       static bool pa_initialize();
+       static bool pa_deinitialize();
+       static bool& pa_initialized();
+
        void clear_device_lists ();
        void add_none_devices ();
        void add_default_devices ();
@@ -124,14 +125,17 @@ private: // Methods
        bool set_sample_rate_and_latency_from_stream();
        bool allocate_buffers_for_blocking_api (uint32_t samples_per_period);
 
+       PaErrorCode pre_stream_open(int device_input,
+                                 PaStreamParameters& inputParam,
+                                 int device_output,
+                                 PaStreamParameters& outputParam);
+
        void reset_stream_dependents ();
 
        static void get_default_sample_rates(std::vector<float>&);
        static void get_default_buffer_sizes(std::vector<uint32_t>&);
 
 private: // Data
-       bool _initialized;
-
        uint32_t _capture_channels;
        uint32_t _playback_channels;