obs-ffmpeg: Add support for pausing
This commit is contained in:
@@ -515,7 +515,8 @@ static uint64_t ffmpeg_mux_total_bytes(void *data)
|
||||
|
||||
struct obs_output_info ffmpeg_muxer = {
|
||||
.id = "ffmpeg_muxer",
|
||||
.flags = OBS_OUTPUT_AV | OBS_OUTPUT_ENCODED | OBS_OUTPUT_MULTI_TRACK,
|
||||
.flags = OBS_OUTPUT_AV | OBS_OUTPUT_ENCODED | OBS_OUTPUT_MULTI_TRACK |
|
||||
OBS_OUTPUT_CAN_PAUSE,
|
||||
.get_name = ffmpeg_mux_getname,
|
||||
.create = ffmpeg_mux_create,
|
||||
.destroy = ffmpeg_mux_destroy,
|
||||
@@ -545,8 +546,17 @@ static void replay_buffer_hotkey(void *data, obs_hotkey_id id,
|
||||
return;
|
||||
|
||||
struct ffmpeg_muxer *stream = data;
|
||||
if (os_atomic_load_bool(&stream->active))
|
||||
|
||||
if (os_atomic_load_bool(&stream->active)) {
|
||||
obs_encoder_t *vencoder =
|
||||
obs_output_get_video_encoder(stream->output);
|
||||
if (obs_encoder_paused(vencoder)) {
|
||||
info("Could not save buffer because encoders paused");
|
||||
return;
|
||||
}
|
||||
|
||||
stream->save_ts = os_gettime_ns() / 1000LL;
|
||||
}
|
||||
}
|
||||
|
||||
static void save_replay_proc(void *data, calldata_t *cd)
|
||||
@@ -876,7 +886,8 @@ static void replay_buffer_defaults(obs_data_t *s)
|
||||
|
||||
struct obs_output_info replay_buffer = {
|
||||
.id = "replay_buffer",
|
||||
.flags = OBS_OUTPUT_AV | OBS_OUTPUT_ENCODED | OBS_OUTPUT_MULTI_TRACK,
|
||||
.flags = OBS_OUTPUT_AV | OBS_OUTPUT_ENCODED | OBS_OUTPUT_MULTI_TRACK |
|
||||
OBS_OUTPUT_CAN_PAUSE,
|
||||
.get_name = replay_buffer_getname,
|
||||
.create = replay_buffer_create,
|
||||
.destroy = replay_buffer_destroy,
|
||||
|
@@ -960,6 +960,7 @@ static uint64_t get_packet_sys_dts(struct ffmpeg_output *output,
|
||||
AVPacket *packet)
|
||||
{
|
||||
struct ffmpeg_data *data = &output->ff_data;
|
||||
uint64_t pause_offset = obs_output_get_pause_offset(output->output);
|
||||
uint64_t start_ts;
|
||||
|
||||
AVRational time_base;
|
||||
@@ -972,8 +973,9 @@ static uint64_t get_packet_sys_dts(struct ffmpeg_output *output,
|
||||
start_ts = output->audio_start_ts;
|
||||
}
|
||||
|
||||
return start_ts + (uint64_t)av_rescale_q(packet->dts, time_base,
|
||||
(AVRational){1, 1000000000});
|
||||
return start_ts + pause_offset +
|
||||
(uint64_t)av_rescale_q(packet->dts, time_base,
|
||||
(AVRational){1, 1000000000});
|
||||
}
|
||||
|
||||
static int process_packet(struct ffmpeg_output *output)
|
||||
@@ -1247,7 +1249,8 @@ static uint64_t ffmpeg_output_total_bytes(void *data)
|
||||
|
||||
struct obs_output_info ffmpeg_output = {
|
||||
.id = "ffmpeg_output",
|
||||
.flags = OBS_OUTPUT_AUDIO | OBS_OUTPUT_VIDEO | OBS_OUTPUT_MULTI_TRACK,
|
||||
.flags = OBS_OUTPUT_AUDIO | OBS_OUTPUT_VIDEO | OBS_OUTPUT_MULTI_TRACK |
|
||||
OBS_OUTPUT_CAN_PAUSE,
|
||||
.get_name = ffmpeg_output_getname,
|
||||
.create = ffmpeg_output_create,
|
||||
.destroy = ffmpeg_output_destroy,
|
||||
|
Reference in New Issue
Block a user