Skip to content

File SpinnakerDefsC.h

File List > include > spinc > SpinnakerDefsC.h

Go to the documentation of this file

//=============================================================================
// Copyright (c) 2026 FLIR Integrated Imaging Solutions, Inc. All Rights Reserved.
//
// This software is the confidential and proprietary information of FLIR
// Integrated Imaging Solutions, Inc. ("Confidential Information"). You
// shall not disclose such Confidential Information and shall use it only in
// accordance with the terms of the license agreement you entered into
// with FLIR Integrated Imaging Solutions, Inc. (FLIR).
//
// FLIR MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
// SOFTWARE, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE, OR NON-INFRINGEMENT. FLIR SHALL NOT BE LIABLE FOR ANY DAMAGES
// SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
// THIS SOFTWARE OR ITS DERIVATIVES.
//=============================================================================

#ifndef FLIR_SPINNAKER_DEFS_C_H
#define FLIR_SPINNAKER_DEFS_C_H

#include "SpinnakerPlatformC.h"
#include <memory.h>

typedef uint8_t bool8_t;
static const bool8_t False = 0;
static const bool8_t True = 1;

typedef void* spinSystem;

typedef void* spinInterfaceList;

typedef void* spinInterface;

typedef void* spinCameraList;

typedef void* spinCamera;

typedef void* spinImage;

typedef void* spinImageList;

typedef void* spinImageProcessor;

typedef void* spinImageStatistics;

typedef void* spinDeviceEventHandler;

typedef void* spinImageEventHandler;

typedef void* spinImageListEventHandler;

typedef void* spinDeviceArrivalEventHandler;

typedef void* spinDeviceRemovalEventHandler;

typedef void* spinInterfaceEventHandler;

typedef void* spinLogEventHandler;

typedef void* spinLogEventData;

typedef void* spinDeviceEventData;

typedef void* spinVideo;

typedef void (*spinDeviceEventFunction)(const spinDeviceEventData hEventData, const char* pEventName, void* pUserData);

typedef void (*spinImageEventFunction)(const spinImage hImage, void* pUserData);

typedef void (*spinImageListEventFunction)(const spinImageList hImage, void* pUserData);

typedef void (*spinArrivalEventFunction)(const spinCamera hCamera, void* pUserData);

typedef void (*spinRemovalEventFunction)(const spinCamera hCamera, void* pUserData);

typedef void (*spinLogEventFunction)(const spinLogEventData hEventData, void* pUserData);

typedef enum _spinError
{
    SPINNAKER_ERR_SUCCESS = 0,

    SPINNAKER_ERR_ERROR = -1001,
    SPINNAKER_ERR_NOT_INITIALIZED = -1002,
    SPINNAKER_ERR_NOT_IMPLEMENTED = -1003,
    SPINNAKER_ERR_RESOURCE_IN_USE = -1004,
    SPINNAKER_ERR_ACCESS_DENIED = -1005,
    SPINNAKER_ERR_INVALID_HANDLE = -1006,
    SPINNAKER_ERR_INVALID_ID = -1007,
    SPINNAKER_ERR_NO_DATA = -1008,
    SPINNAKER_ERR_INVALID_PARAMETER = -1009,
    SPINNAKER_ERR_IO = -1010,
    SPINNAKER_ERR_TIMEOUT = -1011,
    SPINNAKER_ERR_ABORT = -1012,
    SPINNAKER_ERR_INVALID_BUFFER = -1013,
    SPINNAKER_ERR_NOT_AVAILABLE = -1014,
    SPINNAKER_ERR_INVALID_ADDRESS = -1015,
    SPINNAKER_ERR_BUFFER_TOO_SMALL = -1016,
    SPINNAKER_ERR_INVALID_INDEX = -1017,
    SPINNAKER_ERR_PARSING_CHUNK_DATA = -1018,
    SPINNAKER_ERR_INVALID_VALUE = -1019,
    SPINNAKER_ERR_RESOURCE_EXHAUSTED = -1020,
    SPINNAKER_ERR_OUT_OF_MEMORY = -1021,
    SPINNAKER_ERR_BUSY = -1022,
    SPINNAKER_ERR_IP_CONFLICT = -1023,
    SPINNAKER_ERR_INVALID_CAMERA = -1024,

    SPINNAKER_ERR_GENICAM_INVALID_ARGUMENT = -2001,
    SPINNAKER_ERR_GENICAM_OUT_OF_RANGE = -2002,
    SPINNAKER_ERR_GENICAM_PROPERTY = -2003,
    SPINNAKER_ERR_GENICAM_RUN_TIME = -2004,
    SPINNAKER_ERR_GENICAM_LOGICAL = -2005,
    SPINNAKER_ERR_GENICAM_ACCESS = -2006,
    SPINNAKER_ERR_GENICAM_TIMEOUT = -2007,
    SPINNAKER_ERR_GENICAM_DYNAMIC_CAST = -2008,
    SPINNAKER_ERR_GENICAM_GENERIC = -2009,
    SPINNAKER_ERR_GENICAM_BAD_ALLOCATION = -2010,

    SPINNAKER_ERR_IM_CONVERT = -3001,
    SPINNAKER_ERR_IM_COPY = -3002,
    SPINNAKER_ERR_IM_MALLOC = -3003,
    SPINNAKER_ERR_IM_NOT_SUPPORTED = -3004,
    SPINNAKER_ERR_IM_HISTOGRAM_RANGE = -3005,
    SPINNAKER_ERR_IM_HISTOGRAM_MEAN = -3006,
    SPINNAKER_ERR_IM_MIN_MAX = -3007,
    SPINNAKER_ERR_IM_COLOR_CONVERSION = -3008,

    SPINNAKER_ERR_CUSTOM_ID = -10000
} spinError;

