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>2012-09-17 23:00:22 +0400
committerXhmikosR <xhmikosr@users.sourceforge.net>2012-09-17 23:11:15 +0400
commit8dab9e55b7b8b21031335346e895f21ed6b889df (patch)
tree0186b821359bb371348fee4d3778c054fe996bba /src/thirdparty/VirtualDub/Kasumi/source
parentb38aefc1bcc2fc71fd38ce8258c39e49e14648ce (diff)
update VirtualDub to v1.10.3-test6
Diffstat (limited to 'src/thirdparty/VirtualDub/Kasumi/source')
-rw-r--r--src/thirdparty/VirtualDub/Kasumi/source/blt.cpp9
-rw-r--r--src/thirdparty/VirtualDub/Kasumi/source/blt_reference_yuv.cpp23
-rw-r--r--src/thirdparty/VirtualDub/Kasumi/source/region.cpp15
3 files changed, 28 insertions, 19 deletions
diff --git a/src/thirdparty/VirtualDub/Kasumi/source/blt.cpp b/src/thirdparty/VirtualDub/Kasumi/source/blt.cpp
index 7a5d1c7c1..7a3fabea0 100644
--- a/src/thirdparty/VirtualDub/Kasumi/source/blt.cpp
+++ b/src/thirdparty/VirtualDub/Kasumi/source/blt.cpp
@@ -18,6 +18,7 @@
#include <stdafx.h>
#include <vector>
+#include <malloc.h>
#include <vd2/system/memory.h>
#include <vd2/system/cpuaccel.h>
#include <vd2/system/vdstl.h>
@@ -25,12 +26,6 @@
#include <vd2/Kasumi/pixmaputils.h>
#include <vd2/Kasumi/pixmapops.h>
-#if _MSC_VER >= 1300
- #define VDNOINLINE __declspec(noinline)
-#else
- #define VDNOINLINE
-#endif
-
using namespace nsVDPixmap;
namespace {
@@ -177,7 +172,7 @@ bool VDNOINLINE VDPixmapBltTwoStage(const VDPixmap& dst, const VDPixmap& src, vd
VDPixmap linetmp = {};
if (w < 1024) {
- linetmp.data = _alloca(sizeof(uint32) * w);
+ linetmp.data = alloca(sizeof(uint32) * w);
} else {
tempBuf.resize(w + 1);
linetmp.data = tempBuf.data();
diff --git a/src/thirdparty/VirtualDub/Kasumi/source/blt_reference_yuv.cpp b/src/thirdparty/VirtualDub/Kasumi/source/blt_reference_yuv.cpp
index ffd96052f..51c8afe28 100644
--- a/src/thirdparty/VirtualDub/Kasumi/source/blt_reference_yuv.cpp
+++ b/src/thirdparty/VirtualDub/Kasumi/source/blt_reference_yuv.cpp
@@ -21,6 +21,7 @@
#include <vd2/system/vdstl.h>
#include <vd2/system/cpuaccel.h>
#include <vd2/system/memory.h>
+#include <vd2/system/win32/intrin.h>
#include <vd2/Kasumi/pixmap.h>
#include <vd2/Kasumi/pixmaputils.h>
@@ -1174,7 +1175,7 @@ void VDPixmapBlt_YUVPlanar_decode_reference(const VDPixmap& dst, const VDPixmap&
#ifdef _M_IX86
if (cpuflags & CPUF_SUPPORTS_MMX) {
- __asm emms
+ _mm_empty();
}
#endif
}
@@ -1308,7 +1309,7 @@ namespace {
#ifdef _M_IX86
if (cpuflags & CPUF_SUPPORTS_MMX) {
- __asm emms
+ _mm_empty();
}
#endif
}
@@ -1360,7 +1361,7 @@ DECLARE_YUV_PLANAR(YUV411, XRGB1555) {
vdpixsize wt;
if (wpairs > 0) {
-#ifdef _M_AMD64
+#if !defined(VD_CPU_X86)
wt = wpairs;
do {
@@ -1405,8 +1406,8 @@ DECLARE_YUV_PLANAR(YUV411, XRGB1555) {
vdptrstep(crrow, crpitch);
} while(--h);
-#ifndef _M_AMD64
- __asm emms
+#ifdef VD_CPU_X86
+ _mm_empty();
#endif
}
@@ -1431,7 +1432,7 @@ DECLARE_YUV_PLANAR(YUV411, RGB565) {
vdpixsize wt;
if (wpairs > 0) {
-#if _M_AMD64
+#if !defined(VD_CPU_X86)
wt = wpairs;
do {
@@ -1472,8 +1473,8 @@ DECLARE_YUV_PLANAR(YUV411, RGB565) {
vdptrstep(crrow, crpitch);
} while(--h);
-#ifndef _M_AMD64
- __asm emms
+#ifdef VD_CPU_X86
+ _mm_empty();
#endif
}
@@ -1558,7 +1559,7 @@ DECLARE_YUV_PLANAR(YUV411, XRGB8888) {
vdpixsize wt;
if (wpairs > 0) {
-#ifdef _M_AMD64
+#if !defined(VD_CPU_X86)
wt = wpairs;
do {
@@ -1603,7 +1604,7 @@ DECLARE_YUV_PLANAR(YUV411, XRGB8888) {
vdptrstep(crrow, crpitch);
} while(--h);
-#ifndef _M_AMD64
- __asm emms
+#ifdef VD_CPU_X86
+ _mm_empty();
#endif
}
diff --git a/src/thirdparty/VirtualDub/Kasumi/source/region.cpp b/src/thirdparty/VirtualDub/Kasumi/source/region.cpp
index de605abc0..b8b607ef0 100644
--- a/src/thirdparty/VirtualDub/Kasumi/source/region.cpp
+++ b/src/thirdparty/VirtualDub/Kasumi/source/region.cpp
@@ -23,6 +23,10 @@
#include <vd2/system/math.h>
#include <vd2/system/vdstl.h>
+void VDPixmapRegion::clear() {
+ mSpans.clear();
+}
+
void VDPixmapRegion::swap(VDPixmapRegion& x) {
mSpans.swap(x.mSpans);
std::swap(mBounds, x.mBounds);
@@ -1344,9 +1348,15 @@ a_start:
dst.mSpans.resize(dstp - dst.mSpans.data());
}
-void VDPixmapConvolveRegion(VDPixmapRegion& dst, const VDPixmapRegion& r1, const VDPixmapRegion& r2) {
+void VDPixmapConvolveRegion(VDPixmapRegion& dst, const VDPixmapRegion& r1, const VDPixmapRegion& r2, VDPixmapRegion *tempCache) {
VDPixmapRegion temp;
+ if (tempCache) {
+ tempCache->swap(temp);
+
+ temp.clear();
+ }
+
const uint32 *src1 = r2.mSpans.data();
const uint32 *src2 = src1 + r2.mSpans.size();
@@ -1359,4 +1369,7 @@ void VDPixmapConvolveRegion(VDPixmapRegion& dst, const VDPixmapRegion& r1, const
temp.mSpans.swap(dst.mSpans);
VDPixmapConvolveRegion(dst, temp, r1, (p1 & 0xffff) - 0x8000, (p2 & 0xffff) - 0x8000, (p1 >> 16) - 0x8000);
}
+
+ if (tempCache)
+ tempCache->swap(temp);
}