diff --git a/source/encoder.cpp b/source/encoder.cpp index 037fa61..eaee9a2 100644 --- a/source/encoder.cpp +++ b/source/encoder.cpp @@ -878,6 +878,9 @@ bool obsffmpeg::encoder::update(obs_data_t* settings) nullptr, "=", ";"); } + if (_handler) + _handler->override_lag_in_frames(_lag_in_frames, settings, _codec, _context); + // Handler Logging if (_handler) _handler->log_options(settings, _codec, _context); @@ -1102,7 +1105,7 @@ bool obsffmpeg::encoder::encode_avframe(std::shared_ptr frame, encoder_ bool sent_frame = false; bool recv_packet = false; - bool should_lag = (_lag_in_frames - _count_send_frames) <= 0; + bool should_lag = (_count_send_frames >= _lag_in_frames); auto loop_begin = std::chrono::high_resolution_clock::now(); auto loop_end = loop_begin + std::chrono::milliseconds(50); diff --git a/source/encoder.hpp b/source/encoder.hpp index b7c83c2..6014d7d 100644 --- a/source/encoder.hpp +++ b/source/encoder.hpp @@ -94,8 +94,8 @@ namespace obsffmpeg { ffmpeg::swscale _swscale; AVPacket _current_packet; - int64_t _lag_in_frames; - int64_t _count_send_frames; + size_t _lag_in_frames; + size_t _count_send_frames; // Extra Data bool _have_first_frame; diff --git a/source/ui/handler.cpp b/source/ui/handler.cpp index 38e9a74..fa68976 100644 --- a/source/ui/handler.cpp +++ b/source/ui/handler.cpp @@ -29,6 +29,10 @@ void obsffmpeg::ui::handler::override_colorformat(AVPixelFormat& target_format, const AVCodec* codec, AVCodecContext* context) {} +void obsffmpeg::ui::handler::override_lag_in_frames(size_t& lag, obs_data_t* settings, const AVCodec* codec, + AVCodecContext* context) +{} + void obsffmpeg::ui::handler::get_defaults(obs_data_t* settings, const AVCodec* codec, AVCodecContext* context) {} void obsffmpeg::ui::handler::get_properties(obs_properties_t* props, const AVCodec* codec, AVCodecContext* context) {} diff --git a/source/ui/handler.hpp b/source/ui/handler.hpp index ae2e7a2..b5fcff5 100644 --- a/source/ui/handler.hpp +++ b/source/ui/handler.hpp @@ -47,6 +47,9 @@ namespace obsffmpeg { virtual void override_colorformat(AVPixelFormat& target_format, obs_data_t* settings, const AVCodec* codec, AVCodecContext* context); + virtual void override_lag_in_frames(size_t& lag, obs_data_t* settings, const AVCodec* codec, + AVCodecContext* context); + virtual void get_defaults(obs_data_t* settings, const AVCodec* codec, AVCodecContext* context); virtual void get_properties(obs_properties_t* props, const AVCodec* codec,