diff options
Diffstat (limited to 'cras/src/server/audio_thread.h')
-rw-r--r-- | cras/src/server/audio_thread.h | 222 |
1 files changed, 0 insertions, 222 deletions
diff --git a/cras/src/server/audio_thread.h b/cras/src/server/audio_thread.h deleted file mode 100644 index 34b47863..00000000 --- a/cras/src/server/audio_thread.h +++ /dev/null @@ -1,222 +0,0 @@ -/* 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 AUDIO_THREAD_H_ -#define AUDIO_THREAD_H_ - -#include <pthread.h> -#include <stdint.h> - -#include "cras_iodev.h" -#include "cras_types.h" -#include "dev_io.h" - -struct buffer_share; -struct cras_fmt_conv; -struct cras_iodev; -struct cras_rstream; -struct dev_stream; - -/* Hold communication pipes and pthread info for the thread used to play or - * record audio. - * to_thread_fds - Send a message from main to running thread. - * to_main_fds - Send a synchronous response to main from running thread. - * tid - Thread ID of the running playback/capture thread. - * started - Non-zero if the thread has started successfully. - * suspended - Non-zero if the thread is suspended. - * open_devs - Lists of open input and output devices. - * pollfds - What FDs wake up this thread. - * pollfds_size - Number of available poll fds. - * num_pollfds - Number of currently registered poll fds. - * remix_converter - Format converter used to remix output channels. - */ -struct audio_thread { - int to_thread_fds[2]; - int to_main_fds[2]; - pthread_t tid; - int started; - int suspended; - struct open_dev *open_devs[CRAS_NUM_DIRECTIONS]; - struct pollfd *pollfds; - size_t pollfds_size; - size_t num_pollfds; - struct cras_fmt_conv *remix_converter; -}; - -/* - * Enum to specify how a registered event callback be triggered. - * TRIGGER_NONE - Callback will not be triggered. - * TRIGGER_POLL - Triggered by poll given fd and revent. - * TRIGGER_WAKEUP - Triggered everytime when audio thread wakes up. - */ -enum AUDIO_THREAD_EVENTS_CB_TRIGGER { - TRIGGER_NONE, - TRIGGER_POLL, - TRIGGER_WAKEUP, -}; - -/* Callback function to be handled in main loop in audio thread. - * Args: - * data - The data for callback function. - * revent - The returned event from ppoll(). - */ -typedef int (*thread_callback)(void *data, int revent); - -/* Creates an audio thread. - * Returns: - * A pointer to the newly created audio thread. It must be freed by calling - * audio_thread_destroy(). Returns NULL on error. - */ -struct audio_thread *audio_thread_create(); - -/* Adds an open device. - * Args: - * thread - The thread to add open device to. - * dev - The open device to add. - */ -int audio_thread_add_open_dev(struct audio_thread *thread, - struct cras_iodev *dev); - -/* Removes an open device. - * Args: - * thread - The thread to remove open device from. - * dev - The open device to remove. - */ -int audio_thread_rm_open_dev(struct audio_thread *thread, - enum CRAS_STREAM_DIRECTION dir, - unsigned int dev_idx); - -/* Checks if dev is open and used by audio thread. - * Args: - * thread - The thread accessing open devs. - * dev - The device to check if it has already been open. - */ -int audio_thread_is_dev_open(struct audio_thread *thread, - struct cras_iodev *dev); - -/* Adds a thread_callback to audio thread for requested events. By default - * the callback trigger is set to TRIGGER_POLL. - * Args: - * fd - The file descriptor to be polled for the callback. - * The callback will be called when any of requested events matched. - * cb - The callback function. - * data - The data for the callback function. - * events - The requested events to ppoll(). - */ -void audio_thread_add_events_callback(int fd, thread_callback cb, void *data, - int events); - -/* Removes an thread_callback from audio thread. - * Args: - * fd - The file descriptor of the previous added callback. - */ -void audio_thread_rm_callback(int fd); - -/* Removes a thread_callback from main thread. - * Args: - * thread - The thread to remove callback from. - * fd - The file descriptor of the previous added callback. - */ -int audio_thread_rm_callback_sync(struct audio_thread *thread, int fd); - -/* Configures the callback associated with fd when it should be triggerred. - * Args: - * fd - The file descriptor associate to the callback. - * trigger - Specifies how the callback should be triggered. - */ -void audio_thread_config_events_callback( - int fd, enum AUDIO_THREAD_EVENTS_CB_TRIGGER trigger); - -/* Starts a thread created with audio_thread_create. - * Args: - * thread - The thread to start. - * Returns: - * 0 on success, return code from pthread_crate on failure. - */ -int audio_thread_start(struct audio_thread *thread); - -/* Frees an audio thread created with audio_thread_create(). */ -void audio_thread_destroy(struct audio_thread *thread); - -/* Returns the shm fd for the ATlog. */ -int audio_thread_event_log_shm_fd(); - -/* Add a stream to the thread. After this call, the ownership of the stream will - * be passed to the audio thread. Audio thread is responsible to release the - * stream's resources. - * Args: - * thread - a pointer to the audio thread. - * stream - the new stream to add. - * devs - an array of devices to attach stream. - * num_devs - number of devices in the array pointed by devs - * Returns: - * zero on success, negative error from the AUDIO_THREAD enum above when an - * the thread can't be added. - */ -int audio_thread_add_stream(struct audio_thread *thread, - struct cras_rstream *stream, - struct cras_iodev **devs, unsigned int num_devs); - -/* Begin draining a stream and check the draining status. - * Args: - * thread - a pointer to the audio thread. - * stream - the stream to drain/remove. - * Returns: - * zero if the stream is drained and can be deleted. If the stream is not - * completely drained, then the number of milliseconds until is is drained - * are returned. - */ -int audio_thread_drain_stream(struct audio_thread *thread, - struct cras_rstream *stream); - -/* Disconnect a stream from the client. - * Args: - * thread - a pointer to the audio thread. - * stream - the stream to be disconnected. - * iodev - the device to disconnect from. - * Returns: - * 0 on success, negative if error. - */ -int audio_thread_disconnect_stream(struct audio_thread *thread, - struct cras_rstream *stream, - struct cras_iodev *iodev); - -/* Dumps information about all active streams to syslog. */ -int audio_thread_dump_thread_info(struct audio_thread *thread, - struct audio_debug_info *info); - -/* Starts or stops the aec dump task. - * Args: - * thread - pointer to the audio thread. - * stream_id - id of the target stream for aec dump. - * start - True to start the aec dump, false to stop. - * fd - File to store aec dump result. - */ -int audio_thread_set_aec_dump(struct audio_thread *thread, - cras_stream_id_t stream_id, unsigned int start, - int fd); - -/* Configures the global converter for output remixing. Called by main - * thread. */ -int audio_thread_config_global_remix(struct audio_thread *thread, - unsigned int num_channels, - const float *coefficient); - -/* Start ramping on a device. - * - * Ramping is started/updated in audio thread. This function lets the main - * thread request that the audio thread start ramping. - * - * Args: - * thread - a pointer to the audio thread. - * dev_idx - Index of the the device to start ramping. - * request - Check the docstrings of CRAS_IODEV_RAMP_REQUEST. - * Returns: - * 0 on success, negative if error. - */ -int audio_thread_dev_start_ramp(struct audio_thread *thread, - unsigned int dev_idx, - enum CRAS_IODEV_RAMP_REQUEST request); -#endif /* AUDIO_THREAD_H_ */ |