summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFletcher Woodruff <fletcherw@chromium.org>2019-06-25 10:48:32 -0600
committerchrome-bot <chrome-bot@chromium.org>2019-07-16 22:34:34 -0700
commit6afc403abc461fceaf35893b6e57ccec326dcea8 (patch)
treea32ea271739c361876ec9928939b9afa3bf2adab
parent7897a4221914806d72b3f69c3b958511f3db87e2 (diff)
downloadadhd-6afc403abc461fceaf35893b6e57ccec326dcea8.tar.gz
CRAS: remove legacy unsplit shm
Now that ARC++ has been upreved to use a split shm for audio, we can remove the legacy compatibility code. BUG=chromium:968724 TEST=playback test in ARC Change-Id: If929d010429e33a05495348f8d62b21f1df511ab Reviewed-on: https://chromium-review.googlesource.com/1679237 Tested-by: Fletcher Woodruff <fletcherw@chromium.org> Commit-Ready: Fletcher Woodruff <fletcherw@chromium.org> Legacy-Commit-Queue: Commit Bot <commit-bot@chromium.org> Reviewed-by: Chih-Yang Hsia <paulhsia@chromium.org>
-rw-r--r--cras/src/common/cras_shm.c59
-rw-r--r--cras/src/common/cras_shm.h18
-rw-r--r--cras/src/server/cras_control_rclient.c34
-rw-r--r--cras/src/server/cras_rstream.c48
-rw-r--r--cras/src/server/cras_rstream.h5
5 files changed, 11 insertions, 153 deletions
diff --git a/cras/src/common/cras_shm.c b/cras/src/common/cras_shm.c
index 7d1d5261..95a35390 100644
--- a/cras/src/common/cras_shm.c
+++ b/cras/src/common/cras_shm.c
@@ -154,68 +154,13 @@ cleanup_info:
return ret;
}
-// TODO(fletcherw) remove once libcras in ARC++ has been upreved
-int cras_audio_unsplit_shm_create(struct cras_shm_info *shm_info,
- struct cras_audio_shm **shm_out)
-{
- struct cras_audio_shm *shm;
- int ret;
-
- if (!shm_info || !shm_out) {
- ret = -EINVAL;
- goto cleanup_info;
- }
-
- shm = calloc(1, sizeof(*shm));
- if (!shm) {
- ret = -ENOMEM;
- goto cleanup_info;
- }
- /* Move the shm info param into the new cras_audio_shm object.
- * shm_info is cleared, and the owner of cras_audio_shm is now
- * responsible for closing the fd and unlinking any associated shm
- * file using cras_audio_shm_destroy.
- */
- ret = cras_shm_info_move(shm_info, &shm->header_info);
- if (ret)
- goto free_shm;
-
- shm->header =
- mmap(NULL, shm->header_info.length, PROT_READ | PROT_WRITE,
- MAP_SHARED, shm->header_info.fd, 0);
- if (shm->header == (struct cras_audio_shm_header *)-1) {
- ret = errno;
- syslog(LOG_ERR, "cras_shm: mmap failed to map shm for header.");
- goto free_shm;
- }
-
- // Point the samples pointer in shm into the header shm area so that
- // the legacy unsplit shm can share code with the new split shm.
- shm->samples = shm->header->samples;
-
- cras_shm_set_volume_scaler(shm, 1.0);
-
- *shm_out = shm;
- return 0;
-
-free_shm:
- free(shm);
-cleanup_info:
- cras_shm_info_cleanup(shm_info);
- return ret;
-}
-
void cras_audio_shm_destroy(struct cras_audio_shm *shm)
{
if (!shm)
return;
- // Calls munmap only for split version shm.
- // TODO(paulhsia): Remove this check after cleanup unsplit shm.
- if (shm->samples_info.length > 0) {
- munmap(shm->samples, shm->samples_info.length);
- cras_shm_info_cleanup(&shm->samples_info);
- }
+ munmap(shm->samples, shm->samples_info.length);
+ cras_shm_info_cleanup(&shm->samples_info);
munmap(shm->header, shm->header_info.length);
cras_shm_info_cleanup(&shm->header_info);
free(shm);
diff --git a/cras/src/common/cras_shm.h b/cras/src/common/cras_shm.h
index ee80208b..423b8d52 100644
--- a/cras/src/common/cras_shm.h
+++ b/cras/src/common/cras_shm.h
@@ -43,10 +43,6 @@ struct __attribute__ ((__packed__)) cras_audio_shm_config {
* ts - For capture, the time stamp of the next sample at read_index. For
* playback, this is the time that the next sample written will be played.
* This is only valid in audio callbacks.
- *
- * TODO(fletcherw) remove once libcras in ARC++ has been upreved
- * samples - Audio data - a double buffered area that is used to exchange
- * audio samples.
*/
struct __attribute__((__packed__)) cras_audio_shm_header {
struct cras_audio_shm_config config;
@@ -60,7 +56,6 @@ struct __attribute__((__packed__)) cras_audio_shm_header {
int32_t callback_pending;
uint32_t num_overruns;
struct cras_timespec ts;
- uint8_t samples[];
};
/* Returns the number of bytes needed to hold a cras_audio_shm_header. */
@@ -144,25 +139,12 @@ struct cras_audio_shm {
* The samples_info parameter will be returned to an
* uninitialized state, and the client need not call
* cras_shm_info_destroy.
- * This parameter may be NULL. In that case, no shared memory will
- * be mapped for the samples.
* shm_out - pointer where the created cras_audio_shm will be stored.
*/
int cras_audio_shm_create(struct cras_shm_info *header_info,
struct cras_shm_info *samples_info,
struct cras_audio_shm **shm_out);
-/* Sets up a legacy cras_audio_shm given info about the shared memory to use
- *
- * shm_info - the underlying shm area to use for the audio shm. The shm
- * will be managed by the created cras_audio_shm object.
- * The shm_info parameter will be returned to an uninitialized
- * state, and the client need not call cras_shm_info_destroy.
- * shm_out - pointer where the created cras_audio_shm will be stored.
- */
-int cras_audio_unsplit_shm_create(struct cras_shm_info *shm_info,
- struct cras_audio_shm **shm_out);
-
/* Destroys a cras_audio_shm returned from cras_audio_shm_create.
*
* shm - the cras_audio_shm to destroy.
diff --git a/cras/src/server/cras_control_rclient.c b/cras/src/server/cras_control_rclient.c
index 61f4df58..20e95d1f 100644
--- a/cras/src/server/cras_control_rclient.c
+++ b/cras/src/server/cras_control_rclient.c
@@ -61,7 +61,6 @@ static int handle_client_stream_connect(struct cras_rclient *client,
stream_config.cb_threshold = msg->cb_threshold;
stream_config.audio_fd = aud_fd;
stream_config.client = client;
- stream_config.use_split_shm = msg->proto_version > 2;
rc = stream_list_add(cras_iodev_list_get_stream_list(), &stream_config,
&stream);
if (rc)
@@ -69,36 +68,19 @@ static int handle_client_stream_connect(struct cras_rclient *client,
/* Tell client about the stream setup. */
syslog(LOG_DEBUG, "Send connected for stream %x\n", msg->stream_id);
- if (stream_config.use_split_shm) {
- cras_fill_client_stream_connected(
- &stream_connected, 0, /* No error. */
- msg->stream_id, &remote_fmt,
- cras_rstream_get_samples_shm_size(stream),
- cras_rstream_get_effects(stream));
- reply = &stream_connected.header;
-
- } else {
- cras_fill_client_stream_connected(
- &stream_connected, 0, /* No error. */
- msg->stream_id, &remote_fmt,
- cras_rstream_get_samples_shm_size(stream) +
- cras_shm_header_size(),
- cras_rstream_get_effects(stream));
- reply = &stream_connected.header;
- }
+ cras_fill_client_stream_connected(
+ &stream_connected, 0, /* No error. */
+ msg->stream_id, &remote_fmt,
+ cras_rstream_get_samples_shm_size(stream),
+ cras_rstream_get_effects(stream));
+ reply = &stream_connected.header;
rc = cras_rstream_get_shm_fds(stream, &header_fd, &samples_fd);
if (rc)
goto reply_err;
- if (stream_config.use_split_shm) {
- stream_fds[0] = header_fd;
- stream_fds[1] = samples_fd;
- } else {
- // for unsplit shm, the client expects both fds to be the same.
- stream_fds[0] = header_fd;
- stream_fds[1] = header_fd;
- }
+ stream_fds[0] = header_fd;
+ stream_fds[1] = samples_fd;
rc = client->ops->send_message_to_client(client, reply, stream_fds, 2);
if (rc < 0) {
diff --git a/cras/src/server/cras_rstream.c b/cras/src/server/cras_rstream.c
index 12a6f83e..03871818 100644
--- a/cras/src/server/cras_rstream.c
+++ b/cras/src/server/cras_rstream.c
@@ -70,48 +70,6 @@ static inline int setup_shm_area(struct cras_rstream *stream)
return 0;
}
-/* Setup a legacy unsplit shared memory area for audio samples.
- * Will be removed once ARC++ transitions to a split shm */
-static inline int setup_unsplit_shm_area(struct cras_rstream *stream)
-{
- const struct cras_audio_format *fmt = &stream->format;
- char stream_name[NAME_MAX];
- struct cras_shm_info shm_info;
- uint32_t frame_bytes, used_size;
- int rc;
-
- if (stream->shm) /* already setup */
- return -EEXIST;
-
- snprintf(stream_name, sizeof(stream_name), "/cras-%d-stream-%08x",
- getpid(), stream->stream_id);
-
- frame_bytes = snd_pcm_format_physical_width(fmt->format) / 8 *
- fmt->num_channels;
- used_size = stream->buffer_frames * frame_bytes;
-
- rc = cras_shm_info_init(
- stream_name,
- cras_shm_header_size() +
- cras_shm_calculate_samples_size(used_size),
- &shm_info);
- if (rc)
- return rc;
-
- rc = cras_audio_unsplit_shm_create(&shm_info, &stream->shm);
- if (rc)
- return rc;
-
- cras_shm_set_frame_bytes(stream->shm, frame_bytes);
- cras_shm_set_used_size(stream->shm, used_size);
-
- stream->audio_area =
- cras_audio_area_create(stream->format.num_channels);
- cras_audio_area_config_channels(stream->audio_area, &stream->format);
-
- return 0;
-}
-
static inline int buffer_meets_size_limit(size_t buffer_size, size_t rate)
{
return buffer_size > (CRAS_MIN_BUFFER_TIME_IN_US * rate) / 1000000;
@@ -277,11 +235,7 @@ int cras_rstream_create(struct cras_rstream_config *config,
stream->pinned_dev_idx = config->dev_idx;
stream->fd = config->audio_fd;
- if (config->use_split_shm) {
- rc = setup_shm_area(stream);
- } else {
- rc = setup_unsplit_shm_area(stream);
- }
+ rc = setup_shm_area(stream);
if (rc < 0) {
syslog(LOG_ERR, "failed to setup shm %d\n", rc);
free(stream);
diff --git a/cras/src/server/cras_rstream.h b/cras/src/server/cras_rstream.h
index d8919299..609e3da0 100644
--- a/cras/src/server/cras_rstream.h
+++ b/cras/src/server/cras_rstream.h
@@ -100,10 +100,6 @@ struct cras_rstream {
* cb_threshold - # of frames when to request more from the client.
* audio_fd - The fd to read/write audio signals to.
* client - The client that owns this stream.
- *
- * TODO(fletcherw) remove once libcras in ARC++ has been upreved
- * use_split_shm - Should this stream use the new split shm area.
- * Will be removed after all clients transition to split shm.
*/
struct cras_rstream_config {
cras_stream_id_t stream_id;
@@ -117,7 +113,6 @@ struct cras_rstream_config {
size_t cb_threshold;
int audio_fd;
struct cras_rclient *client;
- int use_split_shm;
};
/* Creates an rstream.