Add ARDOUR::ladspa_search_path function to get LADSPA module directories
[ardour.git] / libs / ardour / ardour / pi_controller.h
index f992e6a18c1924297c8a6b65c15c008d7e197f02..bcbc81701a75e0bf8e5bcd7125e09bc3a595cc1a 100644 (file)
@@ -1,11 +1,11 @@
 /*
   Copyright (C) 2008 Torben Hohn
-  
+
   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
 #ifndef __libardour_pi_controller__
 #define __libardour_pi_controller__
 
+#include "ardour/types.h"
+
 class PIController {
+public:
+       PIController (double resample_factor, int fir_size);
+       ~PIController();
+
+       void reset (double resample_factor) {
+               resample_mean = resample_factor;
+               static_resample_factor = resample_factor;
+               out_of_bounds ();
+       }
+
+       double get_ratio (int fill_level, int period_size);
+       void out_of_bounds();
+
+public:
+       double  resample_mean;
+       double  static_resample_factor;
+       double* offset_array;
+       double* window_array;
+       int     offset_differential_index;
+       double  offset_integral;
+       double  catch_factor;
+       double  catch_factor2;
+       double  pclamp;
+       double  controlquant;
+       int     smooth_size;
+       double  smooth_offset;
+       double  current_resample_factor;
+       bool    fir_empty;
+};
+
+#define ESTIMATOR_SIZE 16
+
+class PIChaser {
+public:
+       PIChaser();
+       ~PIChaser();
+
+       double get_ratio( framepos_t chasetime_measured, framepos_t chasetime, framepos_t slavetime_measured, framepos_t slavetime, bool in_control, int period_size );
+       void reset();
+       framepos_t want_locate() { return want_locate_val; }
+
+private:
+       PIController *pic;
+       framepos_t realtime_stamps[ESTIMATOR_SIZE];
+       framepos_t chasetime_stamps[ESTIMATOR_SIZE];
+       int array_index;
+       framepos_t want_locate_val;
+
+       void feed_estimator( framepos_t realtime, framepos_t chasetime );
+       double get_estimate();
+
+       double speed;
 
-  public:
-    PIController (double resample_factor, int fir_size);
-    ~PIController();
-        
-    void reset (double resample_factor) {
-            resample_mean = resample_factor;
-            static_resample_factor = resample_factor;
-           out_of_bounds ();
-    }
-        
-    double get_ratio (int fill_level);
-    void out_of_bounds();
-
-  public:
-    double  resample_mean;
-    double  static_resample_factor;
-    double* offset_array;
-    double* window_array;
-    int     offset_differential_index;
-    double  offset_integral;
-    double  catch_factor;
-    double  catch_factor2;
-    double  pclamp;
-    double  controlquant;
-    int     smooth_size;
-    double  smooth_offset;
-    double  current_resample_factor;
+       double speed_threshold;
+       framepos_t pos_threshold;
 };
 
 #endif /* __libardour_pi_controller__ */