2023-05-16 03:31:43 +00:00
|
|
|
// AUTOGENERATED COPYRIGHT HEADER START
|
2023-09-30 03:16:02 +00:00
|
|
|
// Copyright (C) 2020-2023 Michael Fabian 'Xaymar' Dirks <info@xaymar.com>
|
2023-05-16 03:31:43 +00:00
|
|
|
// AUTOGENERATED COPYRIGHT HEADER END
|
|
|
|
|
2020-01-13 00:52:30 +00:00
|
|
|
#pragma once
|
2022-08-29 10:29:44 +00:00
|
|
|
#include "warning-disable.hpp"
|
2023-05-14 16:38:28 +00:00
|
|
|
#include <cstdint>
|
|
|
|
#include <map>
|
|
|
|
#include <string>
|
|
|
|
extern "C" {
|
|
|
|
#include <obs.h>
|
2020-01-13 00:52:30 +00:00
|
|
|
#include <libavcodec/avcodec.h>
|
|
|
|
}
|
2023-05-14 16:38:28 +00:00
|
|
|
#include "warning-enable.hpp"
|
2020-01-13 00:52:30 +00:00
|
|
|
|
2020-04-05 16:52:06 +00:00
|
|
|
namespace streamfx::encoder::ffmpeg {
|
2020-01-13 21:40:15 +00:00
|
|
|
class ffmpeg_factory;
|
|
|
|
class ffmpeg_instance;
|
2020-01-13 00:52:30 +00:00
|
|
|
|
2023-05-14 16:38:28 +00:00
|
|
|
struct handler {
|
|
|
|
handler(std::string codec);
|
2023-09-06 00:48:42 +00:00
|
|
|
virtual ~handler(){};
|
2021-12-03 06:13:08 +00:00
|
|
|
|
2023-05-14 16:38:28 +00:00
|
|
|
virtual bool has_keyframes(ffmpeg_factory* factory);
|
|
|
|
virtual bool has_threading(ffmpeg_factory* factory);
|
|
|
|
virtual bool is_hardware(ffmpeg_factory* factory);
|
|
|
|
virtual bool is_reconfigurable(ffmpeg_factory* factory, bool& threads, bool& gpu, bool& keyframes);
|
2020-01-13 00:52:30 +00:00
|
|
|
|
2023-05-14 16:38:28 +00:00
|
|
|
virtual void adjust_info(ffmpeg_factory* factory, std::string& id, std::string& name, std::string& codec);
|
2020-07-05 22:08:34 +00:00
|
|
|
|
2023-05-14 16:38:28 +00:00
|
|
|
virtual std::string help(ffmpeg_factory* factory);
|
2020-01-13 00:52:30 +00:00
|
|
|
|
2023-05-14 16:38:28 +00:00
|
|
|
virtual void defaults(ffmpeg_factory* factory, obs_data_t* settings);
|
|
|
|
virtual void properties(ffmpeg_factory* factory, ffmpeg_instance* instance, obs_properties_t* props);
|
|
|
|
virtual void migrate(ffmpeg_factory* factory, ffmpeg_instance* instance, obs_data_t* settings, uint64_t version);
|
|
|
|
virtual void update(ffmpeg_factory* factory, ffmpeg_instance* instance, obs_data_t* settings);
|
|
|
|
virtual void override_update(ffmpeg_factory* factory, ffmpeg_instance* instance, obs_data_t* settings);
|
|
|
|
virtual void log(ffmpeg_factory* factory, ffmpeg_instance* instance, obs_data_t* settings);
|
2020-01-13 00:52:30 +00:00
|
|
|
|
2023-05-15 23:11:58 +00:00
|
|
|
virtual void override_colorformat(ffmpeg_factory* factory, ffmpeg_instance* instance, obs_data_t* settings, AVPixelFormat& target_format);
|
2020-01-13 00:52:30 +00:00
|
|
|
|
2023-05-14 16:38:28 +00:00
|
|
|
public:
|
|
|
|
typedef std::map<std::string, handler*> handler_map_t;
|
2020-01-13 00:52:30 +00:00
|
|
|
|
2023-05-14 16:38:28 +00:00
|
|
|
static handler_map_t& handlers();
|
|
|
|
};
|
2020-04-05 16:52:06 +00:00
|
|
|
} // namespace streamfx::encoder::ffmpeg
|