| // 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; |
| |
| /// Expresses presentation time as a linear function of reference |
| /// time. The reference timeline is typically the system monotonic |
| /// clock, but may be another clock. |
| type PresentationTimeline = struct { |
| /// Initial presentation time of this piece of the piecewise- |
| /// linear presentation timeline. |
| @allow_deprecated_struct_defaults |
| initial_presentation_time zx.duration = 0; |
| |
| /// Initial reference time of this piece of the piecewise- |
| /// linear presentation timeline. |
| @allow_deprecated_struct_defaults |
| initial_reference_time zx.time = 0; |
| |
| /// Presentation rate, typically 1.0. Non-positive values are |
| /// not permitted. This field gives the rate at which the |
| /// presentation progresses if `progressing` is true. If |
| /// `progressing` is false, the effective rate is zero. |
| // TODO(dalesat): consider removing this. |
| // TODO(dalesat): consider use a rational for this. |
| @allow_deprecated_struct_defaults |
| rate float32 = 1.0; |
| |
| /// Indicates whether presentation is progressing. If this |
| /// value is true, presentation is progressing at the rate |
| /// given by the `rate` field. If this value is false, the |
| /// effective presentation rate is zero. |
| @allow_deprecated_struct_defaults |
| progressing bool = false; |
| }; |
| |
| /// Describes units used in packet timestamps. |
| /// |
| /// The `packet_timestamp_interval` and `presentation_interval` establish the |
| /// units of the `Timestamp` values in packets in a stream. For |
| /// example, if the timestamps are in nanosecond units, the two |
| /// intervals are equal. If the timestamps are frame indices in a |
| /// 44.1k frames/second audio stream, `packet_timestamp_interval` would be |
| /// 44,100, and `presentation_interval` would be 1,000,000,000. |
| /// The intervals constitute a ratio, so the values 441 and |
| /// 10,000,000 would do just as well for the second example. |
| type PacketTimestampUnits = struct { |
| /// Timestamp interval corresponding to `presentation_interval`. |
| @allow_deprecated_struct_defaults |
| packet_timestamp_interval int64 = 1000000000; |
| |
| /// Duration in the presentation timeline corresponding to |
| /// `packet_timestamp_interval`. |
| @allow_deprecated_struct_defaults |
| presentation_interval zx.duration = 1000000000; |
| }; |