// Copyright 2017 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.

// Next min version: 4

module cros.mojom;

import "mojo/camera_common.mojom";
import "mojo/gpu/jpeg_encode_accelerator.mojom";
import "mojo/gpu/mjpeg_decode_accelerator.mojom";

// The CrOS camera HAL v3 Mojo dispatcher.  The dispatcher acts as a proxy and
// waits for the server and the clients to register.  There can only be one
// server registered, with multiple clients requesting connections to the
// server.  For each client, the dispatcher is responsible for creating a Mojo
// channel to the server and pass the established Mojo channel to the client in
// order to set up a Mojo channel between the client and the server.
//
// Next method ID: 4
interface CameraHalDispatcher {
  // A CameraHalServer calls RegisterServer to register itself with the
  // dispatcher.
  RegisterServer@0(CameraHalServer server);

  // A CameraHalClient calls RegisterClient to register itself with the
  // dispatcher.
  RegisterClient@1(CameraHalClient client);

  // Get MjpegDecodeAccelerator from dispatcher.
  [MinVersion = 1] GetMjpegDecodeAccelerator@2
      (MjpegDecodeAccelerator& accerlator_request);

  // Get JpegEncodeAccelerator from dispatcher.
  [MinVersion = 2] GetJpegEncodeAccelerator@3
      (JpegEncodeAccelerator& accerlator_request);
};

// The CrOS camera HAL v3 Mojo server.
//
// Next method ID: 2
interface CameraHalServer {
  // A caller calls CreateChannel to create a new Mojo channel to the camera
  // HAL v3 adapter.  Upon successfully binding of |camera_module_request|, the
  // caller will have a established Mojo channel to the camera HAL v3 adapter
  // process.
  CreateChannel@0(CameraModule& camera_module_request);

  // Enable or disable tracing.
  [MinVersion=3]
  SetTracingEnabled@1(bool enabled);
};

// The CrOS camera HAL v3 Mojo client.
//
// Next method ID: 1
interface CameraHalClient {
  // A caller calls SetUpChannel to dispatch the established Mojo channel
  // |camera_module_ptr| to the client.  The CameraHalClient can create a
  // Mojo channel to the camera HAL v3 adapter process with |camera_module_ptr|.
  // SetUpChannel may be called multiple times.  In cases such as the
  // CameraHalServer which holds the original Mojo channel crashes,
  // CameraHalDispatcher will call SetUpChannel again once a new CameraHalServer
  // reconnects.
  SetUpChannel@0(CameraModule camera_module_ptr);
};
