Program Listing for File api.h

Return to documentation for file (cwipc_codec/api.h)

#ifndef cwipc_codec_api_h
#define cwipc_codec_api_h
#include <stdint.h>
#include "cwipc_util/api.h"
#ifdef __cplusplus
#include <sstream>
#endif

// For Windows ensure that the symbols are imported from a DLL, unless we're compiling the DLL itself.
#ifndef _CWIPC_CODEC_EXPORT
#ifdef WIN32
#define _CWIPC_CODEC_EXPORT __declspec(dllimport)
#else
#define _CWIPC_CODEC_EXPORT
#endif
#endif

struct cwipc_encoder_params
{
    bool do_inter_frame;
    int gop_size;
    float exp_factor;
    int octree_bits;
    int jpeg_quality;
    int macroblock_size;
    int tilenumber;
    float voxelsize;
    int n_parallel;
};

#define CWIPC_ENCODER_PARAM_VERSION ((uint32_t)0x20220607)
#define CWIPC_ENCODER_PARAM_VERSION_OLD ((uint32_t)0x20190506)

#ifdef __cplusplus

class cwipc_encoder
{
public:
    virtual ~cwipc_encoder() {}

    virtual void free() = 0;

    virtual void feed(cwipc_pointcloud *pc) = 0;

    virtual void close() = 0;

    virtual bool eof() = 0;

    virtual bool available(bool wait) = 0;

    virtual size_t get_encoded_size() = 0;

    virtual bool copy_data(void *buffer, size_t bufferSize) = 0;

     virtual bool at_gop_boundary() = 0;
};

class cwipc_encodergroup
{
public:
    virtual ~cwipc_encodergroup() {}

    virtual void free() = 0;

    virtual void feed(cwipc_pointcloud *pc) = 0;

    virtual void close() = 0;

    virtual cwipc_encoder *addencoder(int version, cwipc_encoder_params* params, char **errorMessage) = 0;
};

class cwipc_decoder : public cwipc_source
{
public:
    virtual ~cwipc_decoder() {}
    virtual void free() = 0;
    virtual bool eof() = 0;
    virtual bool available(bool wait) = 0;
    virtual cwipc_pointcloud *get() = 0;

    virtual void feed(void *buffer, size_t bufferSize) = 0;

    virtual void close() = 0;
};
#else
typedef struct _cwipc_encoder {
    int _dummy;
} cwipc_encoder;

typedef struct _cwipc_encodergroup {
    int _dummy;
} cwipc_encodergroup;

typedef struct _cwipc_decoder {
    cwipc_source source;
} cwipc_decoder;
#endif

#ifdef __cplusplus
extern "C" {
#endif
_CWIPC_CODEC_EXPORT const char *cwipc_get_version_codec();

_CWIPC_CODEC_EXPORT cwipc_encoder* cwipc_new_encoder(int version, cwipc_encoder_params* params, char **errorMessage, uint64_t apiVersion);

_CWIPC_CODEC_EXPORT void cwipc_encoder_free(cwipc_encoder *obj);

_CWIPC_CODEC_EXPORT bool cwipc_encoder_eof(cwipc_encoder *obj);

_CWIPC_CODEC_EXPORT bool cwipc_encoder_available(cwipc_encoder *obj, bool wait);

_CWIPC_CODEC_EXPORT void cwipc_encoder_feed(cwipc_encoder *obj, cwipc_pointcloud* pc);

_CWIPC_CODEC_EXPORT void cwipc_encoder_close(cwipc_encoder *obj);

_CWIPC_CODEC_EXPORT size_t cwipc_encoder_get_encoded_size(cwipc_encoder *obj);

_CWIPC_CODEC_EXPORT bool cwipc_encoder_copy_data(cwipc_encoder *obj, void *buffer, size_t bufferSize);

 _CWIPC_CODEC_EXPORT bool cwipc_encoder_at_gop_boundary(cwipc_encoder *obj);

_CWIPC_CODEC_EXPORT cwipc_encodergroup *cwipc_new_encodergroup(char **errorMessage, uint64_t apiVersion);

_CWIPC_CODEC_EXPORT void cwipc_encodergroup_free(cwipc_encodergroup *obj);


_CWIPC_CODEC_EXPORT cwipc_encoder *cwipc_encodergroup_addencoder(cwipc_encodergroup *obj, int version, cwipc_encoder_params* params, char **errorMessage);

_CWIPC_CODEC_EXPORT void cwipc_encodergroup_feed(cwipc_encodergroup *obj, cwipc_pointcloud* pc);

_CWIPC_CODEC_EXPORT void cwipc_encodergroup_close(cwipc_encodergroup *obj);


_CWIPC_CODEC_EXPORT cwipc_decoder* cwipc_new_decoder(char **errorMessage, uint64_t apiVersion);

/* Methods defined in the cwipc_source superclass, use those */
#define cwipc_decoder_free(obj) cwipc_source_free(obj)
#define cwipc_decoder_available(obj, wait) cwipc_source_available(obj, wait)
#define cwipc_decoder_eof(obj) cwipc_source_eof(obj)
#define cwipc_decoder_get(obj) cwipc_source_get(obj)

_CWIPC_CODEC_EXPORT void cwipc_decoder_feed(cwipc_decoder *obj, void *buffer, size_t bufferSize);

_CWIPC_CODEC_EXPORT void cwipc_decoder_close(cwipc_decoder *obj);


#ifdef __cplusplus
}
#endif
#endif /* cwipc_codec_api_h */