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

[DartPackage="mojo_services"]
module mojo;

struct Photo {
  // A string to uniquely identify an instance of a |Photo|. This can be used
  // to de-duplicate photos over multiple runs on the camera roll.
  string unique_id;

  // Stream to read contents of the photo from.
  handle<data_pipe_consumer> content;
};

// |CameraRollService| provides access to the device's camera roll.
// The camera roll is exposed as a snapshot of all photos available as a list.
// The head of the list (element with index 0) is a photo with the latest
// timestamp and subsequent elements are in decreasing order of timestamp.
[ServiceName="mojo::CameraRollService"]
interface CameraRollService {
  // Updates the snapshot of all photos available. Photos might have been added
  // or removed after the service was started or |Update| was called.
  Update();
  // Get the number of photos available in the current snapshot.
  GetCount() => (uint32 num_photos);
  // Get the photo from the current snapshot at |index|. null will be returned
  // if such an index is out-of-bounds.
  GetPhoto(uint32 index) => (Photo? photo);
};

// |CameraService| provides access to the device's camera video stream.
[ServiceName="mojo::CameraService"]
interface CameraService {
  // Returns the most recent frame captured by the device's camera
  // in preview mode.
  GetLatestFrame() => (handle<data_pipe_consumer>? content);
};
