// Copyright 2018 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. module media.mojom; // Used by audio streams for realtime-ish data transfer. Used for both input // and output streams, see AudioDeviceThread, AudioSyncReader, and // AudioInputSyncWriter. |socket| is a base::SyncSocket used for signaling and // |shared_memory| is used for the actual audio data. // // When using a pull model, the code pulling the data writes |n| (an unsigned // 32 bit sequence number) to the socket, and the source from which data is // pulled writes a buffer to |shared_memory| and writes |n| back to signal that // it finished writing. Then the process continues with |n+1|. This model is // used to get data for playout. // // When using a push model, the code pushing data writes a buffer to // |shared_memory| and writes |n| to the socket. When the other side finished // reading the buffer, it writes |n| to the socket to signal that the memory is // safe to write to again. |shared_memory| may have room for several buffers, // in which case the next buffer can be pushed without waiting for the previous // one to be consumed. This model used is to deliver microphone data to a // consumer. struct AudioDataPipe { handle shared_memory; handle socket; };