Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mpc-hc/mpc-hc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXhmikosR <xhmikosr@users.sourceforge.net>2011-12-03 19:03:20 +0400
committerXhmikosR <xhmikosr@users.sourceforge.net>2011-12-03 19:03:20 +0400
commite7183fa2f8f6c6f489f029c7d8105a976306f44b (patch)
treebfe1dac3b4307a6b61544148bbe7456355925c53 /src/thirdparty/VirtualDub/Kasumi
parenta57b95993949656236b352ebd66db1ecf2eaf7d5 (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')
-rw-r--r--src/thirdparty/VirtualDub/Kasumi/h/stdafx.h4
-rw-r--r--src/thirdparty/VirtualDub/Kasumi/source/pixmaputils.cpp64
-rw-r--r--src/thirdparty/VirtualDub/Kasumi/source/resample_stages_x64.cpp2
-rw-r--r--src/thirdparty/VirtualDub/Kasumi/source/stdafx.cpp2
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