/* Copyright (c) 2012 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_DSP_H_ #define CRAS_DSP_H_ #ifdef __cplusplus extern "C" { #endif #include "cras_dsp_pipeline.h" struct cras_dsp_context; /* Starts the dsp subsystem. It starts a thread internally to load the * plugins. This should be called before other functions. * Args: * filename - The ini file where the dsp plugin graph should be read from. */ void cras_dsp_init(const char *filename); /* Stops the dsp subsystem. */ void cras_dsp_stop(); /* Creates a dsp context. The context holds a pipeline and its * parameters. To use the pipeline in the context, first use * cras_dsp_load_pipeline() to load it and then use * cras_dsp_get_pipeline() to lock it for access. * Args: * sample_rate - The sampling rate of the pipeline. * purpose - The purpose of the pipeline, "playback" or "capture". * Returns: * A pointer to the dsp context. */ struct cras_dsp_context *cras_dsp_context_new(int sample_rate, const char *purpose); /* Frees a dsp context. */ void cras_dsp_context_free(struct cras_dsp_context *ctx); /* Sets a configuration variable in the context. */ void cras_dsp_set_variable(struct cras_dsp_context *ctx, const char *key, const char *value); /* Loads the pipeline to the context. This should be called again when * new values of configuration variables may change the plugin * graph. The actual loading happens in another thread to avoid * blocking the audio thread. */ void cras_dsp_load_pipeline(struct cras_dsp_context *ctx); /* Locks the pipeline in the context for access. Returns NULL if the * pipeline is still being loaded or cannot be loaded. */ struct pipeline *cras_dsp_get_pipeline(struct cras_dsp_context *ctx); /* Releases the pipeline in the context. This must be called in pair * with cras_dsp_get_pipeline() once the client finishes using the * pipeline. This should be called in the same thread as * cras_dsp_get_pipeline() was called. */ void cras_dsp_put_pipeline(struct cras_dsp_context *ctx); /* Re-reads the ini file and reloads all pipelines in the system. */ void cras_dsp_reload_ini(); /* Number of channels output. */ unsigned int cras_dsp_num_output_channels(const struct cras_dsp_context *ctx); /* Number of channels input. */ unsigned int cras_dsp_num_input_channels(const struct cras_dsp_context *ctx); /* Wait for the previous asynchronous requests to finish. The * asynchronous requests include: * * cras_dsp_context_free() * cras_dsp_set_variable() * cras_dsp_load_pipeline() * cras_dsp_reload_ini() * cras_dsp_dump_info() * * This is mainly used for testing. */ void cras_dsp_sync(); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* CRAS_DSP_H_ */