aboutsummaryrefslogtreecommitdiff
path: root/cast
diff options
context:
space:
mode:
authorAlex Leung <alexleung@google.com>2020-11-12 13:25:35 -0800
committerCommit Bot <commit-bot@chromium.org>2020-12-12 01:13:05 +0000
commit66940285de877e84e74f289f2020eb8aa04a9b25 (patch)
tree4978c66124bc92904ec83f9e46c4f3504dff2ac7 /cast
parentfc1b5d2829a3b0b27b8a7e11b46391f485227d88 (diff)
downloadopenscreen-66940285de877e84e74f289f2020eb8aa04a9b25.tar.gz
Internal change
PiperOrigin-RevId: 342117974 Change-Id: I9e15d3dfae41a06f5d06cd130e23bf9736676417 Reviewed-on: https://chromium-review.googlesource.com/c/openscreen/+/2586158 Reviewed-by: Ryan Keane <rwkeane@google.com> Commit-Queue: Ryan Keane <rwkeane@google.com>
Diffstat (limited to 'cast')
-rw-r--r--cast/cast_core/api/runtime/cast_audio_decoder_service.proto72
1 files changed, 65 insertions, 7 deletions
diff --git a/cast/cast_core/api/runtime/cast_audio_decoder_service.proto b/cast/cast_core/api/runtime/cast_audio_decoder_service.proto
index d11f8bdc..60c3c43d 100644
--- a/cast/cast_core/api/runtime/cast_audio_decoder_service.proto
+++ b/cast/cast_core/api/runtime/cast_audio_decoder_service.proto
@@ -110,6 +110,10 @@ message AudioDecoderBuffer {
// Indicates if this is a special frame that indicates the end of the stream.
// If true, functions to access the frame content cannot be called.
bool end_of_stream = 3;
+
+ // Unique identifier. This field should be greater than equal to 0 and
+ // incremented by one for each PushBuffeRequest.
+ int64 id = 4;
}
// Info on pipeline latency.
@@ -130,11 +134,20 @@ message MediaTime {
// The end of stream has been rendered.
bool end_of_stream = 2;
- // Capture time (in microseconds) with respect to the system clock (must be
+ // Capture time with respect to the system clock (must be
// CLOCK_MONOTONIC_RAW) at which the delay measurement was taken.
google.protobuf.Timestamp capture_time = 3;
}
+message TimestampInfo {
+ // System timestamp with respect to the systme clock that the corresponding
+ // buffer is expected to be rendered at.
+ google.protobuf.Timestamp system_timestamp = 1;
+
+ // AudioDecoderBuffer.id associated with the |system_timestamp|.
+ int64 buffer_id = 2;
+}
+
message InitializeRequest {
// Cast session ID.
string cast_session_id = 1;
@@ -143,16 +156,35 @@ message InitializeRequest {
CastAudioDecoderMode mode = 2;
}
+message GetMinimumBufferingDelayResponse {
+ // The minimum buffering delay in microseconds.
+ int64 delay_micros = 1;
+}
+
message StartRequest {
- // The start playback timestamp in microseconds.
+ // The start presentation timestamp in microseconds.
int64 pts_micros = 1;
+
+ // Timestamp information associated with the request.
+ // This field is optional and only used when this service is configured
+ // for CAST_AUDIO_DECODER_MODE_MULTIROOM_ONLY.
+ TimestampInfo timestamp_info = 2;
}
message StopRequest {}
message PauseRequest {}
-message ResumeRequest {}
+message ResumeRequest {
+ // Timestamp information associated with the request.
+ // This field is optional and only used when this service is configured
+ // for CAST_AUDIO_DECODER_MODE_MULTIROOM_ONLY.
+ TimestampInfo resume_timestamp_info = 1;
+}
+
+message TimestampUpdateRequest {
+ TimestampInfo timestamp_info = 1;
+}
message StateChangeRequest {
oneof request {
@@ -160,6 +192,7 @@ message StateChangeRequest {
StopRequest stop = 2;
PauseRequest pause = 3;
ResumeRequest resume = 4;
+ TimestampUpdateRequest timestamp_update = 5;
}
}
@@ -212,11 +245,19 @@ service CastAudioDecoder {
// may be sent prior to receiving this call's response.
rpc Initialize(InitializeRequest) returns (google.protobuf.Empty);
+ // Returns the minimum buffering delay (min_delay) required by Cast. This is
+ // a constant value and only needs to be queried once for each service.
+ // During a StartRequest or ResumeRequest, the system timestamp must be
+ // greater than this delay and the current time in order for the buffer to be
+ // successfully rendered on remote devices.
+ rpc GetMinimumBufferDelay(google.protobuf.Empty)
+ returns (GetMinimumBufferingDelayResponse);
+
// Update the pipeline state.
//
// StartRequest:
- // Places pipeline into 'Playing' state. Playback will start at given time
- // once buffers are pushed.
+ // Places pipeline into 'Playing' state. Playback will start at the
+ // specified buffer and system timestamp.
//
// May only be called in the 'Stopped' state, and following this call the
// state machine will be in the 'Playing' state.
@@ -229,17 +270,34 @@ service CastAudioDecoder {
// this call the state machine will be in the 'Stopped' state.
//
// PauseRequest
- // Pauses media playback
+ // Pauses media playback.
//
// May only be called in the 'Playing' state, and following this call the
// state machine will be in the 'Paused' state.
//
// ResumeRequest
- // Resumes media playback
+ // Resumes media playback at the specified buffer and system timestamp.
//
// May only be called in the 'Paused' state, and following this call the
// state machine will be in the 'Playing'' state.
//
+ // TimestampUpdateRequest
+ // Sends a timestamp update for a specified buffer for audio
+ // synchronization. This should be called when operating in
+ // CAST_AUDIO_DECODER_MODE_MULTIROOM_ONLY when the runtime has detected a
+ // discrepancy in the system clock or pipeline delay from the original
+ // playback schedule. See example below:
+ //
+ // Assume all buffers have duration of 100us.
+ //
+ // StartRequest(id=1, system_timestamp=0);
+ // -> Cast expects id=1 to play at 0, id=2 at 100us, id=3 at 200 us...
+ //
+ // TimestampUpdateRequest(id=4, system_timestamp=405us);
+ // -> Cast expects id=4 to play at 405, id=5 at 505us, id=6 at 605 us...
+ //
+ // May be called from any state.
+ //
// A state transition may only occur after a successful PushBuffer()
// call has been made with a valid configuration.
rpc StateChange(StateChangeRequest) returns (StateChangeResponse);