forked from fzwoch/obs-golang-plugin
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathplugin.go
143 lines (115 loc) · 3.53 KB
/
plugin.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
package main
// #cgo LDFLAGS: -lobs
// #include <obs/obs-module.h>
//
// typedef const char* (*cb_get_name)(void* type_data);
// const char* get_name_cgo(void* type_data);
//
// typedef void* (*cb_create)(obs_data_t* settings, obs_source_t* source);
// void* create_cgo(obs_data_t* settings, obs_source_t* source);
//
// typedef void (*cb_destroy)(void* data);
// void destroy_cgo(void* data);
//
// typedef obs_properties_t* (*cb_get_properties)(void* data);
// obs_properties_t* get_properties_cgo(void* data);
//
// typedef void (*cb_get_defaults)(obs_data_t* settings);
// void get_defaults_cgo(obs_data_t* settings);
//
// typedef void (*cb_video_render)(void* data, gs_effect_t* effect);
// void video_render_cgo(void* data, gs_effect_t* effect);
//
// typedef uint32_t (*cb_get_width)(void* data);
// uint32_t get_width_cgo(void* data);
//
// typedef uint32_t (*cb_get_height)(void* data);
// uint32_t get_height_cgo(void* data);
//
// typedef void (*cb_update)(void* data, obs_data_t* settings);
// void update_cgo(void* data, obs_data_t* settings);
//
// typedef void (*cb_show)(void* data);
// void show_cgo(void* data);
//
// typedef void (*cb_hide)(void* data);
// void hide_cgo(void* data);
import "C"
import "unsafe"
var obsModulePointer *C.obs_module_t
//export obs_module_set_pointer
func obs_module_set_pointer(module *C.obs_module_t) {
obsModulePointer = module
}
//export obs_current_module
func obs_current_module() *C.obs_module_t {
return obsModulePointer
}
//export obs_module_ver
func obs_module_ver() C.uint32_t {
return C.LIBOBS_API_VER
}
var id = C.CString("obs-golang-plugin")
var name = C.CString("OBS Golang Plugin")
var source = C.struct_obs_source_info{
id: id,
_type: C.OBS_SOURCE_TYPE_INPUT,
output_flags: C.OBS_SOURCE_ASYNC_VIDEO | C.OBS_SOURCE_AUDIO | C.OBS_SOURCE_DO_NOT_DUPLICATE,
get_name: C.cb_get_name(unsafe.Pointer(C.get_name_cgo)),
create: C.cb_create(unsafe.Pointer(C.create_cgo)),
destroy: C.cb_destroy(unsafe.Pointer(C.destroy_cgo)),
get_properties: C.cb_get_properties(unsafe.Pointer(C.get_properties_cgo)),
get_defaults: C.cb_get_defaults(unsafe.Pointer(C.get_defaults_cgo)),
video_render: C.cb_video_render(unsafe.Pointer(C.video_render_cgo)),
get_width: C.cb_get_width(unsafe.Pointer(C.get_width_cgo)),
get_height: C.cb_get_height(unsafe.Pointer(C.get_height_cgo)),
update: C.cb_update(unsafe.Pointer(C.update_cgo)),
show: C.cb_show(unsafe.Pointer(C.show_cgo)),
hide: C.cb_hide(unsafe.Pointer(C.hide_cgo)),
}
//export getName
func getName(typeData unsafe.Pointer) *C.char {
return name
}
//export create
func create(settings *C.obs_data_t, source *C.obs_source_t) unsafe.Pointer {
return C.malloc(1)
}
//export destroy
func destroy(data unsafe.Pointer) {
C.free(data)
}
//export getProperties
func getProperties(data unsafe.Pointer) *C.obs_properties_t {
properties := C.obs_properties_create()
return properties
}
//export getDefaults
func getDefaults(settings *C.obs_data_t) {
}
//export videoRender
func videoRender(data unsafe.Pointer, effect *C.gs_effect_t) {
}
//export getWidth
func getWidth(data unsafe.Pointer) C.uint32_t {
return 0
}
//export getHeight
func getHeight(data unsafe.Pointer) C.uint32_t {
return 0
}
//export update
func update(data unsafe.Pointer, settings *C.obs_data_t) {
}
//export show
func show(data unsafe.Pointer) {
}
//export hide
func hide(data unsafe.Pointer) {
}
//export obs_module_load
func obs_module_load() C.bool {
C.obs_register_source_s(&source, C.sizeof_struct_obs_source_info)
return true
}
func main() {}