syntax = "proto3";

package rv.data;

option cc_enable_arenas = true;
option csharp_namespace = "Pro.SerializationInterop.RVProtoData";
option swift_prefix = "RVData_";

import "color.proto";
import "graphicsData.proto";
import "uuid.proto";

message Screen {
  message ColorAdjustment {
    double gamma = 1;
    double black_level = 2;
    double red_level = 3;
    double green_level = 4;
    double blue_level = 5;
    double brightness = 6;
    double contrast = 7;
  }

  message BlendCompensation {
    double black_level = 1;
  }

  message AlphaSettings {
    message AlphaDevice {
      .rv.data.OutputDisplay display = 1;
      .rv.data.Graphics.Rect subscreen_unit_rect = 2;
    }

    enum Mode {
      MODE_UNKNOWN = 0;
      MODE_DISABLED = 1;
      MODE_PREMULTIPLIED = 2;
      MODE_STRAIGHT = 3;
    }

    .rv.data.Screen.AlphaSettings.Mode mode = 1;
    .rv.data.Screen.AlphaSettings.AlphaDevice alpha_device = 2;
  }

  .rv.data.UUID uuid = 1;
  string name = 2;
  .rv.data.Color color = 3;
  .rv.data.Graphics.Rect bounds = 4;
  bool aspect_ratio_locked = 5;
  bool output_bounds_aspect_ratio_locked = 6;
  bool corner_pinning_enabled = 7;
  .rv.data.Graphics.Rect subscreen_unit_rect = 8;
  double rotation = 9;
  double gamma = 10;
  double black_level = 11;
  uint32 blended_edges = 12;
  .rv.data.CornerValues corner_values = 13;
  .rv.data.OutputDisplay output_display = 14;
  bool color_enabled = 15;
  .rv.data.Screen.ColorAdjustment color_adjustment = 16;
  .rv.data.Screen.BlendCompensation blend_compensation = 17;
  .rv.data.Screen.AlphaSettings alpha_settings = 18;
}

message CornerValues {
  .rv.data.Graphics.Point top_left = 1;
  .rv.data.Graphics.Point top_right = 2;
  .rv.data.Graphics.Point bottom_left = 3;
  .rv.data.Graphics.Point bottom_right = 4;
}

message DisplayMode {
  string name = 1;
  uint32 width = 2;
  uint32 height = 3;
  double refresh_rate = 4;
  bool interlaced = 5;
}

message OutputDisplay {
  message Blackmagic {
    enum KeyMode {
      KEY_MODE_INTERNAL = 0;
      KEY_MODE_EXTERNAL = 1;
    }

    bool enabled = 1;
    .rv.data.OutputDisplay.Blackmagic.KeyMode key_mode = 2;
    double blend_value = 3;
  }

  enum Type {
    TYPE_UNKNOWN = 0;
    TYPE_SCREEN = 1;
    TYPE_CARD = 2;
    TYPE_NDI = 3;
    TYPE_SYPHON = 4;
    TYPE_CUSTOM = 5;
  }

  string name = 1;
  string model = 2;
  string serial = 3;
  string deviceName = 4;
  string vendor = 5;
  uint32 modeIndex = 6;
  .rv.data.Graphics.Rect bounds = 7;
  .rv.data.OutputDisplay.Type type = 8;
  .rv.data.DisplayMode mode = 9;
  string render_id = 10;
  int32 video_delay = 12;
  oneof HardwareOptions {
    .rv.data.OutputDisplay.Blackmagic blackmagic = 11;
  }
}

message EdgeBlend {
  message Screen {
    enum Edge {
      EDGE_UNKNOWN = 0;
      EDGE_LEFT = 1;
      EDGE_RIGHT = 2;
      EDGE_TOP = 3;
      EDGE_BOTTOM = 4;
    }

    .rv.data.UUID uuid = 1;
    .rv.data.EdgeBlend.Screen.Edge edge = 2;
    double gamma = 3;
    double black_level = 4;
    .rv.data.EdgeBlend.Mode mode = 5;
    double radius = 6;
    double intensity = 7;
  }

  enum Mode {
    MODE_LINEAR = 0;
    MODE_CUBIC = 1;
    MODE_QUADRATIC = 2;
  }

  .rv.data.UUID uuid = 1;
  double radius = 2;
  double intensity = 3;
  .rv.data.EdgeBlend.Mode mode = 4;
  .rv.data.EdgeBlend.Screen first_screen = 5;
  .rv.data.EdgeBlend.Screen second_screen = 6;
  .rv.data.EdgeBlend.Screen left_screen = 7;
  .rv.data.EdgeBlend.Screen right_screen = 8;
  .rv.data.EdgeBlend.Screen top_screen = 9;
  .rv.data.EdgeBlend.Screen bottom_screen = 10;
}

