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

library fuchsia.sysmem;

// Describes how an image is represented.
// TODO(ZX-2260): change struct to table
struct ImageFormat {
    // Row width in pixels.
    uint32 width;

    // Number of rows.
    uint32 height;

    // Number of layers within a multi-layered image.
    // Defaults to 1 if not specified.
    uint32 layers;

    // Pixel format.
    PixelFormat pixel_format;

    // Color space.
    ColorSpace color_space;

    array<ImagePlane>:4 planes;
};

struct ImagePlane {
    // Byte offset of the start of the plane from the beginning of the image.
    uint32 byte_offset;

    // Stride in bytes per row.
    // Only meaningful for linear buffer formats.
    uint32 bytes_per_row;
};

// Describes constraints for allocating images of some desired form.
// TODO(ZX-2260): change struct to table
struct ImageSpec {
    // Minimum width in pixels.
    uint32 min_width;

    // Minimum height in pixels.
    uint32 min_height;

    // Number of layers within a multi-layered image.
    // Defaults to 1 if not specified.
    uint32 layers = 1;

    // Pixel format.
    PixelFormat pixel_format;

    // Color space.
    ColorSpace color_space;

    // TODO(ZX-2270): Add tiling formats.
};

// Describes how the pixels within an image are represented.
// Simple formats need only a type.
// Parametric pixel formats may require additional properties.
// TODO(ZX-2260): change struct to table
struct PixelFormat {
    PixelFormatType type;
};

// TODO(ZX-2270): add more formats.
// The ordering of the channels in the format name reflects how
// the actual layout of the channel.
enum PixelFormatType {
    INVALID = 0;
    R8G8B8A8 = 1;
    BGRA32 = 101; // 32bpp BGRA, 1 plane. For UVC compliance.
    I420 = 102; // For UVC compliance.
    M420 = 103; // For UVC compliance.
    NV12 = 104; // For UVC compliance.
    YUY2 = 105; // For UVC compliance.
    MJPEG = 106; // For UVC compliance.
};

// Describes how the pixels within an image are meant to be presented.
// Simple color spaces need only a type.
// Parametric color spaces may require additional properties.
// TODO(ZX-2260): change struct to table
struct ColorSpace {
    ColorSpaceType type;
};

enum ColorSpaceType {
    SRGB = 1;
    REC601_NTSC = 2;
    REC601_NTSC_FULL_RANGE = 3;
    REC601_PAL = 4;
    REC601_PAL_FULL_RANGE = 5;
    REC709 = 6;
    REC2020 = 7;
    REC2100 = 8;
};
