mirror of
https://github.com/Xaymar/obs-StreamFX
synced 2024-11-11 06:15:05 +00:00
project: Update to new classes
This commit is contained in:
parent
3667426f49
commit
8a31b986ab
6 changed files with 47 additions and 51 deletions
|
@ -376,10 +376,11 @@ void dynamic_mask_instance::enum_all_sources(obs_source_enum_proc_t enum_callbac
|
|||
|
||||
void streamfx::filter::dynamic_mask::dynamic_mask_instance::show()
|
||||
{
|
||||
if (!_input || !obs_source_showing(obs_filter_get_parent(_self)))
|
||||
if (!_input || !_self.showing() || !(_self.get_filter_parent().showing()))
|
||||
return;
|
||||
|
||||
_input_vs = std::make_shared<obs::tools::visible_source>(_input.lock().get());
|
||||
auto input = _input.lock();
|
||||
_input_vs = ::streamfx::obs::source_showing_reference::add_showing_reference(input);
|
||||
}
|
||||
|
||||
void streamfx::filter::dynamic_mask::dynamic_mask_instance::hide()
|
||||
|
@ -389,10 +390,11 @@ void streamfx::filter::dynamic_mask::dynamic_mask_instance::hide()
|
|||
|
||||
void streamfx::filter::dynamic_mask::dynamic_mask_instance::activate()
|
||||
{
|
||||
if (!_input || !obs_source_active(obs_filter_get_parent(_self)))
|
||||
if (!_input || !_self.active() || !(_self.get_filter_parent().active()))
|
||||
return;
|
||||
|
||||
_input_ac = std::make_shared<obs::tools::active_source>(_input.lock().get());
|
||||
auto input = _input.lock();
|
||||
_input_ac = ::streamfx::obs::source_active_reference::add_active_reference(input);
|
||||
}
|
||||
|
||||
void streamfx::filter::dynamic_mask::dynamic_mask_instance::deactivate()
|
||||
|
|
|
@ -23,7 +23,9 @@
|
|||
#include <map>
|
||||
#include "gfx/gfx-source-texture.hpp"
|
||||
#include "obs/gs/gs-effect.hpp"
|
||||
#include "obs/obs-source-active-reference.hpp"
|
||||
#include "obs/obs-source-factory.hpp"
|
||||
#include "obs/obs-source-showing-reference.hpp"
|
||||
#include "obs/obs-source-tracker.hpp"
|
||||
#include "obs/obs-source.hpp"
|
||||
#include "obs/obs-tools.hpp"
|
||||
|
@ -40,12 +42,12 @@ namespace streamfx::filter::dynamic_mask {
|
|||
std::shared_ptr<streamfx::obs::gs::rendertarget> _filter_rt;
|
||||
std::shared_ptr<streamfx::obs::gs::texture> _filter_texture;
|
||||
|
||||
bool _have_input_texture;
|
||||
::streamfx::obs::weak_source _input;
|
||||
std::shared_ptr<streamfx::gfx::source_texture> _input_capture;
|
||||
std::shared_ptr<streamfx::obs::gs::texture> _input_texture;
|
||||
std::shared_ptr<obs::tools::visible_source> _input_vs;
|
||||
std::shared_ptr<obs::tools::active_source> _input_ac;
|
||||
bool _have_input_texture;
|
||||
::streamfx::obs::weak_source _input;
|
||||
std::shared_ptr<streamfx::gfx::source_texture> _input_capture;
|
||||
std::shared_ptr<streamfx::obs::gs::texture> _input_texture;
|
||||
std::shared_ptr<::streamfx::obs::source_showing_reference> _input_vs;
|
||||
std::shared_ptr<::streamfx::obs::source_active_reference> _input_ac;
|
||||
|
||||
bool _have_final_texture;
|
||||
std::shared_ptr<streamfx::obs::gs::rendertarget> _final_rt;
|
||||
|
|
|
@ -283,7 +283,7 @@ void streamfx::gfx::shader::texture_parameter::assign()
|
|||
// Reload or Reacquire everything necessary.
|
||||
try {
|
||||
// Remove now unused references.
|
||||
_source.reset();
|
||||
_source.release();
|
||||
_source_child.reset();
|
||||
_source_active.reset();
|
||||
_source_visible.reset();
|
||||
|
@ -298,23 +298,22 @@ void streamfx::gfx::shader::texture_parameter::assign()
|
|||
}
|
||||
} else if ((field_type() == texture_field_type::Input) && (_type == texture_type::Source)) {
|
||||
// Try and grab the source itself.
|
||||
auto source = std::shared_ptr<obs_source_t>(obs_get_source_by_name(_source_name.c_str()),
|
||||
[](obs_source_t* v) { obs_source_release(v); });
|
||||
auto source = ::streamfx::obs::source(_source_name);
|
||||
if (!source) {
|
||||
throw std::runtime_error("Specified Source does not exist.");
|
||||
}
|
||||
|
||||
// Attach the child to our parent.
|
||||
auto child = std::make_shared<streamfx::obs::tools::child_source>(get_parent()->get(), source);
|
||||
auto child = std::make_shared<::streamfx::obs::source_active_child>(source, get_parent()->get());
|
||||
|
||||
// Create necessary visible and active objects.
|
||||
std::shared_ptr<streamfx::obs::tools::active_source> active;
|
||||
std::shared_ptr<streamfx::obs::tools::visible_source> visible;
|
||||
decltype(_source_active) active;
|
||||
decltype(_source_visible) visible;
|
||||
if (_active) {
|
||||
active = std::make_shared<streamfx::obs::tools::active_source>(source.get());
|
||||
active = ::streamfx::obs::source_active_reference::add_active_reference(source);
|
||||
}
|
||||
if (_visible) {
|
||||
visible = std::make_shared<streamfx::obs::tools::visible_source>(source.get());
|
||||
visible = ::streamfx::obs::source_showing_reference::add_showing_reference(source);
|
||||
}
|
||||
|
||||
// Create the necessary render target to capture the source.
|
||||
|
@ -391,7 +390,7 @@ void streamfx::gfx::shader::texture_parameter::visible(bool visible)
|
|||
_visible = visible;
|
||||
if (visible) {
|
||||
if (_source) {
|
||||
_source_visible = std::make_shared<streamfx::obs::tools::visible_source>(_source.get());
|
||||
_source_visible = ::streamfx::obs::source_showing_reference::add_showing_reference(_source);
|
||||
}
|
||||
} else {
|
||||
_source_visible.reset();
|
||||
|
@ -403,7 +402,7 @@ void streamfx::gfx::shader::texture_parameter::active(bool active)
|
|||
_active = active;
|
||||
if (active) {
|
||||
if (_source) {
|
||||
_source_active = std::make_shared<streamfx::obs::tools::active_source>(_source.get());
|
||||
_source_active = ::streamfx::obs::source_active_reference::add_active_reference(_source);
|
||||
}
|
||||
} else {
|
||||
_source_active.reset();
|
||||
|
|
|
@ -6,6 +6,10 @@
|
|||
#include "gfx-shader-param.hpp"
|
||||
#include "obs/gs/gs-rendertarget.hpp"
|
||||
#include "obs/gs/gs-texture.hpp"
|
||||
#include "obs/obs-source-active-child.hpp"
|
||||
#include "obs/obs-source-active-reference.hpp"
|
||||
#include "obs/obs-source-showing-reference.hpp"
|
||||
#include "obs/obs-source.hpp"
|
||||
#include "obs/obs-tools.hpp"
|
||||
|
||||
namespace streamfx::gfx {
|
||||
|
@ -54,12 +58,12 @@ namespace streamfx::gfx {
|
|||
std::shared_ptr<streamfx::obs::gs::texture> _file_texture;
|
||||
|
||||
// Data: Source
|
||||
std::string _source_name;
|
||||
std::shared_ptr<obs_source_t> _source;
|
||||
std::shared_ptr<streamfx::obs::tools::child_source> _source_child;
|
||||
std::shared_ptr<streamfx::obs::tools::active_source> _source_active;
|
||||
std::shared_ptr<streamfx::obs::tools::visible_source> _source_visible;
|
||||
std::shared_ptr<streamfx::obs::gs::rendertarget> _source_rendertarget;
|
||||
std::string _source_name;
|
||||
::streamfx::obs::source _source;
|
||||
std::shared_ptr<streamfx::obs::source_active_child> _source_child;
|
||||
std::shared_ptr<streamfx::obs::source_active_reference> _source_active;
|
||||
std::shared_ptr<streamfx::obs::source_showing_reference> _source_visible;
|
||||
std::shared_ptr<streamfx::obs::gs::rendertarget> _source_rendertarget;
|
||||
|
||||
public:
|
||||
texture_parameter(streamfx::gfx::shader::shader* parent, streamfx::obs::gs::effect_parameter param,
|
||||
|
|
|
@ -188,22 +188,16 @@ try {
|
|||
release();
|
||||
|
||||
// Find source by name if possible.
|
||||
std::shared_ptr<obs_source_t> source =
|
||||
std::shared_ptr<obs_source_t>{obs_get_source_by_name(source_name.c_str()), obs::obs_source_deleter};
|
||||
if ((!source) || (source.get() == _self)) { // If we failed, just exit early.
|
||||
decltype(_source) source{source_name};
|
||||
if ((!source) || (source == _self)) { // If we failed, just exit early.
|
||||
return;
|
||||
}
|
||||
|
||||
// Everything went well, store.
|
||||
_source_child = std::make_shared<obs::tools::child_source>(_self, source);
|
||||
_source_child = std::make_shared<::streamfx::obs::source_active_child>(_self, source);
|
||||
_source = source;
|
||||
_source_size.first = obs_source_get_width(_source.get());
|
||||
_source_size.second = obs_source_get_height(_source.get());
|
||||
|
||||
// Listen to the rename event to update our own settings.
|
||||
_signal_rename = std::make_shared<obs::source_signal_handler>("rename", _source);
|
||||
_signal_rename->event.add(
|
||||
std::bind(&mirror_instance::on_rename, this, std::placeholders::_1, std::placeholders::_2));
|
||||
_source_size.first = obs_source_get_width(_source);
|
||||
_source_size.second = obs_source_get_height(_source);
|
||||
|
||||
// Listen to any audio the source spews out.
|
||||
if (_audio_enabled) {
|
||||
|
@ -220,15 +214,10 @@ void mirror_instance::release()
|
|||
_signal_audio.reset();
|
||||
_signal_rename.reset();
|
||||
_source_child.reset();
|
||||
_source.reset();
|
||||
_source.release();
|
||||
}
|
||||
|
||||
void mirror_instance::on_rename(std::shared_ptr<obs_source_t>, calldata*)
|
||||
{
|
||||
obs_source_save(_self);
|
||||
}
|
||||
|
||||
void mirror_instance::on_audio(std::shared_ptr<obs_source_t>, const audio_data* audio, bool)
|
||||
void mirror_instance::on_audio(::streamfx::obs::source, const audio_data* audio, bool)
|
||||
{
|
||||
// Immediately quit if there isn't any actual audio to send out.
|
||||
if (!_audio_enabled) {
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#include "obs/gs/gs-rendertarget.hpp"
|
||||
#include "obs/gs/gs-sampler.hpp"
|
||||
#include "obs/obs-signal-handler.hpp"
|
||||
#include "obs/obs-source-active-child.hpp"
|
||||
#include "obs/obs-source-factory.hpp"
|
||||
#include "obs/obs-source.hpp"
|
||||
#include "obs/obs-tools.hpp"
|
||||
|
@ -42,11 +43,11 @@ namespace streamfx::source::mirror {
|
|||
|
||||
class mirror_instance : public obs::source_instance {
|
||||
// Source
|
||||
std::shared_ptr<obs_source_t> _source;
|
||||
std::shared_ptr<obs::tools::child_source> _source_child;
|
||||
std::shared_ptr<obs::source_signal_handler> _signal_rename;
|
||||
std::shared_ptr<obs::audio_signal_handler> _signal_audio;
|
||||
std::pair<uint32_t, uint32_t> _source_size;
|
||||
::streamfx::obs::source _source;
|
||||
std::shared_ptr<::streamfx::obs::source_active_child> _source_child;
|
||||
std::shared_ptr<obs::source_signal_handler> _signal_rename;
|
||||
std::shared_ptr<obs::audio_signal_handler> _signal_audio;
|
||||
std::pair<uint32_t, uint32_t> _source_size;
|
||||
|
||||
// Audio
|
||||
bool _audio_enabled;
|
||||
|
@ -76,8 +77,7 @@ namespace streamfx::source::mirror {
|
|||
void acquire(std::string source_name);
|
||||
void release();
|
||||
|
||||
void on_rename(std::shared_ptr<obs_source_t>, calldata*);
|
||||
void on_audio(std::shared_ptr<obs_source_t>, const struct audio_data*, bool);
|
||||
void on_audio(::streamfx::obs::source, const struct audio_data*, bool);
|
||||
|
||||
void audio_output(std::shared_ptr<void> data);
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue