// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

module media.mojom;

import "media/mojo/interfaces/media_types.mojom";
import "mojo/common/time.mojom";
import "mojo/common/values.mojom";
import "ui/gfx/geometry/mojo/geometry.mojom";

enum ResolutionChangePolicy {
  FIXED_RESOLUTION,
  FIXED_ASPECT_RATIO,
  ANY_WITHIN_LIMIT,
};

enum PowerLineFrequency {
  DEFAULT,
  HZ_50,
  HZ_60
};

enum VideoPixelStorage {
  CPU,
  GPUMEMORYBUFFER
};

enum VideoCaptureApi {
  LINUX_V4L2_SINGLE_PLANE,
  WIN_MEDIA_FOUNDATION,
  WIN_DIRECT_SHOW,
  MACOSX_AVFOUNDATION,
  MACOSX_DECKLINK,
  ANDROID_API1,
  ANDROID_API2_LEGACY,
  ANDROID_API2_FULL,
  ANDROID_API2_LIMITED,
  ANDROID_TANGO,
  UNKNOWN
};

enum VideoCaptureTransportType {
  // For MACOSX_AVFOUNDATION Api, identifies devices that are built-in or USB.
  MACOSX_USB_OR_BUILT_IN,
  OTHER_TRANSPORT
};

struct VideoCaptureFormat {
  gfx.mojom.Size frame_size;
  float frame_rate;
  VideoPixelFormat pixel_format;
  VideoPixelStorage pixel_storage;
};

struct VideoCaptureParams {
  VideoCaptureFormat requested_format;
  ResolutionChangePolicy resolution_change_policy;
  PowerLineFrequency power_line_frequency;
};

struct VideoFrameInfo{
  mojo.common.mojom.TimeDelta timestamp;
  mojo.common.mojom.DictionaryValue metadata;
  VideoPixelFormat pixel_format;
  VideoPixelStorage storage_type;
  gfx.mojom.Size coded_size;
  gfx.mojom.Rect visible_rect;
};

struct VideoCaptureDeviceDescriptor {
  string display_name;
  string device_id;
  string model_id;
  VideoCaptureApi capture_api;
  VideoCaptureTransportType transport_type;
};

struct VideoCaptureDeviceInfo {
  VideoCaptureDeviceDescriptor descriptor;
  array<VideoCaptureFormat> supported_formats;
};
