ui/nvenc: Override lag in frames to use Max. B-Frames
This commit is contained in:
@@ -85,6 +85,12 @@ void obsffmpeg::ui::nvenc_h264_handler::override_visible_name(const AVCodec*, st
|
|||||||
name = "H.264/AVC Encoder (NVidia NVENC)";
|
name = "H.264/AVC Encoder (NVidia NVENC)";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void obsffmpeg::ui::nvenc_h264_handler::override_lag_in_frames(size_t& lag, obs_data_t* settings, const AVCodec* codec,
|
||||||
|
AVCodecContext* context)
|
||||||
|
{
|
||||||
|
nvenc::override_lag_in_frames(lag, settings, codec, context);
|
||||||
|
}
|
||||||
|
|
||||||
void obsffmpeg::ui::nvenc_h264_handler::get_defaults(obs_data_t* settings, const AVCodec* codec,
|
void obsffmpeg::ui::nvenc_h264_handler::get_defaults(obs_data_t* settings, const AVCodec* codec,
|
||||||
AVCodecContext* context)
|
AVCodecContext* context)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -36,6 +36,9 @@ namespace obsffmpeg {
|
|||||||
public:
|
public:
|
||||||
virtual void override_visible_name(const AVCodec* codec, std::string& name) override;
|
virtual void override_visible_name(const AVCodec* codec, std::string& name) override;
|
||||||
|
|
||||||
|
virtual void override_lag_in_frames(size_t& lag, obs_data_t* settings, const AVCodec* codec,
|
||||||
|
AVCodecContext* context) override;
|
||||||
|
|
||||||
virtual void get_defaults(obs_data_t* settings, const AVCodec* codec,
|
virtual void get_defaults(obs_data_t* settings, const AVCodec* codec,
|
||||||
AVCodecContext* context) override;
|
AVCodecContext* context) override;
|
||||||
|
|
||||||
|
|||||||
@@ -87,6 +87,12 @@ void obsffmpeg::ui::nvenc_hevc_handler::override_visible_name(const AVCodec*, st
|
|||||||
name = "H.265/HEVC Encoder (NVidia NVENC)";
|
name = "H.265/HEVC Encoder (NVidia NVENC)";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void obsffmpeg::ui::nvenc_hevc_handler::override_lag_in_frames(size_t& lag, obs_data_t* settings, const AVCodec* codec,
|
||||||
|
AVCodecContext* context)
|
||||||
|
{
|
||||||
|
nvenc::override_lag_in_frames(lag, settings, codec, context);
|
||||||
|
}
|
||||||
|
|
||||||
void obsffmpeg::ui::nvenc_hevc_handler::get_defaults(obs_data_t* settings, const AVCodec* codec,
|
void obsffmpeg::ui::nvenc_hevc_handler::get_defaults(obs_data_t* settings, const AVCodec* codec,
|
||||||
AVCodecContext* context)
|
AVCodecContext* context)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -36,6 +36,9 @@ namespace obsffmpeg {
|
|||||||
public:
|
public:
|
||||||
virtual void override_visible_name(const AVCodec* codec, std::string& name) override;
|
virtual void override_visible_name(const AVCodec* codec, std::string& name) override;
|
||||||
|
|
||||||
|
virtual void override_lag_in_frames(size_t& lag, obs_data_t* settings, const AVCodec* codec,
|
||||||
|
AVCodecContext* context) override;
|
||||||
|
|
||||||
virtual void get_defaults(obs_data_t* settings, const AVCodec* codec,
|
virtual void get_defaults(obs_data_t* settings, const AVCodec* codec,
|
||||||
AVCodecContext* context) override;
|
AVCodecContext* context) override;
|
||||||
|
|
||||||
|
|||||||
@@ -131,6 +131,17 @@ std::map<b_ref_mode, std::string> obsffmpeg::nvenc::b_ref_mode_to_opt{
|
|||||||
{b_ref_mode::MIDDLE, "middle"},
|
{b_ref_mode::MIDDLE, "middle"},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void obsffmpeg::nvenc::override_lag_in_frames(size_t& lag, obs_data_t* settings, const AVCodec* codec,
|
||||||
|
AVCodecContext* context)
|
||||||
|
{
|
||||||
|
// With NVENC, the number of frames lagged before we get our first
|
||||||
|
// packet is determined by the number of b-frames. Threads, lookahead
|
||||||
|
// frames and various other settings are ignored.
|
||||||
|
// The minimum number of lagged frames is 1.
|
||||||
|
|
||||||
|
lag = 1ull + static_cast<size_t>(context->max_b_frames);
|
||||||
|
}
|
||||||
|
|
||||||
void obsffmpeg::nvenc::get_defaults(obs_data_t* settings, const AVCodec*, AVCodecContext*)
|
void obsffmpeg::nvenc::get_defaults(obs_data_t* settings, const AVCodec*, AVCodecContext*)
|
||||||
{
|
{
|
||||||
obs_data_set_default_int(settings, ST_PRESET, static_cast<int64_t>(preset::DEFAULT));
|
obs_data_set_default_int(settings, ST_PRESET, static_cast<int64_t>(preset::DEFAULT));
|
||||||
|
|||||||
@@ -75,6 +75,9 @@ namespace obsffmpeg {
|
|||||||
|
|
||||||
extern std::map<b_ref_mode, std::string> b_ref_mode_to_opt;
|
extern std::map<b_ref_mode, std::string> b_ref_mode_to_opt;
|
||||||
|
|
||||||
|
void override_lag_in_frames(size_t& lag, obs_data_t* settings, const AVCodec* codec,
|
||||||
|
AVCodecContext* context);
|
||||||
|
|
||||||
void get_defaults(obs_data_t* settings, const AVCodec* codec, AVCodecContext* context);
|
void get_defaults(obs_data_t* settings, const AVCodec* codec, AVCodecContext* context);
|
||||||
|
|
||||||
void get_properties_pre(obs_properties_t* props, const AVCodec* codec);
|
void get_properties_pre(obs_properties_t* props, const AVCodec* codec);
|
||||||
|
|||||||
Reference in New Issue
Block a user