Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 29 additions & 6 deletions obs-studio-client/source/advanced-recording.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include "advanced-recording.hpp"
#include "utility.hpp"
#include "advanced-streaming.hpp"
#include "enhanced-broadcasting-advanced-streaming.hpp"

Napi::FunctionReference osn::AdvancedRecording::constructor;

Expand Down Expand Up @@ -310,22 +311,44 @@ void osn::AdvancedRecording::SetStreaming(const Napi::CallbackInfo &info, const
return;
}

Napi::Object obj = value.As<Napi::Object>();
if (!obj.InstanceOf(osn::AdvancedStreaming::constructor.Value()))
if (!value.IsObject()) {
Napi::TypeError::New(info.Env(), "Object is not a AdvancedStreaming").ThrowAsJavaScriptException();
return;
}

osn::AdvancedStreaming *streaming = Napi::ObjectWrap<osn::AdvancedStreaming>::Unwrap(value.ToObject());
Napi::Object obj = value.As<Napi::Object>();
uint64_t streamingUid = UINT64_MAX;
if (obj.InstanceOf(osn::AdvancedStreaming::constructor.Value())) {
osn::AdvancedStreaming *streaming = Napi::ObjectWrap<osn::AdvancedStreaming>::Unwrap(obj);
if (!streaming) {
Napi::TypeError::New(info.Env(), "Invalid streaming argument").ThrowAsJavaScriptException();
return;
}

streamingUid = streaming->uid;
} else if (obj.InstanceOf(osn::EnhancedBroadcastingAdvancedStreaming::constructor.Value())) {
osn::EnhancedBroadcastingAdvancedStreaming *streaming = Napi::ObjectWrap<osn::EnhancedBroadcastingAdvancedStreaming>::Unwrap(obj);
if (!streaming) {
Napi::TypeError::New(info.Env(), "Invalid streaming argument").ThrowAsJavaScriptException();
return;
}

streamingUid = streaming->uid;
} else {
Napi::TypeError::New(info.Env(), "Object is not a AdvancedStreaming").ThrowAsJavaScriptException();
return;
}

if (!streaming) {
if (streamingUid == UINT64_MAX) {
Napi::TypeError::New(info.Env(), "Invalid streaming argument").ThrowAsJavaScriptException();
return;
}

auto response = conn->call_synchronous_helper(className, "SetStreaming", {ipc::value(this->uid), ipc::value(streaming->uid)});
auto response = conn->call_synchronous_helper(className, "SetStreaming", {ipc::value(this->uid), ipc::value(streamingUid)});
if (!ValidateResponse(info, response))
return;

if (!streamingRef.IsEmpty())
streamingRef.Reset();
streamingRef = Napi::Persistent(obj);
}
}
35 changes: 29 additions & 6 deletions obs-studio-client/source/advanced-replay-buffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
#include "audio-encoder.hpp"
#include "advanced-streaming.hpp"
#include "advanced-recording.hpp"
#include "enhanced-broadcasting-advanced-streaming.hpp"

Napi::FunctionReference osn::AdvancedReplayBuffer::constructor;

Expand Down Expand Up @@ -209,18 +210,40 @@ void osn::AdvancedReplayBuffer::SetStreaming(const Napi::CallbackInfo &info, con
return;
}

Napi::Object obj = value.As<Napi::Object>();
if (!obj.InstanceOf(osn::AdvancedStreaming::constructor.Value()))
if (!value.IsObject()) {
Napi::TypeError::New(info.Env(), "Object is not a valid Streaming").ThrowAsJavaScriptException();
return;
}

osn::AdvancedStreaming *streaming = Napi::ObjectWrap<osn::AdvancedStreaming>::Unwrap(value.ToObject());
Napi::Object obj = value.As<Napi::Object>();
uint64_t streamingUid = UINT64_MAX;
if (obj.InstanceOf(osn::AdvancedStreaming::constructor.Value())) {
osn::AdvancedStreaming *streaming = Napi::ObjectWrap<osn::AdvancedStreaming>::Unwrap(obj);
if (!streaming) {
Napi::TypeError::New(info.Env(), "Invalid streaming argument").ThrowAsJavaScriptException();
return;
}

streamingUid = streaming->uid;
} else if (obj.InstanceOf(osn::EnhancedBroadcastingAdvancedStreaming::constructor.Value())) {
osn::EnhancedBroadcastingAdvancedStreaming *streaming = Napi::ObjectWrap<osn::EnhancedBroadcastingAdvancedStreaming>::Unwrap(obj);
if (!streaming) {
Napi::TypeError::New(info.Env(), "Invalid streaming argument").ThrowAsJavaScriptException();
return;
}

streamingUid = streaming->uid;
} else {
Napi::TypeError::New(info.Env(), "Object is not a valid Streaming").ThrowAsJavaScriptException();
return;
}

if (!streaming) {
if (streamingUid == UINT64_MAX) {
Napi::TypeError::New(info.Env(), "Invalid streaming argument").ThrowAsJavaScriptException();
return;
}

auto response = conn->call_synchronous_helper(className, "SetStreaming", {ipc::value(this->uid), ipc::value(streaming->uid)});
auto response = conn->call_synchronous_helper(className, "SetStreaming", {ipc::value(this->uid), ipc::value(streamingUid)});
if (!ValidateResponse(info, response))
return;

Expand Down Expand Up @@ -272,4 +295,4 @@ void osn::AdvancedReplayBuffer::SetRecording(const Napi::CallbackInfo &info, con
if (!parentOutputRef.IsEmpty())
parentOutputRef.Reset();
parentOutputRef = Napi::Persistent(obj);
}
}
35 changes: 29 additions & 6 deletions obs-studio-client/source/simple-recording.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
#include "reconnect.hpp"
#include "network.hpp"
#include "simple-streaming.hpp"
#include "enhanced-broadcasting-simple-streaming.hpp"

Napi::FunctionReference osn::SimpleRecording::constructor;

Expand Down Expand Up @@ -282,22 +283,44 @@ void osn::SimpleRecording::SetStreaming(const Napi::CallbackInfo &info, const Na
return;
}

Napi::Object obj = value.As<Napi::Object>();
if (!obj.InstanceOf(osn::SimpleStreaming::constructor.Value()))
if (!value.IsObject()) {
Napi::TypeError::New(info.Env(), "Object is not a SimpleStreaming").ThrowAsJavaScriptException();
return;
}

osn::SimpleStreaming *streaming = Napi::ObjectWrap<osn::SimpleStreaming>::Unwrap(value.ToObject());
Napi::Object obj = value.As<Napi::Object>();
uint64_t streamingUid = UINT64_MAX;
if (obj.InstanceOf(osn::SimpleStreaming::constructor.Value())) {
osn::SimpleStreaming *streaming = Napi::ObjectWrap<osn::SimpleStreaming>::Unwrap(obj);
if (!streaming) {
Napi::TypeError::New(info.Env(), "Invalid streaming argument").ThrowAsJavaScriptException();
return;
}

streamingUid = streaming->uid;
} else if (obj.InstanceOf(osn::EnhancedBroadcastingSimpleStreaming::constructor.Value())) {
osn::EnhancedBroadcastingSimpleStreaming *streaming = Napi::ObjectWrap<osn::EnhancedBroadcastingSimpleStreaming>::Unwrap(obj);
if (!streaming) {
Napi::TypeError::New(info.Env(), "Invalid streaming argument").ThrowAsJavaScriptException();
return;
}

streamingUid = streaming->uid;
} else {
Napi::TypeError::New(info.Env(), "Object is not a SimpleStreaming").ThrowAsJavaScriptException();
return;
}

if (!streaming) {
if (streamingUid == UINT64_MAX) {
Napi::TypeError::New(info.Env(), "Invalid streaming argument").ThrowAsJavaScriptException();
return;
}

auto response = conn->call_synchronous_helper(className, "SetStreaming", {ipc::value(this->uid), ipc::value(streaming->uid)});
auto response = conn->call_synchronous_helper(className, "SetStreaming", {ipc::value(this->uid), ipc::value(streamingUid)});
if (!ValidateResponse(info, response))
return;

if (!streamingRef.IsEmpty())
streamingRef.Reset();
streamingRef = Napi::Persistent(obj);
}
}
35 changes: 29 additions & 6 deletions obs-studio-client/source/simple-replay-buffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
#include "audio-encoder.hpp"
#include "simple-streaming.hpp"
#include "simple-recording.hpp"
#include "enhanced-broadcasting-simple-streaming.hpp"

Napi::FunctionReference osn::SimpleReplayBuffer::constructor;

Expand Down Expand Up @@ -184,18 +185,40 @@ void osn::SimpleReplayBuffer::SetStreaming(const Napi::CallbackInfo &info, const
return;
}

Napi::Object obj = value.As<Napi::Object>();
if (!obj.InstanceOf(osn::SimpleStreaming::constructor.Value()))
if (!value.IsObject()) {
Napi::TypeError::New(info.Env(), "Object is not a SimpleStreaming").ThrowAsJavaScriptException();
return;
}

