syntax = "proto2";
option optimize_for = LITE_RUNTIME;
package chromecast.media.mixer_service;
import "chromecast/media/audio/net/common.proto";
message OutputStreamParams {
enum StreamType {
STREAM_TYPE_DEFAULT = 0;
STREAM_TYPE_SFX = 1;
}
optional StreamType stream_type = 1;
optional audio_service.ContentType content_type = 2;
optional audio_service.SampleFormat sample_format = 3;
optional string device_id = 4;
optional int32 sample_rate = 5;
optional int32 num_channels = 6;
optional audio_service.ChannelLayout channel_layout = 7;
optional sint32 channel_selection = 8 [default = -1];
optional int32 fill_size_frames = 9;
optional int32 start_threshold_frames = 10;
optional int32 max_buffered_frames = 11;
optional int32 fade_frames = 12;
optional bool use_start_timestamp = 13;
optional bool ignore_for_stream_count = 14;
optional bool never_timeout_connection = 15;
optional audio_service.ContentType focus_type = 16;
message TimestampedAudioConfig {
optional int64 rate_change_interval = 1;
optional int64 linear_regression_window = 2;
optional int64 max_ignored_current_error = 3;
optional double max_current_error_correction = 4;
optional double min_rate_change = 5;
optional int64 max_timestamp_error = 6;
optional bool never_crop = 7;
}
optional TimestampedAudioConfig timestamped_audio_config = 17;
optional bool enable_audio_clock_simulation = 18;
}
message SetStartTimestamp {
optional int64 start_timestamp = 1;
optional int64 start_pts = 2;
}
message SetPlaybackRate {
optional float playback_rate = 1;
}
message StreamVolume {
optional float volume = 1;
}
message SetPaused {
optional bool paused = 1;
}
message SetAudioClockRate {
optional double rate = 1;
}
message BufferPushResult {
optional fixed64 delay_timestamp = 1;
optional int64 delay = 2;
}
message EosPlayedOut {}
message ReadyForPlayback {
optional fixed64 delay_microseconds = 1;
}
message StreamConfig {
optional audio_service.SampleFormat sample_format = 1;
optional int32 sample_rate = 2;
optional int32 num_channels = 3;
optional int32 data_size = 4;
}
message LoopbackDataRequest {}
message StreamInterruption {
enum InterruptionReason {
INTERRUPTED_UNKNOWN = 0;
INTERRUPTED_DISCONNECTED = 1;
INTERRUPTED_UNDERRUN = 2;
INTERRUPTED_CONFIG_CHANGE = 3;
INTERRUPTED_OUTPUT_STOPPED = 4;
INTERRUPTED_SOCKET_OVERFLOW = 5;
}
optional InterruptionReason reason = 1;
}
message RedirectionRequest {
optional int32 order = 1;
optional int32 num_channels = 2;
optional audio_service.ChannelLayout channel_layout = 3;
optional bool apply_volume = 4;
optional int64 extra_delay_microseconds = 5;
}
message RedirectedStreamPatterns {
message Pattern {
optional audio_service.ContentType content_type = 1;
optional string device_id_pattern = 2;
}
repeated Pattern patterns = 1;
}
message SetDeviceVolume {
optional audio_service.ContentType content_type = 1;
optional float volume_multiplier = 2;
}
message SetDeviceMuted {
optional audio_service.ContentType content_type = 1;
optional bool muted = 2;
}
message SetVolumeLimit {
optional audio_service.ContentType content_type = 1;
optional float max_volume_multiplier = 2;
}
message ListPostprocessors {}
message PostprocessorList {
repeated string postprocessors = 1;
}
message ConfigurePostprocessor {
optional string name = 1;
optional bytes config = 2;
}
message ReloadPostprocessors {}
message RequestStreamCount {
optional bool subscribe = 1;
}
message StreamCount {
optional int32 primary = 1;
optional int32 sfx = 2;
}
message NumOutputChannels {
optional int32 channels = 1;
}
message Error {
enum Type {
INVALID_STREAM_ERROR = 0;
XRUN_ERROR = 1;
}
optional Type type = 1;
optional string message = 2;
}
message MixerUnderrun {
enum Type {
INPUT_UNDERRUN = 0;
OUTPUT_UNDERRUN = 1;
}
optional Type type = 1;
}
message TimestampAdjustment {
optional int64 adjustment = 1;
}
message Generic {
optional OutputStreamParams output_stream_params = 1;
optional SetStartTimestamp set_start_timestamp = 2;
optional SetPlaybackRate set_playback_rate = 3;
optional StreamVolume set_stream_volume = 4;
optional SetPaused set_paused = 5;
optional BufferPushResult push_result = 6;
optional EosPlayedOut eos_played_out = 7;
optional ReadyForPlayback ready_for_playback = 8;
optional StreamConfig stream_config = 9;
optional LoopbackDataRequest loopback_request = 10;
optional RedirectionRequest redirection_request = 11;
optional RedirectedStreamPatterns redirected_stream_patterns = 12;
optional SetDeviceVolume set_device_volume = 13;
optional SetDeviceMuted set_device_muted = 14;
optional SetVolumeLimit set_volume_limit = 15;
optional ConfigurePostprocessor configure_postprocessor = 16;
optional ReloadPostprocessors reload_postprocessors = 17;
optional RequestStreamCount request_stream_count = 18;
optional StreamCount stream_count = 19;
optional Error error = 20;
optional NumOutputChannels set_num_output_channels = 21;
optional StreamInterruption stream_interruption = 22;
optional SetAudioClockRate set_audio_clock_rate = 23;
optional MixerUnderrun mixer_underrun = 24;
optional ListPostprocessors list_postprocessors = 25;
optional PostprocessorList postprocessor_list = 26;
optional TimestampAdjustment timestamp_adjustment = 27;
}