| /* Copyright 2020 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. |
| */ |
| |
| /* |
| * Remote Stream Configuration |
| */ |
| #ifndef CRAS_RSTREAM_CONFIG_H_ |
| #define CRAS_RSTREAM_CONFIG_H_ |
| |
| #include "buffer_share.h" |
| #include "cras_shm.h" |
| #include "cras_types.h" |
| |
| struct cras_connect_message; |
| struct dev_mix; |
| |
| /* Config for creating an rstream. |
| * stream_type - CRAS_STREAM_TYPE. |
| * client_type - CRAS_CLIENT_TYPE. |
| * direction - CRAS_STREAM_OUTPUT or CRAS_STREAM_INPUT. |
| * dev_idx - Pin to this device if != NO_DEVICE. |
| * flags - Any special handling for this stream. |
| * effects - Bit map of effects to be enabled on this stream. |
| * format - The audio format the stream wishes to use. |
| * buffer_frames - Total number of audio frames to buffer. |
| * cb_threshold - # of frames when to request more from the client. |
| * audio_fd - The fd to read/write audio signals to. May be -1 for server |
| * stream. Some functions may mutably borrow the config and move |
| * the fd ownership. |
| * client_shm_fd - The shm fd to use to back the samples area. May be -1. |
| * Some functions may dup this fd while borrowing the config. |
| * client_shm_size - The size of shm area backed by client_shm_fd. |
| * buffer_offsets - Initial values for buffer_offset for a client shm stream. |
| * client - The client that owns this stream. |
| */ |
| struct cras_rstream_config { |
| cras_stream_id_t stream_id; |
| enum CRAS_STREAM_TYPE stream_type; |
| enum CRAS_CLIENT_TYPE client_type; |
| enum CRAS_STREAM_DIRECTION direction; |
| uint32_t dev_idx; |
| uint32_t flags; |
| uint32_t effects; |
| const struct cras_audio_format *format; |
| size_t buffer_frames; |
| size_t cb_threshold; |
| int audio_fd; |
| int client_shm_fd; |
| size_t client_shm_size; |
| uint32_t buffer_offsets[2]; |
| struct cras_rclient *client; |
| }; |
| |
| /* Fills cras_rstream_config with given parameters. |
| * |
| * Args: |
| * audio_fd - The audio fd pointer from client. Its ownership will be moved to |
| * stream_config. |
| * client_shm_fd - The shared memory fd pointer for samples from client. Its |
| * ownership will be moved to stream_config. |
| * Other args - See comments in struct cras_rstream_config. |
| */ |
| void cras_rstream_config_init( |
| struct cras_rclient *client, cras_stream_id_t stream_id, |
| enum CRAS_STREAM_TYPE stream_type, enum CRAS_CLIENT_TYPE client_type, |
| enum CRAS_STREAM_DIRECTION direction, uint32_t dev_idx, uint32_t flags, |
| uint32_t effects, const struct cras_audio_format *format, |
| size_t buffer_frames, size_t cb_threshold, int *audio_fd, |
| int *client_shm_fd, size_t client_shm_size, |
| const uint64_t buffer_offsets[2], |
| struct cras_rstream_config *stream_config); |
| |
| /* Fills cras_rstream_config with given parameters and a cras_connect_message. |
| * |
| * Args: |
| * client - The rclient which handles the connect message. |
| * msg - The cras_connect_message from client. |
| * aud_fd - The audio fd pointer from client. Its ownership will be moved to |
| * stream_config. |
| * client_shm_fd - The shared memory fd pointer for samples from client. Its |
| * ownership will be moved to stream_config. |
| * remote_format - The remote_format for the config. |
| * |
| * Returns a cras_rstream_config struct filled in with params from the message. |
| */ |
| struct cras_rstream_config cras_rstream_config_init_with_message( |
| struct cras_rclient *client, const struct cras_connect_message *msg, |
| int *aud_fd, int *client_shm_fd, |
| const struct cras_audio_format *remote_format); |
| |
| /* Cleans up given cras_rstream_config. All fds inside the config will be |
| * closed. |
| * |
| * Args: |
| * stream_config - The config to be cleaned up. |
| */ |
| void cras_rstream_config_cleanup(struct cras_rstream_config *stream_config); |
| |
| #endif /* CRAS_RSTREAM_CONFIG_H_ */ |