// 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 video_capture.mojom;

import "mojom/video_capture_types.mojom";
import "mojom/scoped_access_permission.mojom";

// Callback interface for receiving data and messages from a
// video_capture.mojom.Device or
// video_capture.mojom.PushVideoStreamSubscription.
interface VideoFrameHandler {
  // Indicates that the producer is going to subsequently use the provided
  // buffer as one of possibly many for frame delivery via
  // OnFrameReadyInBuffer(). Note, that a call to this method does not mean that
  // the caller allows the handler to read from or write to the buffer just yet.
  // Temporary permission to read will be given with subsequent calls to
  // OnFrameReadyInBuffer().
  OnNewBuffer(int32 buffer_id, media.mojom.VideoBufferHandle buffer_handle);

  // Indicates that a new frame is ready for consumption in the buffer with id
  // |buffer_id| and allows it to read the data from the buffer. The producer
  // guarantees that the buffer and its contents stay alive and unchanged until
  // VideoFrameHandler releases the given |access_permission|.
  OnFrameReadyInBuffer(int32 buffer_id, int32 frame_feedback_id,
                       ScopedAccessPermission access_permission,
                       media.mojom.VideoFrameInfo frame_info);

  // Indicates that the producer is no longer going to use the buffer with id
  // |buffer_id| for frame delivery. This may be called even while the handler
  // is still holding |access_permission| from a call to OnFrameReadInBuffer()
  // for the same buffer. In that case, it means that the caller is asking the
  // VideoFrameHaVideoFrameReceiverndler to release the read permission and
  // buffer handle at its earliest convenience. After this call, a producer may
  // immediately reuse the retired |buffer_id| with a new buffer via a call to
  // OnNewBuffer().
  OnBufferRetired(int32 buffer_id);

  // Indicates that an error occurred on the producer side.
  OnError(media.mojom.VideoCaptureError error);

  OnFrameDropped(media.mojom.VideoCaptureFrameDropReason reason);
  OnLog(string message);

  // Indicates that the producer side has started successfully. The producer
  // guarantees that this is called before any call to OnFrameReadyInBuffer().
  OnStarted();

  OnStartedUsingGpuDecode();

  // Indicates that the producer side has stopped and is not going to make any
  // further calls to this VideoFrameHandler.
  OnStopped();
};
