blob: efaa63081b5748e8bc07018b22f990c7c8cc3641 [file] [log] [blame]
// 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_clock.mojom";
import "mojo/services/media/common/interfaces/media_common.mojom";
import "mojo/services/media/common/interfaces/media_state.mojom";
import "mojo/services/media/common/interfaces/media_transport.mojom";
import "mojo/services/media/common/interfaces/media_types.mojom";
import "mojo/services/media/common/interfaces/rate_control.mojom";
// TODO(dalesat): Define a media sink that multiplexes streams.
// Consumes media streams and delivers them to specified destinations.
interface MediaSink {
// TODO(dalesat): Support fanout to many destinations.
// Gets the clock disposition from the source.
GetClockDisposition() => (ClockDisposition clock_disposition);
// Gets a master clock if the sink can be master, null otherwise.
GetMasterClock(Clock& master_clock);
// Sets a master clock.
SetMasterClock(Clock? master_clock);
// Gets the consumer for the stream to be delivered.
GetConsumer(MediaConsumer& consumer);
// Gets the status. To get the status immediately, call GetStatus(0). To
// get updates thereafter, pass the version sent in the previous callback.
GetStatus(uint64 version_last_seen) =>
(uint64 version, MediaSinkStatus status);
// Starts playback.
Play();
// Pauses playback.
Pause();
};
// MediaSink status information.
struct MediaSinkStatus {
// Current state of the sink.
MediaState state;
// Transform translating local time to presentation time. Reverse translation
// (presentation time to local time) is only valid when media is playing.
TimelineTransform? timeline_transform;
};