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