ui/handler, encoder: Allow overriding lag in frames
The lag in frames is not dictated by the number of threads being used by some encoders. At least for hardware encoders, the expected frame lag in real time encoding is 1 + the number of bframes
This commit is contained in:
+4
-1
@@ -878,6 +878,9 @@ bool obsffmpeg::encoder::update(obs_data_t* settings)
|
|||||||
nullptr, "=", ";");
|
nullptr, "=", ";");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_handler)
|
||||||
|
_handler->override_lag_in_frames(_lag_in_frames, settings, _codec, _context);
|
||||||
|
|
||||||
// Handler Logging
|
// Handler Logging
|
||||||
if (_handler)
|
if (_handler)
|
||||||
_handler->log_options(settings, _codec, _context);
|
_handler->log_options(settings, _codec, _context);
|
||||||
@@ -1102,7 +1105,7 @@ bool obsffmpeg::encoder::encode_avframe(std::shared_ptr<AVFrame> frame, encoder_
|
|||||||
|
|
||||||
bool sent_frame = false;
|
bool sent_frame = false;
|
||||||
bool recv_packet = 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_begin = std::chrono::high_resolution_clock::now();
|
||||||
auto loop_end = loop_begin + std::chrono::milliseconds(50);
|
auto loop_end = loop_begin + std::chrono::milliseconds(50);
|
||||||
|
|||||||
+2
-2
@@ -94,8 +94,8 @@ namespace obsffmpeg {
|
|||||||
ffmpeg::swscale _swscale;
|
ffmpeg::swscale _swscale;
|
||||||
AVPacket _current_packet;
|
AVPacket _current_packet;
|
||||||
|
|
||||||
int64_t _lag_in_frames;
|
size_t _lag_in_frames;
|
||||||
int64_t _count_send_frames;
|
size_t _count_send_frames;
|
||||||
|
|
||||||
// Extra Data
|
// Extra Data
|
||||||
bool _have_first_frame;
|
bool _have_first_frame;
|
||||||
|
|||||||
@@ -29,6 +29,10 @@ void obsffmpeg::ui::handler::override_colorformat(AVPixelFormat& target_format,
|
|||||||
const AVCodec* codec, AVCodecContext* context)
|
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_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) {}
|
void obsffmpeg::ui::handler::get_properties(obs_properties_t* props, const AVCodec* codec, AVCodecContext* context) {}
|
||||||
|
|||||||
@@ -47,6 +47,9 @@ namespace obsffmpeg {
|
|||||||
virtual void override_colorformat(AVPixelFormat& target_format, obs_data_t* settings,
|
virtual void override_colorformat(AVPixelFormat& target_format, obs_data_t* settings,
|
||||||
const AVCodec* codec, AVCodecContext* context);
|
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_defaults(obs_data_t* settings, const AVCodec* codec, AVCodecContext* context);
|
||||||
|
|
||||||
virtual void get_properties(obs_properties_t* props, const AVCodec* codec,
|
virtual void get_properties(obs_properties_t* props, const AVCodec* codec,
|
||||||
|
|||||||
Reference in New Issue
Block a user