// Copyright 2017 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 "media/mojo/interfaces/remoting_common.mojom"; // Interface used by the source to start/stop remoting and send data to the // sink. interface MirrorServiceRemoter { // Starts a remoting session. Always assumes the remoting session will be // stared successfully. If any failure happens, // MirrorServiceRemotingSource::OnError() will be called. Start(); // Starts remoting the media data streams. This is called after Start() to // indicate audio/video bitstream data is ready to be consumed. Returns // audio/video stream IDs. A valid stream ID should be greater than 0. When // there is no audio/video, or if the data stream is not successfully started, // the returned stream ID is -1. StartDataStreams(bool has_audio, bool has_video) => (int32 audio_stream_id, int32 video_stream_id); // Stops remoting media. Messages in both directions will be dropped after // this point as well as any pending or in-transit media bitstream data. Stop(RemotingStopReason reason); // Sends|message| to the sink. |message| is a serialized protobuf from // src/media/remoting/proto. SendMessageToSink(array message); // Estimates the transmission capacity. Returns the result in // bytes per second. EstimateTransmissionCapacity() => (double rate); }; // Interface used for sending notifications back to the source's control logic, // and to pass messages from the sink back to the source. interface MirrorServiceRemotingSource { // Notifies the source that the sink is now available to start remoting and // passes the receiver's metadata. It is up to the source's control logic // to decide whether/when to start remoting. OnSinkAvailable(RemotingSinkMetadata metadata); // Passes a |message| from the sink back to the source. The |message| consists // of a serialized protobuf from src/media/remoting/proto. This will only be // called after OnStarted() and before OnStopped(). OnMessageFromSink(array message); // Notifies the source that remoting has terminated. This may or may not be in // response to a MirrorServiceRemoter.Stop() call, as other events (possibly // external) may have caused remoting to end. OnStopped(RemotingStopReason reason); // Notifies the source that a fatal error has occurred. Remoting session will // be stopped immediately once this is called. // TODO(xjz): Add error codes in future to indicate different errors. OnError(); };