ffmpeg/tools: Add functions for easy logging

This commit is contained in:
Michael Fabian 'Xaymar' Dirks
2019-11-16 21:19:30 +01:00
parent a0bfac9319
commit 2a75d5fabd
2 changed files with 60 additions and 0 deletions
+50
View File
@@ -24,12 +24,15 @@
#include <map> #include <map>
#include <sstream> #include <sstream>
#include <stdexcept> #include <stdexcept>
#include "plugin.hpp"
#include "utility.hpp"
extern "C" { extern "C" {
#pragma warning(push) #pragma warning(push)
#pragma warning(disable : 4244) #pragma warning(disable : 4244)
#include <libavcodec/avcodec.h> #include <libavcodec/avcodec.h>
#include <libavutil/error.h> #include <libavutil/error.h>
#include <libavutil/opt.h>
#include <libavutil/pixdesc.h> #include <libavutil/pixdesc.h>
#pragma warning(pop) #pragma warning(pop)
} }
@@ -301,3 +304,50 @@ const char* ffmpeg::tools::get_thread_type_name(int thread_type)
return "None"; 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: <Error>", context->codec->name, text.c_str());
}
} else {
PLOG_INFO("[%s] %s: <Default>", 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: <Error>", context->codec->name, text.c_str());
}
} else {
PLOG_INFO("[%s] %s: <Default>", context->codec->name, text.c_str());
}
}
void ffmpeg::tools::print_av_option_string(AVCodecContext* context, const char* option, std::string text,
std::function<std::string(int64_t)> 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 = "<Unknown>";
if (decoder)
name = decoder(v);
PLOG_INFO("[%s] %s: %s", context->codec->name, text.c_str(), name.c_str());
} else {
PLOG_INFO("[%s] %s: <Error>", context->codec->name, text.c_str());
}
} else {
PLOG_INFO("[%s] %s: <Default>", context->codec->name, text.c_str());
}
}
+10
View File
@@ -23,6 +23,7 @@
#define OBS_FFMPEG_FFMPEG_UTILITY #define OBS_FFMPEG_FFMPEG_UTILITY
#pragma once #pragma once
#include <functional>
#include <obs.h> #include <obs.h>
#include <string> #include <string>
#include <vector> #include <vector>
@@ -61,6 +62,15 @@ namespace ffmpeg {
const char* get_std_compliance_name(int compliance); const char* get_std_compliance_name(int compliance);
const char* get_thread_type_name(int thread_type); 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<std::string(int64_t)> decoder);
} // namespace tools } // namespace tools
} // namespace ffmpeg } // namespace ffmpeg