[med-svn] [SCM] aghermann branch, master, updated. 9c95ea59282c4fc6ef7eb192072500f9d0659fc3
Andrei Zavada
johnhommer at gmail.com
Tue Jan 8 00:24:53 UTC 2013
The following commit has been merged in the master branch:
commit 2ea62b1f38c748ba5d434ec4f656c81456d741fc
Author: Andrei Zavada <johnhommer at gmail.com>
Date: Sun Jan 6 03:05:57 2013 +0200
avoid passing by ref assignable lvalues to sigproc::envelope
diff --git a/src/sigproc/sigproc.cc b/src/sigproc/sigproc.cc
index 9d01995..9d4371e 100644
--- a/src/sigproc/sigproc.cc
+++ b/src/sigproc/sigproc.cc
@@ -23,7 +23,7 @@ using namespace std;
template void sigproc::smooth( valarray<TFloat>&, size_t);
template void sigproc::normalize( valarray<TFloat>&);
template valarray<TFloat> sigproc::derivative( const valarray<TFloat>&);
-template size_t sigproc::envelope( const valarray<TFloat>&, size_t, size_t, double, valarray<TFloat>&, valarray<TFloat>&, vector<size_t>*, vector<size_t>*);
+template size_t sigproc::envelope( const valarray<TFloat>&, size_t, size_t, double, valarray<TFloat>*, valarray<TFloat>*, vector<size_t>*, vector<size_t>*);
template valarray<TFloat> sigproc::dzcdf( const valarray<TFloat>&, size_t, float, float, size_t);
template sigproc::CPattern<TFloat>::CPattern( const valarray<TFloat>&, size_t, size_t, size_t, const SPatternParamPack&, float, float, float);
template size_t sigproc::CPattern<TFloat>::find( const valarray<TFloat>&, const valarray<TFloat>&, const valarray<TFloat>&, ssize_t, int);
diff --git a/src/sigproc/sigproc.hh b/src/sigproc/sigproc.hh
index dc1a55c..43e4c9a 100644
--- a/src/sigproc/sigproc.hh
+++ b/src/sigproc/sigproc.hh
@@ -93,11 +93,10 @@ envelope( const valarray<T>& in,
size_t dh, // tightness
size_t samplerate,
float dt,
- valarray<T>& env_l, // return interpolated
- valarray<T>& env_u,
- // optionally also return vector of points
- vector<size_t> *envv_lp = nullptr,
- vector<size_t> *envv_up = nullptr);
+ valarray<T>* env_lp = nullptr, // return interpolated
+ valarray<T>* env_up = nullptr, // return vector of points
+ vector<size_t> *mini_p = nullptr,
+ vector<size_t> *maxi_p = nullptr);
diff --git a/src/sigproc/sigproc.ii b/src/sigproc/sigproc.ii
index 7390414..d3879e8 100644
--- a/src/sigproc/sigproc.ii
+++ b/src/sigproc/sigproc.ii
@@ -13,7 +13,7 @@
extern template void smooth( valarray<TFloat>&, size_t);
extern template void normalize( valarray<TFloat>&);
extern template valarray<TFloat> derivative( const valarray<TFloat>&);
-extern template size_t envelope( const valarray<TFloat>&, size_t, size_t, float, valarray<TFloat>&, valarray<TFloat>&, vector<size_t>*, vector<size_t>*);
+extern template size_t envelope( const valarray<TFloat>&, size_t, size_t, float, valarray<TFloat>*, valarray<TFloat>*, vector<size_t>*, vector<size_t>*);
extern template valarray<TFloat> dzcdf( const valarray<TFloat>&, size_t, float, float, size_t);
extern template CPattern<TFloat>::CPattern( const valarray<TFloat>&, size_t, size_t, size_t, const SPatternParamPack&, float, float, float);
extern template size_t CPattern<TFloat>::find( const valarray<TFloat>&, const valarray<TFloat>&, const valarray<TFloat>&, ssize_t, int);
@@ -76,22 +76,21 @@ envelope( const valarray<T>& in,
size_t dh, // tightness
size_t samplerate,
double dt,
- valarray<T>& env_l, // return interpolated
- valarray<T>& env_u,
- // optionally also return vector of points
- vector<size_t> *envv_lp = nullptr,
- vector<size_t> *envv_up = nullptr)
+ valarray<T>* env_lp = nullptr, // return interpolated
+ valarray<T>* env_up = nullptr,
+ vector<size_t> *mini_p = nullptr, // return vector of extremum indices
+ vector<size_t> *maxi_p = nullptr)
{
size_t i, j,
n_samples = in.size();
vector<size_t>
- envv_l,
- envv_u;
+ mini,
+ maxi;
// always put a point at start
- envv_l.push_back( 0);
- envv_u.push_back( 0);
+ mini.push_back( 0);
+ maxi.push_back( 0);
for ( i = dh; i < n_samples-dh; ++i ) {
for ( j = 1; j <= dh; ++j )
@@ -100,7 +99,7 @@ envelope( const valarray<T>& in,
for ( j = 1; j <= dh; ++j )
if ( in[i+j] <= in[i] ) // [i] is not
goto inner_continue;
- envv_l.push_back( i);
+ mini.push_back( i);
continue;
inner_continue:
for ( j = 1; j <= dh; ++j )
@@ -109,23 +108,26 @@ envelope( const valarray<T>& in,
for ( j = 1; j <= dh; ++j )
if ( in[i+j] >= in[i] ) // [i] is not
goto outer_continue;
- envv_u.push_back( i);
+ maxi.push_back( i);
outer_continue:
;
}
// put a point at end
- envv_l.push_back( i);
- envv_u.push_back( i);
-
- if ( envv_l.size() > 5 && envv_u.size() > 5 ) {
- env_l = interpolate( envv_l, samplerate, in, dt);
- env_u = interpolate( envv_u, samplerate, in, dt);
- if ( envv_lp )
- (*envv_lp) = envv_l;
- if ( envv_up )
- (*envv_up) = envv_u;
- return envv_u.size();
+ mini.push_back( i);
+ maxi.push_back( i);
+
+ if ( mini.size() > 5 && maxi.size() > 5 ) {
+ if ( env_lp )
+ *env_lp = interpolate( mini, samplerate, in, dt);
+ if ( env_up )
+ *env_up = interpolate( maxi, samplerate, in, dt);
+ if ( mini_p )
+ *mini_p = mini;
+ if ( maxi_p )
+ *maxi_p = maxi;
+
+ return maxi.size();
} else
return 0;
}
@@ -225,7 +227,7 @@ CPattern (const valarray<T>& pattern,
valarray<T> env_u, env_l;
envelope( pattern, params.env_tightness, samplerate,
1./samplerate,
- env_l, env_u);
+ &env_l, &env_u);
breadth.resize( env_u.size());
breadth = env_u - env_l;
@@ -302,7 +304,7 @@ find( const valarray<T>& signal,
// signal envelope and breadth
valarray<T> env_u, env_l;
envelope( signal, params.env_tightness, samplerate,
- 1./samplerate, env_u, env_l);
+ 1./samplerate, &env_u, &env_l);
valarray<T> fbreadth (env_u.size());
fbreadth = env_u - env_l;
diff --git a/src/ui/sf/sf-channel.cc b/src/ui/sf/sf-channel.cc
index dc22c6a..5492ca4 100644
--- a/src/ui/sf/sf-channel.cc
+++ b/src/ui/sf/sf-channel.cc
@@ -136,7 +136,7 @@ SChannel( agh::CRecording& r,
valarray<TFloat> env_u, env_l;
sigproc::envelope( signal_original,
5, samplerate(), 1.,
- env_l, env_u);
+ &env_l, &env_u);
emg_profile.resize( env_l.size());
emg_profile = env_u - env_l;
}
@@ -204,8 +204,8 @@ compute_tightness( unsigned _tightness)
sigproc::envelope( signal_filtered,
signal_envelope.tightness = _tightness, samplerate(),
1./samplerate(),
- signal_envelope.lower,
- signal_envelope.upper); // don't need anchor points, nor their count
+ &signal_envelope.lower,
+ &signal_envelope.upper); // don't need anchor points, nor their count
}
void
diff --git a/src/ui/sf/sf-montage.cc b/src/ui/sf/sf-montage.cc
index 6931ff9..f22cfa2 100644
--- a/src/ui/sf/sf-montage.cc
+++ b/src/ui/sf/sf-montage.cc
@@ -268,7 +268,7 @@ draw_page( cairo_t *cr,
selection,
Pp.env_tightness, samplerate(),
1./samplerate(),
- env_l, env_u) != 0 ) {
+ &env_l, &env_u) != 0 ) {
cairo_set_source_rgba( cr, 1, 1, 1, .6);
cairo_set_line_width( cr, 1);
aghui::cairo_draw_signal(
diff --git a/src/ui/sf/sf-patterns.cc b/src/ui/sf/sf-patterns.cc
index 52efc74..73ab9e3 100644
--- a/src/ui/sf/sf-patterns.cc
+++ b/src/ui/sf/sf-patterns.cc
@@ -144,7 +144,7 @@ draw( cairo_t *cr)
{
if ( sigproc::envelope( pattern, params.env_tightness, samplerate,
1./samplerate,
- env_l, env_u) == 0 ) {
+ &env_l, &env_u) == 0 ) {
aghui::cairo_put_banner( cr, da_wd, da_ht, "Selection is too short");
enable_controls( false);
goto out;
--
Sleep experiment manager
More information about the debian-med-commit
mailing list