Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

libobs, plugins: Remove unnecessary output implementation calls #10652

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
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
6 changes: 6 additions & 0 deletions docs/sphinx/reference-outputs.rst
Original file line number Diff line number Diff line change
Expand Up @@ -912,6 +912,9 @@ Functions used by outputs
:param flags: Reserved. Set this to 0.
:return: *true* if data capture can begin

.. deprecated:: 30.2.0
Usage is no longer necessary.

---------------------

.. function:: bool obs_output_initialize_encoders(obs_output_t *output, int flags)
Expand All @@ -924,6 +927,9 @@ Functions used by outputs
:param flags: Reserved. Set this to 0.
:return: *true* if successful, *false* otherwise

.. deprecated:: 30.2.0
Usage is no longer necessary.

---------------------

.. function:: bool obs_output_begin_data_capture(obs_output_t *output, int flags)
Expand Down
24 changes: 0 additions & 24 deletions libobs/obs-output-delay.c
Original file line number Diff line number Diff line change
Expand Up @@ -137,43 +137,19 @@ void process_delay(void *data, struct encoder_packet *packet)
;
}

void obs_output_signal_delay(obs_output_t *output, const char *signal)
{
struct calldata params;
uint8_t stack[128];

calldata_init_fixed(&params, stack, sizeof(stack));
calldata_set_ptr(&params, "output", output);
calldata_set_int(&params, "sec", output->active_delay_ns / 1000000000);
signal_handler_signal(output->context.signals, signal, &params);
}

bool obs_output_delay_start(obs_output_t *output)
{
struct delay_data dd = {
.msg = DELAY_MSG_START,
.ts = os_gettime_ns(),
};

if (!delay_active(output)) {
bool can_begin = obs_output_can_begin_data_capture(output, 0);
if (!can_begin)
return false;
if (!obs_output_initialize_encoders(output, 0))
return false;
}

pthread_mutex_lock(&output->delay_mutex);
deque_push_back(&output->delay_data, &dd, sizeof(dd));
pthread_mutex_unlock(&output->delay_mutex);

os_atomic_inc_long(&output->delay_restart_refs);

if (delay_active(output)) {
do_output_signal(output, "starting");
return true;
}

if (!obs_output_begin_data_capture(output, 0)) {
obs_output_cleanup_delay(output);
return false;
Expand Down
21 changes: 21 additions & 0 deletions libobs/obs-output.c
Original file line number Diff line number Diff line change
Expand Up @@ -366,6 +366,10 @@ bool obs_output_actual_start(obs_output_t *output)
return success;
}

static bool can_begin_data_capture(const struct obs_output *output);
static inline bool initialize_audio_encoders(obs_output_t *output);
static inline bool initialize_video_encoders(obs_output_t *output);

bool obs_output_start(obs_output_t *output)
{
if (!obs_output_valid(output, "obs_output_start"))
Expand All @@ -378,6 +382,23 @@ bool obs_output_start(obs_output_t *output)
obs_service_initialize(output->service, output)))
return false;

/* this block of logic is likely flawed. please investigate! */
if (!delay_active(output)) {
if (active(output))
return false;
if (data_capture_ending(output))
pthread_join(output->end_data_capture_thread, NULL);
if (!can_begin_data_capture(output))
return false;
}

if (flag_encoded(output)) {
if (flag_audio(output) && !initialize_audio_encoders(output))
return false;
if (flag_video(output) && !initialize_video_encoders(output))
return false;
}

