diff options
Diffstat (limited to 'apps/recorder/peakmeter.c')
-rw-r--r-- | apps/recorder/peakmeter.c | 50 |
1 files changed, 25 insertions, 25 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 */ |
52 | unsigned short peak_meter_range_min; | 52 | unsigned short peak_meter_range_min; |
53 | unsigned short peak_meter_range_max; | 53 | unsigned short peak_meter_range_max; |
54 | unsigned short peak_meter_range; | ||
54 | 55 | ||
55 | /* if set to true clip timeout is disabled */ | 56 | /* if set to true clip timeout is disabled */ |
56 | static bool peak_meter_clip_eternal = false; | 57 | static bool peak_meter_clip_eternal = false; |
57 | 58 | ||
58 | static bool peak_meter_use_dbfs = true; | 59 | static bool peak_meter_use_dbfs = true; |
60 | static unsigned short db_min = 0; | ||
61 | static unsigned short db_max = 9000; | ||
62 | static 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 |
114 | static int db_scale_src_values[] = { | 119 | const 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 |
128 | static int db_scale_src_values[] = { | 133 | static 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 | ||
143 | int db_scale_count = sizeof db_scale_src_values / sizeof (int); | 148 | static 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 | */ |
485 | void peak_meter_peek(void) { | 500 | inline 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 | */ |
634 | unsigned short peak_meter_scale_value(unsigned short val, int meterwidth){ | 649 | unsigned 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 | ||