osn::SimpleStreaming *streaming = Napi::ObjectWrap<osn::SimpleStreaming>::Unwrap(value.ToObject());
Napi::Object obj = value.As<Napi::Object>();
uint64_t streamingUid = UINT64_MAX;
if (obj.InstanceOf(osn::SimpleStreaming::constructor.Value())) {
osn::SimpleStreaming *streaming = Napi::ObjectWrap<osn::SimpleStreaming>::Unwrap(obj);
if (!streaming) {
Napi::TypeError::New(info.Env(), "Invalid streaming argument").ThrowAsJavaScriptException();
return;
}

streamingUid = streaming->uid;
} else if (obj.InstanceOf(osn::EnhancedBroadcastingSimpleStreaming::constructor.Value())) {
osn::EnhancedBroadcastingSimpleStreaming *streaming = Napi::ObjectWrap<osn::EnhancedBroadcastingSimpleStreaming>::Unwrap(obj);
if (!streaming) {
Napi::TypeError::New(info.Env(), "Invalid streaming argument").ThrowAsJavaScriptException();
return;
}

streamingUid = streaming->uid;
} else {
Napi::TypeError::New(info.Env(), "Object is not a SimpleStreaming").ThrowAsJavaScriptException();
return;
}

if (!streaming) {
if (streamingUid == UINT64_MAX) {
Napi::TypeError::New(info.Env(), "Invalid streaming argument").ThrowAsJavaScriptException();
return;
}

auto response = conn->call_synchronous_helper(className, "SetStreaming", {ipc::value(this->uid), ipc::value(streaming->uid)});
auto response = conn->call_synchronous_helper(className, "SetStreaming", {ipc::value(this->uid), ipc::value(streamingUid)});
if (!ValidateResponse(info, response))
return;

Expand Down Expand Up @@ -247,4 +270,4 @@ void osn::SimpleReplayBuffer::SetRecording(const Napi::CallbackInfo &info, const
if (!parentOutputRef.IsEmpty())
parentOutputRef.Reset();
parentOutputRef = Napi::Persistent(obj);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,34 @@ describe(testName, () => {
}
});

it('Can be used as the parent stream for advanced recording', function() {
const stream = osn.EnhancedBroadcastingAdvancedStreamingFactory.create();
const recording = osn.AdvancedRecordingFactory.create();

try {
recording.streaming = stream;

expect(recording.streaming).to.equal(stream);
} finally {
osn.AdvancedRecordingFactory.destroy(recording);
osn.EnhancedBroadcastingAdvancedStreamingFactory.destroy(stream);
}
});

it('Can be used as the parent stream for advanced replay buffer', function() {
const stream = osn.EnhancedBroadcastingAdvancedStreamingFactory.create();
const replayBuffer = osn.AdvancedReplayBufferFactory.create();

try {
replayBuffer.streaming = stream;

expect(replayBuffer.streaming).to.equal(stream);
} finally {
osn.AdvancedReplayBufferFactory.destroy(replayBuffer);
osn.EnhancedBroadcastingAdvancedStreamingFactory.destroy(stream);
}
});

it('Enhanced Broadcasting Advanced Streaming Single Canvas', async function() {
if (obs.isDarwin()) {
this.skip();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,34 @@ describe(testName, () => {
hasTestFailed = (await obs.finalizeRetryableTest(this)) || hasTestFailed;
});

it('Can be used as the parent stream for simple recording', function() {
const stream = osn.EnhancedBroadcastingSimpleStreamingFactory.create();
const recording = osn.SimpleRecordingFactory.create();

try {
recording.streaming = stream;

expect(recording.streaming).to.equal(stream);
} finally {
osn.SimpleRecordingFactory.destroy(recording);
osn.EnhancedBroadcastingSimpleStreamingFactory.destroy(stream);
}
});

it('Can be used as the parent stream for simple replay buffer', function() {
const stream = osn.EnhancedBroadcastingSimpleStreamingFactory.create();
const replayBuffer = osn.SimpleReplayBufferFactory.create();

try {
replayBuffer.streaming = stream;

expect(replayBuffer.streaming).to.equal(stream);
} finally {
osn.SimpleReplayBufferFactory.destroy(replayBuffer);
osn.EnhancedBroadcastingSimpleStreamingFactory.destroy(stream);
}
});

it('Enhanced Broadcasting Simple Streaming honors stream delay', async function() {
if (obs.isDarwin()) {
this.skip();
Expand Down
Loading