blob: fe042325e413e6b8bbb64a2b864a070f5fa33ef9 [file] [log] [blame]
/* 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_ */