blob: c50fe0a2590fa2df6d7448ea60f548c818d5a0b0 [file] [log] [blame]
// 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<uint8> 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<uint8> 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();
};