// Copyright 2019 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 cros.mojom;

enum PixelFormat {
  YUV_420,
  JPEG,
};

struct IpCameraStream {
  PixelFormat format;
  int32 width;
  int32 height;
  double fps;
};

interface IpCameraFrameListener {
  OnFrameCaptured(handle<shared_buffer> shm_handle, int32 id, uint32 size);
};

interface IpCameraDevice {
  // Only a single listener is supported. Registering a new one will replace any
  // existing listener.
  RegisterFrameListener(IpCameraFrameListener listener);

  StartStreaming();
  StopStreaming();

  ReturnBuffer(int32 id);
};

interface IpCameraConnectionListener {
  OnDeviceConnected(string ip, string name, IpCameraDevice device,
                    IpCameraStream default_stream);
  OnDeviceDisconnected(string ip);
};

interface IpCameraDetector {
  // Only a single listener is supported. Registering a new one will replace any
  // existing listener.
  RegisterConnectionListener(IpCameraConnectionListener listener);
};

interface IpCameraProxy {
  Init(IpCameraDevice& device_request) => (bool success, IpCameraStream stream);
  Destroy();
};
