161 lines
3.5 KiB
C
161 lines
3.5 KiB
C
#ifndef _BAMBU__TUNNEL_H_
|
|
#define _BAMBU__TUNNEL_H_
|
|
|
|
#ifdef BAMBU_DYNAMIC
|
|
# define BAMBU_EXPORT
|
|
# define BAMBU_FUNC(x) (*x)
|
|
#else
|
|
# ifdef _WIN32
|
|
# ifdef BAMBU_EXPORTS
|
|
# define BAMBU_EXPORT __declspec(dllexport)
|
|
# else
|
|
# define BAMBU_EXPORT __declspec(dllimport)
|
|
# endif // BAMBU_EXPORTS
|
|
# else
|
|
# define BAMBU_EXPORT
|
|
# endif // __WIN32__
|
|
# define BAMBU_FUNC(x) x
|
|
#endif // BAMBU_DYNAMIC
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#else
|
|
#include <stdbool.h>
|
|
#endif // __cplusplus
|
|
|
|
#ifdef _WIN32
|
|
#ifdef __cplusplus
|
|
typedef wchar_t tchar;
|
|
#else
|
|
typedef unsigned short tchar;
|
|
#endif
|
|
#else
|
|
typedef char tchar;
|
|
#endif
|
|
|
|
typedef void* Bambu_Tunnel;
|
|
|
|
typedef void (*Logger)(void * context, int level, tchar const* msg);
|
|
|
|
typedef enum __Bambu_StreamType
|
|
{
|
|
VIDE,
|
|
AUDI
|
|
} Bambu_StreamType;
|
|
|
|
typedef enum __Bambu_VideoSubType
|
|
{
|
|
AVC1,
|
|
MJPG,
|
|
} Bambu_VideoSubType;
|
|
|
|
typedef enum __Bambu_AudioSubType
|
|
{
|
|
MP4A
|
|
} Bambu_AudioSubType;
|
|
|
|
typedef enum __Bambu_FormatType
|
|
{
|
|
video_avc_packet,
|
|
video_avc_byte_stream,
|
|
video_jpeg,
|
|
audio_raw,
|
|
audio_adts
|
|
} Bambu_FormatType;
|
|
|
|
typedef struct __Bambu_StreamInfo
|
|
{
|
|
Bambu_StreamType type;
|
|
int sub_type;
|
|
union {
|
|
struct
|
|
{
|
|
int width;
|
|
int height;
|
|
int frame_rate;
|
|
} video;
|
|
struct
|
|
{
|
|
int sample_rate;
|
|
int channel_count;
|
|
int sample_size;
|
|
} audio;
|
|
} format;
|
|
int format_type;
|
|
int format_size;
|
|
int max_frame_size;
|
|
unsigned char const * format_buffer;
|
|
} Bambu_StreamInfo;
|
|
|
|
typedef enum __Bambu_SampleFlag
|
|
{
|
|
f_sync = 1
|
|
} Bambu_SampleFlag;
|
|
|
|
typedef struct __Bambu_Sample
|
|
{
|
|
int itrack;
|
|
int size;
|
|
int flags;
|
|
unsigned char const * buffer;
|
|
unsigned long long decode_time;
|
|
} Bambu_Sample;
|
|
|
|
typedef enum __Bambu_Error
|
|
{
|
|
Bambu_success,
|
|
Bambu_stream_end,
|
|
Bambu_would_block,
|
|
Bambu_buffer_limit
|
|
} Bambu_Error;
|
|
|
|
#ifdef BAMBU_DYNAMIC
|
|
typedef struct __BambuLib {
|
|
#endif
|
|
|
|
BAMBU_EXPORT int BAMBU_FUNC(Bambu_Create)(Bambu_Tunnel* tunnel, char const* path);
|
|
|
|
BAMBU_EXPORT void BAMBU_FUNC(Bambu_SetLogger)(Bambu_Tunnel tunnel, Logger logger, void * context);
|
|
|
|
BAMBU_EXPORT int BAMBU_FUNC(Bambu_Open)(Bambu_Tunnel tunnel);
|
|
|
|
BAMBU_EXPORT int BAMBU_FUNC(Bambu_StartStream)(Bambu_Tunnel tunnel, bool video);
|
|
|
|
BAMBU_EXPORT int BAMBU_FUNC(Bambu_StartStreamEx)(Bambu_Tunnel tunnel, int type);
|
|
|
|
BAMBU_EXPORT int BAMBU_FUNC(Bambu_GetStreamCount)(Bambu_Tunnel tunnel);
|
|
|
|
BAMBU_EXPORT int BAMBU_FUNC(Bambu_GetStreamInfo)(Bambu_Tunnel tunnel, int index, Bambu_StreamInfo* info);
|
|
|
|
BAMBU_EXPORT unsigned long BAMBU_FUNC(Bambu_GetDuration)(Bambu_Tunnel tunnel);
|
|
|
|
BAMBU_EXPORT int BAMBU_FUNC(Bambu_Seek)(Bambu_Tunnel tunnel, unsigned long time);
|
|
|
|
BAMBU_EXPORT int BAMBU_FUNC(Bambu_ReadSample)(Bambu_Tunnel tunnel, Bambu_Sample* sample);
|
|
|
|
BAMBU_EXPORT int BAMBU_FUNC(Bambu_SendMessage)(Bambu_Tunnel tunnel, int ctrl, char const* data, int len);
|
|
|
|
BAMBU_EXPORT int BAMBU_FUNC(Bambu_RecvMessage)(Bambu_Tunnel tunnel, int* ctrl, char* data, int* len);
|
|
|
|
BAMBU_EXPORT void BAMBU_FUNC(Bambu_Close)(Bambu_Tunnel tunnel);
|
|
|
|
BAMBU_EXPORT void BAMBU_FUNC(Bambu_Destroy)(Bambu_Tunnel tunnel);
|
|
|
|
BAMBU_EXPORT int BAMBU_FUNC(Bambu_Init)();
|
|
|
|
BAMBU_EXPORT void BAMBU_FUNC(Bambu_Deinit)();
|
|
|
|
BAMBU_EXPORT char const* BAMBU_FUNC(Bambu_GetLastErrorMsg)();
|
|
|
|
BAMBU_EXPORT void BAMBU_FUNC(Bambu_FreeLogMsg)(tchar const* msg);
|
|
|
|
#ifdef BAMBU_DYNAMIC
|
|
} BambuLib;
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif // __cplusplus
|
|
|
|
#endif // _BAMBU__TUNNEL_H_
|