diff --git a/apps/features.txt b/apps/features.txt index 54e6afddf3..93b81ff4a5 100644 --- a/apps/features.txt +++ b/apps/features.txt @@ -129,8 +129,8 @@ recording_mic #endif #endif -#if defined(HAVE_RECORDING_HISTOGRAM) -recording_histogram +#if defined(HAVE_HISTOGRAM) +histogram #endif #if defined(HAVE_REMOTE_LCD) diff --git a/apps/lang/catala.lang b/apps/lang/catala.lang index f133e3dd9e..ec79dd7d89 100644 --- a/apps/lang/catala.lang +++ b/apps/lang/catala.lang @@ -12078,20 +12078,20 @@ - id: LANG_RECORDING_HISTOGRAM_INTERVAL + id: LANG_HISTOGRAM_INTERVAL desc: in record settings menu user: core *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" *: none - recording_histogram: "Intèrval d'histograma" + histogram: "Intèrval d'histograma" *: none - recording_histogram: "Intèrval d'histograma" + histogram: "Intèrval d'histograma" diff --git a/apps/lang/czech.lang b/apps/lang/czech.lang index 5d99107296..43bf034071 100644 --- a/apps/lang/czech.lang +++ b/apps/lang/czech.lang @@ -12086,20 +12086,20 @@ - id: LANG_RECORDING_HISTOGRAM_INTERVAL + id: LANG_HISTOGRAM_INTERVAL desc: in record settings menu user: core *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" *: none - recording_histogram: "Rozsah histogramu" + histogram: "Rozsah histogramu" *: none - recording_histogram: "Rozsah histogramu" + histogram: "Rozsah histogramu" diff --git a/apps/lang/dansk.lang b/apps/lang/dansk.lang index 3d4557ac4f..20ebb5e58b 100644 --- a/apps/lang/dansk.lang +++ b/apps/lang/dansk.lang @@ -12566,20 +12566,20 @@ - id: LANG_RECORDING_HISTOGRAM_INTERVAL + id: LANG_HISTOGRAM_INTERVAL desc: in record settings menu user: core *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" diff --git a/apps/lang/deutsch.lang b/apps/lang/deutsch.lang index ccaa140b37..75004b44db 100644 --- a/apps/lang/deutsch.lang +++ b/apps/lang/deutsch.lang @@ -12440,20 +12440,20 @@ - id: LANG_RECORDING_HISTOGRAM_INTERVAL + id: LANG_HISTOGRAM_INTERVAL desc: in record settings menu user: core *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" *: none - recording_histogram: "Histogrammintervall" + histogram: "Histogrammintervall" *: none - recording_histogram: "Histogrammintervall" + histogram: "Histogrammintervall" diff --git a/apps/lang/english.lang b/apps/lang/english.lang index 128d5c5fad..de2384214d 100644 --- a/apps/lang/english.lang +++ b/apps/lang/english.lang @@ -12169,20 +12169,20 @@ - id: LANG_RECORDING_HISTOGRAM_INTERVAL + id: LANG_HISTOGRAM_INTERVAL desc: in record settings menu user: core *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" diff --git a/apps/lang/espanol.lang b/apps/lang/espanol.lang index cf4266c062..f689bd6999 100644 --- a/apps/lang/espanol.lang +++ b/apps/lang/espanol.lang @@ -12372,20 +12372,20 @@ - id: LANG_RECORDING_HISTOGRAM_INTERVAL + id: LANG_HISTOGRAM_INTERVAL desc: in record settings menu user: core *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" *: none - recording_histogram: "Intervalo del histograma" + histogram: "Intervalo del histograma" *: none - recording_histogram: "Intervalo del histograma" + histogram: "Intervalo del histograma" diff --git a/apps/lang/francais.lang b/apps/lang/francais.lang index a1a7566647..2adf811d54 100644 --- a/apps/lang/francais.lang +++ b/apps/lang/francais.lang @@ -12110,20 +12110,20 @@ - id: LANG_RECORDING_HISTOGRAM_INTERVAL + id: LANG_HISTOGRAM_INTERVAL desc: in record settings menu user: core *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" *: none - recording_histogram: "Intervalle de l'histogramme" + histogram: "Intervalle de l'histogramme" *: none - recording_histogram: "Intervalle de l'histogramme" + histogram: "Intervalle de l'histogramme" diff --git a/apps/lang/hebrew.lang b/apps/lang/hebrew.lang index 2400b0bb53..b6937db808 100644 --- a/apps/lang/hebrew.lang +++ b/apps/lang/hebrew.lang @@ -12548,20 +12548,20 @@ - id: LANG_RECORDING_HISTOGRAM_INTERVAL + id: LANG_HISTOGRAM_INTERVAL desc: in record settings menu user: core *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" diff --git a/apps/lang/hrvatski.lang b/apps/lang/hrvatski.lang index d681a0ed6c..1def22085f 100644 --- a/apps/lang/hrvatski.lang +++ b/apps/lang/hrvatski.lang @@ -12087,20 +12087,20 @@ - id: LANG_RECORDING_HISTOGRAM_INTERVAL + id: LANG_HISTOGRAM_INTERVAL desc: in record settings menu user: core *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" *: none - recording_histogram: "Interval histograma" + histogram: "Interval histograma" *: none - recording_histogram: "Interval histograma" + histogram: "Interval histograma" diff --git a/apps/lang/italiano.lang b/apps/lang/italiano.lang index 677b242e3d..fa95de5086 100644 --- a/apps/lang/italiano.lang +++ b/apps/lang/italiano.lang @@ -12089,20 +12089,20 @@ - id: LANG_RECORDING_HISTOGRAM_INTERVAL + id: LANG_HISTOGRAM_INTERVAL desc: in record settings menu user: core *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" *: none - recording_histogram: "Intervallo Istogramma" + histogram: "Intervallo Istogramma" *: none - recording_histogram: "Intervallo Istogramma" + histogram: "Intervallo Istogramma" diff --git a/apps/lang/japanese.lang b/apps/lang/japanese.lang index f1c45c9187..d0b0ae8434 100644 --- a/apps/lang/japanese.lang +++ b/apps/lang/japanese.lang @@ -12093,20 +12093,20 @@ - id: LANG_RECORDING_HISTOGRAM_INTERVAL + id: LANG_HISTOGRAM_INTERVAL desc: in record settings menu user: core *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" *: none - recording_histogram: "ヒストグラムの間隔" + histogram: "ヒストグラムの間隔" *: none - recording_histogram: "ヒストグラムの間隔" + histogram: "ヒストグラムの間隔" diff --git a/apps/lang/nederlands.lang b/apps/lang/nederlands.lang index db552d52c6..08bf3dfa81 100644 --- a/apps/lang/nederlands.lang +++ b/apps/lang/nederlands.lang @@ -12092,20 +12092,20 @@ - id: LANG_RECORDING_HISTOGRAM_INTERVAL + id: LANG_HISTOGRAM_INTERVAL desc: in record settings menu user: core *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" diff --git a/apps/lang/polski.lang b/apps/lang/polski.lang index d54afde4e9..00e1ddeaf8 100644 --- a/apps/lang/polski.lang +++ b/apps/lang/polski.lang @@ -12382,20 +12382,20 @@ - id: LANG_RECORDING_HISTOGRAM_INTERVAL + id: LANG_HISTOGRAM_INTERVAL desc: in record settings menu user: core *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" *: none - recording_histogram: "Przedziały histogramu" + histogram: "Przedziały histogramu" *: none - recording_histogram: "Przedziały histogramu" + histogram: "Przedziały histogramu" diff --git a/apps/lang/portugues-brasileiro.lang b/apps/lang/portugues-brasileiro.lang index 0bc6618887..3036a79151 100644 --- a/apps/lang/portugues-brasileiro.lang +++ b/apps/lang/portugues-brasileiro.lang @@ -12085,20 +12085,20 @@ - id: LANG_RECORDING_HISTOGRAM_INTERVAL + id: LANG_HISTOGRAM_INTERVAL desc: in record settings menu user: core *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" *: none - recording_histogram: "Intervalo do Histograma" + histogram: "Intervalo do Histograma" *: none - recording_histogram: "Intervalo do Histograma" + histogram: "Intervalo do Histograma" diff --git a/apps/lang/portugues.lang b/apps/lang/portugues.lang index 3917140b35..f2ce99bb73 100644 --- a/apps/lang/portugues.lang +++ b/apps/lang/portugues.lang @@ -12537,20 +12537,20 @@ - id: LANG_RECORDING_HISTOGRAM_INTERVAL + id: LANG_HISTOGRAM_INTERVAL desc: in record settings menu user: core *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" *: none - recording_histogram: "Intervalo do Histograma" + histogram: "Intervalo do Histograma" *: none - recording_histogram: "Intervalo do Histograma" + histogram: "Intervalo do Histograma" diff --git a/apps/lang/russian.lang b/apps/lang/russian.lang index dd43c4e735..cbe432d873 100644 --- a/apps/lang/russian.lang +++ b/apps/lang/russian.lang @@ -12520,20 +12520,20 @@ - id: LANG_RECORDING_HISTOGRAM_INTERVAL + id: LANG_HISTOGRAM_INTERVAL desc: in record settings menu user: core *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" *: none - recording_histogram: "Интервал гистограммы" + histogram: "Интервал гистограммы" *: none - recording_histogram: "Интервал гистограммы" + histogram: "Интервал гистограммы" diff --git a/apps/lang/slovak.lang b/apps/lang/slovak.lang index d4fc98567c..94a175eb15 100644 --- a/apps/lang/slovak.lang +++ b/apps/lang/slovak.lang @@ -12085,20 +12085,20 @@ - id: LANG_RECORDING_HISTOGRAM_INTERVAL + id: LANG_HISTOGRAM_INTERVAL desc: in record settings menu user: core *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" *: none - recording_histogram: "Interval Histogramu" + histogram: "Interval Histogramu" *: none - recording_histogram: "Interval histogramu" + histogram: "Interval histogramu" diff --git a/apps/lang/slovenscina.lang b/apps/lang/slovenscina.lang index 9f1bda76c7..14ef2c98eb 100644 --- a/apps/lang/slovenscina.lang +++ b/apps/lang/slovenscina.lang @@ -12011,20 +12011,20 @@ - id: LANG_RECORDING_HISTOGRAM_INTERVAL + id: LANG_HISTOGRAM_INTERVAL desc: in record settings menu user: core *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" diff --git a/apps/lang/srpski.lang b/apps/lang/srpski.lang index 7cd4d94263..179e696363 100644 --- a/apps/lang/srpski.lang +++ b/apps/lang/srpski.lang @@ -12499,20 +12499,20 @@ - id: LANG_RECORDING_HISTOGRAM_INTERVAL + id: LANG_HISTOGRAM_INTERVAL desc: in record settings menu user: core *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" *: none - recording_histogram: "Интервал хистограма" + histogram: "Интервал хистограма" *: none - recording_histogram: "Интервал хистограма" + histogram: "Интервал хистограма" diff --git a/apps/lang/svenska.lang b/apps/lang/svenska.lang index 6d94e52dfb..ec25e0071d 100644 --- a/apps/lang/svenska.lang +++ b/apps/lang/svenska.lang @@ -12091,20 +12091,20 @@ - id: LANG_RECORDING_HISTOGRAM_INTERVAL + id: LANG_HISTOGRAM_INTERVAL desc: in record settings menu user: core *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" *: none - recording_histogram: "Histogramintervall" + histogram: "Histogramintervall" *: none - recording_histogram: "Histogramintervall" + histogram: "Histogramintervall" diff --git a/apps/lang/tagalog.lang b/apps/lang/tagalog.lang index f4bbc32bc7..816c039222 100644 --- a/apps/lang/tagalog.lang +++ b/apps/lang/tagalog.lang @@ -12559,20 +12559,20 @@ - id: LANG_RECORDING_HISTOGRAM_INTERVAL + id: LANG_HISTOGRAM_INTERVAL desc: in record settings menu user: core *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" diff --git a/apps/lang/thai.lang b/apps/lang/thai.lang index d01fde0689..0fceae4ca4 100644 --- a/apps/lang/thai.lang +++ b/apps/lang/thai.lang @@ -12511,20 +12511,20 @@ - id: LANG_RECORDING_HISTOGRAM_INTERVAL + id: LANG_HISTOGRAM_INTERVAL desc: in record settings menu user: core *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" *: none - recording_histogram: "ช่วงเวลาฮิสโตแกรม" + histogram: "ช่วงเวลาฮิสโตแกรม" *: none - recording_histogram: "Histogram interval" + histogram: "Histogram interval" diff --git a/apps/menus/display_menu.c b/apps/menus/display_menu.c index 4badf960ba..7e7b5a6903 100644 --- a/apps/menus/display_menu.c +++ b/apps/menus/display_menu.c @@ -443,6 +443,30 @@ static int peak_meter_max(void) { settings_apply_pm_range(); return retval; } + +#if defined(HAVE_HISTOGRAM) +static bool history_interval(void) +{ + static const struct opt_items names[] = { + { "0s", TALK_ID(0, UNIT_SEC) }, + { "1s", TALK_ID(1, UNIT_SEC) }, + { "2s", TALK_ID(2, UNIT_SEC) }, + { "4s", TALK_ID(4, UNIT_SEC) } + }; + + /* reconfigure histogram settings here */ + + return set_option(str(LANG_HISTOGRAM_INTERVAL), + &global_settings.histogram_interval, + INT, names, 4, NULL ); +} + +MENUITEM_FUNCTION(histogram, 0, + ID2P(LANG_HISTOGRAM_INTERVAL), + history_interval, NULL, NULL, Icon_Menu_setting); + +#endif + MENUITEM_FUNCTION(peak_meter_scale_item, 0, ID2P(LANG_PM_SCALE), peak_meter_scale, NULL, NULL, Icon_NOICON); MENUITEM_FUNCTION(peak_meter_min_item, 0, ID2P(LANG_PM_MIN), @@ -454,6 +478,9 @@ MAKE_MENU(peak_meter_menu, ID2P(LANG_PM_MENU), NULL, Icon_NOICON, &peak_meter_clip_hold, #ifdef HAVE_RECORDING &peak_meter_clipcounter, +#endif +#ifdef HAVE_HISTOGRAM + &histogram, #endif &peak_meter_scale_item, &peak_meter_min_item, &peak_meter_max_item); #endif /* HAVE_LCD_BITMAP */ diff --git a/apps/menus/recording_menu.c b/apps/menus/recording_menu.c index 8eaeab699c..ae237b1b4a 100644 --- a/apps/menus/recording_menu.c +++ b/apps/menus/recording_menu.c @@ -392,26 +392,6 @@ MENUITEM_FUNCTION(agc_cliptime, 0, ID2P(LANG_RECORDING_AGC_CLIPTIME), agc_cliptime_func, NULL, NULL, Icon_Menu_setting); #endif /* HAVE_AGC */ -#if defined(HAVE_RECORDING_HISTOGRAM) -static bool history_interval(void) -{ - static const struct opt_items names[] = { - { "0s", TALK_ID(0, UNIT_SEC) }, - { "1s", TALK_ID(1, UNIT_SEC) }, - { "2s", TALK_ID(2, UNIT_SEC) }, - { "4s", TALK_ID(4, UNIT_SEC) } - }; - return set_option(str(LANG_RECORDING_HISTOGRAM_INTERVAL), - &global_settings.rec_histogram_interval, - INT, names, 4, NULL ); -} - -MENUITEM_FUNCTION(recording_histogram, 0, - ID2P(LANG_RECORDING_HISTOGRAM_INTERVAL), - history_interval, NULL, NULL, Icon_Menu_setting); - -#endif - /** Rec trigger **/ enum trigger_menu_option { @@ -666,9 +646,6 @@ MAKE_MENU(recording_settings_menu, ID2P(LANG_RECORDING_SETTINGS), #ifdef HAVE_AGC &agc_preset, &agc_cliptime, #endif -#if defined(HAVE_RECORDING_HISTOGRAM) - &recording_histogram, -#endif #ifdef HAVE_LCD_BITMAP &peak_meter_menu, #endif diff --git a/apps/recorder/peakmeter.c b/apps/recorder/peakmeter.c index ca1b8c8750..c13c4c9539 100644 --- a/apps/recorder/peakmeter.c +++ b/apps/recorder/peakmeter.c @@ -28,6 +28,7 @@ #include "storage.h" #include "lcd.h" #include "scrollbar.h" +#include "string.h" #include "button.h" #include "system.h" #include "font.h" @@ -64,9 +65,10 @@ static int pm_cur_left; /* current values (last peak_meter_peek) */ static int pm_cur_right; static int pm_max_left; /* maximum values between peak meter draws */ static int pm_max_right; -#if defined(HAVE_AGC) || defined(HAVE_RECORDING_HISTOGRAM) +#if defined(HAVE_AGC) || defined(HAVE_HISTOGRAM) static int pm_peakhold_left; /* max. peak values between peakhold calls */ static int pm_peakhold_right; /* used for AGC and histogram display */ +static long next_histogram_update; #endif /* Clip hold */ @@ -134,6 +136,38 @@ static unsigned int peeks_per_redraw[PEEKS_PER_DRAW_SIZE]; static unsigned int ticks_per_redraw[TICKS_PER_DRAW_SIZE]; #endif +#if defined(HAVE_HISTOGRAM) +#define HIST_BUF_SIZE (LCD_WIDTH / 2) +static int hist_l = 0; +static int hist_r = 0; +static unsigned char history_l[HIST_BUF_SIZE]; +static unsigned char history_r[HIST_BUF_SIZE]; +static const char hist_level_marks[6] = { 29, 26, 23, 17, 9, 2}; +static int history_pos = 0; +#define HIST_W (LCD_WIDTH / 2) +#if LCD_DEPTH > 1 +#ifdef HAVE_LCD_COLOR +#define LCD_BAL_L LCD_RGBPACK(0, 0, 255) +#define LCD_BAL_R LCD_RGBPACK(204, 0, 0) +#define LCD_HIST_OVER LCD_RGBPACK(204, 0, 0) +#define LCD_HIST_HI LCD_RGBPACK(255, 204, 0) +#define LCD_HIST_OK LCD_RGBPACK(51, 153, 0) +#else /* HAVE_LCD_COLOR */ +#define LCD_BATT_OK LCD_BLACK +#define LCD_BATT_LO LCD_DARKGRAY +#define LCD_DISK_OK LCD_BLACK +#define LCD_DISK_LO LCD_DARKGRAY +#define LCD_HIST_OVER LCD_BLACK +#define LCD_HIST_OK LCD_DARKGRAY +#define LCD_BAL LCD_DARKGRAY +#endif /* HAVE_LCD_COLOR */ +#else /* LCD_DEPTH > 1 */ +#define LCD_HIST_OVER LCD_DEFAULT_FG +#define LCD_HIST_OK LCD_DEFAULT_FG +#define LCD_BAL LCD_DEFAULT_FG +#endif /* LCD_DEPTH > 1 */ +#endif /* HAVE_HISTOGRAM */ + static void peak_meter_draw(struct screen *display, struct meter_scales *meter_scales, int x, int y, int width, int height); @@ -810,7 +844,7 @@ static int peak_meter_read_l(void) retval = pm_max_left; -#if defined(HAVE_RECORDING_HISTOGRAM) || defined(HAVE_AGC) +#if defined(HAVE_HISTOGRAM) || defined(HAVE_AGC) /* store max peak value for peak_meter_get_peakhold_x readout */ pm_peakhold_left = MAX(pm_max_left, pm_peakhold_left); #endif @@ -843,7 +877,7 @@ static int peak_meter_read_r(void) retval = pm_max_right; -#if defined(HAVE_RECORDING_HISTOGRAM) || defined(HAVE_AGC) +#if defined(HAVE_HISTOGRAM) || defined(HAVE_AGC) /* store max peak value for peak_meter_get_peakhold_x readout */ pm_peakhold_right = MAX(pm_max_right, pm_peakhold_right); #endif @@ -857,7 +891,7 @@ static int peak_meter_read_r(void) return retval; } -#if defined(HAVE_AGC) || defined(HAVE_RECORDING_HISTOGRAM) +#if defined(HAVE_AGC) || defined(HAVE_HISTOGRAM) /** * Reads out the current peak-hold values since the last call. * This is used by the histogram feature in the recording screen. @@ -869,6 +903,14 @@ void peak_meter_get_peakhold(int *peak_left, int *peak_right) *peak_left = pm_peakhold_left; if (peak_right) *peak_right = pm_peakhold_right; + +#ifdef HAVE_HISTOGRAM + if (*peak_left > hist_l) + hist_l = *peak_left; + if (*peak_right > hist_r) + hist_r = *peak_right; +#endif + pm_peakhold_left = 0; pm_peakhold_right = 0; } @@ -1447,4 +1489,75 @@ bool peak_meter_histogram(void) } #endif +#ifdef HAVE_HISTOGRAM +void histogram_init() +{ + /* get update interval, clear buffer, reset drawing position */ + memset(history_l, 0, sizeof(unsigned char)*HIST_BUF_SIZE); + memset(history_r, 0, sizeof(unsigned char)*HIST_BUF_SIZE); + next_histogram_update = current_tick + + (global_settings.histogram_interval * HZ); +} + +void histogram_draw(int x1, int x2, int y1, int y2, int width, int height) +{ + int i, j; + if (current_tick >= next_histogram_update) + { + /* fill history buffer */ + history_l[history_pos] = hist_l * height / 32767; + history_r[history_pos] = hist_r * height / 32767; + history_pos = (history_pos + 1) % HIST_BUF_SIZE; + history_l[history_pos] = history_r[history_pos] = 0; + history_l[(history_pos + 1) % HIST_BUF_SIZE] = 0; + history_r[(history_pos + 1) % HIST_BUF_SIZE] = 0; + hist_l = 0; + hist_r = 0; + next_histogram_update = current_tick + + (global_settings.histogram_interval * HZ); + } + lcd_set_drawmode(DRMODE_SOLID); + lcd_drawrect(x1, y1, width, height); + lcd_drawrect(x2, y2, width, height); + lcd_set_drawmode(DRMODE_FG); + + j = history_pos; + for (i = width-2; i >= 0; i--) + { + j--; + if(j<0) + j = HIST_BUF_SIZE-1; + if (history_l[j]) + { + if (history_l[j] == height) + lcd_set_foreground(LCD_HIST_OVER); +#ifdef HAVE_LCD_COLOR + else if (history_l[j] > hist_level_marks[1]) + lcd_set_foreground(LCD_HIST_HI); +#endif + else + lcd_set_foreground(LCD_HIST_OK); + lcd_vline(x1 + i, y1 + height - 2, y1 + height - history_l[j]); + } + if (history_r[j]) + { + if (history_r[j] == height) + lcd_set_foreground(LCD_HIST_OVER); +#ifdef HAVE_LCD_COLOR + else if (history_r[j] > hist_level_marks[1]) + lcd_set_foreground(LCD_HIST_HI); +#endif + else + lcd_set_foreground(LCD_HIST_OK); + lcd_vline(x2 + i, y2 + height - 2, y2 + height - history_r[j]); + } + } + lcd_set_foreground( +#ifdef HAVE_LCD_COLOR + global_settings.fg_color); +#else + LCD_DEFAULT_FG); +#endif +} +#endif /* HAVE_HISTOGRAM */ diff --git a/apps/recorder/peakmeter.h b/apps/recorder/peakmeter.h index fee4882679..6be43a5f3a 100644 --- a/apps/recorder/peakmeter.h +++ b/apps/recorder/peakmeter.h @@ -56,6 +56,11 @@ extern int calc_db (int isample); extern int peak_meter_db2sample(int db); extern unsigned short peak_meter_scale_value(unsigned short val, int meterwidth); +#ifdef HAVE_HISTOGRAM +extern void histogram_init(void); +extern void histogram_draw(int x1, int x2, int y1, int y2, int width, int height); +#endif + /* valid values for trigger_status */ #define TRIG_OFF 0x00 #define TRIG_READY 0x01 @@ -103,3 +108,4 @@ struct meter_scales{ extern void peak_meter_screen(struct screen *display, int x, int y, int height); #endif /* __PEAKMETER_H__ */ + diff --git a/apps/recorder/recording.c b/apps/recorder/recording.c index 34283b6cb5..6faaa6c48c 100644 --- a/apps/recorder/recording.c +++ b/apps/recorder/recording.c @@ -269,39 +269,9 @@ static short agc_baltime = 0; /* AGC maximum gain */ static short agc_maxgain; #endif /* HAVE_AGC */ -#if defined(HAVE_AGC) || defined(HAVE_RECORDING_HISTOGRAM) +#if defined(HAVE_AGC) static long hist_time = 0; -#endif /* HAVE_AGC or HAVE_RECORDING_HISTOGRAM */ -/* Histogram data */ -/* TO DO: move some of this stuff inside the recording function? */ -#ifdef HAVE_RECORDING_HISTOGRAM -static int hist_l = 0; -static int hist_r = 0; -#define HIST_BUF_SIZE (LCD_WIDTH) -#define HIST_Y (hist_pos_y+hist_size_h-1) -#define HIST_W (LCD_WIDTH / 2 - 4) -#if LCD_DEPTH > 1 -#ifdef HAVE_LCD_COLOR -#define LCD_BAL_L LCD_RGBPACK(0, 0, 255) -#define LCD_BAL_R LCD_RGBPACK(204, 0, 0) -#define LCD_HIST_OVER LCD_RGBPACK(204, 0, 0) -#define LCD_HIST_HI LCD_RGBPACK(255, 204, 0) -#define LCD_HIST_OK LCD_RGBPACK(51, 153, 0) -#else /* HAVE_LCD_COLOR */ -#define LCD_BATT_OK LCD_BLACK -#define LCD_BATT_LO LCD_DARKGRAY -#define LCD_DISK_OK LCD_BLACK -#define LCD_DISK_LO LCD_DARKGRAY -#define LCD_HIST_OVER LCD_BLACK -#define LCD_HIST_OK LCD_DARKGRAY -#define LCD_BAL LCD_DARKGRAY -#endif /* HAVE_LCD_COLOR */ -#else /* LCD_DEPTH > 1 */ -#define LCD_HIST_OVER LCD_DEFAULT_FG -#define LCD_HIST_OK LCD_DEFAULT_FG -#define LCD_BAL LCD_DEFAULT_FG -#endif /* LCD_DEPTH > 1 */ -#endif /* HAVE_RECORDING_HISTOGRAM */ +#endif /* HAVE_AGC */ static void set_gain(void) { @@ -368,13 +338,6 @@ static bool read_peak_levels(int *peak_l, int *peak_r, int *balance) *balance += balance_mem[i]; *balance = *balance / BAL_MEM_SIZE; -#ifdef HAVE_RECORDING_HISTOGRAM - if (*peak_l > hist_l) - hist_l = *peak_l; - if (*peak_r > hist_r) - hist_r = *peak_r; -#endif - return true; } @@ -1089,18 +1052,12 @@ bool recording_screen(bool no_source) /* tweak layout tiny screens / big fonts */ bool compact_view[NB_SCREENS] = { false }; struct gui_synclist lists; /* the list in the bottom vp */ -#if defined(HAVE_AGC) || defined(HAVE_RECORDING_HISTOGRAM) +#if defined(HAVE_AGC) bool peak_valid = false; #endif -#if defined(HAVE_RECORDING_HISTOGRAM) - int j; +#if defined(HAVE_HISTOGRAM) unsigned short hist_pos_y = 0; unsigned short hist_size_h = 0; - int history_pos = 0; - short hist_time_interval = 1; /* 1, 2, 4, 8 */ - unsigned char history_l[HIST_BUF_SIZE]; - unsigned char history_r[HIST_BUF_SIZE]; - const char hist_level_marks[6] = { 29, 26, 23, 17, 9, 2}; #endif #ifdef HAVE_FMRADIO_REC int prev_rec_source = global_settings.rec_source; /* detect source change */ @@ -1186,10 +1143,9 @@ bool recording_screen(bool no_source) /* top vp, 4 lines, force sys font if total screen < 6 lines NOTE: one could limit the list to 1 line and get away with 5 lines */ top_height_req[i] = 4; -#if defined(HAVE_RECORDING_HISTOGRAM) - if((global_settings.rec_histogram_interval) && (!i)) +#if defined(HAVE_HISTOGRAM) + if((global_settings.histogram_interval) && (!i)) top_height_req[i] += 1; /* use one line for histogram */ - hist_time_interval = 1 << global_settings.rec_histogram_interval; #endif v = &vp_top[i]; viewport_set_defaults(v, i); @@ -1229,13 +1185,11 @@ bool recording_screen(bool no_source) send_event(GUI_EVENT_ACTIONUPDATE, (void*)1); /* force a redraw */ -#if defined(HAVE_RECORDING_HISTOGRAM) - history_pos = 0; +#if defined(HAVE_HISTOGRAM) hist_pos_y = (compact_view[0] ? 3 : 4) * (font_get(vp_top[0].font)->height) + 1; hist_size_h = font_get(vp_top[0].font)->height - 2; - memset(history_l, 0, sizeof(unsigned char)*HIST_BUF_SIZE); - memset(history_r, 0, sizeof(unsigned char)*HIST_BUF_SIZE); + histogram_init(); #endif FOR_NB_SCREENS(i) @@ -1887,75 +1841,21 @@ bool recording_screen(bool no_source) } } -#ifdef HAVE_RECORDING_HISTOGRAM - if(global_settings.rec_histogram_interval) - { - if (peak_valid && !(hist_time % hist_time_interval) && hist_l) +#ifdef HAVE_HISTOGRAM + if(global_settings.histogram_interval) { - /* fill history buffer */ - history_l[history_pos] = hist_l * hist_size_h / 32767; - history_r[history_pos] = hist_r * hist_size_h / 32767; - history_pos = (history_pos + 1) % HIST_BUF_SIZE; - history_l[history_pos] = history_r[history_pos] = 0; - history_l[(history_pos + 1) % HIST_BUF_SIZE] = 0; - history_r[(history_pos + 1) % HIST_BUF_SIZE] = 0; - hist_l = 0; - hist_r = 0; + histogram_draw(0, + screens[0].getwidth()/2, + hist_pos_y, + hist_pos_y, + screens[0].getwidth()/2, + hist_size_h); } - lcd_set_drawmode(DRMODE_SOLID); - lcd_drawrect(0, hist_pos_y - 1, - HIST_W + 2, hist_size_h + 1); - lcd_drawrect(HIST_W + 6, hist_pos_y - 1, - HIST_W + 2, hist_size_h + 1); - lcd_set_drawmode(DRMODE_FG); - - j = history_pos; - for (i = HIST_W-1; i >= 0; i--) - { - j--; - if(j<0) - j = HIST_BUF_SIZE-1; - if (history_l[j]) - { - if (history_l[j] == hist_size_h) - lcd_set_foreground(LCD_HIST_OVER); -#ifdef HAVE_LCD_COLOR - else if (history_l[j] > hist_level_marks[1]) - lcd_set_foreground(LCD_HIST_HI); #endif - else - lcd_set_foreground(LCD_HIST_OK); - lcd_vline(1 + i, HIST_Y-1, HIST_Y - history_l[j]); - } - if (history_r[j]) - { - if (history_r[j] == hist_size_h) - lcd_set_foreground(LCD_HIST_OVER); -#ifdef HAVE_LCD_COLOR - else if (history_r[j] > hist_level_marks[1]) - lcd_set_foreground(LCD_HIST_HI); -#endif - else - lcd_set_foreground(LCD_HIST_OK); - lcd_vline(HIST_W+7 + i, HIST_Y-1, HIST_Y - history_r[j]); - } - } - lcd_set_foreground( -#ifdef HAVE_LCD_COLOR - global_settings.fg_color); -#else - LCD_DEFAULT_FG); -#endif - for (i = 0; i < 6; i++) - lcd_hline(HIST_W + 3, HIST_W + 4, - HIST_Y - hist_level_marks[i]); - } -#endif /* HAVE_RECORDING_HISTOGRAM */ #ifdef HAVE_AGC hist_time++; #endif - /* draw the trigger status */ if (peak_meter_trigger_status() != TRIG_OFF) { diff --git a/apps/settings.h b/apps/settings.h index bed88c82ea..05965b3119 100644 --- a/apps/settings.h +++ b/apps/settings.h @@ -438,8 +438,8 @@ struct user_settings int rec_stop_gap; /* index of trig_durations */ int rec_trigger_mode; /* see TRIG_MODE_XXX constants */ int rec_trigger_type; /* what to do when trigger released */ -#ifdef HAVE_RECORDING_HISTOGRAM - int rec_histogram_interval; /* recording peakmeter histogram */ +#ifdef HAVE_HISTOGRAM + int histogram_interval; /* recording peakmeter histogram */ #endif #ifdef HAVE_AGC diff --git a/apps/settings_list.c b/apps/settings_list.c index f282b8afc0..019a14437e 100644 --- a/apps/settings_list.c +++ b/apps/settings_list.c @@ -1238,14 +1238,14 @@ const struct settings_list settings[] = { CHOICE_SETTING(F_RECSETTING, rec_trigger_type, LANG_RECORD_TRIGGER_TYPE, TRIG_TYPE_STOP, "trigger type","stop,pause,nf stp", NULL ,3, ID2P(LANG_RECORD_TRIGGER_STOP), ID2P(LANG_PAUSE), ID2P(LANG_RECORD_TRIGGER_NEWFILESTP)), -#ifdef HAVE_RECORDING_HISTOGRAM +#endif /* HAVE_RECORDING */ + +#ifdef HAVE_HISTOGRAM /* TO DO: additional restictions of following REP items? */ - TABLE_SETTING(F_RECSETTING, rec_histogram_interval, LANG_RECORDING_HISTOGRAM_INTERVAL, 0, + TABLE_SETTING(F_RECSETTING, histogram_interval, LANG_HISTOGRAM_INTERVAL, 0, "histogram interval","0s,1s,2s,4s", UNIT_SEC, NULL, NULL, NULL, 4, 0,1,2,4), -#endif /* HAVE_RECORDING_HISTOGRAM */ - -#endif /* HAVE_RECORDING */ +#endif /* HAVE_HISTOGRAM */ #ifdef HAVE_SPDIF_POWER OFFON_SETTING(F_SOUNDSETTING, spdif_enable, LANG_SPDIF_ENABLE, false, diff --git a/firmware/export/config/iriverh100.h b/firmware/export/config/iriverh100.h index 4ebbde8ab1..1a89c7ca2d 100644 --- a/firmware/export/config/iriverh100.h +++ b/firmware/export/config/iriverh100.h @@ -123,7 +123,7 @@ #define HAVE_AGC -#define HAVE_RECORDING_HISTOGRAM +#define HAVE_HISTOGRAM #define BATTERY_CAPACITY_DEFAULT 1300 /* default battery capacity */ #define BATTERY_CAPACITY_MIN 1300 /* min. capacity selectable */ diff --git a/firmware/export/config/iriverh120.h b/firmware/export/config/iriverh120.h index 44b8988a1b..199b948245 100644 --- a/firmware/export/config/iriverh120.h +++ b/firmware/export/config/iriverh120.h @@ -114,7 +114,7 @@ /* define this if you have recording possibility */ #define HAVE_RECORDING -#define HAVE_RECORDING_HISTOGRAM +#define HAVE_HISTOGRAM /* Define bitmask of input sources - recordable bitmask can be defined explicitly if different */ diff --git a/firmware/export/config/iriverh300.h b/firmware/export/config/iriverh300.h index c4224d03c6..dbe701362a 100644 --- a/firmware/export/config/iriverh300.h +++ b/firmware/export/config/iriverh300.h @@ -110,7 +110,7 @@ /* define this if you have recording possibility */ #define HAVE_RECORDING -#define HAVE_RECORDING_HISTOGRAM +#define HAVE_HISTOGRAM /* Define bitmask of input sources - recordable bitmask can be defined explicitly if different */