syntax = "proto2";

package android.automotive.computepipe.proto;

message ImageFileConfig {
  enum ImageFileType {
    JPEG = 0;
    PNG = 1;
  }

  optional ImageFileType file_type = 1;

  optional string image_dir = 2;
}

message VideoFileConfig {
  enum VideoFileType {
    MPEG = 0;
  }

  optional VideoFileType file_type = 1;

  optional string file_path = 2;
}

message CameraConfig {
  enum CameraType {
    DRIVER_VIEW_CAMERA = 0;
    OCCUPANT_VIEW_CAMERA = 1;
    EXTERNAL_CAMERA = 2;
    SURROUND_VIEW_CAMERA = 3;
  };

  optional CameraType camera_type = 1;

  optional string cam_id = 2;
}

message InputStreamConfig {
  enum InputType {
    CAMERA = 1;
    IMAGE_FILES = 2;
    VIDEO_FILE = 3;
  }

  optional InputType type = 1;

  enum FormatType {
    RGB = 0;
    NIR = 1;
    NIR_DEPTH = 2;
  }

  optional FormatType format = 2;

  optional int32 width = 3;

  optional int32 height = 4;

  optional int32 stride = 5;

  // The camera id string essential to start the camera.
  optional CameraConfig cam_config = 6;

  // for image file input type the following attributes apply
  optional ImageFileConfig image_config = 7;

  // Must be present when InputType is ImageFile
  optional VideoFileConfig video_config = 8;

  optional int32 stream_id = 9;

  enum PixelLayout {
    UNKNOWN = 0;

    // one byte for R, then one byte for G, then one byte for B for each pixel.
    RGB24 = 1;

    // one byte for R, one byte for G, one byte for B, one byte for alpha or
    // unused.
    RGBA32 = 2;

    // Grayscale, one byte per pixel.
    GRAY8 = 3;

    // Grayscale, one uint16 per pixel.
    GRAY16 = 4;
  }

  // Represent pixel layout of image expected by graph.
  optional PixelLayout pixel_layout = 10 [default = RGB24];
}

// A graph could require streams from multiple cameras simultaneously, so each possible input
// config could specify multiple camera configs.
message InputConfig {
    repeated InputStreamConfig input_stream = 1;

    // config id which would be used to set the config rather than passing the entire config proto
    optional int32 config_id = 2;
}
