|  | // Copyright 2015 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. | 
|  |  | 
|  | [DartPackage="mojo_services"] | 
|  | module mojo.media; | 
|  |  | 
|  | import "mojo/services/media/common/interfaces/media_common.mojom"; | 
|  | import "mojo/services/media/common/interfaces/media_pipe.mojom"; | 
|  | import "mojo/services/media/common/interfaces/media_types.mojom"; | 
|  |  | 
|  | // Models a stream producer. A MediaProducer allows a client to connect the | 
|  | // producer to a MediaConsumer so packets flow from the producer to the | 
|  | // consumer. Clients who want to receive packets directly from the producer | 
|  | // should use MediaPullModeProducer instead. | 
|  | // | 
|  | // The client calls Connect to connect producer and consumer. The producer then | 
|  | // calls PushPacket on the consumer to deliver packets. | 
|  | interface MediaProducer { | 
|  | // Connects this MediaProducer to a MediaConsumer. | 
|  | Connect(MediaConsumer consumer) => (); | 
|  |  | 
|  | // Disconnects this MediaProducer from a previously-connected MediaConsumer. | 
|  | Disconnect(); | 
|  | }; | 
|  |  | 
|  | // Models a stream producer. A MediaPullModeProducer allows a client to receive | 
|  | // packets directly from the producer. Clients who want to connect the producer | 
|  | // to a MediaConsumer should use MediaProducer instead. | 
|  | // | 
|  | // The client calls PullPacket to get a packet. Once the client is done with | 
|  | // the packet, it calls ReleasePacket to let the producer know that the packet | 
|  | // buffer region can be reused. Alternatively, the client can piggyback a | 
|  | // release on a PullPacket call using the to_release parameter. | 
|  | interface MediaPullModeProducer { | 
|  | // Gets the shared buffer in which packet payload will be located. | 
|  | GetBuffer() => (handle<shared_buffer> buffer); | 
|  |  | 
|  | // Pulls a packet from the producer. When the client is done with the | 
|  | // packet buffer region, it should call ReleasePacket or PullPacket passing | 
|  | // the locator. Note that the optional locator passed in PullPacket is | 
|  | // a locator to be released and probably won't be the same locator passed | 
|  | // back in the callback. | 
|  | PullPacket(MediaPacket? to_release) => (MediaPacket packet); | 
|  |  | 
|  | // Signals the producer that the client is done with the buffer region. | 
|  | ReleasePacket(MediaPacket to_release); | 
|  | }; | 
|  |  | 
|  | // Models a stream consumer. A MediaConsumer allows a client to send packets | 
|  | // directly to the consumer or to connect the consumer to a MediaProducer so | 
|  | // packets flow from the producer to the consumer. | 
|  | // | 
|  | // In the former scenario, the client calls PushPacket to deliver a packet. The | 
|  | // callback notifies the client that the consumer is done with the packet | 
|  | // buffer region. | 
|  | // | 
|  | // In the latter scenario, the client calls Connect on the producer to connect | 
|  | // producer and consumer. The producer then calls PushPacket on the consumer to | 
|  | // deliver packets. | 
|  | interface MediaConsumer { | 
|  | // Sets the shared buffer in which packet payload will be located. | 
|  | SetBuffer(handle<shared_buffer> buffer, uint64 size) => (); | 
|  |  | 
|  | // Pushes a packet to the consumer. The callback signals that the consumer | 
|  | // is done with the packet buffer region. | 
|  | PushPacket(MediaPacket packet) => (); | 
|  | }; |