/* 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_ */