diff --git a/source/ffmpeg/tools.cpp b/source/ffmpeg/tools.cpp index 2fbb0d3..91f9966 100644 --- a/source/ffmpeg/tools.cpp +++ b/source/ffmpeg/tools.cpp @@ -24,12 +24,15 @@ #include #include #include +#include "plugin.hpp" +#include "utility.hpp" extern "C" { #pragma warning(push) #pragma warning(disable : 4244) #include #include +#include #include #pragma warning(pop) } @@ -301,3 +304,50 @@ const char* ffmpeg::tools::get_thread_type_name(int thread_type) return "None"; } } + +void ffmpeg::tools::print_av_option_bool(AVCodecContext* context, const char* option, std::string text) +{ + if (av_opt_is_set_to_default_by_name(context, option, AV_OPT_SEARCH_CHILDREN) == 0) { + int64_t v = 0; + if (av_opt_get_int(context, option, AV_OPT_SEARCH_CHILDREN, &v) == 0) { + PLOG_INFO("[%s] %s: %s", context->codec->name, text.c_str(), v == 0 ? "Disabled" : "Enabled"); + } else { + PLOG_INFO("[%s] %s: ", context->codec->name, text.c_str()); + } + } else { + PLOG_INFO("[%s] %s: ", context->codec->name, text.c_str()); + } +} + +void ffmpeg::tools::print_av_option_int(AVCodecContext* context, const char* option, std::string text, + std::string suffix) +{ + if (av_opt_is_set_to_default_by_name(context, option, AV_OPT_SEARCH_CHILDREN) == 0) { + int64_t v = 0; + if (av_opt_get_int(context, option, AV_OPT_SEARCH_CHILDREN, &v) == 0) { + PLOG_INFO("[%s] %s: %lld %s", context->codec->name, text.c_str(), v, suffix.c_str()); + } else { + PLOG_INFO("[%s] %s: ", context->codec->name, text.c_str()); + } + } else { + PLOG_INFO("[%s] %s: ", context->codec->name, text.c_str()); + } +} + +void ffmpeg::tools::print_av_option_string(AVCodecContext* context, const char* option, std::string text, + std::function decoder) +{ + if (av_opt_is_set_to_default_by_name(context, option, AV_OPT_SEARCH_CHILDREN) == 0) { + int64_t v = 0; + if (av_opt_get_int(context, option, AV_OPT_SEARCH_CHILDREN, &v) == 0) { + std::string name = ""; + if (decoder) + name = decoder(v); + PLOG_INFO("[%s] %s: %s", context->codec->name, text.c_str(), name.c_str()); + } else { + PLOG_INFO("[%s] %s: ", context->codec->name, text.c_str()); + } + } else { + PLOG_INFO("[%s] %s: ", context->codec->name, text.c_str()); + } +} diff --git a/source/ffmpeg/tools.hpp b/source/ffmpeg/tools.hpp index e6bac3c..f33fb94 100644 --- a/source/ffmpeg/tools.hpp +++ b/source/ffmpeg/tools.hpp @@ -23,6 +23,7 @@ #define OBS_FFMPEG_FFMPEG_UTILITY #pragma once +#include #include #include #include @@ -61,6 +62,15 @@ namespace ffmpeg { const char* get_std_compliance_name(int compliance); const char* get_thread_type_name(int thread_type); + + void print_av_option_bool(AVCodecContext* context, const char* option, std::string text); + + void print_av_option_int(AVCodecContext* context, const char* option, std::string text, + std::string suffix); + + void print_av_option_string(AVCodecContext* context, const char* option, std::string text, + std::function decoder); + } // namespace tools } // namespace ffmpeg