#ifndef _NODE_H #define _NODE_H #include #include #include"defs.h" #include"bs.h" #include #ifdef __cplusplus extern "C" { #endif #define CUTIHI_T(a, b) ((((uint64_t) htonl(b)) << 32) | htonl(a)) typedef size_t(*CHiSaveWriter)(void *ud, const void *data, size_t len); typedef enum { CUTIHI_VAL_NONE = 0, CUTIHI_VAL_LINKED = 1, CUTIHI_VAL_KEYED = 2, CUTIHI_VAL_SAMPLE = 3, CUTIHI_VAL_TEXT = 4, CUTIHI_VAL_VEC4 = 5, CUTIHI_VAL_WEAK_PTR = 6, CUTIHI_VAL_VP9BS = 666, CUTIHI_VAL_VP8BS = 667, CUTIHI_VAL_OPUSBS = 668, } CHiValType; struct CHiImage; struct CHiPubNode; struct CHiKeyframes; typedef union { struct { struct CHiPubNode *to; uint8_t idx; } linked; struct CHiImage *sample; char *text; float vec4[4]; CHiBSFrames *bitstream; struct CHiKeyframes* keyed; uintptr_t weakptr; } CHiValueRaw; typedef struct { CHiValType type; CHiValueRaw data; } CHiValue; typedef struct CHiPubNode { uint64_t type; uint32_t flags; #define CUTIHI_PERFORM_UPDATED 1 #define CUTIHI_PERFORM_NOTUPDATED 0 int (*Perform)(struct CHiPubNode *node); int (*Start)(struct CHiPubNode *node); int (*Stop)(struct CHiPubNode *node); char clean; int (*Save)(struct CHiPubNode *node, void *ud, CHiSaveWriter writer); size_t sinkCount; CHiValue *sinks; size_t sourceCount; CHiValue *sources; struct CHiNodeGraph *ng; char _dfsmark; } CHiPubNode; typedef enum { CUTIHI_COMP_READY, CUTIHI_COMP_RUNNING, CUTIHI_COMP_KILL_YOURSELF } CHiCompilationStatus; typedef CHiPubNode *CHiAdjacency[2]; typedef enum { CUTIHI_EXTRAPOLATION_NONE = 0, CUTIHI_EXTRAPOLATION_CONSTANT = 1 } CHiExtrapolationMode; typedef struct CHiKeyframes { CHiValType type; size_t count; float *times; CHiValueRaw *values; CHiValue current; CHiPubNode *node; CHiExtrapolationMode extrapolationMode; float extrapolationParameter[4]; } CHiKeyframes; typedef struct CHiKeyframesList { size_t count; CHiKeyframes **keyframes; } CHiKeyframesList; typedef struct CHiNodeGraph { size_t capacity; size_t count; CHiPubNode **nodes; float duration; void *ud; void(*eventOnStopComplete)(struct CHiNodeGraph*); void(*eventOnFrameComplete)(struct CHiNodeGraph*); CHiCompilationStatus compilationStatus; size_t adjacencyCount, adjacencyCapacity; CHiAdjacency *adjacencies; CHiKeyframesList keyframesList; float time; float timedelta; } CHiNodeGraph; CUTIVIS CHiNodeGraph *CHi_NewNodeGraph(); CUTIVIS int CHi_NodeGraphSave(CHiNodeGraph *ng, CHiSaveWriter writer, void *ud); CUTIVIS void CHi_RegisterNode(CHiNodeGraph*, CHiPubNode*); CUTIVIS void CHi_MakeDirty(CHiNodeGraph*, CHiPubNode*); CUTIVIS int CHi_ConfigureSink(CHiPubNode*, size_t, CHiValue); CUTIVIS void CHi_MakeKeyframe(CHiNodeGraph *ng, CHiPubNode *n, size_t idx); CUTIVIS size_t CHi_MoveKeyframe(CHiNodeGraph *ng, CHiKeyframes *kfs, size_t idx, float to); CUTIVIS size_t CHi_MoveKeyframeBy(CHiNodeGraph *ng, CHiKeyframes *kfs, size_t idx, float dt); CUTIVIS size_t CHi_GetClosestKeyframe(CHiNodeGraph *ng, size_t kfsIdx, float t); CUTIVIS void CHi_SetExtrapolationMode(CHiNodeGraph *ng, CHiPubNode *n, size_t sinkIdx, CHiExtrapolationMode mode, float* params); CUTIVIS void CHi_DeleteKeyframe(CHiNodeGraph *ng, CHiKeyframes *kfs, size_t idx); CUTIVIS int CHi_Hysteresis(CHiPubNode*); CUTIVIS void CHi_SetDuration(CHiNodeGraph *ng, float); CUTIVIS void CHi_BeginCompilation(CHiNodeGraph *ng); CUTIVIS void CHi_StopCompilation(CHiNodeGraph *ng); #define CUTIHI_NODE_IMAGE 0 #define CUTIHI_IMAGE_IN_FILE 0 #define CUTIHI_IMAGE_OUT_SAMPLE 1 CUTIVIS CHiPubNode *CHi_Image(); #define CUTIHI_NODE_EMBED 1 #define CUTIHI_EMBED_OUT_MAIN 0 #define CUTIHI_EMBED_MAX_SMALLS 3 CUTIVIS CHiPubNode *CHi_Embed(); #define CUTIHI_NODE_CONSTANTSAMPLE 2 #define CUTIHI_CONSTANTSAMPLE_IN_COLOR 0 #define CUTIHI_CONSTANTSAMPLE_OUT_SAMPLE 1 CUTIVIS CHiPubNode *CHi_ConstantSample(); #define CUTIHI_NODE_MODULATE 3 #define CUTIHI_MODULATE_IN_SAMPLE 0 #define CUTIHI_MODULATE_BRIGHTNESS 1 #define CUTIHI_MODULATE_CONTAST 2 #define CUTIHI_MODULATE_HUE 3 #define CUTIHI_MODULATE_OUT_SAMPLE 4 CUTIVIS CHiPubNode *CHi_Modulate(); #define CUTIHI_NODE_MOVIE 4 #define CUTIHI_MOVIE_IN_FILE 0 #define CUTIHI_MOVIE_IN_TIME 1 #define CUTIHI_MOVIE_IN_DELAY 2 #define CUTIHI_MOVIE_OUT_SAMPLE 2 CUTIVIS CHiPubNode *CHi_Movie(); #define CUTIHI_NODE_TIME 5 #define CUTIHI_TIME_OUT 0 CUTIVIS void CHi_Time_Set(CHiNodeGraph *ng, float); CUTIVIS float CHi_Time_Get(CHiNodeGraph *ng); CUTIVIS float CHi_Time_GetDelta(CHiNodeGraph *ng); CUTIVIS CHiPubNode *CHi_Time(); #define CUTIHI_NODE_ENCODEVP9 6 #define CUTIHI_ENCODEVP9_IN_SAMPLE 0 #define CUTIHI_ENCODEVP9_IN_BITRATE 1 #define CUTIHI_ENCODEVP9_IN_BITRATE 1 #define CUTIHI_ENCODEVP9_OUT_BITSTREAM 0 #define CUTIHI_NODE_ENCODEVP8 17 CUTIVIS CHiPubNode *CHi_EncodeVP9(); CUTIVIS CHiPubNode *CHi_EncodeVP8(); CUTIVIS int CHi_EncodeVP9_Start(CHiPubNode*); CUTIVIS int CHi_EncodeVP9_Stop(CHiPubNode*); #define CUTIHI_NODE_MUXWEBM 7 #define CUTIHI_MUXWEBM_IN_BITSTREAM 0 #define CUTIHI_MUXWEBM_IN_AUDIOBITSTREAM 1 #define CUTIHI_MUXWEBM_IN_FILENAME 2 CUTIVIS CHiPubNode *CHi_MuxWebm(); CUTIVIS int CHi_MuxWebm_Start(CHiPubNode*); CUTIVIS int CHi_MuxWebm_Stop(CHiPubNode*); #define CUTIHI_NODE_WINDOW 8 #define CUTIHI_WINDOW_IN_WINDOWNAME 0 #define CUTIHI_WINDOW_OUT_SAMPLE 1 CUTIVIS CHiPubNode *CHi_Window(); CUTIVIS size_t CHi_Window_GetSourceCount(); CUTIVIS const char *CHi_Window_GetSourceName(size_t); CUTIVIS uintptr_t CHi_Window_GetSourceData(size_t); CUTIVIS size_t CHi_Window_GetNextSource(size_t); #define CUTIHI_NODE_MICROPHONE 9 #define CUTIHI_MICROPHONE_IN_NAME 0 #define CUTIHI_MICROPHONE_OUT_AUDIO 1 CUTIVIS CHiPubNode *CHi_Microphone(); #define CUTIHI_NODE_TEXT 10 #define CUTIHI_TEXT_IN_TEXT 0 #define CUTIHI_TEXT_OUT_SAMPLE 0 CUTIVIS CHiPubNode *CHi_Text(); #define CUTIHI_NODE_EXPORTWAV 11 CUTIVIS CHiPubNode *CHi_ExportWav(); CUTIVIS int CHi_ExportWav_Start(CHiPubNode*); CUTIVIS int CHi_ExportWav_Stop(CHiPubNode*); #define CUTIHI_NODE_ENCODEOPUS 12 CUTIVIS CHiPubNode *CHi_EncodeOpus(); CUTIVIS int CHi_EncodeOpus_Start(CHiPubNode*); CUTIVIS int CHi_EncodeOpus_Stop(CHiPubNode*); #define CUTIHI_NODE_CAMERA 13 CUTIVIS CHiPubNode *CHi_Camera(); #define CUTIHI_NODE_PREVIEW 14 CUTIVIS CHiPubNode *CHi_Preview(); #define CUTIHI_NODE_COMPONENT_SCALE 15 CUTIVIS CHiPubNode *CHi_ComponentScale(); #define CUTIHI_NODE_KEYHOOK 16 CUTIVIS CHiPubNode *CHi_Keyhook(); #define CUTIHI_NODE_MIXER 18 CUTIVIS CHiPubNode *CHi_Mixer(); CUTIVIS CHiValue *CHi_Crawl(CHiValue*); CUTIVIS void CHi_Save(CHiNodeGraph *ng); #ifdef __cplusplus } #endif #endif