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