typedef enum _spinColorProcessingAlgorithm
{
    SPINNAKER_COLOR_PROCESSING_ALGORITHM_NONE,
    SPINNAKER_COLOR_PROCESSING_ALGORITHM_NEAREST_NEIGHBOR,
    SPINNAKER_COLOR_PROCESSING_ALGORITHM_NEAREST_NEIGHBOR_AVG,
    SPINNAKER_COLOR_PROCESSING_ALGORITHM_BILINEAR,
    SPINNAKER_COLOR_PROCESSING_ALGORITHM_EDGE_SENSING,
    SPINNAKER_COLOR_PROCESSING_ALGORITHM_HQ_LINEAR,
    SPINNAKER_COLOR_PROCESSING_ALGORITHM_IPP,
    SPINNAKER_COLOR_PROCESSING_ALGORITHM_DIRECTIONAL_FILTER,
    SPINNAKER_COLOR_PROCESSING_ALGORITHM_RIGOROUS,
    SPINNAKER_COLOR_PROCESSING_ALGORITHM_WEIGHTED_DIRECTIONAL_FILTER
} spinColorProcessingAlgorithm;

typedef enum _spinStatisticsChannel
{
    SPINNAKER_STATISTICS_CHANNEL_GREY,
    SPINNAKER_STATISTICS_CHANNEL_RED,
    SPINNAKER_STATISTICS_CHANNEL_GREEN,
    SPINNAKER_STATISTICS_CHANNEL_BLUE,
    SPINNAKER_STATISTICS_CHANNEL_HUE,
    SPINNAKER_STATISTICS_CHANNEL_SATURATION,
    SPINNAKER_STATISTICS_CHANNEL_LIGHTNESS,
    SPINNAKER_STATISTICS_CHANNEL_NUM_CHANNELS
} spinStatisticsChannel;

typedef enum _spinImageFileFormat
{
    SPINNAKER_IMAGE_FILE_FORMAT_FROM_FILE_EXT = -1, 
    SPINNAKER_IMAGE_FILE_FORMAT_PGM,                
    SPINNAKER_IMAGE_FILE_FORMAT_PPM,                
    SPINNAKER_IMAGE_FILE_FORMAT_BMP,                
    SPINNAKER_IMAGE_FILE_FORMAT_JPEG,               
    SPINNAKER_IMAGE_FILE_FORMAT_JPEG2000,           
    SPINNAKER_IMAGE_FILE_FORMAT_TIFF,               
    SPINNAKER_IMAGE_FILE_FORMAT_PNG,                
    SPINNAKER_IMAGE_FILE_FORMAT_RAW,                
    SPINNAKER_IMAGE_FILE_FORMAT_FORCE_32BITS = 0x7FFFFFFF
} spinImageFileFormat;

typedef enum _spinTLPixelFormatNamespace
{
    SPINNAKER_TLPIXELFORMAT_NAMESPACE_UNKNOWN = 0,    /* GenTL v1.2 */
    SPINNAKER_TLPIXELFORMAT_NAMESPACE_GEV = 1,        /* GenTL v1.2 */
    SPINNAKER_TLPIXELFORMAT_NAMESPACE_IIDC = 2,       /* GenTL v1.2 */
    SPINNAKER_TLPIXELFORMAT_NAMESPACE_PFNC_16BIT = 3, /* GenTL v1.4 */
    SPINNAKER_TLPIXELFORMAT_NAMESPACE_PFNC_32BIT = 4, /* GenTL v1.4 */

    SPINNAKER_PIXELFORMAT_NAMESPACE_CUSTOM_ID = 1000
} spinTLPixelFormatNamespace;

