From 13ca3cec56cba09e8bbf827a2c510374c19b24ec Mon Sep 17 00:00:00 2001 From: Julian Smith Date: Wed, 4 May 2022 17:51:50 +0100 Subject: [PATCH] simgear/screen/video-encoder*: build fixes for ffmpeg code on Windows. simgear/screen/video-encoder-internal.hxx: Fixed initialisation of AVRational instance to work on Windows. simgear/screen/video-encoder.cxx: av_log(): vasprintf() is not available on Windows so use fixed buffer on Windows. --- simgear/screen/video-encoder-internal.hxx | 2 +- simgear/screen/video-encoder.cxx | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/simgear/screen/video-encoder-internal.hxx b/simgear/screen/video-encoder-internal.hxx index 9f905dcb..9b5b4346 100644 --- a/simgear/screen/video-encoder-internal.hxx +++ b/simgear/screen/video-encoder-internal.hxx @@ -279,7 +279,7 @@ struct FfmpegEncoder /* Resolution must be a multiple of two. */ m_codec_context->width = width / 2 * 2; m_codec_context->height = height / 2 * 2; - m_codec_context->time_base = (AVRational){ 1, 60 }; + m_codec_context->time_base = AVRational{ 1, 60 }; //m_codec_context->gop_size = 12; /* emit one intra m_frame every twelve frames at most */ m_codec_context->pix_fmt = AV_PIX_FMT_YUV420P; /* Some formats want m_stream headers to be separate. */ diff --git a/simgear/screen/video-encoder.cxx b/simgear/screen/video-encoder.cxx index 29b26c59..5597b0de 100644 --- a/simgear/screen/video-encoder.cxx +++ b/simgear/screen/video-encoder.cxx @@ -170,10 +170,18 @@ static void av_log(void* /*avcl*/, int level, const char* format, va_list va) if (level < 44) sglevel = SG_DEBUG; if (level < 54) sglevel = SG_BULK; else sglevel = SG_BULK; - char* message = nullptr; - vasprintf(&message, format, va); + #ifdef _WIN32 + /* Windows does not have vasprintf(). */ + char message[200]; + vsnprintf(message, sizeof(message), format, va); + #else + char* message = nullptr; + vasprintf(&message, format, va); + #endif SG_LOG(SG_VIEW, sglevel, "level=" << level << ": " << message); - free(message); + #ifndef _WIN32 + free(message); + #endif } VideoEncoder::VideoEncoder(