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

module media.mojom;

import "media/mojo/interfaces/media_types.mojom";
import "mojo/public/mojom/base/time.mojom";
import "ui/gfx/geometry/mojo/geometry.mojom";

// Decode errors (see media/video/jpeg_decode_accelerator.h).
enum DecodeError {
  NO_ERRORS,
  INVALID_ARGUMENT,
  UNREADABLE_INPUT,
  PARSE_JPEG_FAILED,
  UNSUPPORTED_JPEG,
  PLATFORM_FAILURE,
};

// This defines a mojo transport format for media::BitstreamBuffer (see
// media/base/bitstream_buffer.h).
struct BitstreamBuffer {
  int32 id;
  handle<shared_buffer> memory_handle;
  uint32 size;
  int64 offset;
  mojo_base.mojom.TimeDelta timestamp;
  string key_id;
  string iv;
  array<SubsampleEntry> subsamples;
};

// GPU process interface exposed to the browser for decoding JPEG images.
interface JpegDecodeAccelerator {
  // Initializes the JPEG decoder. Should be called once per decoder
  // construction and before using Decode(). This call returns true if
  // initialization is successful.
  Initialize() => (bool success);

  // Decodes the given bitstream buffer that contains one JPEG image.
  // The image is decoded from shared memory |input_buffer.memory_handle|
  // with size |input_buffer.size|. The input buffer is associated with
  // |input_buffer.id|and the size of JPEG image is |coded_size|. Decoded I420
  // frame data will be put onto shared memory associated with |output_handle|
  // with allocated size |output_buffer_size|.
  // Returns |bitstream_buffer_id| and |error| in a callback to notify the
  // decode status. |bitstream_buffer_id| is the id of BitstreamBuffer
  // |input_buffer| and |error| is the error code.
  Decode(BitstreamBuffer input_buffer, gfx.mojom.Size coded_size,
         handle<shared_buffer> output_handle, uint32 output_buffer_size)
      => (int32 bitstream_buffer_id, DecodeError error);

  // Decodes the given buffer that contains one JPEG image.
  // |input_fd| and |output_fd| are file descriptors of shared memory.
  // The image is decoded from memory of |input_fd|
  // with size |input_buffer_size|. The input buffer is associated with
  // |buffer_id| and the size of JPEG image is |coded_size|. Decoded I420
  // frame data will be put onto memory associated with |output_fd|
  // with allocated size |output_buffer_size|.
  // Returns |buffer_id| and |error| in a callback to notify the
  // decode status. |buffer_id| is the id of |input_buffer| and |error| is the
  // error code.
  DecodeWithFD(int32 buffer_id, handle input_fd, uint32 input_buffer_size,
               int32 coded_size_width, int32 coded_size_height,
               handle output_fd, uint32 output_buffer_size)
      => (int32 buffer_id, DecodeError error);

  // TODO(c.padhi): This method might not be required, see
  // http://crbug.com/699255.
  Uninitialize();
};