typedef enum _spinImageStatus
{
    SPINNAKER_IMAGE_STATUS_UNKNOWN_ERROR = -1,   
    SPINNAKER_IMAGE_STATUS_NO_ERROR = 0,         
    SPINNAKER_IMAGE_STATUS_CRC_CHECK_FAILED = 1, 
    SPINNAKER_IMAGE_STATUS_DATA_OVERFLOW = 2,    
    SPINNAKER_IMAGE_STATUS_MISSING_PACKETS =
        3, 
    SPINNAKER_IMAGE_STATUS_LEADER_BUFFER_SIZE_INCONSISTENT =
        4, 
    SPINNAKER_IMAGE_STATUS_TRAILER_BUFFER_SIZE_INCONSISTENT =
        5, 
    SPINNAKER_IMAGE_STATUS_PACKETID_INCONSISTENT =
        6, 
    SPINNAKER_IMAGE_STATUS_MISSING_LEADER =
        7, 
    SPINNAKER_IMAGE_STATUS_MISSING_TRAILER =
        8, 
    SPINNAKER_IMAGE_STATUS_DATA_INCOMPLETE =
        9, 
    SPINNAKER_IMAGE_STATUS_INFO_INCONSISTENT =
        10, 
    SPINNAKER_IMAGE_STATUS_CHUNK_DATA_INVALID = 11,  
    SPINNAKER_IMAGE_STATUS_NO_SYSTEM_RESOURCES = 12, 
    SPINNAKER_IMAGE_STATUS_GENDC_DATA_INVALID =
        13, 
    SPINNAKER_IMAGE_STATUS_GENDC_PART_DATA_INVALID = 14 
} spinImageStatus;

typedef enum _spinLogLevel
{
    SPINNAKER_LOG_LEVEL_OFF = -1,     // Logging is off.
    SPINNAKER_LOG_LEVEL_FATAL = 0,    // Failures that are non-recoverable without user intervention.
    SPINNAKER_LOG_LEVEL_ALERT = 100,  // Not used by Spinnaker.
    SPINNAKER_LOG_LEVEL_CRIT = 200,   // Not used by Spinnaker.
    SPINNAKER_LOG_LEVEL_ERROR = 300,  // Failures that may or may not be recoverable without user
                                      // intervention (use case dependent).
    SPINNAKER_LOG_LEVEL_WARN = 400,   // Failures that are recoverable without user intervention.
    SPINNAKER_LOG_LEVEL_NOTICE = 500, // Events such as camera arrival and removal, initialization
                                      // and deinitialization, starting and stopping image acquisition,
                                      // and feature modification.
    SPINNAKER_LOG_LEVEL_INFO = 600,   // Information about recurring events that are generated regularly
                                      // such as information on individual images.
    SPINNAKER_LOG_LEVEL_DEBUG = 700,  // Information that can be used to troubleshoot the system.
    SPINNAKER_LOG_LEVEL_NOTSET = 800  // Logs everything.
} spinnakerLogLevel;

/* Enumeration of TLType dependent payload types. Introduced in GenTL v1.2 */
typedef enum _spinTLPayloadType
{
    SPINNAKER_TLPAYLOAD_TYPE_UNKNOWN = 0,         /* GenTL v1.2 */
    SPINNAKER_TLPAYLOAD_TYPE_IMAGE = 1,           /* GenTL v1.2 */
    SPINNAKER_TLPAYLOAD_TYPE_RAW_DATA = 2,        /* GenTL v1.2 */
    SPINNAKER_TLPAYLOAD_TYPE_FILE = 3,            /* GenTL v1.2 */
    SPINNAKER_TLPAYLOAD_TYPE_CHUNK_DATA = 4,      /* GenTL v1.2, Deprecated in GenTL 1.5*/
    SPINNAKER_TLPAYLOAD_TYPE_JPEG = 5,            /* GenTL v1.4 */
    SPINNAKER_TLPAYLOAD_TYPE_JPEG2000 = 6,        /* GenTL v1.4 */
    SPINNAKER_TLPAYLOAD_TYPE_H264 = 7,            /* GenTL v1.4 */
    SPINNAKER_TLPAYLOAD_TYPE_CHUNK_ONLY = 8,      /* GenTL v1.4 */
    SPINNAKER_TLPAYLOAD_TYPE_DEVICE_SPECIFIC = 9, /* GenTL v1.4 */
    SPINNAKER_TLPAYLOAD_TYPE_MULTI_PART = 10,     /* GenTL v1.5 */

    SPINNAKER_TLPAYLOAD_TYPE_CUSTOM_ID = 1000, /* Starting value for GenTL Producer custom IDs*/
    SPINNAKER_TLPAYLOAD_TYPE_LOSSLESS_COMPRESSED = SPINNAKER_TLPAYLOAD_TYPE_CUSTOM_ID + 1,
    SPINNAKER_TLPAYLOAD_TYPE_LOSSY_COMPRESSED = SPINNAKER_TLPAYLOAD_TYPE_CUSTOM_ID + 2,
    SPINNAKER_TLPAYLOAD_TYPE_JPEG_LOSSLESS_COMPRESSED = SPINNAKER_TLPAYLOAD_TYPE_CUSTOM_ID + 3
} spinTLPayloadType;

