summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/FrameDump.cpp
diff options
context:
space:
mode:
authorAdmiral H. Curtiss <pikachu025@gmail.com>2022-04-09 00:45:49 +0200
committerAdmiral H. Curtiss <pikachu025@gmail.com>2022-04-09 00:45:49 +0200
commit3382408b8e2f2b3d9fbd7fd0aad8be0dce3e3af7 (patch)
tree0c1ae869bfb6f05901303a616dd42118d39396e1 /Source/Core/VideoCommon/FrameDump.cpp
parent120208ae03d7dd464e05c90dfa14959a591af5ce (diff)
VideoCommon/FrameDump: Allow user to specify a pixel format.
Diffstat (limited to 'Source/Core/VideoCommon/FrameDump.cpp')
-rw-r--r--Source/Core/VideoCommon/FrameDump.cpp30
1 files changed, 21 insertions, 9 deletions
diff --git a/Source/Core/VideoCommon/FrameDump.cpp b/Source/Core/VideoCommon/FrameDump.cpp
index 7054ba11af..d79eec79f3 100644
--- a/Source/Core/VideoCommon/FrameDump.cpp
+++ b/Source/Core/VideoCommon/FrameDump.cpp
@@ -21,6 +21,7 @@ extern "C" {
#include <libavutil/log.h>
#include <libavutil/mathematics.h>
#include <libavutil/opt.h>
+#include <libavutil/pixdesc.h>
#include <libswscale/swscale.h>
}
@@ -249,20 +250,31 @@ bool FrameDump::CreateVideoFile()
m_context->codec->gop_size = 1;
m_context->codec->level = 1;
- if (m_context->codec->codec_id == AV_CODEC_ID_FFV1)
+ AVPixelFormat pix_fmt = AV_PIX_FMT_NONE;
+
+ const std::string& pixel_format_string = g_Config.sDumpPixelFormat;
+ if (!pixel_format_string.empty())
{
- m_context->codec->pix_fmt = AV_PIX_FMT_BGR0;
+ pix_fmt = av_get_pix_fmt(pixel_format_string.c_str());
+ if (pix_fmt == AV_PIX_FMT_NONE)
+ WARN_LOG_FMT(FRAMEDUMP, "Invalid pixel format {}", pixel_format_string);
}
- else if (m_context->codec->codec_id == AV_CODEC_ID_UTVIDEO)
- {
- m_context->codec->pix_fmt = AV_PIX_FMT_GBRP;
- av_opt_set_int(m_context->codec->priv_data, "pred", 3, 0); // median
- }
- else
+
+ if (pix_fmt == AV_PIX_FMT_NONE)
{
- m_context->codec->pix_fmt = AV_PIX_FMT_YUV420P;
+ if (m_context->codec->codec_id == AV_CODEC_ID_FFV1)
+ pix_fmt = AV_PIX_FMT_BGR0;
+ else if (m_context->codec->codec_id == AV_CODEC_ID_UTVIDEO)
+ pix_fmt = AV_PIX_FMT_GBRP;
+ else
+ pix_fmt = AV_PIX_FMT_YUV420P;
}
+ m_context->codec->pix_fmt = pix_fmt;
+
+ if (m_context->codec->codec_id == AV_CODEC_ID_UTVIDEO)
+ av_opt_set_int(m_context->codec->priv_data, "pred", 3, 0); // median
+
if (output_format->flags & AVFMT_GLOBALHEADER)
m_context->codec->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;