// 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;

import "mojo/public/mojom/base/shared_memory.mojom";

// Used by audio streams for realtime-ish data transfer. ReadWriteAudioDataPipe
// is used for output streams and ReadOnlyAudioDataPipe is used for input
// 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 ReadWriteAudioDataPipe {
  mojo_base.mojom.UnsafeSharedMemoryRegion shared_memory;
  handle<platform> socket;
};

struct ReadOnlyAudioDataPipe {
  mojo_base.mojom.ReadOnlySharedMemoryRegion shared_memory;
  handle<platform> socket;
};