if (output->delay_sec) {
return obs_output_delay_start(output);
} else {
Expand Down
8 changes: 4 additions & 4 deletions libobs/obs.h
Original file line number Diff line number Diff line change
Expand Up @@ -2344,12 +2344,12 @@ obs_output_set_audio_conversion(obs_output_t *output,
const struct audio_convert_info *conversion);

/** Returns whether data capture can begin */
EXPORT bool obs_output_can_begin_data_capture(const obs_output_t *output,
uint32_t flags);
OBS_DEPRECATED EXPORT bool
obs_output_can_begin_data_capture(const obs_output_t *output, uint32_t flags);

/** Initializes encoders (if any) */
EXPORT bool obs_output_initialize_encoders(obs_output_t *output,
uint32_t flags);
OBS_DEPRECATED EXPORT bool obs_output_initialize_encoders(obs_output_t *output,
uint32_t flags);

/**
* Begins data capture from media/encoders.
Expand Down
5 changes: 0 additions & 5 deletions plugins/obs-ffmpeg/obs-ffmpeg-hls-mux.c
Original file line number Diff line number Diff line change
Expand Up @@ -118,11 +118,6 @@ bool ffmpeg_hls_mux_start(void *data)
obs_data_t *settings;
int keyint_sec;

if (!obs_output_can_begin_data_capture(stream->output, 0))
return false;
if (!obs_output_initialize_encoders(stream->output, 0))
return false;

service = obs_output_get_service(stream->output);
if (!service)
return false;
Expand Down
4 changes: 0 additions & 4 deletions plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c
Original file line number Diff line number Diff line change
Expand Up @@ -1050,10 +1050,6 @@ static bool set_config(struct ffmpeg_output *stream)
}
av_dump_format(ff_data->output, 0, NULL, 1);
}
if (!obs_output_can_begin_data_capture(stream->output, 0))
return false;
if (!obs_output_initialize_encoders(stream->output, 0))
return false;

ret = pthread_create(&stream->write_thread, NULL, write_thread, stream);
if (ret != 0) {
Expand Down
10 changes: 0 additions & 10 deletions plugins/obs-ffmpeg/obs-ffmpeg-mux.c
Original file line number Diff line number Diff line change
Expand Up @@ -412,11 +412,6 @@ static inline bool ffmpeg_mux_start_internal(struct ffmpeg_muxer *stream,

update_encoder_settings(stream, path);

if (!obs_output_can_begin_data_capture(stream->output, 0))
return false;
if (!obs_output_initialize_encoders(stream->output, 0))
return false;

if (stream->is_network) {
obs_service_t *service;
service = obs_output_get_service(stream->output);
Expand Down Expand Up @@ -1041,11 +1036,6 @@ static bool replay_buffer_start(void *data)
{
struct ffmpeg_muxer *stream = data;

if (!obs_output_can_begin_data_capture(stream->output, 0))
return false;
if (!obs_output_initialize_encoders(stream->output, 0))
return false;

obs_data_t *s = obs_output_get_settings(stream->output);
stream->max_time = obs_data_get_int(s, "max_time_sec") * 1000000LL;
stream->max_size = obs_data_get_int(s, "max_size_mb") * (1024 * 1024);
Expand Down
3 changes: 0 additions & 3 deletions plugins/obs-ffmpeg/obs-ffmpeg-output.c
Original file line number Diff line number Diff line change
Expand Up @@ -1212,9 +1212,6 @@ static bool try_connect(struct ffmpeg_output *output)

output->active = true;

if (!obs_output_can_begin_data_capture(output->output, 0))
return false;

ret = pthread_create(&output->write_thread, NULL, write_thread, output);
if (ret != 0) {
ffmpeg_log_error(LOG_WARNING, &output->ff_data,
Expand Down
5 changes: 0 additions & 5 deletions plugins/obs-outputs/flv-output.c
Original file line number Diff line number Diff line change
Expand Up @@ -456,11 +456,6 @@ static bool flv_output_start(void *data)
obs_data_t *settings;
const char *path;

if (!obs_output_can_begin_data_capture(stream->output, 0))
return false;
if (!obs_output_initialize_encoders(stream->output, 0))
return false;

stream->got_first_video = false;
stream->sent_headers = false;
os_atomic_set_bool(&stream->stopping, false);
Expand Down
7 changes: 0 additions & 7 deletions plugins/obs-outputs/ftl-stream.c
Original file line number Diff line number Diff line change
Expand Up @@ -641,13 +641,6 @@ static bool ftl_stream_start(void *data)
obs_data_set_int(video_settings, "bf", 0);
obs_data_release(video_settings);

if (!obs_output_can_begin_data_capture(stream->output, 0)) {
return false;
}
if (!obs_output_initialize_encoders(stream->output, 0)) {
return false;
}

stream->frames_sent = 0;
os_atomic_set_bool(&stream->connecting, true);

Expand Down
5 changes: 0 additions & 5 deletions plugins/obs-outputs/null-output.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,11 +51,6 @@ static bool null_output_start(void *data)
{
struct null_output *context = data;

if (!obs_output_can_begin_data_capture(context->output, 0))
return false;
if (!obs_output_initialize_encoders(context->output, 0))
return false;

if (context->stop_thread_active)
pthread_join(context->stop_thread, NULL);

Expand Down
5 changes: 0 additions & 5 deletions plugins/obs-outputs/rtmp-stream.c
Original file line number Diff line number Diff line change
Expand Up @@ -1462,11 +1462,6 @@ static bool rtmp_stream_start(void *data)
{
struct rtmp_stream *stream = data;

if (!obs_output_can_begin_data_capture(stream->output, 0))
return false;
if (!obs_output_initialize_encoders(stream->output, 0))
return false;

os_atomic_set_bool(&stream->connecting, true);
return pthread_create(&stream->connect_thread, NULL, connect_thread,
stream) == 0;
Expand Down
5 changes: 0 additions & 5 deletions plugins/obs-webrtc/whip-output.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +54,6 @@ bool WHIPOutput::Start()
{
std::lock_guard<std::mutex> l(start_stop_mutex);

if (!obs_output_can_begin_data_capture(output, 0))
return false;
if (!obs_output_initialize_encoders(output, 0))
return false;

if (start_stop_thread.joinable())
start_stop_thread.join();
start_stop_thread = std::thread(&WHIPOutput::StartThread, this);
Expand Down
Loading