diff options
author | XhmikosR <xhmikosr@users.sourceforge.net> | 2011-12-03 19:03:20 +0400 |
---|---|---|
committer | XhmikosR <xhmikosr@users.sourceforge.net> | 2011-12-03 19:03:20 +0400 |
commit | e7183fa2f8f6c6f489f029c7d8105a976306f44b (patch) | |
tree | bfe1dac3b4307a6b61544148bbe7456355925c53 /src/thirdparty/VirtualDub/Kasumi | |
parent | a57b95993949656236b352ebd66db1ecf2eaf7d5 (diff) |
update VirtualDub to v1.10.1-test16
git-svn-id: https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@3877 10f7b99b-c216-0410-bff0-8a66a9350fd8
Diffstat (limited to 'src/thirdparty/VirtualDub/Kasumi')
4 files changed, 45 insertions, 27 deletions
diff --git a/src/thirdparty/VirtualDub/Kasumi/h/stdafx.h b/src/thirdparty/VirtualDub/Kasumi/h/stdafx.h index 91412a2ea..0ba6b7915 100644 --- a/src/thirdparty/VirtualDub/Kasumi/h/stdafx.h +++ b/src/thirdparty/VirtualDub/Kasumi/h/stdafx.h @@ -17,6 +17,6 @@ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#include <vd2/system/vdtypes.h>
-#include <vd2/system/math.h>
+#include <vd2/system/math.h> // MPC-HC patch
#include <vd2/Kasumi/pixmap.h>
-#include <uberblit.h>
+#include <uberblit.h>
\ No newline at end of file diff --git a/src/thirdparty/VirtualDub/Kasumi/source/pixmaputils.cpp b/src/thirdparty/VirtualDub/Kasumi/source/pixmaputils.cpp index d43335a1b..185b39c8d 100644 --- a/src/thirdparty/VirtualDub/Kasumi/source/pixmaputils.cpp +++ b/src/thirdparty/VirtualDub/Kasumi/source/pixmaputils.cpp @@ -17,6 +17,7 @@ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#include <stdafx.h>
+#include <vd2/system/error.h>
#include <vd2/system/vdtypes.h>
#include <vd2/Kasumi/pixmaputils.h>
#include <vd2/system/memory.h>
@@ -414,17 +415,25 @@ void VDPixmapBuffer::init(sint32 width, sint32 height, int f) { sint32 subh = -(-height >> srcinfo.auxhbits);
ptrdiff_t mainpitch = (srcinfo.qsize * qw + 15) & ~15;
ptrdiff_t subpitch = (srcinfo.auxsize * subw + 15) & ~15;
- size_t mainsize = mainpitch * qh;
- size_t subsize = subpitch * subh;
- size_t totalsize = mainsize + subsize*srcinfo.auxbufs + 4 * srcinfo.palsize;
+ uint64 mainsize = (uint64)mainpitch * qh;
+ uint64 subsize = (uint64)subpitch * subh;
+ uint64 totalsize64 = mainsize + subsize*srcinfo.auxbufs + 4 * srcinfo.palsize;
#ifdef _DEBUG
- totalsize += 28;
+ totalsize64 += 28;
#endif
+ // reject huge allocations
+ if (totalsize64 > (size_t)-1 - 4096)
+ throw MyMemoryError();
+
+ size_t totalsize = (uint32)totalsize64;
+
if (mLinearSize != totalsize) {
clear();
- mpBuffer = new char[totalsize + 15];
+ mpBuffer = new_nothrow char[totalsize + 15];
+ if (!mpBuffer)
+ throw MyMemoryError(totalsize + 15);
mLinearSize = totalsize;
}
@@ -474,54 +483,63 @@ void VDPixmapBuffer::init(sint32 width, sint32 height, int f) { #endif
}
-void VDPixmapBuffer::init(const VDPixmapLayout& layout) {
+void VDPixmapBuffer::init(const VDPixmapLayout& layout, uint32 additionalPadding) {
const VDPixmapFormatInfo& srcinfo = VDPixmapGetInfo(layout.format);
sint32 qw = (layout.w + srcinfo.qw - 1) / srcinfo.qw;
sint32 qh = -(-layout.h >> srcinfo.qhbits);
sint32 subw = -(-layout.w >> srcinfo.auxwbits);
sint32 subh = -(-layout.h >> srcinfo.auxhbits);
- ptrdiff_t mino=0, maxo=0;
+ sint64 mino=0, maxo=0;
if (layout.pitch < 0) {
- mino = std::min<ptrdiff_t>(mino, layout.data + layout.pitch * (qh-1));
- maxo = std::max<ptrdiff_t>(maxo, layout.data - layout.pitch);
+ mino = std::min<sint64>(mino, layout.data + (sint64)layout.pitch * (qh-1));
+ maxo = std::max<sint64>(maxo, layout.data - (sint64)layout.pitch);
} else {
- mino = std::min<ptrdiff_t>(mino, layout.data);
- maxo = std::max<ptrdiff_t>(maxo, layout.data + layout.pitch*qh);
+ mino = std::min<sint64>(mino, layout.data);
+ maxo = std::max<sint64>(maxo, layout.data + (sint64)layout.pitch*qh);
}
if (srcinfo.auxbufs >= 1) {
if (layout.pitch2 < 0) {
- mino = std::min<ptrdiff_t>(mino, layout.data2 + layout.pitch2 * (subh-1));
- maxo = std::max<ptrdiff_t>(maxo, layout.data2 - layout.pitch2);
+ mino = std::min<sint64>(mino, layout.data2 + (sint64)layout.pitch2 * (subh-1));
+ maxo = std::max<sint64>(maxo, layout.data2 - (sint64)layout.pitch2);
} else {
- mino = std::min<ptrdiff_t>(mino, layout.data2);
- maxo = std::max<ptrdiff_t>(maxo, layout.data2 + layout.pitch2*subh);
+ mino = std::min<sint64>(mino, layout.data2);
+ maxo = std::max<sint64>(maxo, layout.data2 + (sint64)layout.pitch2*subh);
}
if (srcinfo.auxbufs >= 2) {
if (layout.pitch3 < 0) {
- mino = std::min<ptrdiff_t>(mino, layout.data3 + layout.pitch3 * (subh-1));
- maxo = std::max<ptrdiff_t>(maxo, layout.data3 - layout.pitch3);
+ mino = std::min<sint64>(mino, layout.data3 + (sint64)layout.pitch3 * (subh-1));
+ maxo = std::max<sint64>(maxo, layout.data3 - (sint64)layout.pitch3);
} else {
- mino = std::min<ptrdiff_t>(mino, layout.data3);
- maxo = std::max<ptrdiff_t>(maxo, layout.data3 + layout.pitch3*subh);
+ mino = std::min<sint64>(mino, layout.data3);
+ maxo = std::max<sint64>(maxo, layout.data3 + (sint64)layout.pitch3*subh);
}
}
}
- ptrdiff_t linsize = ((maxo - mino + 3) & ~(uintptr)3);
+ sint64 linsize64 = ((maxo - mino + 3) & ~(uint64)3);
- ptrdiff_t totalsize = linsize + 4*srcinfo.palsize;
+ sint64 totalsize64 = linsize64 + 4*srcinfo.palsize + additionalPadding;
#ifdef _DEBUG
- totalsize += 28;
+ totalsize64 += 28;
#endif
+ // reject huge allocations
+ if (totalsize64 > (size_t)-1 - 4096)
+ throw MyMemoryError();
+
+ size_t totalsize = (uint32)totalsize64;
+ ptrdiff_t linsize = (uint32)linsize64;
+
if (mLinearSize != totalsize) {
clear();
- mpBuffer = new char[totalsize + 15];
+ mpBuffer = new_nothrow char[totalsize + 15];
+ if (!mpBuffer)
+ throw MyMemoryError(totalsize + 15);
mLinearSize = totalsize;
}
diff --git a/src/thirdparty/VirtualDub/Kasumi/source/resample_stages_x64.cpp b/src/thirdparty/VirtualDub/Kasumi/source/resample_stages_x64.cpp index 5d2cd6fa3..50e623ef0 100644 --- a/src/thirdparty/VirtualDub/Kasumi/source/resample_stages_x64.cpp +++ b/src/thirdparty/VirtualDub/Kasumi/source/resample_stages_x64.cpp @@ -1,4 +1,4 @@ -#include <stdafx.h>
+#include <stdafx.h> // MPC-HC patch
#include "resample_stages_x64.h"
extern "C" long vdasm_resize_table_col_SSE2(uint32 *out, const uint32 *const*in_table, const int *filter, int filter_width, uint32 w);
diff --git a/src/thirdparty/VirtualDub/Kasumi/source/stdafx.cpp b/src/thirdparty/VirtualDub/Kasumi/source/stdafx.cpp index 8eed47b75..13d8f1350 100644 --- a/src/thirdparty/VirtualDub/Kasumi/source/stdafx.cpp +++ b/src/thirdparty/VirtualDub/Kasumi/source/stdafx.cpp @@ -16,4 +16,4 @@ // along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-#include "stdafx.h"
+#include "stdafx.h"
\ No newline at end of file |