| // Copyright 2018 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.media.playback; |
| |
| using fuchsia.math; |
| using fuchsia.media; |
| using fuchsia.media.audio; |
| using fuchsia.ui.views; |
| using zx; |
| |
| /// Plays media. |
| [Discoverable] |
| protocol Player { |
| compose SourceManager; |
| |
| /// Sets a file channel to read from. |
| SetFileSource(handle<channel> file_channel); |
| |
| /// Starts playback. |
| Play(); |
| |
| /// Pauses playback. |
| Pause(); |
| |
| /// Provides current status immediately after binding and whenever status |
| /// changes thereafter. |
| -> OnStatusChanged(PlayerStatus player_status); |
| |
| /// Seeks to the specified position, specified in nanoseconds. |
| Seek(int64 position); |
| |
| /// Creates a video view. |
| CreateView(fuchsia.ui.views.ViewToken view_token); |
| |
| /// Binds to the gain control for this player. |
| BindGainControl( |
| request<fuchsia.media.audio.GainControl> gain_control_request); |
| |
| /// Adds a new binding to this player. |
| AddBinding(request<Player> player_request); |
| }; |
| |
| /// Player status information. |
| struct PlayerStatus { |
| /// Duration of the content. |
| zx.duration duration; |
| |
| /// Whether the player can pause. |
| bool can_pause; |
| |
| /// Whether the player can seek. |
| bool can_seek; |
| |
| /// Whether the source has an audio stream. |
| bool has_audio; |
| |
| /// Whether the source has a video stream. |
| bool has_video; |
| |
| /// Indicates whether the player is ready to play. After |
| /// `SetFileSource` or `SourceManager.SetSource` is called, this value is |
| /// false until the player is fully prepared to play the content from the |
| /// source. |
| bool ready; |
| |
| // Describes the media. |
| fuchsia.media.Metadata? metadata; |
| |
| /// Indicates a problem preventing intended operation. |
| Problem? problem; |
| |
| /// Indicates whether an audio stream is currently connected for rendering. |
| /// This value will be false if `has_audio` is false or if the audio stream |
| /// type isn't supported. |
| bool audio_connected; |
| |
| /// Indicates whether a video stream is currently connected for rendering. |
| /// This value will be false if `has_video` is false or if the video stream |
| /// type isn't supported. |
| bool video_connected; |
| |
| /// Size of the video currently being produced. This value will be null if |
| /// the video size is currently unknown. |
| fuchsia.math.Size? video_size; |
| |
| /// Relative dimensions of a video pixel. This value will be null if the |
| /// pixel aspect ratio is currently unknown. |
| fuchsia.math.Size? pixel_aspect_ratio; |
| |
| /// Function translating local time to presentation time. This value will be |
| /// null if the timeline function is currently undefined. |
| fuchsia.media.TimelineFunction? timeline_function; |
| |
| /// Indicates whether presentation for all streams has reached end-of-stream. |
| bool end_of_stream; |
| }; |