typedef enum _spinTIFFCompressionMethod
{
    SPINNAKER_TIFF_COMPRESS_METHOD_NONE = 1,      // Save without any compression.
    SPINNAKER_TIFF_COMPRESS_METHOD_PACKBITS,      // Save using PACKBITS compression.
    SPINNAKER_TIFF_COMPRESS_METHOD_DEFLATE,       // Save using DEFLATE compression (ZLIB compression).
    SPINNAKER_TIFF_COMPRESS_METHOD_ADOBE_DEFLATE, // Save using ADOBE DEFLATE compression

    // Save using CCITT Group 3 fax encoding. This is only valid for
    // 1-bit images only. Default to LZW for other bit depths.
    //
    SPINNAKER_TIFF_COMPRESS_METHOD_CCITTFAX3,

    // Save using CCITT Group 4 fax encoding. This is only valid for
    // 1-bit images only. Default to LZW for other bit depths.

    SPINNAKER_TIFF_COMPRESS_METHOD_CCITTFAX4,
    SPINNAKER_TIFF_COMPRESS_METHOD_LZW, //< Save using LZW compression.

    //
    // Save using JPEG compression. This is only valid for 8-bit
    // greyscale and 24-bit only. Default to LZW for other bit depths.
    //
    SPINNAKER_TIFF_COMPRESS_METHOD_JPG
} spinTIFFCompressionMethod;

typedef enum _spinActionCommandStatus
{
    SPINNAKER_ACTION_COMMAND_STATUS_OK = 0,

    /* The device is not synchronized to a master clock to be used as time reference. Typically used when scheduled
    action commands cannot be scheduled for a future time since the reference time coming from IEEE 1588 is not
    locked. */
    SPINNAKER_ACTION_COMMAND_STATUS_NO_REF_TIME = 0x8013,

    /* Returned when the scheduled action commands queue is full and the device cannot accept the additional request. */
    SPINNAKER_ACTION_COMMAND_STATUS_OVERFLOW = 0x8015,

    /* The requested scheduled action command was requested at a point in time that is in the past. */
    SPINNAKER_ACTION_COMMAND_STATUS_ACTION_LATE = 0x8016,

    /* Generic Error. Try enabling the Extended Status Code 2.0 bit on gvcp configuration register in order to receive
    more meaningful/detailed acknowledge messages from the device. */
    SPINNAKER_ACTION_COMMAND_STATUS_ERROR = 0x8FFF
} spinActionCommandStatus;

typedef struct _spinPNGOption
{
    bool8_t interlaced;
    unsigned int compressionLevel;
    unsigned int reserved[16];
} spinPNGOption;

typedef struct _spinPPMOption
{
    bool8_t binaryFile;
    unsigned int reserved[16];
} spinPPMOption;

typedef struct _spinPGMOption
{
    bool8_t binaryFile;
    unsigned int reserved[16];
} spinPGMOption;

typedef struct _spinTIFFOption
{
    spinTIFFCompressionMethod compression;
    unsigned int reserved[16];
} spinTIFFOption;

typedef struct _spinJPEGOption
{
    bool8_t progressive;
    unsigned int quality;
    unsigned int reserved[16];
} spinJPEGOption;

typedef struct _spinJPG2Option
{
    unsigned int quality;
    unsigned int reserved[16];
} spinJPG2Option;

typedef struct _spinBMPOption
{
    bool8_t indexedColor_8bit;
    unsigned int reserved[16];
} spinBMPOption;

typedef struct _spinMJPGOption
{
    float frameRate;

    unsigned int quality;

    unsigned int width;

    unsigned int height;

    unsigned int reserved[192];
} spinMJPGOption;

typedef struct _spinH264Option
{
    float frameRate;

    unsigned int width;

    unsigned int height;

    unsigned int bitrate;

    unsigned int reserved[256];

    bool8_t useMP4;

    /* Crf values range from 1 to 51 */
    unsigned int crf;
} spinH264Option;

typedef struct _spinAVIOption
{
    float frameRate;

    unsigned int width;

    unsigned int height;

    unsigned int reserved[192];
} spinAVIOption;

typedef struct _spinLibraryVersion
{
    unsigned int major;

    unsigned int minor;

    unsigned int type;

    unsigned int build;
} spinLibraryVersion;

typedef struct _actionCommandResult
{
    /* IP Address of device that responded to Action Command */
    unsigned int DeviceAddress;

    /* Action Command status return from device */
    spinActionCommandStatus Status;
} actionCommandResult;

#endif // FLIR_SPINNAKER_DEFS_C_H