summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon
diff options
context:
space:
mode:
authorJordan Woyak <jordan.woyak@gmail.com>2013-02-26 20:47:48 -0500
committerRachel Bryk <RachelBryk@gmail.com>2013-02-26 20:47:48 -0500
commitf1c990069c8d0e54f7aa079e6e2c7b785a0d56db (patch)
tree18095dd31d1b04a5d39352946ca470c8c9ab5efc /Source/Core/VideoCommon
parent46adbfa9ede116aaed876ecf1d3a21002e399910 (diff)
Yell at the user if they change window size while dumping frames, and some other avi dumping stuff.
Diffstat (limited to 'Source/Core/VideoCommon')
-rw-r--r--Source/Core/VideoCommon/Src/AVIDump.cpp18
-rw-r--r--Source/Core/VideoCommon/Src/AVIDump.h6
-rw-r--r--Source/Core/VideoCommon/Src/RenderBase.cpp5
-rw-r--r--Source/Core/VideoCommon/Src/RenderBase.h2
4 files changed, 23 insertions, 8 deletions
diff --git a/Source/Core/VideoCommon/Src/AVIDump.cpp b/Source/Core/VideoCommon/Src/AVIDump.cpp
index c172903b5d..8514e8bd03 100644
--- a/Source/Core/VideoCommon/Src/AVIDump.cpp
+++ b/Source/Core/VideoCommon/Src/AVIDump.cpp
@@ -157,9 +157,21 @@ void AVIDump::Stop()
NOTICE_LOG(VIDEO, "Stop");
}
-void AVIDump::AddFrame(char *data)
+void AVIDump::AddFrame(const u8* data, int w, int h)
{
- AVIStreamWrite(m_streamCompressed, ++m_frameCount, 1, (LPVOID) data, m_bitmap.biSizeImage, AVIIF_KEYFRAME, NULL, &m_byteBuffer);
+ static bool bShownError = false;
+ if ((w != m_bitmap.biWidth || h != m_bitmap.biHeight) && !bShownError)
+ {
+ PanicAlert("You have resized the window while dumping frames.\n"
+ "Nothing sane can be done to handle this.\n"
+ "Your video will likely be broken.");
+ bShownError=true;
+
+ m_bitmap.biWidth = w;
+ m_bitmap.biHeight = h;
+ }
+
+ AVIStreamWrite(m_streamCompressed, ++m_frameCount, 1, const_cast<u8*>(data), m_bitmap.biSizeImage, AVIIF_KEYFRAME, NULL, &m_byteBuffer);
m_totalBytes += m_byteBuffer;
// Close the recording if the file is more than 2gb
// VfW can't properly save files over 2gb in size, but can keep writing to them up to 4gb.
@@ -298,7 +310,7 @@ bool AVIDump::CreateFile()
return true;
}
-void AVIDump::AddFrame(uint8_t *data, int width, int height)
+void AVIDump::AddFrame(const u8* data, int width, int height)
{
avpicture_fill((AVPicture *)s_BGRFrame, data, PIX_FMT_BGR24, width, height);
diff --git a/Source/Core/VideoCommon/Src/AVIDump.h b/Source/Core/VideoCommon/Src/AVIDump.h
index e74df05db4..08ab6be254 100644
--- a/Source/Core/VideoCommon/Src/AVIDump.h
+++ b/Source/Core/VideoCommon/Src/AVIDump.h
@@ -24,6 +24,8 @@
#include <stdint.h>
#endif
+#include "CommonTypes.h"
+
class AVIDump
{
private:
@@ -36,11 +38,11 @@ class AVIDump
public:
#ifdef _WIN32
static bool Start(HWND hWnd, int w, int h);
- static void AddFrame(char *data);
#else
static bool Start(int w, int h);
- static void AddFrame(uint8_t *data, int width, int height);
#endif
+ static void AddFrame(const u8* data, int width, int height);
+
static void Stop();
};
diff --git a/Source/Core/VideoCommon/Src/RenderBase.cpp b/Source/Core/VideoCommon/Src/RenderBase.cpp
index 8e1d012fa2..90a09aec43 100644
--- a/Source/Core/VideoCommon/Src/RenderBase.cpp
+++ b/Source/Core/VideoCommon/Src/RenderBase.cpp
@@ -83,7 +83,9 @@ unsigned int Renderer::efb_scale_denominatorY = 1;
unsigned int Renderer::ssaa_multiplier = 1;
-Renderer::Renderer() : frame_data(NULL), bLastFrameDumped(false)
+Renderer::Renderer()
+ : frame_data()
+ , bLastFrameDumped(false)
{
UpdateActiveConfig();
TextureCache::OnConfigChanged(g_ActiveConfig);
@@ -110,7 +112,6 @@ Renderer::~Renderer()
if (pFrameDump.IsOpen())
pFrameDump.Close();
#endif
- delete[] frame_data;
}
void Renderer::RenderToXFB(u32 xfbAddr, u32 fbWidth, u32 fbHeight, const EFBRectangle& sourceRc, float Gamma)
diff --git a/Source/Core/VideoCommon/Src/RenderBase.h b/Source/Core/VideoCommon/Src/RenderBase.h
index 5376577cbd..8b5505e082 100644
--- a/Source/Core/VideoCommon/Src/RenderBase.h
+++ b/Source/Core/VideoCommon/Src/RenderBase.h
@@ -147,7 +147,7 @@ protected:
#else
File::IOFile pFrameDump;
#endif
- char* frame_data;
+ std::vector<u8> frame_data;
bool bLastFrameDumped;
// The framebuffer size