ui/handler: Refactoring
This commit is contained in:
+8
-3
@@ -358,7 +358,7 @@ obsffmpeg::encoder_factory::encoder_factory(const AVCodec* codec) : avcodec_ptr(
|
||||
|
||||
// Allow UI Handler to replace visible name.
|
||||
if (_handler)
|
||||
_handler->override_visible_name(avcodec_ptr, info.readable_name);
|
||||
_handler->get_name(avcodec_ptr, info.readable_name);
|
||||
}
|
||||
|
||||
// Assign Ids.
|
||||
@@ -453,17 +453,22 @@ void obsffmpeg::encoder_factory::register_encoder()
|
||||
info_fallback.oei.encode = _encode;
|
||||
info_fallback.oei.type_data = this;
|
||||
|
||||
obs_register_encoder(&info_fallback.oei);
|
||||
PLOG_DEBUG("Registered software fallback for encoder #%llX", avcodec_ptr);
|
||||
} else {
|
||||
// Is not a GPU Encoder, don't implement fallback.
|
||||
info.oei.create = _create;
|
||||
info.oei.encode = _encode;
|
||||
}
|
||||
|
||||
if (_handler)
|
||||
_handler->adjust_encoder_info(this, &info, &info_fallback);
|
||||
|
||||
obs_register_encoder(&info.oei);
|
||||
PLOG_DEBUG("Registered encoder #%llX with name '%s' and long name '%s' and caps %llX", avcodec_ptr,
|
||||
avcodec_ptr->name, avcodec_ptr->long_name, avcodec_ptr->capabilities);
|
||||
if (info_fallback.uid.size() > 0) {
|
||||
obs_register_encoder(&info_fallback.oei);
|
||||
PLOG_DEBUG("Registered software fallback for encoder #%llX", avcodec_ptr);
|
||||
}
|
||||
}
|
||||
|
||||
void obsffmpeg::encoder_factory::get_defaults(obs_data_t* settings, bool hw_encode)
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
#include "handler.hpp"
|
||||
|
||||
void obsffmpeg::ui::handler::override_visible_name(const AVCodec*, std::string&) {}
|
||||
void obsffmpeg::ui::handler::get_name(const AVCodec*, std::string&) {}
|
||||
|
||||
void obsffmpeg::ui::handler::override_info(obs_encoder_info*, obs_encoder_info*) {}
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include "encoder.hpp"
|
||||
#include "hwapi/base.hpp"
|
||||
|
||||
extern "C" {
|
||||
@@ -39,10 +40,14 @@ extern "C" {
|
||||
namespace obsffmpeg {
|
||||
namespace ui {
|
||||
class handler {
|
||||
public:
|
||||
virtual void override_visible_name(const AVCodec* codec, std::string& name);
|
||||
public /*factory*/:
|
||||
virtual void adjust_encoder_info(obsffmpeg::encoder_factory* factory,
|
||||
obsffmpeg::encoder_info* main,
|
||||
obsffmpeg::encoder_info* fallback) = 0;
|
||||
|
||||
virtual void override_info(obs_encoder_info* main, obs_encoder_info* fallback);
|
||||
public /*instance*/:
|
||||
|
||||
virtual void get_name(const AVCodec* codec, std::string& name);
|
||||
|
||||
virtual void override_colorformat(AVPixelFormat& target_format, obs_data_t* settings,
|
||||
const AVCodec* codec, AVCodecContext* context);
|
||||
|
||||
@@ -80,7 +80,7 @@ INITIALIZER(nvenc_h264_handler_init)
|
||||
});
|
||||
};
|
||||
|
||||
void obsffmpeg::ui::nvenc_h264_handler::override_visible_name(const AVCodec*, std::string& name)
|
||||
void obsffmpeg::ui::nvenc_h264_handler::get_name(const AVCodec*, std::string& name)
|
||||
{
|
||||
name = "H.264/AVC Encoder (NVidia NVENC)";
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ namespace obsffmpeg {
|
||||
namespace ui {
|
||||
class nvenc_h264_handler : public handler {
|
||||
public:
|
||||
virtual void override_visible_name(const AVCodec* codec, std::string& name) override;
|
||||
virtual void get_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;
|
||||
|
||||
@@ -82,7 +82,7 @@ INITIALIZER(nvenc_hevc_handler_init)
|
||||
});
|
||||
};
|
||||
|
||||
void obsffmpeg::ui::nvenc_hevc_handler::override_visible_name(const AVCodec*, std::string& name)
|
||||
void obsffmpeg::ui::nvenc_hevc_handler::get_name(const AVCodec*, std::string& name)
|
||||
{
|
||||
name = "H.265/HEVC Encoder (NVidia NVENC)";
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ namespace obsffmpeg {
|
||||
namespace ui {
|
||||
class nvenc_hevc_handler : public handler {
|
||||
public:
|
||||
virtual void override_visible_name(const AVCodec* codec, std::string& name) override;
|
||||
virtual void get_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;
|
||||
|
||||
Reference in New Issue
Block a user