| /* Copyright (c) 2012 The Chromium OS Authors. All rights reserved. |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #ifndef CRAS_VOLUME_CURVE_H_ |
| #define CRAS_VOLUME_CURVE_H_ |
| |
| #define MAX_VOLUME 100 |
| #define NUM_VOLUME_STEPS (MAX_VOLUME + 1) /* 0-100 inclusive. */ |
| |
| /* Holds the function that converts from a volume index to a dBFS value. */ |
| struct cras_volume_curve { |
| /* Function to convert from index to dBFS value. |
| * Args: |
| * curve - A curve from cras_volume_curve_create_* functions. |
| * volume - The volume level from 0 to 100. |
| * Returns: |
| * The volume to apply in dB * 100. This value will normally be |
| * negative and is means dB down from full scale. |
| */ |
| long (*get_dBFS)(const struct cras_volume_curve *curve, size_t volume); |
| }; |
| |
| /* Creates a system-default volume curve. The default curve maps one volume step |
| * to 1 dB down. |
| * Returns null on error, or the new volume curve on success. |
| */ |
| struct cras_volume_curve *cras_volume_curve_create_default(); |
| |
| /* Creates a volume curve with a specified max volume and step. |
| * Args: |
| * max_volume - Maximum volume allowed in dBFS. |
| * volume_step - Number of dB to change for one volume tick. |
| */ |
| struct cras_volume_curve *cras_volume_curve_create_simple_step( |
| long max_volume, |
| long volume_step); |
| |
| /* Creates a volume curve with each step's dB value called out. |
| * Args: |
| * dB_values - Each element specifies what the volume should be set to (in |
| * dB) for the volume at that index. |
| * Returns: |
| * A volume curve pointer that should be passed to |
| * cras_volume_curve_destroy() when it is no longer needed. If there is an |
| * error NULL will be returned. |
| */ |
| struct cras_volume_curve *cras_volume_curve_create_explicit( |
| long dB_values[101]); |
| |
| /* Destroys a curve created with cras_volume_curve_create_*. |
| * Args: |
| * curve - The curve to destroy. |
| */ |
| void cras_volume_curve_destroy(struct cras_volume_curve *curve); |
| |
| #endif /* CRAS_VOLUME_CURVE_H_ */ |