//-----------------------------------------------------------------------------
// (C) Copyright 2005 - 2023 by MATRIX VISION GmbH
//
// This software is provided by MATRIX VISION GmbH "as is"
// and any express or implied warranties, including, but not limited to, the
// implied warranties of merchantability and fitness for a particular purpose
// are disclaimed.
//
// In no event shall MATRIX VISION GmbH be liable for any direct,
// indirect, incidental, special, exemplary, or consequential damages
// (including, but not limited to, procurement of substitute goods or services;
// loss of use, data, or profits; or business interruption) however caused and
// on any theory of liability, whether in contract, strict liability, or tort
// (including negligence or otherwise) arising in any way out of the use of
// this software, even if advised of the possibility of such damage.

//-----------------------------------------------------------------------------
#ifndef TBufferPartDataTypeH
#ifndef DOXYGEN_SHOULD_SKIP_THIS
#   define TBufferPartDataTypeH TBufferPartDataTypeH
#endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS
//-----------------------------------------------------------------------------
#if defined(DOXYGEN_CPP_DOCUMENTATION)
namespace mvIMPACT
{
namespace acquire
{
#endif // defined(DOXYGEN_CPP_DOCUMENTATION)

//-----------------------------------------------------------------------------
/// \brief Defines buffer part data types.
/**
 * \since 2.20.0
 */
/// \ingroup CommonInterface
enum TBufferPartDataType
//-----------------------------------------------------------------------------
{
    /// \brief The framework is not aware of the data type of the data in the provided buffer part
    /**
     * From the application perspective this can be handled as raw data.
     */
    bpdtUnknown = 0,
    /// \brief Color or monochrome (2D) image (GenTL).
    /**
     * This part carries all the pixel data of given image (even if the image is represented by a single-plane pixel format).
     */
    bpdt2DImage = 1,
    /// \brief Single color plane of a planar (2D) image (GenTL).
    /**
     * The data should be linked with the other color planes to get the complete image. The complete image consists of 2 planes.
     * The planes of a given planar image must be placed as consecutive parts within the buffer.
     */
    bpdt2DPlaneBiplanar = 2,
    /// \brief Single color plane of a planar (2D) image (GenTL).
    /**
     * The data should be linked with the other color planes to get the complete image. The complete image consists of 3 planes.
     * The planes of a given planar image must be placed as consecutive parts within the buffer.
     */
    bpdt2DPlaneTriplanar = 3,
    /// \brief Single color plane of a planar (2D) image (GenTL).
    /**
     * The data should be linked with the other color planes to get the complete image. The complete image consists of 4 planes.
     * The planes of a given planar image must be placed as consecutive parts within the buffer.
     */
    bpdt2DPlaneQuadplanar = 4,
    /// \brief 3D image (pixel coordinates) (GenTL).
    /**
     * This part carries all the pixel data of given image (even if the image is represented by a single-plane pixel format, for example when transferring the depth map only).
     */
    bpdt3DImage = 5,
    /// \brief Single color plane of a planar (3D) image (GenTL).
    /**
     * The data should be linked with the other color planes to get the complete image. The complete image consists of 2 planes.
     * The planes of a given planar image must be placed as consecutive parts within the buffer.
     */
    bpdt3DPlaneBiplanar = 6,
    /// \brief Single color plane of a planar (3D) image (GenTL).
    /**
     * The data should be linked with the other color planes to get the complete image. The complete image consists of 3 planes.
     * The planes of a given planar image must be placed as consecutive parts within the buffer.
     */
    bpdt3DPlaneTriplanar = 7,
    /// \brief Single color plane of a planar (3D) image (GenTL).
    /**
     * The data should be linked with the other color planes to get the complete image. The complete image consists of 4 planes.
     * The planes of a given planar image must be placed as consecutive parts within the buffer.
     */
    bpdt3DPlaneQuadplanar = 8,
    /// \brief Confidence of the individual pixel values (GenTL).
    /**
     * Expresses the level of validity of given pixel values. Confidence map is always used together with one or more additional
     * image-based parts matching 1:1 dimension-wise. Each value in the confidence map expresses level of validity of the image pixel at
     * matching position.
     */
    bpdtConfidenceMap = 9,
    /// \brief Chunk data (GenTL).
    /**
     * The data in this buffer part contains chunk data which can be decoded according the standard the data originated from.
     *
     * \since 2.50.0
     */
    bpdtGenICamChunkData = 10,
    /// \brief JPEG image data (GenTL).
    bpdtJPEG = 1000,
    /// \brief JPEG 2000 image data (GenTL).
    bpdtJPEG2000,
    /// \brief Chunk data (GenDC).
    /**
     * The data in this buffer part contains chunk data which can be decoded according the standard the data originated from.
     *
     * \since 2.50.0
     */
    bpdtGDC_GenICamChunkData = 0x4000,
    /// \brief GenICam XML data (GenDC).
    /**
     * The data in this buffer part contains a GenICam XML file.
     *
     * \since 2.50.0
     */
    bpdtGDC_GenICamXML = 0x4001,
    /// \brief Color or monochrome (2D) image (GenDC).
    /**
     * This part carries all the pixel data of given image (even if the image is represented by a single-plane pixel format).
     */
    bpdtGDC_2DImage = 0x4200,
    /// \brief JPEG image data (GenDC).
    /**
     * \since 2.50.0
     */
    bpdtGDC_JPEG = 0x4201,
    /// \brief JPEG 2000 image data (GenDC).
    /**
     * \since 2.50.0
     */
    bpdtGDC_JPEG2000 = 0x4202,
    /// \brief A H.264 buffer (GenDC).
    /**
     * The data in this buffer part contains H.264 frame.
     *
     * \since 2.50.0
     */
    bpdtGDC_H264 = 0x4203
};

#if !defined(DOXYGEN_SHOULD_SKIP_THIS) && !defined(WRAP_ANY)
typedef enum TBufferPartDataType TBufferPartDataType;
#endif // #if !defined(DOXYGEN_SHOULD_SKIP_THIS) && !defined(WRAP_ANY)

#if defined(DOXYGEN_CPP_DOCUMENTATION)
} // namespace acquire
} // namespace mvIMPACT
#endif // #if defined(DOXYGEN_CPP_DOCUMENTATION)

#endif // TBufferPartDataTypeH
