/* Copyright 2018 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 INPUT_DATA_H_ #define INPUT_DATA_H_ #include "cras_dsp_pipeline.h" #include "float_buffer.h" /* * Structure holding the information used when a chunk of input buffer * is accessed by multiple streams with different properties and * processing requirements. * Member: * ext - Provides interface to read and process buffer in dsp pipeline. * dev_ptr - Pointer to the associated input iodev. * area - The audio area used for deinterleaved data copy. * fbuffer - Floating point buffer from input device. */ struct input_data { struct ext_dsp_module ext; void *dev_ptr; struct cras_audio_area *area; struct float_buffer *fbuffer; }; /* * Creates an input_data instance for input iodev. * Args: * dev_ptr - Pointer to the associated input device. */ struct input_data *input_data_create(void *dev_ptr); /* Destroys an input_data instance. */ void input_data_destroy(struct input_data **data); /* Sets how many frames in buffer has been read by all input streams. */ void input_data_set_all_streams_read(struct input_data *data, unsigned int nframes); /* * Gets an audio area for |stream| to read data from. An input_data may be * accessed by multiple streams while some requires processing, the * |offsets| arguments helps track the offset value each stream has read * into |data|. * Args: * data - The input data to get audio area from. * stream - The stream that reads data. * offsets - Structure holding the mapping from stream to the offset value * of how many frames each stream has read into input buffer. * area - To be filled with a pointer to an audio area struct for stream to * read data. * offset - To be filled with the samples offset in |area| that |stream| * should start reading. */ int input_data_get_for_stream(struct input_data *data, struct cras_rstream *stream, struct buffer_share *offsets, struct cras_audio_area **area, unsigned int *offset); /* * Marks |frames| of audio data as read by |stream|. * Args: * data - The input_data to mark frames has been read by |stream|. * stream - The stream that has read audio data. * offsets - Structure holding the mapping from stream to the offset value * of how many frames each stream has read into input buffer. * frames - Number of frames |stream| has read. */ int input_data_put_for_stream(struct input_data *data, struct cras_rstream *stream, struct buffer_share *offsets, unsigned int frames); /* * The software gain scaler of input path consist of two parts: * (1) The device gain scaler used when lack of hardware gain control. * Configured by the IntrinsicSensitivity label in alsa UCM config. * (2) The gain scaler in cras_rstream set by app, for example the AGC * module in Chrome. * Args: * data - The input data that holds pointer to APM instance. * idev_sw_agin_scaler - The gain scaler configured on input iodev. * stream - To provide stream layer software gain. * Returns: * 1.0 if tuned APM in use, otherwise |iodev gain| * |cras_rstream gain| */ float input_data_get_software_gain_scaler(struct input_data *data, float idev_sw_gain_scaler, struct cras_rstream *stream); #endif /* INPUT_DATA_H_ */