diff options
| author | Mai M <mathew1800@gmail.com> | 2022-04-09 14:19:39 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-04-09 14:19:39 -0400 |
| commit | e932a1bfb71c73da48bb75f660b40b5f2c9de4a1 (patch) | |
| tree | b8fbf5004827bc627e938e54acb9d9da1085f8fb /Source/Core/VideoCommon/FrameDump.cpp | |
| parent | d7709d4122469b4b5c009c6caf3e38e42a74719b (diff) | |
| parent | 3382408b8e2f2b3d9fbd7fd0aad8be0dce3e3af7 (diff) | |
Merge pull request #10571 from AdmiralCurtiss/ffmpeg-custom-pix-fmt
VideoCommon/FrameDump: Allow user to specify a pixel format.
Diffstat (limited to 'Source/Core/VideoCommon/FrameDump.cpp')
| -rw-r--r-- | Source/Core/VideoCommon/FrameDump.cpp | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/Source/Core/VideoCommon/FrameDump.cpp b/Source/Core/VideoCommon/FrameDump.cpp index 9cbc741b51..6ae6c21c37 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; |
