ui/handler: Refactoring

This commit is contained in:
Michael Fabian 'Xaymar' Dirks
2019-11-12 19:49:14 +01:00
parent 04a22a13dc
commit 18c50b3cbb
7 changed files with 21 additions and 11 deletions
+8 -3
View File
@@ -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)
+1 -1
View File
@@ -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*) {}
+8 -3
View File
@@ -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);
+1 -1
View File
@@ -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)";
}
+1 -1
View File
@@ -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;
+1 -1
View File
@@ -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)";
}
+1 -1
View File
@@ -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;