summaryrefslogtreecommitdiff
path: root/apps/recorder
diff options
context:
space:
mode:
Diffstat (limited to 'apps/recorder')
-rw-r--r--apps/recorder/peakmeter.c50
-rw-r--r--apps/recorder/peakmeter.h2
2 files changed, 26 insertions, 26 deletions
diff --git a/apps/recorder/peakmeter.c b/apps/recorder/peakmeter.c
index e1850a4bb0..2e787ba982 100644
--- a/apps/recorder/peakmeter.c
+++ b/apps/recorder/peakmeter.c
@@ -51,11 +51,15 @@ static int peak_meter_clip_hold;
51/* specifies the value range in peak volume values */ 51/* specifies the value range in peak volume values */
52unsigned short peak_meter_range_min; 52unsigned short peak_meter_range_min;
53unsigned short peak_meter_range_max; 53unsigned short peak_meter_range_max;
54unsigned short peak_meter_range;
54 55
55/* if set to true clip timeout is disabled */ 56/* if set to true clip timeout is disabled */
56static bool peak_meter_clip_eternal = false; 57static bool peak_meter_clip_eternal = false;
57 58
58static bool peak_meter_use_dbfs = true; 59static bool peak_meter_use_dbfs = true;
60static unsigned short db_min = 0;
61static unsigned short db_max = 9000;
62static unsigned short db_range = 9000;
59 63
60 64
61#ifndef SIMULATOR 65#ifndef SIMULATOR
@@ -110,8 +114,9 @@ static long clip_time_out[] = {
110 114
111/* precalculated peak values that represent magical 115/* precalculated peak values that represent magical
112 dBfs values. Used to draw the scale */ 116 dBfs values. Used to draw the scale */
117#define DB_SCALE_SRC_VALUES_SIZE 11
113#if 0 118#if 0
114static int db_scale_src_values[] = { 119const static int db_scale_src_values[DB_SCALE_SRC_VALUES_SIZE] = {
115 32767, /* 0 db */ 120 32767, /* 0 db */
116 23197, /* - 3 db */ 121 23197, /* - 3 db */
117 16422, /* - 6 db */ 122 16422, /* - 6 db */
@@ -125,7 +130,7 @@ static int db_scale_src_values[] = {
125 33, /* -60 db */ 130 33, /* -60 db */
126}; 131};
127#else 132#else
128static int db_scale_src_values[] = { 133static const int db_scale_src_values[DB_SCALE_SRC_VALUES_SIZE] = {
129 32752, /* 0 db */ 134 32752, /* 0 db */
130 22784, /* - 3 db */ 135 22784, /* - 3 db */
131 14256, /* - 6 db */ 136 14256, /* - 6 db */
@@ -140,7 +145,7 @@ static int db_scale_src_values[] = {
140}; 145};
141#endif 146#endif
142 147
143int db_scale_count = sizeof db_scale_src_values / sizeof (int); 148static int db_scale_count = DB_SCALE_SRC_VALUES_SIZE;
144 149
145/* if db_scale_valid is false the content of 150/* if db_scale_valid is false the content of
146 db_scale_lcd_coord needs recalculation */ 151 db_scale_lcd_coord needs recalculation */
@@ -343,6 +348,11 @@ void peak_meter_set_min(int newmin) {
343 peak_meter_range_min = newmin * MAX_PEAK / 100; 348 peak_meter_range_min = newmin * MAX_PEAK / 100;
344 } 349 }
345 } 350 }
351
352 peak_meter_range = peak_meter_range_max - peak_meter_range_min;
353
354 db_min = calc_db(peak_meter_range_min);
355 db_range = db_max - db_min;
346 db_scale_valid = false; 356 db_scale_valid = false;
347} 357}
348 358
@@ -378,6 +388,11 @@ void peak_meter_set_max(int newmax) {
378 peak_meter_range_max = newmax * MAX_PEAK / 100; 388 peak_meter_range_max = newmax * MAX_PEAK / 100;
379 } 389 }
380 } 390 }
391
392 peak_meter_range = peak_meter_range_max - peak_meter_range_min;
393
394 db_max = calc_db(peak_meter_range_max);
395 db_range = db_max - db_min;
381 db_scale_valid = false; 396 db_scale_valid = false;
382} 397}
383 398
@@ -482,7 +497,7 @@ void peak_meter_playback(bool playback) {
482 * that ocurred. This function could be used by a thread for 497 * that ocurred. This function could be used by a thread for
483 * busy reading the MAS. 498 * busy reading the MAS.
484 */ 499 */
485void peak_meter_peek(void) { 500inline void peak_meter_peek(void) {
486#ifdef SIMULATOR 501#ifdef SIMULATOR
487 int left = 8000; 502 int left = 8000;
488 int right = 9000; 503 int right = 9000;
@@ -632,7 +647,6 @@ void peak_meter_set_clip_hold(int time) {
632 * @return unsigned short - A value 0 <= return value <= meterwidth 647 * @return unsigned short - A value 0 <= return value <= meterwidth
633 */ 648 */
634unsigned short peak_meter_scale_value(unsigned short val, int meterwidth){ 649unsigned short peak_meter_scale_value(unsigned short val, int meterwidth){
635 int range;
636 int retval; 650 int retval;
637 651
638 if (val <= peak_meter_range_min) { 652 if (val <= peak_meter_range_min) {
@@ -648,22 +662,16 @@ unsigned short peak_meter_scale_value(unsigned short val, int meterwidth){
648 /* different scaling is used for dBfs and linear percent */ 662 /* different scaling is used for dBfs and linear percent */
649 if (peak_meter_use_dbfs) { 663 if (peak_meter_use_dbfs) {
650 664
651 /* needed the offset in 'zoomed' meters */
652 int dbmin = calc_db(peak_meter_range_min);
653
654 range = calc_db(peak_meter_range_max) - dbmin;
655
656 /* scale the samples dBfs */ 665 /* scale the samples dBfs */
657 retval = (calc_db(retval) - dbmin) * meterwidth / range; 666 retval = (calc_db(retval) - db_min) * meterwidth / db_range;
658 } 667 }
659 668
660 /* Scale for linear percent display */ 669 /* Scale for linear percent display */
661 else 670 else
662 { 671 {
663 range =(peak_meter_range_max - peak_meter_range_min);
664
665 /* scale the samples */ 672 /* scale the samples */
666 retval = ((retval - peak_meter_range_min) * meterwidth) / range; 673 retval = ((retval - peak_meter_range_min) * meterwidth)
674 / peak_meter_range;
667 } 675 }
668 return retval; 676 return retval;
669} 677}
@@ -697,14 +705,7 @@ void peak_meter_draw(int x, int y, int width, int height) {
697 /* read the volume info from MAS */ 705 /* read the volume info from MAS */
698 left = peak_meter_read_l(); 706 left = peak_meter_read_l();
699 right = peak_meter_read_r(); 707 right = peak_meter_read_r();
700 peak_meter_peek(); 708 /*peak_meter_peek();*/
701
702 /* restrict the range to avoid drawing outside the lcd */
703 left = MAX(peak_meter_range_min, left);
704 left = MIN(peak_meter_range_max, left);
705
706 right = MAX(peak_meter_range_min, right);
707 right = MIN(peak_meter_range_max, right);
708 709
709 /* scale the samples dBfs */ 710 /* scale the samples dBfs */
710 left = peak_meter_scale_value(left, meterwidth); 711 left = peak_meter_scale_value(left, meterwidth);
@@ -715,7 +716,7 @@ void peak_meter_draw(int x, int y, int width, int height) {
715 if (!db_scale_valid){ 716 if (!db_scale_valid){
716 717
717 if (peak_meter_use_dbfs) { 718 if (peak_meter_use_dbfs) {
718 db_scale_count = sizeof db_scale_src_values / sizeof (int); 719 db_scale_count = DB_SCALE_SRC_VALUES_SIZE;
719 for (i = 0; i < db_scale_count; i++){ 720 for (i = 0; i < db_scale_count; i++){
720 /* find the real x-coords for predefined interesting 721 /* find the real x-coords for predefined interesting
721 dBfs values. These only are recalculated when the 722 dBfs values. These only are recalculated when the
@@ -729,12 +730,11 @@ void peak_meter_draw(int x, int y, int width, int height) {
729 730
730 /* when scaling linear we simly make 10% steps */ 731 /* when scaling linear we simly make 10% steps */
731 else { 732 else {
732 int range = peak_meter_range_max - peak_meter_range_min;
733 db_scale_count = 10; 733 db_scale_count = 10;
734 for (i = 0; i < db_scale_count; i++) { 734 for (i = 0; i < db_scale_count; i++) {
735 db_scale_lcd_coord[i] = 735 db_scale_lcd_coord[i] =
736 (i * (MAX_PEAK / 10) - peak_meter_range_min) * 736 (i * (MAX_PEAK / 10) - peak_meter_range_min) *
737 meterwidth / range; 737 meterwidth / peak_meter_range;
738 } 738 }
739 } 739 }
740 740
diff --git a/apps/recorder/peakmeter.h b/apps/recorder/peakmeter.h
index 356926f9de..db419a0afa 100644
--- a/apps/recorder/peakmeter.h
+++ b/apps/recorder/peakmeter.h
@@ -21,7 +21,7 @@
21 21
22/*#define PM_DEBUG */ 22/*#define PM_DEBUG */
23#ifdef PM_DEBUG 23#ifdef PM_DEBUG
24extern bool peak_meter_histogramm(void); 24extern bool peak_meter_histogram(void);
25#endif 25#endif
26 26
27 27