| /* Copyright 2016 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_RAMP_H_ |
| #define CRAS_RAMP_H_ |
| |
| #include "cras_iodev.h" |
| |
| struct cras_ramp; |
| |
| /* |
| * Infomation telling user how to do ramping. |
| * action CRAS_RAMP_ACTION_NONE: No scale should be applied. |
| * action CRAS_RAMP_ACTION_PARTIAL: scale sample by sample starting from scaler |
| * and increase increment for each sample. |
| * action CRAS_RAMP_ACTION_INVALID: There is an error in cras_ramp. |
| */ |
| enum CRAS_RAMP_ACTION_TYPE { |
| CRAS_RAMP_ACTION_NONE, |
| CRAS_RAMP_ACTION_PARTIAL, |
| CRAS_RAMP_ACTION_INVALID, |
| }; |
| |
| /* |
| * Struct to hold current ramping action for user. |
| * Members: |
| * type: See CRAS_RAMP_ACTION_TYPE. |
| * scaler: The initial scaler to be applied. |
| * increment: The scaler increment that should be added to scaler for every |
| * frame. |
| */ |
| struct cras_ramp_action { |
| enum CRAS_RAMP_ACTION_TYPE type; |
| float scaler; |
| float increment; |
| float target; |
| }; |
| |
| typedef void (*cras_ramp_cb)(void *arg); |
| |
| /* Creates a ramp. */ |
| struct cras_ramp *cras_ramp_create(); |
| |
| /* Destroys a ramp. */ |
| void cras_ramp_destroy(struct cras_ramp *ramp); |
| |
| /* Ramps the scaler between from and to for duration_frames frames. |
| * Args: |
| * ramp[in]: The ramp struct to start. |
| * mute_ramp[in]: Is this ramp a mute->unmute or unmute->mute ramp. |
| * from[in]: The scaler value to ramp from. |
| * to[in]: The scaler value to ramp to. |
| * duration_frames[in]: Ramp duration in frames. |
| * cb[in]: The callback function to call after ramping is done. User can set |
| * cb to turn off speaker/headphone switch after ramping down |
| * is done. |
| * cb_data[in]: The data passed to callback function. |
| * Returns: |
| * 0 on success; negative error code on failure. |
| */ |
| int cras_ramp_start(struct cras_ramp *ramp, int mute_ramp, float from, float to, |
| int duration_frames, cras_ramp_cb cb, void *cb_data); |
| |
| /* Convenience wrappers for cras_ramp_start */ |
| static inline int cras_mute_ramp_start(struct cras_ramp *ramp, float from, |
| float to, int duration_frames, |
| cras_ramp_cb cb, void *cb_data) |
| { |
| return cras_ramp_start(ramp, 1, from, to, duration_frames, cb, cb_data); |
| } |
| |
| static inline int cras_volume_ramp_start(struct cras_ramp *ramp, float from, |
| float to, int duration_frames, |
| cras_ramp_cb cb, void *cb_data) |
| { |
| return cras_ramp_start(ramp, 0, from, to, duration_frames, cb, cb_data); |
| } |
| |
| /* Resets ramp and cancels current ramping. */ |
| int cras_ramp_reset(struct cras_ramp *ramp); |
| |
| /* Gets current ramp action. */ |
| struct cras_ramp_action |
| cras_ramp_get_current_action(const struct cras_ramp *ramp); |
| |
| /* Updates number of samples that went through ramping. */ |
| int cras_ramp_update_ramped_frames(struct cras_ramp *ramp, int num_frames); |
| |
| #endif /* CRAS_RAMP_H_ */ |