/*
 * Copyright 2019 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.hardware.graphics.mapper@3.0;

/**
 * Error values that may be returned by a method of IAllocator or IMapper.
 */
enum Error : int32_t {
    /**
     * No error.
     */
    NONE            = 0,
    /**
     * Invalid BufferDescriptor.
     */
    BAD_DESCRIPTOR  = 1,
    /**
     * Invalid buffer handle.
     */
    BAD_BUFFER      = 2,
    /**
     * Invalid HardwareBufferDescription.
     */
    BAD_VALUE       = 3,
    /**
     * Resource unavailable.
     */
    NO_RESOURCES    = 5,
    /**
     * Permanent failure.
     */
    UNSUPPORTED     = 7,
};

/**
 * A buffer descriptor is an implementation-defined opaque data returned by
 * createDescriptor(). It describes the properties of a buffer and is consumed
 * by the allocator.
 */
typedef vec<uint32_t> BufferDescriptor;

/**
 * Structure for describing YCbCr formats for consumption by applications.
 * This is used with PixelFormat::YCBCR_*_888.
 *
 * Buffer chroma subsampling is defined in the format.
 * e.g. PixelFormat::YCBCR_420_888 has subsampling 4:2:0.
 *
 * Buffers must have a 8 bit depth.
 *
 * y, cb, and cr point to the first byte of their respective planes.
 *
 * Stride describes the distance in bytes from the first value of one row of
 * the image to the first value of the next row. It includes the width of the
 * image plus padding.
 * yStride is the stride of the luma plane.
 * cStride is the stride of the chroma planes.
 *
 * chromaStep is the distance in bytes from one chroma pixel value to the
 * next. This is 2 bytes for semiplanar (because chroma values are interleaved
 * and each chroma value is one byte) and 1 for planar.
 */
struct YCbCrLayout {
    pointer y;
    pointer cb;
    pointer cr;
    uint32_t yStride;
    uint32_t cStride;
    uint32_t chromaStep;
};
