From: <bor...@us...> - 2022-10-05 20:34:17
|
Revision: 3783 http://sourceforge.net/p/ftm/code/3783 Author: borghesi Date: 2022-10-05 20:34:14 +0000 (Wed, 05 Oct 2022) Log Message: ----------- ftmediotr: partial fix of wrong display in Wave editor with fvec class Modified Paths: -------------- trunk/ftm/ftmlib/classes/ftmdatagui.c trunk/ftm/ftmlib/classes/fvec.c trunk/ftm/ftmlib/classes/fvec.h Modified: trunk/ftm/ftmlib/classes/ftmdatagui.c =================================================================== --- trunk/ftm/ftmlib/classes/ftmdatagui.c 2022-10-05 17:50:38 UTC (rev 3782) +++ trunk/ftm/ftmlib/classes/ftmdatagui.c 2022-10-05 20:34:14 UTC (rev 3783) @@ -2263,7 +2263,7 @@ } static void -fmat_gui_wave_get_ptr(void *obj, void *context, int onset, float **ptr, int *size, int *stride, int *ringIndex, int *ringSize, int *ringTile, double *ringOffset) +fmat_gui_wave_get_ptr(void *obj, void *context, int onset, float **ptr, int *size, int *stride, int *ringIndex, int *ringSize, int *ringTail, double *ringOffset) { fmat_t *self = (fmat_t *)obj; @@ -2272,7 +2272,7 @@ *stride = self->n; *ringIndex = -1; *ringSize = 0; - *ringTile = 0; + *ringTail = -1; *ringOffset = 0; } @@ -2572,7 +2572,7 @@ } static void -fmat_gui_multiwave_get_ptr(void *obj, void *context, int index, float **ptr, int *size, int *stride, int *ringIndex, int *ringSize, int *ringTale, double *ringOffset) +fmat_gui_multiwave_get_ptr(void *obj, void *context, int index, float **ptr, int *size, int *stride, int *ringIndex, int *ringSize, int *ringTail, double *ringOffset) { fmat_t *self = (fmat_t *)obj; @@ -2581,7 +2581,7 @@ *stride = self->n; *ringIndex = -1; *ringSize = 0; - *ringTale = 0; + *ringTail = -1; *ringOffset = 0; } @@ -4133,12 +4133,12 @@ } static void -fvec_gui_wave_get_ptr(void *obj, void *context, int onset, float ** ptr, int *size, int *stride, int *ringIndex, int *ringSize, int *ringTale, double *ringOffset) +fvec_gui_wave_get_ptr(void *obj, void *context, int onset, float ** ptr, int *size, int *stride, int *ringIndex, int *ringSize, int *ringTail, double *ringOffset) { fvec_vector_lock((fvec_t *)obj, ptr, size, stride); *ringIndex = -1; *ringSize = 0; - *ringTale = 0; + *ringTail = -1; *ringOffset = 0.0; } @@ -4154,16 +4154,16 @@ fvec_t *self = (fvec_t *)obj; float *p; int size, stride; - float vmax = 0.0; - float vmin = 0.0; + float vmax = -FLT_MAX; + float vmin = FLT_MAX; float vmean = 0.0; fvec_vector_lock(self, &p, &size, &stride); if(size > 0) { - vmin = fvec_vector_get_min(p, size, stride); - vmax = fvec_vector_get_max(p, size, stride); - vmean = fvec_vector_get_mean(p, size, stride); + vmin = fvec_vector_get_min_in_range(p, size, stride, rangeStartIndex, rangeSize); + vmax = fvec_vector_get_max_in_range(p, size, stride, rangeStartIndex, rangeSize); + vmean = fvec_vector_get_mean_in_range(p, size, stride, rangeStartIndex, rangeSize); } fvec_unlock(self); Modified: trunk/ftm/ftmlib/classes/fvec.c =================================================================== --- trunk/ftm/ftmlib/classes/fvec.c 2022-10-05 17:50:38 UTC (rev 3782) +++ trunk/ftm/ftmlib/classes/fvec.c 2022-10-05 20:34:14 UTC (rev 3783) @@ -541,6 +541,72 @@ return ABS_MAX; } + +float +fvec_vector_get_min_in_range(float *ptr, int size, int stride, int start, int range) +{ + if(size > 0 && start < size && start >= 0) + { + float min = ptr[start]; + int i; + + int num = (start+range >= size) ? size-start : range; + + for (i=stride*start; i<(start+num)*stride; i+=stride) + { + if (ptr[i] < min) + min = ptr[i]; + } + + return min; + } + + return ABS_MIN; +} + +float +fvec_vector_get_max_in_range(float *ptr, int size, int stride, int start, int range) +{ + if(size > 0 && start < size && start >= 0) + { + float max = ptr[start]; + int i; + int num = (start+range >= size) ? size-start : range; + + for (i=stride*start; i<(start+num)*stride; i+=stride) + { + if (ptr[i] > max) + max = ptr[i]; + } + + return max; + } + + return ABS_MAX; +} + +float +fvec_vector_get_mean_in_range(float *ptr, int size, int stride, int start, int range) +{ + if(size > 0 && start < size && start >= 0) + { + float mean = 0; + float val; + int i; + int num = (start+range >= size) ? size-start : range; + + for (i=stride*start; i<(start+num)*stride; i+=stride) + { + val = ptr[i]; + mean += val*val; + } + mean = sqrt(mean/size); + + return mean; + } + + return ABS_MAX; +} /******************************************************************** * * (thread-safe) class functions Modified: trunk/ftm/ftmlib/classes/fvec.h =================================================================== --- trunk/ftm/ftmlib/classes/fvec.h 2022-10-05 17:50:38 UTC (rev 3782) +++ trunk/ftm/ftmlib/classes/fvec.h 2022-10-05 20:34:14 UTC (rev 3783) @@ -307,6 +307,9 @@ FTS_API float fvec_vector_get_min(float *ptr, int size, int stride); FTS_API float fvec_vector_get_max(float *ptr, int size, int stride); FTS_API float fvec_vector_get_mean(float *ptr, int size, int stride); +FTS_API float fvec_vector_get_min_in_range(float *ptr, int size, int stride, int start, int range); +FTS_API float fvec_vector_get_max_in_range(float *ptr, int size, int stride, int start, int range); +FTS_API float fvec_vector_get_mean_in_range(float *ptr, int size, int stride, int start, int range); /** * @brief This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |