Home | History | Annotate | Download | only in server
      1 /* Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
      2  * Use of this source code is governed by a BSD-style license that can be
      3  * found in the LICENSE file.
      4  */
      5 
      6 #ifndef CRAS_VOLUME_CURVE_H_
      7 #define CRAS_VOLUME_CURVE_H_
      8 
      9 #define MAX_VOLUME 100
     10 #define NUM_VOLUME_STEPS (MAX_VOLUME + 1) /* 0-100 inclusive. */
     11 
     12 /* Holds the function that converts from a volume index to a dBFS value. */
     13 struct cras_volume_curve {
     14 	/* Function to convert from index to dBFS value.
     15 	 * Args:
     16 	 *    curve - A curve from cras_volume_curve_create_* functions.
     17 	 *    volume - The volume level from 0 to 100.
     18 	 * Returns:
     19 	 *    The volume to apply in dB * 100.  This value will normally be
     20 	 *    negative and is means dB down from full scale.
     21 	 */
     22 	long (*get_dBFS)(const struct cras_volume_curve *curve, size_t volume);
     23 };
     24 
     25 /* Creates a system-default volume curve. The default curve maps one volume step
     26  * to 1 dB down.
     27  * Returns null on error, or the new volume curve on success.
     28  */
     29 struct cras_volume_curve *cras_volume_curve_create_default();
     30 
     31 /* Creates a volume curve with a specified max volume and step.
     32  * Args:
     33  *    max_volume - Maximum volume allowed in dBFS.
     34  *    volume_step - Number of dB to change for one volume tick.
     35  */
     36 struct cras_volume_curve *cras_volume_curve_create_simple_step(
     37 		long max_volume,
     38 		long volume_step);
     39 
     40 /* Creates a volume curve with each step's dB value called out.
     41  * Args:
     42  *    dB_values - Each element specifies what the volume should be set to (in
     43  *      dB) for the volume at that index.
     44  * Returns:
     45  *    A volume curve pointer that should  be passed to
     46  *    cras_volume_curve_destroy() when it is no longer needed. If there is an
     47  *    error NULL will be returned.
     48  */
     49 struct cras_volume_curve *cras_volume_curve_create_explicit(
     50 		long dB_values[101]);
     51 
     52 /* Destroys a curve created with cras_volume_curve_create_*.
     53  * Args:
     54  *    curve - The curve to destroy.
     55  */
     56 void cras_volume_curve_destroy(struct cras_volume_curve *curve);
     57 
     58 #endif /* CRAS_VOLUME_CURVE_H_ */
     59