blob: fc6c2183afdb96217cd031a0fb3ae2f2c34037d3 [file] [log] [blame]
Linus Nielsen Feltzingf1170292002-09-27 09:44:51 +00001/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2002 by Philipp Pertermann
11 *
Daniel Stenberg2acc0ac2008-06-28 18:10:04 +000012 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
Linus Nielsen Feltzingf1170292002-09-27 09:44:51 +000016 *
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
19 *
20 ****************************************************************************/
21#ifndef __PEAKMETER_H__
22#define __PEAKMETER_H__
23
Jens Arnold99a05982005-08-29 20:07:17 +000024#define PEAK_METER_FPS 20
Marcin Bukat56c4e9f2010-10-31 21:09:34 +000025#define MAX_PEAK 0x8000
Jens Arnold99a05982005-08-29 20:07:17 +000026
Linus Nielsen Feltzingfd0cc3b2002-10-29 12:09:15 +000027/*#define PM_DEBUG */
28#ifdef PM_DEBUG
Linus Nielsen Feltzinga02ffd52002-10-30 23:01:27 +000029extern bool peak_meter_histogram(void);
Linus Nielsen Feltzingfd0cc3b2002-10-29 12:09:15 +000030#endif
Linus Nielsen Feltzingf1170292002-09-27 09:44:51 +000031
Peter D'Hoye583f1862007-08-25 15:53:54 +000032extern int pm_get_clipcount(void);
33extern void pm_reset_clipcount(void);
34extern void pm_activate_clipcount(bool active);
35
Jonathan Gordon38ef8492010-05-09 13:01:59 +000036extern void peak_meter_enable(bool enable);
Jonathan Gordon261c56b2011-01-13 06:48:39 +000037/* sets *left and *right to the current *unscaled* values */
38extern void peak_meter_current_vals(int *left, int *right);
Linus Nielsen Feltzingfd0cc3b2002-10-29 12:09:15 +000039
Linus Nielsen Feltzingf1170292002-09-27 09:44:51 +000040extern void peak_meter_playback(bool playback);
Peter D'Hoye496e1f72008-08-06 20:12:44 +000041extern int peak_meter_draw_get_btn(int action_context, int x[], int y[],
Jonathan Gordon701a5932009-02-02 03:14:51 +000042 int height[], int nb_screens,
43 struct viewport vps[]);
Linus Nielsen Feltzingf1170292002-09-27 09:44:51 +000044extern void peak_meter_set_clip_hold(int time);
Linus Nielsen Feltzing69befb52002-09-27 12:16:48 +000045extern void peak_meter_peek(void);
Linus Nielsen Feltzingfd0cc3b2002-10-29 12:09:15 +000046extern void peak_meter_init_range( bool dbfs, int range_min, int range_max);
William Wilgusa06d9c82018-12-17 22:27:55 -060047extern void peak_meter_init_times(int release, int hold_ms, int clip_hold_sec);
Peter D'Hoye5fc66e52006-08-16 23:26:55 +000048#ifdef HAVE_AGC
49extern void peak_meter_get_peakhold(int *peak_left, int *peak_right);
50#endif
Linus Nielsen Feltzingfd0cc3b2002-10-29 12:09:15 +000051extern int peak_meter_get_min(void);
Linus Nielsen Feltzingfd0cc3b2002-10-29 12:09:15 +000052extern int peak_meter_get_max(void);
Jens Arnold99a05982005-08-29 20:07:17 +000053extern void peak_meter_set_use_dbfs(bool use);
54extern bool peak_meter_get_use_dbfs(void);
Linus Nielsen Feltzing68482bb2005-04-04 09:12:12 +000055extern int peak_meter_db2sample(int db);
Linus Nielsen Feltzingfd0cc3b2002-10-29 12:09:15 +000056extern unsigned short peak_meter_scale_value(unsigned short val, int meterwidth);
57
Peter D'Hoye82f4c602011-06-05 12:36:27 +000058#ifdef HAVE_HISTOGRAM
59extern void histogram_init(void);
60extern void histogram_draw(int x1, int x2, int y1, int y2, int width, int height);
61#endif
62
Linus Nielsen Feltzing68482bb2005-04-04 09:12:12 +000063/* valid values for trigger_status */
64#define TRIG_OFF 0x00
65#define TRIG_READY 0x01
66#define TRIG_STEADY 0x02
67#define TRIG_GO 0x03
68#define TRIG_POSTREC 0x04
69#define TRIG_RETRIG 0x05
70#define TRIG_CONTINUE 0x06
71
72extern void peak_meter_define_trigger(
73 int start_threshold,
74 long start_duration,
75 long start_dropout,
76 int stop_threshold,
77 long stop_hold_time,
78 long restart_gap
79 );
80
81extern void peak_meter_trigger(bool on);
82extern int peak_meter_trigger_status(void);
83extern void peak_meter_set_trigger_listener(void (*listener)(int status));
84
Linus Nielsen Feltzing68482bb2005-04-04 09:12:12 +000085#define TRIG_HEIGHT 8
Linus Nielsen Feltzing68482bb2005-04-04 09:12:12 +000086
Martin Scarrattd8103f32006-11-09 12:27:56 +000087extern void peak_meter_draw_trig(int x[], int y[], int trig_width[],
88 int nb_screens);
Linus Nielsen Feltzing68482bb2005-04-04 09:12:12 +000089
Dan Evertonb66477a2006-03-25 13:35:31 +000090#define DB_SCALE_SRC_VALUES_SIZE 12
91struct meter_scales{
92 /* buffered peak values */
93 int pm_peak_left;
94 int pm_peak_right;
95 /* if db_scale_valid is false the content of
96 db_scale_lcd_coord needs recalculation */
97 bool db_scale_valid;
98 /* contains the lcd x coordinates of the magical
99 scale values in db_scale_src_values */
100 int db_scale_lcd_coord[DB_SCALE_SRC_VALUES_SIZE];
101 int last_left;
102 int last_right;
103 /* peak hold timeouts */
104 long pm_peak_timeout_l;
105 long pm_peak_timeout_r;
106};
Nils Wallméniusc70d9462007-09-20 16:44:28 +0000107
Dan Evertonb66477a2006-03-25 13:35:31 +0000108extern void peak_meter_screen(struct screen *display, int x, int y, int height);
Linus Nielsen Feltzingf1170292002-09-27 09:44:51 +0000109#endif /* __PEAKMETER_H__ */
Peter D'Hoye82f4c602011-06-05 12:36:27 +0000110