| /* Copyright (c) 2014 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_AUDIO_AREA_H_ |
| #define CRAS_AUDIO_AREA_H_ |
| |
| #include <stdint.h> |
| |
| #include "cras_audio_format.h" |
| |
| /* |
| * Descriptor of the memory area holding a channel of audio. |
| * Members: |
| * ch_set - Bit set of channels this channel area could map to. |
| * step_bytes - The number of bytes between adjacent samples. |
| * buf - A pointer to the start address of this area. |
| */ |
| struct cras_channel_area { |
| unsigned int ch_set; |
| unsigned int step_bytes; |
| uint8_t *buf; |
| }; |
| |
| /* |
| * Descriptor of the memory area that provides various access to audio channels. |
| * Members: |
| * frames - The size of the audio buffer in frames. |
| * num_channels - The number of channels in the audio area. |
| * channels - array of channel areas. |
| */ |
| struct cras_audio_area { |
| unsigned int frames; |
| unsigned int num_channels; |
| struct cras_channel_area channels[]; |
| }; |
| |
| /* |
| * Sets the channel bit for a channel area. |
| * Args: |
| * ca - the channel area to set channel bit set. |
| * channel - the channel bit to add to the channel area. |
| */ |
| static inline void channel_area_set_channel(struct cras_channel_area *ca, |
| enum CRAS_CHANNEL channel) |
| { |
| ca->ch_set |= (1 << channel); |
| } |
| |
| /* |
| * Creates a cras_audio_area. |
| * Args: |
| * num_channels - The number of channels in the audio area. |
| */ |
| struct cras_audio_area *cras_audio_area_create(int num_channels); |
| |
| /* |
| * Copies a cras_audio_area to another cras_audio_area with given offset. |
| * Args: |
| * dst - The destination audio area. |
| * dst_offset - The offset of dst audio area in frames. |
| * format - The format of dst area. |
| * src - The source audio area. |
| * src_offset - The offset of src audio area in frames. |
| * software_gain_scaler - The software gain scaler needed. |
| * Returns the number of frames copied. |
| */ |
| unsigned int cras_audio_area_copy(const struct cras_audio_area *dst, |
| unsigned int dst_offset, |
| const struct cras_audio_format *dst_fmt, |
| const struct cras_audio_area *src, |
| unsigned int src_offset, |
| float software_gain_scaler); |
| |
| /* |
| * Destroys a cras_audio_area. |
| * Args: |
| * area - the audio area to destroy |
| */ |
| void cras_audio_area_destroy(struct cras_audio_area *area); |
| |
| /* |
| * Configures the channel types based on the audio format. |
| * Args: |
| * area - The audio area created with cras_audio_area_create. |
| * fmt - The format to use to configure the channels. |
| */ |
| void cras_audio_area_config_channels(struct cras_audio_area *area, |
| const struct cras_audio_format *fmt); |
| |
| /* |
| * Sets the buffer pointers for each channel. |
| */ |
| void cras_audio_area_config_buf_pointers(struct cras_audio_area *area, |
| const struct cras_audio_format *fmt, |
| uint8_t *base_buffer); |
| |
| #endif /* CRAS_AUDIO_AREA_H_ */ |