From 18c50b3cbb3448909af13b872dfa472dc280ad2d Mon Sep 17 00:00:00 2001 From: Michael Fabian 'Xaymar' Dirks Date: Tue, 12 Nov 2019 19:49:14 +0100 Subject: [PATCH] ui/handler: Refactoring --- source/encoder.cpp | 11 ++++++++--- source/ui/handler.cpp | 2 +- source/ui/handler.hpp | 11 ++++++++--- source/ui/nvenc_h264_handler.cpp | 2 +- source/ui/nvenc_h264_handler.hpp | 2 +- source/ui/nvenc_hevc_handler.cpp | 2 +- source/ui/nvenc_hevc_handler.hpp | 2 +- 7 files changed, 21 insertions(+), 11 deletions(-) diff --git a/source/encoder.cpp b/source/encoder.cpp index 493e9ab..f7c5597 100644 --- a/source/encoder.cpp +++ b/source/encoder.cpp @@ -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) diff --git a/source/ui/handler.cpp b/source/ui/handler.cpp index 1b7e037..c887858 100644 --- a/source/ui/handler.cpp +++ b/source/ui/handler.cpp @@ -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*) {} diff --git a/source/ui/handler.hpp b/source/ui/handler.hpp index b35245e..08acf13 100644 --- a/source/ui/handler.hpp +++ b/source/ui/handler.hpp @@ -22,6 +22,7 @@ #pragma once #include +#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); diff --git a/source/ui/nvenc_h264_handler.cpp b/source/ui/nvenc_h264_handler.cpp index 73d6824..a28d223 100644 --- a/source/ui/nvenc_h264_handler.cpp +++ b/source/ui/nvenc_h264_handler.cpp @@ -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)"; } diff --git a/source/ui/nvenc_h264_handler.hpp b/source/ui/nvenc_h264_handler.hpp index 4316451..1d9e5ff 100644 --- a/source/ui/nvenc_h264_handler.hpp +++ b/source/ui/nvenc_h264_handler.hpp @@ -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; diff --git a/source/ui/nvenc_hevc_handler.cpp b/source/ui/nvenc_hevc_handler.cpp index c841a97..8724ba0 100644 --- a/source/ui/nvenc_hevc_handler.cpp +++ b/source/ui/nvenc_hevc_handler.cpp @@ -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)"; } diff --git a/source/ui/nvenc_hevc_handler.hpp b/source/ui/nvenc_hevc_handler.hpp index f03f456..b251a80 100644 --- a/source/ui/nvenc_hevc_handler.hpp +++ b/source/ui/nvenc_hevc_handler.hpp @@ -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;