blob: 4fca606e3246b9f0c897c3be55725f6a91104e17 [file] [log] [blame]
// Copyright 2021 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.media2;
using zx;
/// Describes any active consumer, including single-stream and multi-stream consumers.
/// All active consumers should compose this protocol. Single-stream active consumers
/// and streams exposed by multi-stream active consumers should also compose
/// `ActiveConsumerStream`.
protocol ActiveConsumer {
/// Starts the presentation timeline.
///
/// + request `when` time when the presentation timeline should
/// start as a system time or reference time. If this parameter
/// is not supplied, the presentation timeline starts as soon as
/// possible.
/// + request `presentation_time` the presentation time at which
/// the presentation timeline should start.
/// - response `reference_time` the reference time when the
/// presentation timeline was actually started.
/// - response `presentation_time` the presentation time at which
/// the presentation timeline started.
/// * error reason the operation failed.
///
/// When a call to this method succeeds, the response is sent when
/// the operation actually occurs (that is, when it was scheduled
/// to occur), indicating that the service is ready for a `Stop`
/// or `AmendPresentation` command. When a call to this method
/// fails, the response is sent when the failure is detected.
///
/// If this method is called when presentation is already
/// underway, the call fails immediately with an `ALREADY_STARTED`
/// error.
///
/// Otherwise, if this method is called, and `when` specifies a
/// time in the past, the presentation timeline is started as soon as possible.
///
/// Otherwise, if this method is called when a `Start` operation
/// is already pending (requested but not completed), the pending
/// operation fails with a `CANCELED` error.
Start(struct {
when RealTime:optional;
presentation_time zx.duration;
}) -> (struct {
// TODO(dalesat): Add system time here.
reference_time zx.time;
presentation_time zx.duration;
}) error StartError;
/// Stops the presentation timeline.
///
/// + request `when` time when the presentation timeline should
/// stop as a system time, reference time or presentation time.
/// If this parameter is not supplied, the presentation timeline
/// stops as soon as possible.
/// - response `reference_time` the reference time when the
/// presentation timeline was actually stopped.
/// - response `presentation_time` the presentation time at which
/// the presentation timeline stopped.
/// * error reason the operation failed.
///
/// When a call to this method succeeds, the response is sent when
/// the operation actually occurs (that is, when it was scheduled
/// to occur), indicating that the service is ready for a `Start`
/// command. When a call to this method fails, the response is
/// sent when the failure is detected.
///
/// If this method is called when presentation is stopped, the
/// call fails immediately with an `ALREADY_STOPPED` error.
///
/// Otherwise, if this method is called, and `when` specifies a
/// time in the past, the call fails immediately with a
/// `SCHEDULED_IN_PAST` error.
///
/// Otherwise, if this method is called when a `Stop` operation
/// is already pending (requested but not completed), the pending
/// operation fails with a `CANCELED` error.
Stop(struct {
when RealOrPresentationTime:optional;
}) -> (struct {
// TODO(dalesat): Add system time here.
reference_time zx.time;
presentation_time zx.duration;
}) error StopError;
/// Sets the presentation rate.
///
/// + request `when` time when the presentation rate should be
/// changed as a system time, reference time or presentation
/// time. If this parameter is not supplied, the presentation
/// rate is changed as soon as possible.
/// + request `desired_rate` the desired presentation rate. Must
/// be greater than zero, otherwise the service closes the
/// channel.
/// - response `presentation_time` the presentation time at which
/// the rate changed.
/// - response `actual_rate` the actual presentation rate. This
/// can be different than `desired_rate` depending on the rate
/// capabilities of the object.
/// * error reason the operation failed.
///
/// Rate changes can be requested at any time. Rate changes
/// requested when presentation is stopped remain pending until
/// presentation is started and the specified `when` value is
/// reached. If `when` is not supplied, the operation pends until
/// presentation starts, at which time, the new rate is used and
/// the operation completes.
///
/// When a call to this method succeeds, the response is sent when
/// the operation actually occurs (that is, when it was scheduled
/// to occur), indicating that the service is ready for a new
/// rate change command. When a call to this method fails,
/// the response is sent when the failure is detected.
///
/// If this method is called on an object that doesn’t support
/// rate changes at all, the call fails immediately with a
/// `NOT_SUPPORTED` error.
///
/// Otherwise, if this method is called, and `when` specifies a
/// time in the past, the call fails immediately with a
/// `SCHEDULED_IN_PAST` error.
///
/// Otherwise, if this method is called when a `SetRate` operation
/// is already pending (requested but not completed), the pending
/// operation fails with a `CANCELED` error.
SetRate(struct {
when RealOrPresentationTime:optional;
desired_rate float32;
}) -> (struct {
// TODO(dalesat): Add reference, system time here.
presentation_time zx.duration;
actual_rate float32;
}) error SetRateError;
/// Amend the presentation timeline forward or backward.
///
/// + request `when` time when the presentation timeline should
/// amended as a system time, reference time or presentation
/// time. If this parameter is not supplied, the presentation
/// timeline is amended as soon as possible.
/// + request `delta` the duration the presentation timeline
/// should be amended. This value is added to the presentation
/// time at the specified time. If this value is positive, the
/// timeline slips forward, possibly skipping some of the
/// presentation. If this value is negative, the timeline slips
/// backward, possibly stalling the presentation.
/// - response `reference_time` the reference time at which the
/// amendment occurred.
/// - response `presentation_time` the presentation time that
/// correlates to `reference_time` as a consequence of this
/// method.
/// * error reason the operation failed.
///
/// When a call to this method succeeds, the response is sent when
/// the operation actually occurs (that is, when it was scheduled
/// to occur), indicating that the service is ready for a new
/// amend command. When a call to this method fails, the response
/// is sent when the failure is detected.
///
/// If an amend operation is pending when presentation is stopped,
/// the pending operation fails with a `CANCELED` error.
///
/// If this method is called when presentation is stopped, the
/// call fails immediately with an `NOT_STARTED` error.
///
/// Otherwise, if this method is called, and `when` specifies a
/// time in the past, the call fails immediately with a
/// `SCHEDULED_IN_PAST` error.
///
/// Otherwise, if this method is called when a `AmendPresentation`
/// operation is already pending (requested but not completed),
/// the pending operation fails with a `CANCELED` error.
AmendPresentation(struct {
when RealOrPresentationTime:optional;
delta zx.duration;
}) -> (struct {
reference_time zx.time;
presentation_time zx.duration;
}) error AmendPresentationError;
};
/// Describes any passive consumer, including single-stream and multi-stream consumers.
/// All passive consumers should compose this protocol. Single-stream passive consumers
/// and streams exposed by multi-stream passive consumers should also compose
/// `ActiveConsumerStream`.
protocol PassiveConsumer {
/// Indicates that writing to the files and consumption of packets
/// should start, configuration of the consumer having been
/// completed.
Start();
/// Indicates that the file should be completed and closed, all
/// expected packets having been consumed.
///
/// - response duration the duration of the completed file.
Stop() -> (struct {
duration zx.duration;
});
};
/// Describes any active consumer stream, including single-stream consumers and streams exposed by
/// multi-stream consumers. All single-stream active consumers and all streams exposed by
/// multi-stream active consumers should compose this protocol.
protocol ActiveConsumerStream {
/// Notifies the client that an end-of-stream signal has been
/// encountered in the consumed stream and that all prior packets
/// have been rendered or otherwise processed.
-> OnEndOfStream();
/// Notifies the client that the minimum lead time constraint has
/// been met.
-> OnPrimed();
/// Returns when packet arrival lead time falls outside the specified limits or when a new
/// `WatchPacketLeadTime` request arrives. Packet lead time is the interval between the arrival
/// of a packet at the consumer and the packet's arrival deadline. A lead time of zero indicates
/// that a packet arrived at the consumer just in time. Underflow (late packet arrival) is
/// indicated by a negative lead time value, if the value is known, or
/// `WatchLeadTimeResult.underflow` if it is not. For the purposes of filtering,
/// `WatchLeadTimeResult.underflow` is equivalent to a lead time value of -1.
///
/// + request `min` the margin below which packet arrival lead
/// time must fall in order for the reply to be sent. For example, passing zero indicates
/// that the reply should be sent when packet arrives after the deadline (when the
/// connection has underflowed).
/// + request `max` the margin above which packet arrival lead
/// time must rise in order for the reply to be sent.
/// - response `packet_lead_time` the actual packet lead time measured when the
/// response was generated. This value will only be within
/// the specified limits if the response is generated due to
/// the arrival of a new `WatchPacketLeadTime` request.
/// * error `NO_LEAD_TIME_REPORTED` indicates a new `WatchPacketLeadTime` request arrived before
/// any lead time values were reported.
///
/// Only one `WatchPacketLeadTime` operation may be pending at any
/// given time. If a `WatchPacketLeadTime` request is received
/// when another such request is pending, the consumer responds
/// to the older request with the latest packet lead time value or the error
/// `NO_LEAD_TIME_REPORTED`.
WatchPacketLeadTime(struct {
min zx.duration;
max zx.duration;
}) -> (struct {
result WatchLeadTimeResult;
});
};
/// Describes any passive consumer stream, including single-stream consumers and streams exposed by
/// multi-stream consumers. All single-stream passive consumers and all streams exposed by
/// multi-stream passive consumers should compose this protocol.
protocol PassiveConsumerStream {
/// Notifies the client that an end-of-stream signal has been
/// encountered in the consumed stream and that all prior packets
/// have been rendered or otherwise processed.
-> OnEndOfStream();
};