/*
Сервис управления настройками видеоконфига
*/
syntax = "proto3";
package deviceapis.device.v1;
import "deviceapis/device/v1/deviceapis_device_common_v1.proto";
import "google/api/annotations.proto";
import "google/api/field_behavior.proto";
import "google/protobuf/field_mask.proto";
import "protoc-gen-openapiv2/options/annotations.proto";
option cc_enable_arenas = true;
option csharp_namespace = "Deviceapis.Device.V1";
option go_package = "/deviceapis_device_v1";
option java_multiple_files = false;
option java_outer_classname = "DeviceapisDeviceV1Proto";
option java_package = "ru.deviceapis.device.v1";
option java_string_check_utf8 = true;
option objc_class_prefix = "DEVICEAPISDEVICEV1";
option optimize_for = LITE_RUNTIME;
option php_namespace = "Deviceapis\\Device\\V1";
option ruby_package = "Deviceapis::Device::V1";
// Сервис управления настройками видеоконфига
service VideoChannelService {
    // Метод редактирования единичной сущности VideoChannel по ключу
    rpc EditVideoChannel ( EditVideoChannelRequest ) returns ( EditVideoChannelResponse ) {
        option (google.api.http) = {
            patch: "/device/api/v1/video_channel/{data.chanel_number}",
            body: "data"
        };
    }
    // Метод получения списка сущностей VideoChannel по фильтру
    rpc GetVideoChannelList ( GetVideoChannelListRequest ) returns ( GetVideoChannelListResponse ) {
        option (google.api.http) = { get: "/device/api/v1/video_channel/list" };
    }
}
// Запрос редактирования единичной сущности VideoChannel по ключу
message EditVideoChannelRequest {
    // Настройки видеоконфига
    VideoChannel data = 1 [(google.api.field_behavior) = REQUIRED];
    // Маска полей обновления
    google.protobuf.FieldMask update_mask = 2;
}
// Ответ на запрос редактирования единичной сущности VideoChannel по ключу
message EditVideoChannelResponse {
    // Ошибка запроса
    message Error {
        // Причина ошибки
        oneof reason {
            // Ошибка валидации
            ValidationError validation = 1;
        }
    }
    // Тип ответа
    oneof type {
        // Настройки видеоконфига
        VideoChannel data = 1;
        // Ошибка
        Error error = 2;
    }
}
// Запрос получения списка сущностей VideoChannel по фильтру
message GetVideoChannelListRequest {
}
// Ответ на запрос получения списка сущностей VideoChannel по фильтру
message GetVideoChannelListResponse {
    // Список VideoChannel
    repeated VideoChannel data = 1;
}
// Настройки видеоконфига
message VideoChannel {
    // Режим Flow control mode
    enum FlowControlModeType {
        // Значение не указано
        FLOW_CONTROL_MODE_TYPE_UNKNOWN = 0;
        // Режим VBR
        VBR = 1;
        // Режим CBR
        CBR = 2;
        // Режим CVBR
        CVBR = 3;
        // Режим AVBR
        AVBR = 4;
        // Режим FIXP
        FIXP = 5;
        // Режим QVBR
        QVBR = 6;
    }
    // Формат видео
    enum FormatType {
        // Значение не указано
        FORMAT_TYPE_UNKNOWN = 0;
        // Формат mjpeg
        MPEG = 1;
        // Формат h.264
        H264 = 2;
        // Формат h.264+
        H264_PLUS = 3;
        // Формат h.265
        H265 = 4;
    }
    // Профиль
    enum ProfileType {
        // Значение не указано
        PROFILE_TYPE_UNKNOWN = 0;
        // Высокий
        PROFILE_HIGH = 1;
        // Основной
        PROFILE_MAIN = 2;
        // Базовый
        PROFILE_BASE = 3;
    }
    // Тип разрешения видео
    enum ResolutionType {
        // Значение не указано
        RESOLUTION_TYPE_UNKNOWN = 0;
        // Тип разрешения 2K 2560*1440
        R2K = 1;
        // Тип разрешения FULLHD 1920*1080
        FULLHD = 2;
        // Тип разрешения HD 1280*720
        HD = 3;
        // Тип разрешения SD 720*576
        SD = 4;
        // Тип разрешения 4CIF 704*576
        R4CIF = 5;
        // Тип разрешения VGA 640*480
        VGA = 6;
    }
    // Порядковый номер видеоконфига
    int32 chanel_number = 1 [
        (google.api.field_behavior) = REQUIRED,
        (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { example: "0", maximum: 10.000000 }
    ];
    // Флаг активности
    bool is_enabled = 2 [
        (google.api.field_behavior) = REQUIRED,
        (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { example: "true" }
    ];
    // Тип разрешения видео
    ResolutionType resolution_type = 3 [
        (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { example: "FULLHD" }
    ];
    // Формат видео
    FormatType format_type = 4 [
        (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { example: "MPEG" }
    ];
    // Профиль
    ProfileType profile_type = 5 [
        (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { example: "HIGH" }
    ];
    // Частота кадров
    int32 fps = 6 [
        (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
            example: "25",
            maximum: 30.000000,
            minimum: 1.000000
        }
    ];
    // Периодичность опорного кадра
    int32 gop = 7 [
        (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
            example: "25",
            maximum: 200.000000,
            minimum: 1.000000
        }
    ];
    // Режим FlowControlModeType
    FlowControlModeType flow_control_mode_type = 8 [
        (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { example: "HIGH" }
    ];
    // Целевая скорость потока, килобит
    int32 biterate = 9 [
        (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
            example: "100",
            maximum: 16000.000000,
            minimum: 100.000000
        }
    ];
    // Флаг rtsp_audio
    bool is_rtsp_audio = 10 [
        (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { example: "true" }
    ];
    // Флаг use for sip
    bool is_used_for_sip = 11 [
        (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { example: "true" }
    ];
}
