1 /* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. 2 * Use of this source code is governed by a BSD-style license that can be 3 * found in the LICENSE file. 4 */ 5 6 #ifndef BUFFER_SHARE_H_ 7 #define BUFFER_SHARE_H_ 8 9 #define INITIAL_ID_SIZE 3 10 11 struct id_offset { 12 unsigned int used; 13 unsigned int id; 14 unsigned int offset; 15 void *data; 16 }; 17 18 struct buffer_share { 19 unsigned int buf_sz; 20 unsigned int id_sz; 21 struct id_offset *wr_idx; 22 }; 23 24 /* 25 * Creates a buffer share object. This object is used to manage the read or 26 * write offsets of several users in one shared buffer. 27 */ 28 struct buffer_share *buffer_share_create(unsigned int buf_sz); 29 30 /* Destroys a buffer_share returned from buffer_share_create. */ 31 void buffer_share_destroy(struct buffer_share *mix); 32 33 /* Adds an ID that shares the buffer. */ 34 int buffer_share_add_id(struct buffer_share *mix, unsigned int id, void *data); 35 36 /* Removes an ID that shares the buffer. */ 37 int buffer_share_rm_id(struct buffer_share *mix, unsigned int id); 38 39 /* Updates the offset of the given user into the shared buffer. */ 40 int buffer_share_offset_update(struct buffer_share *mix, unsigned int id, 41 unsigned int frames); 42 43 /* 44 * Updates the write point to the minimum offset from all users. 45 * Returns the number of minimum number of frames written. 46 */ 47 unsigned int buffer_share_get_new_write_point(struct buffer_share *mix); 48 49 /* 50 * The amount by which the user given by id is ahead of the current write 51 * point. 52 */ 53 unsigned int buffer_share_id_offset(const struct buffer_share *mix, 54 unsigned int id); 55 56 /* 57 * Gets the data pointer for given id. 58 */ 59 void *buffer_share_get_data(const struct buffer_share *mix, 60 unsigned int id); 61 62 #endif /* BUFFER_SHARE_H_ */ 63