Skip to content

Commit

Permalink
Add transition table support
Browse files Browse the repository at this point in the history
  • Loading branch information
exeldro committed Oct 4, 2023
1 parent d4d27f7 commit db71004
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 6 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ else()
cmake_minimum_required(VERSION 3.18)
endif()

project(downstream-keyer VERSION 0.2.6)
project(downstream-keyer VERSION 0.2.7)
set(PROJECT_FULL_NAME "Downstream keyer")

# Set new UUIDs when you start to create a new plugin.
Expand Down
2 changes: 1 addition & 1 deletion buildspec.json
Original file line number Diff line number Diff line change
Expand Up @@ -79,5 +79,5 @@
}
},
"name": "downstream-keyer",
"version": "0.2.6"
"version": "0.2.7"
}
2 changes: 1 addition & 1 deletion downstream-keyer-dock.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ void DownstreamKeyerDock::SceneChanged()
{
const int count = tabs->count();
const auto scene = obs_frontend_get_current_scene();
const auto scene_name = obs_source_get_name(scene);
std::string scene_name = scene ? obs_source_get_name(scene) : "";
for (int i = 0; i < count; i++) {
auto w = dynamic_cast<DownstreamKeyer *>(tabs->widget(i));
if (w)
Expand Down
40 changes: 38 additions & 2 deletions downstream-keyer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ DownstreamKeyer::DownstreamKeyer(int channel, QString name,
transition(nullptr),
showTransition(nullptr),
hideTransition(nullptr),
overrideTransition(nullptr),
transitionDuration(300),
showTransitionDuration(300),
hideTransitionDuration(300),
Expand Down Expand Up @@ -171,6 +172,11 @@ DownstreamKeyer::~DownstreamKeyer()
obs_source_release(hideTransition);
hideTransition = nullptr;
}
if (overrideTransition) {
obs_transition_clear(overrideTransition);
obs_source_release(overrideTransition);
overrideTransition = nullptr;
}
const auto sh = obs_get_signal_handler();
signal_handler_disconnect(sh, "source_rename", source_rename, this);
signal_handler_disconnect(sh, "source_remove", source_remove, this);
Expand Down Expand Up @@ -246,8 +252,28 @@ void DownstreamKeyer::apply_source(obs_source_t *const newSource)
} else if (prevSource && !newSource && hideTransition) {
newTransition = hideTransition;
newTransitionDuration = hideTransitionDuration;
} else if (transition) {
newTransition = transition;
} else {
auto ph = obs_get_proc_handler();
calldata_t cd = {0};
calldata_set_string(&cd, "from_scene",
obs_source_get_name(prevSource));
calldata_set_string(&cd, "to_scene",
obs_source_get_name(newSource));
if (proc_handler_call(ph, "get_transition_table_transition",
&cd)) {
const char *p = calldata_string(&cd, "transition");
SetTransition(p ? p : "", transitionType::override);
SetTransitionDuration(calldata_int(&cd, "duration"),
transitionType::override);
} else {
SetTransition("", transitionType::override);
}
calldata_free(&cd);
if (overrideTransition) {
newTransition = overrideTransition;
newTransitionDuration = overrideTransitionDuration;
} else if (transition)
newTransition = transition;
}
if (prevSource == newSource) {
//skip if nothing changed
Expand Down Expand Up @@ -390,6 +416,8 @@ std::string DownstreamKeyer::GetTransition(enum transitionType transition_type)
return obs_source_get_name(showTransition);
if (transition_type == transitionType::hide && hideTransition)
return obs_source_get_name(hideTransition);
if (transition_type == transitionType::override && overrideTransition)
return obs_source_get_name(overrideTransition);
return "";
}

Expand All @@ -401,6 +429,8 @@ void DownstreamKeyer::SetTransition(const char *transition_name,
oldTransition = showTransition;
else if (transition_type == transitionType::hide)
oldTransition = hideTransition;
else if (transition_type == transitionType::override)
oldTransition = overrideTransition;

if (!oldTransition && (!transition_name || !strlen(transition_name)))
return;
Expand Down Expand Up @@ -428,6 +458,8 @@ void DownstreamKeyer::SetTransition(const char *transition_name,
showTransition = newTransition;
else if (transition_type == transitionType::hide)
hideTransition = newTransition;
else if (transition_type == transitionType::override)
overrideTransition = newTransition;
else
transition = newTransition;
obs_source_t *prevSource = obs_get_output_source(outputChannel);
Expand Down Expand Up @@ -465,6 +497,8 @@ void DownstreamKeyer::SetTransitionDuration(int duration,
showTransitionDuration = duration;
else if (transition_type == transitionType::hide)
hideTransitionDuration = duration;
else if (transition_type == transitionType::override)
overrideTransitionDuration = duration;
}

int DownstreamKeyer::GetTransitionDuration(enum transitionType transition_type)
Expand All @@ -473,6 +507,8 @@ int DownstreamKeyer::GetTransitionDuration(enum transitionType transition_type)
return showTransitionDuration;
if (transition_type == transitionType::hide)
return hideTransitionDuration;
if (transition_type == transitionType::override)
return overrideTransitionDuration;
return transitionDuration;
}

Expand Down
4 changes: 3 additions & 1 deletion downstream-keyer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class LockedCheckBox : public QCheckBox {
explicit LockedCheckBox(QWidget *parent);
};

enum transitionType { match, show, hide };
enum transitionType { match, show, hide, override };

class DownstreamKeyer : public QWidget {
Q_OBJECT
Expand All @@ -30,11 +30,13 @@ class DownstreamKeyer : public QWidget {
obs_source_t *transition;
obs_source_t *showTransition;
obs_source_t *hideTransition;
obs_source_t *overrideTransition;
QListWidget *scenesList;
QToolBar *scenesToolbar;
uint32_t transitionDuration;
uint32_t showTransitionDuration;
uint32_t hideTransitionDuration;
uint32_t overrideTransitionDuration;
LockedCheckBox *tie;
obs_hotkey_id null_hotkey_id;
obs_hotkey_pair_id tie_hotkey_id;
Expand Down

0 comments on commit db71004

Please sign in to comment.