Additional logging + FFMpeg changes; ffmpeg output will be in the log now

This commit is contained in:
2025-08-15 18:03:45 -04:00
parent 8388fd5d99
commit afbaf2bc65
6 changed files with 43 additions and 12 deletions

View File

@@ -61,10 +61,12 @@ using namespace glm;
#define POPEN _popen #define POPEN _popen
#define PCLOSE _pclose #define PCLOSE _pclose
#define PWRITE_MODE "wb" #define PWRITE_MODE "wb"
#define PREAD_MODE "r"
#else #else
#define POPEN popen #define POPEN popen
#define PCLOSE pclose #define PCLOSE pclose
#define PWRITE_MODE "w" #define PWRITE_MODE "w"
#define PREAD_MODE "r"
#endif #endif
#define UV_VERTICES(uvMin, uvMax) \ #define UV_VERTICES(uvMin, uvMax) \

View File

@@ -30,20 +30,33 @@ ffmpeg_render
break; break;
} }
// ffmpeg output will be piped into the log
std::string logOutput = " 2>> \"" + log_path_get() + "\"";
#if _WIN32 #if _WIN32
command = string_quote(command); command = string_quote(command) + logOutput;
#else
command += logOutput;
#endif #endif
log_command(command);
FILE* fp = POPEN(command.c_str(), PWRITE_MODE); FILE* fp = POPEN(command.c_str(), PWRITE_MODE);
if (!fp) if (!fp)
{ {
log_info(std::format(FFMPEG_POPEN_ERROR, strerror(errno))); log_error(std::format(FFMPEG_POPEN_ERROR, strerror(errno)));
return false; return false;
} }
size_t frameBytes = size.x * size.y * TEXTURE_CHANNELS; size_t frameBytes = size.x * size.y * TEXTURE_CHANNELS;
// supposedly, might help with video corruption issues on windows?
#if _WIN32
_setmode(_fileno(stdout), _O_BINARY);
#endif
for (const auto& frame : frames) for (const auto& frame : frames)
{ {
std::vector<u8> rgba = texture_download(&frame); std::vector<u8> rgba = texture_download(&frame);

View File

@@ -4,6 +4,7 @@
#include "texture.h" #include "texture.h"
#define FFMPEG_POPEN_ERROR "popen() (for FFmpeg) failed!\n{}" #define FFMPEG_POPEN_ERROR "popen() (for FFmpeg) failed!\n{}"
#define FFMPEG_LOG_BUFFER_SIZE 256
static constexpr const char* FFMPEG_GIF_FORMAT = static constexpr const char* FFMPEG_GIF_FORMAT =
"\"{0}\" -y " "\"{0}\" -y "

View File

@@ -2,7 +2,12 @@
inline std::ofstream logFile; inline std::ofstream logFile;
static void _log_write(const std::string& string) std::string log_path_get(void)
{
return preferences_path_get() + LOG_PATH;
}
void log_write(const std::string& string)
{ {
std::println("{}", string); std::println("{}", string);
@@ -13,30 +18,36 @@ static void _log_write(const std::string& string)
} }
} }
void log_init(const std::string& file) void log_init(void)
{ {
logFile.open(file, std::ios::out | std::ios::trunc); std::string logFilepath = log_path_get();
if (!logFile) std::println("{}", std::format(LOG_INIT_ERROR, file)); logFile.open(logFilepath, std::ios::out | std::ios::trunc);
if (!logFile) std::println("{}", std::format(LOG_INIT_ERROR, logFilepath));
} }
void log_error(const std::string& error) void log_error(const std::string& error)
{ {
_log_write(LOG_ERROR_FORMAT + error); log_write(LOG_ERROR_FORMAT + error);
} }
void log_info(const std::string& info) void log_info(const std::string& info)
{ {
_log_write(LOG_INFO_FORMAT + info); log_write(LOG_INFO_FORMAT + info);
} }
void log_warning(const std::string& warning) void log_warning(const std::string& warning)
{ {
_log_write(LOG_WARNING_FORMAT + warning); log_write(LOG_WARNING_FORMAT + warning);
} }
void log_imgui(const std::string& imgui) void log_imgui(const std::string& imgui)
{ {
_log_write(LOG_IMGUI_FORMAT + imgui); log_write(LOG_IMGUI_FORMAT + imgui);
}
void log_command(const std::string& command)
{
log_write(LOG_COMMAND_FORMAT + command);
} }
void log_free(void) void log_free(void)

View File

@@ -7,11 +7,15 @@
#define LOG_INFO_FORMAT "[INFO] " #define LOG_INFO_FORMAT "[INFO] "
#define LOG_IMGUI_FORMAT "[IMGUI] " #define LOG_IMGUI_FORMAT "[IMGUI] "
#define LOG_INIT_ERROR "[ERROR] Failed to open log file: {}" #define LOG_INIT_ERROR "[ERROR] Failed to open log file: {}"
#define LOG_COMMAND_FORMAT "[COMMAND] "
#define LOG_PATH "log.txt" #define LOG_PATH "log.txt"
void log_init(const std::string& file); std::string log_path_get(void);
void log_init(void);
void log_write(const std::string& file);
void log_error(const std::string& error); void log_error(const std::string& error);
void log_info(const std::string& info); void log_info(const std::string& info);
void log_warning(const std::string& warning); void log_warning(const std::string& warning);
void log_imgui(const std::string& imgui); void log_imgui(const std::string& imgui);
void log_command(const std::string& command);
void log_free(void); void log_free(void);

View File

@@ -14,7 +14,7 @@ main(s32 argc, char* argv[])
{ {
State state; State state;
log_init(preferences_path_get() + LOG_PATH); log_init();
if (argc > 0 && argv[1]) if (argc > 0 && argv[1])
{ {