/*
 * Copyright (C) 2018 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

syntax = "proto2";

option optimize_for = LITE_RUNTIME;

// C++ namespace: android::media:MediaPlayer2Proto:
package android.media.MediaPlayer2Proto;

option java_package = "android.media";
option java_outer_classname = "MediaPlayer2Proto";

message Value {
    // The kind of value.
    oneof kind {
        // Represents a boolean value.
        bool bool_value = 1;
        // Represents an int32 value.
        int32 int32_value = 2;
        // Represents an uint32 value.
        uint32 uint32_value = 3;
        // Represents an int64 value.
        int64 int64_value = 4;
        // Represents an uint64 value.
        uint64 uint64_value = 5;
        // Represents a float value.
        double float_value = 6;
        // Represents a double value.
        double double_value = 7;
        // Represents a string value.
        string string_value = 8;
        // Represents a bytes value.
        bytes bytes_value = 9;
    }
}

message PlayerMessage {
    repeated Value values = 1;
}
