From dbdf915a07e8c872004f87e98e5f0690bb32949d Mon Sep 17 00:00:00 2001 From: Michael Fabian 'Xaymar' Dirks Date: Sun, 7 Jul 2019 13:42:22 +0200 Subject: [PATCH] ui/handler: Implement UI Handler interface class Adds the ability to override the UI for very specific encoders in order to properly support customized and detailed UI for each encoder. This design is flexible and allows for any kind of UI generator to work, without relying on an actual object too much. --- CMakeLists.txt | 2 ++ source/ui/handler.cpp | 18 ++++++++++++++++++ source/ui/handler.hpp | 40 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 source/ui/handler.cpp create mode 100644 source/ui/handler.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index ede7f7c..45482be 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -278,6 +278,8 @@ set(PROJECT_PRIVATE "${PROJECT_SOURCE_DIR}/source/ffmpeg/swscale.cpp" "${PROJECT_SOURCE_DIR}/source/ffmpeg/tools.hpp" "${PROJECT_SOURCE_DIR}/source/ffmpeg/tools.cpp" + "${PROJECT_SOURCE_DIR}/source/ui/handler.hpp" + "${PROJECT_SOURCE_DIR}/source/ui/handler.cpp" ) diff --git a/source/ui/handler.cpp b/source/ui/handler.cpp new file mode 100644 index 0000000..645e171 --- /dev/null +++ b/source/ui/handler.cpp @@ -0,0 +1,18 @@ +// FFMPEG Video Encoder Integration for OBS Studio +// Copyright (C) 2018 - 2019 Michael Fabian Dirks +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + +#include "handler.hpp" diff --git a/source/ui/handler.hpp b/source/ui/handler.hpp new file mode 100644 index 0000000..a0e7cad --- /dev/null +++ b/source/ui/handler.hpp @@ -0,0 +1,40 @@ +// FFMPEG Video Encoder Integration for OBS Studio +// Copyright (C) 2018 - 2019 Michael Fabian Dirks +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + +#pragma once + +extern "C" { +#include +#pragma warning(push) +#pragma warning(disable : 4244) +#include +#pragma warning(pop) +} + +namespace obsffmpeg { + namespace ui { + class handler { + public: + virtual void get_defaults(obs_data_t* settings, AVCodec* codec, AVCodecContext* context) = 0; + + virtual void get_properties(obs_properties_t* props, AVCodec* codec, + AVCodecContext* context) = 0; + + virtual void update(obs_data_t* settings, AVCodec* codec, AVCodecContext* context) = 0; + }; + } // namespace ui +} // namespace obsffmpeg