events: new events WIP

This commit is contained in:
Stéphane Lepin 2019-04-18 19:41:27 +02:00 committed by Stéphane L
parent d10915c7a8
commit ed9e4ff168
2 changed files with 159 additions and 9 deletions

View File

@ -77,6 +77,12 @@ template <typename T> T* calldata_get_pointer(const calldata_t* data, const char
return reinterpret_cast<T*>(ptr);
}
const char* calldata_get_string(const calldata_t* data, const char* name) {
const char* value = nullptr;
calldata_get_string(data, name, &value);
return value;
}
WSEventsPtr WSEvents::_instance = WSEventsPtr(nullptr);
WSEventsPtr WSEvents::Current() {
@ -770,17 +776,17 @@ void WSEvents::OnSourceCreate(void* param, calldata_t* data) {
obs_source_type sourceType = obs_source_get_type(source);
signal_handler_t* sh = obs_source_get_signal_handler(source);
// TODO "mute" signal
// TODO "volume" signal
// TODO "audio_sync" signal
// TODO "audio_mixers" signal
signal_handler_connect(sh, "rename", OnSourceRename, self);
signal_handler_connect(sh, "update_properties", OnSourcePropertiesChanged, self);
// TODO "rename" signal
// TODO "update_properties"
signal_handler_connect(sh, "mute", OnSourceMuteStateChange, self);
signal_handler_connect(sh, "volume", OnSourceVolumeChange, self);
signal_handler_connect(sh, "audio_sync", OnSourceAudioSyncOffsetChanged, self);
signal_handler_connect(sh, "audio_mixers", OnSourceAudioMixersChanged, self);
// TODO "filter_add" signal
// TODO "filter_remove" signal
// TODO "reorder_filters" signal
signal_handler_connect(sh, "filter_add", OnSourceFilterAdded, self);
signal_handler_connect(sh, "filter_remove", OnSourceFilterRemoved, self);
signal_handler_connect(sh, "reorder_filters", OnSourceFilterOrderChanged, self);
if (sourceType == OBS_SOURCE_TYPE_SCENE) {
signal_handler_connect(sh, "reorder", OnSceneReordered, self);
@ -830,6 +836,138 @@ void WSEvents::OnSourceDestroy(void* param, calldata_t* data) {
self->broadcastUpdate("SourceDestroyed", fields);
}
void WSEvents::OnSourceVolumeChange(void* param, calldata_t* data) {
auto self = reinterpret_cast<WSEvents*>(param);
OBSSource source = calldata_get_pointer<obs_source_t>(data, "source");
if (!source) {
return;
}
double volume;
if (!calldata_get_float(data, "volume", &volume)) {
return;
}
// TODO
}
void WSEvents::OnSourceMuteStateChange(void* param, calldata_t* data) {
auto self = reinterpret_cast<WSEvents*>(param);
OBSSource source = calldata_get_pointer<obs_source_t>(data, "source");
if (!source) {
return;
}
bool mute;
if (!calldata_get_bool(data, "mute", &mute)) {
return;
}
}
void WSEvents::OnSourceAudioSyncOffsetChanged(void* param, calldata_t* data) {
auto self = reinterpret_cast<WSEvents*>(param);
OBSSource source = calldata_get_pointer<obs_source_t>(data, "source");
if (!source) {
return;
}
long long syncOffset;
if (!calldata_get_int(data, "offset", &syncOffset)) {
return;
}
// TODO
}
void WSEvents::OnSourceAudioMixersChanged(void* param, calldata_t* data) {
auto self = reinterpret_cast<WSEvents*>(param);
OBSSource source = calldata_get_pointer<obs_source_t>(data, "source");
if (!source) {
return;
}
long long audioMixers;
if (!calldata_get_int(data, "mixers", &audioMixers)) {
return;
}
// TODO
}
void WSEvents::OnSourceRename(void* param, calldata_t* data) {
auto self = reinterpret_cast<WSEvents*>(param);
OBSSource source = calldata_get_pointer<obs_source_t>(data, "source");
if (!source) {
return;
}
const char* newName = calldata_get_string(data, "new_name");
if (!newName) {
return;
}
const char* previousName = calldata_get_string(data, "prev_name");
// TODO check?
// TODO
}
void WSEvents::OnSourcePropertiesChanged(void* param, calldata_t* data) {
auto self = reinterpret_cast<WSEvents*>(param);
OBSSource source = calldata_get_pointer<obs_source_t>(data, "source");
if (!source) {
return;
}
// TODO
}
void WSEvents::OnSourceFilterAdded(void* param, calldata_t* data) {
auto self = reinterpret_cast<WSEvents*>(param);
OBSSource source = calldata_get_pointer<obs_source_t>(data, "source");
if (!source) {
return;
}
OBSSource filter = calldata_get_pointer<obs_source_t>(data, "filter");
if (!filter) {
return;
}
// TODO
}
void WSEvents::OnSourceFilterRemoved(void* param, calldata_t* data) {
auto self = reinterpret_cast<WSEvents*>(param);
OBSSource source = calldata_get_pointer<obs_source_t>(data, "source");
if (!source) {
return;
}
obs_source_t* filter = calldata_get_pointer<obs_source_t>(data, "filter");
// TODO
}
void WSEvents::OnSourceFilterOrderChanged(void* param, calldata_t* data) {
auto self = reinterpret_cast<WSEvents*>(param);
OBSSource source = calldata_get_pointer<obs_source_t>(data, "source");
if (!source) {
return;
}
// TODO
}
/**
* Scene items have been reordered.
*

View File

@ -111,6 +111,18 @@ private:
static void OnSourceCreate(void* param, calldata_t* data);
static void OnSourceDestroy(void* param, calldata_t* data);
static void OnSourceVolumeChange(void* param, calldata_t* data);
static void OnSourceMuteStateChange(void* param, calldata_t* data);
static void OnSourceAudioSyncOffsetChanged(void* param, calldata_t* data);
static void OnSourceAudioMixersChanged(void* param, calldata_t* data);
static void OnSourceRename(void* param, calldata_t* data);
static void OnSourcePropertiesChanged(void* param, calldata_t* data);
static void OnSourceFilterAdded(void* param, calldata_t* data);
static void OnSourceFilterRemoved(void* param, calldata_t* data);
static void OnSourceFilterOrderChanged(void* param, calldata_t* data);
static void OnSceneReordered(void* param, calldata_t* data);
static void OnSceneItemAdd(void* param, calldata_t* data);
static void OnSceneItemDelete(void* param, calldata_t* data);