mirror of
https://gitdl.cn/https://github.com/chakralinux/desktop.git
synced 2025-01-25 11:02:13 +08:00
136 lines
4.3 KiB
Diff
136 lines
4.3 KiB
Diff
diff --git a/avidemux/ADM_coreImage/src/ADM_interlaceUtil.cpp b/avidemux/ADM_coreImage/src/ADM_interlaceUtil.cpp
|
|
index 33b2a7f..99f0664 100644
|
|
--- a/avidemux/ADM_coreImage/src/ADM_interlaceUtil.cpp
|
|
+++ b/avidemux/ADM_coreImage/src/ADM_interlaceUtil.cpp
|
|
@@ -30,19 +30,8 @@ Skip factor=2
|
|
***************************************************************************/
|
|
|
|
#include "ADM_default.h"
|
|
-
|
|
-//#include "ADM_editor/ADM_edit.hxx"
|
|
#include "ADM_videoFilter.h"
|
|
|
|
-//#define MMX_TRACE
|
|
-#warning remove mmxmacro and debug asm
|
|
-//#define ASM_ILACING
|
|
-
|
|
-
|
|
-#include "ADM_mmxMacros.h"
|
|
-
|
|
-
|
|
-
|
|
|
|
#define SKIP_FACTOR 2 // 2^SKIPFACTOR=SKIP_LINEAR+1
|
|
#define SKIP_LINEAR 3
|
|
@@ -62,7 +51,7 @@ Skip factor=2
|
|
*/
|
|
|
|
#if defined(ADM_CPU_X86) && defined(ASM_ILACING)
|
|
-
|
|
+#warning REWRITE IN PLAIN ASM
|
|
static uint32_t ADMVideo_interlaceCount_MMX( uint8_t *src ,uint32_t w, uint32_t h);
|
|
static uint8_t * FUNNY_MANGLE(_l_p) =NULL;
|
|
static uint8_t * FUNNY_MANGLE(_l_c) =NULL;
|
|
diff --git a/avidemux/ADM_coreImage/src/ADM_vidFieldASM.cpp b/avidemux/ADM_coreImage/src/ADM_vidFieldASM.cpp
|
|
index 61d11d4..479731c 100644
|
|
--- a/avidemux/ADM_coreImage/src/ADM_vidFieldASM.cpp
|
|
+++ b/avidemux/ADM_coreImage/src/ADM_vidFieldASM.cpp
|
|
@@ -20,15 +20,13 @@
|
|
***************************************************************************/
|
|
|
|
#include "ADM_default.h"
|
|
-
|
|
#include "ADM_videoFilter.h"
|
|
-
|
|
#include"ADM_vidField.h"
|
|
|
|
#ifdef ADM_CPU_X86
|
|
// #define DEBUG_DEINT 1
|
|
// #define MMX_TRACE 1
|
|
- #include "ADM_mmxMacros.h"
|
|
+// #include "ADM_mmxMacros.h"
|
|
|
|
void myDeintASM(void);
|
|
|
|
@@ -36,25 +34,27 @@
|
|
static uint8_t * FUNNY_MANGLE(_l_p) , * FUNNY_MANGLE(_l_c) ,* FUNNY_MANGLE(_l_n);
|
|
static uint8_t * FUNNY_MANGLE(_l_e) , * FUNNY_MANGLE(_l_e2);
|
|
#define EXPAND(x) (x)+((x)<<16)+((x)<<32) +((x)<<48)
|
|
-static mmx_t _mmTHRESH1;
|
|
-static mmx_t _mmTHRESH2;
|
|
+static uint64_t __attribute__((used)) __attribute__ ((__aligned__ (8))) FUNNY_MANGLE(_mmTHRESH1) ;
|
|
+static uint64_t __attribute__((used)) __attribute__ ((__aligned__ (8))) FUNNY_MANGLE(_mmTHRESH2) ;
|
|
|
|
-#define COMPUTE_MMX \
|
|
-punpcklbw_r2r(mm5,mm0); /*c expand 4 bytes -> 4 word */ \
|
|
-punpcklbw_r2r(mm5,mm1); /*p*/ \
|
|
-punpcklbw_r2r(mm5,mm2); /* n*/ \
|
|
-movq_r2r(mm0,mm3); /* mm3 also c*/ \
|
|
-psubw_r2r(mm1,mm0) ; /* mm0=mm0-mm1 = c-p*/ \
|
|
-psubw_r2r(mm2,mm3) ; /* mm3=mm3-mm2 = c-n*/ \
|
|
-psraw_i2r(1,mm0); /* to protect from overflow*/ \
|
|
-psraw_i2r(1,mm3);\
|
|
-pmullw_r2r(mm0,mm3); /* mm3=(c-p)*(c-n) / 4;*/ \
|
|
-movq_r2r(mm3,mm0) ; /* mm0 also c-p*c-n */ \
|
|
-pcmpgtw_r2r(mm4,mm3); /* keep only > size*/ \
|
|
-pcmpgtw_r2r(mm6,mm0); /* keep only > size*/ \
|
|
-packsswb_r2r(mm5,mm0); \
|
|
-packsswb_r2r(mm5,mm3);
|
|
|
|
+#define COMPUTE_MMX \
|
|
+__asm__ __volatile__(\
|
|
+"punpcklbw %%mm5,%%mm0\n\t" \
|
|
+"punpcklbw %%mm5,%%mm1\n\t" \
|
|
+"punpcklbw %%mm5,%%mm2\n\t" \
|
|
+"movq %%mm0,%%mm3\n\t" \
|
|
+"psubw %%mm1,%%mm0\n\t" \
|
|
+"psubw %%mm2,%%mm3\n\t" \
|
|
+"psraw $1,%%mm0\n\t" \
|
|
+"psraw $1,%%mm3\n\t" \
|
|
+"pmullw %%mm0,%%mm3\n\t" \
|
|
+"movq %%mm3,%%mm0\n\t" \
|
|
+"pcmpgtw %%mm4,%%mm3\n\t" \
|
|
+"pcmpgtw %%mm6,%%mm0\n\t" \
|
|
+"packsswb %%mm5,%%mm0\n\t" \
|
|
+"packsswb %%mm5,%%mm3\n\t" \
|
|
+::)
|
|
#endif
|
|
|
|
void ADMVideoFields::hasMotion_C(uint8_t *p,uint8_t *c,
|
|
@@ -90,8 +90,8 @@ void ADMVideoFields::hasMotion_MMX(uint8_t *p,uint8_t *c,
|
|
{
|
|
|
|
|
|
- _mmTHRESH1.uq=EXPAND((uint64_t ) ((_param->motion_trigger*_param->motion_trigger)>>2) );
|
|
- _mmTHRESH2.uq=EXPAND((uint64_t ) ((_param->blend_trigger*_param->blend_trigger)>>2) );
|
|
+ _mmTHRESH1=EXPAND((uint64_t ) ((_param->motion_trigger*_param->motion_trigger)>>2) );
|
|
+ _mmTHRESH2=EXPAND((uint64_t ) ((_param->blend_trigger*_param->blend_trigger)>>2) );
|
|
|
|
_l_h=_info.height-2;
|
|
_l_w=_info.width>>2;
|
|
@@ -102,10 +102,11 @@ void ADMVideoFields::hasMotion_MMX(uint8_t *p,uint8_t *c,
|
|
_l_e=e;
|
|
_l_e2=e2;
|
|
// printf("\n MMX \n");
|
|
-
|
|
- pxor_r2r(mm5,mm5);
|
|
- movq_m2r(_mmTHRESH1,mm4);
|
|
- movq_m2r(_mmTHRESH2,mm6);
|
|
+ __asm__ __volatile__ (
|
|
+ "pxor %%mm5,%%mm5\n\t"
|
|
+ "movq "Mangle(_mmTHRESH1)",%%mm4\n\t"
|
|
+ "movq "Mangle(_mmTHRESH2)",%%mm6\n\t"
|
|
+ ::);
|
|
myDeintASM();
|
|
}
|
|
#if !defined(DEBUG_DEINT)
|
|
@@ -149,7 +150,7 @@ void myDeintASM(void)
|
|
:
|
|
: "eax", "ecx","edx","esi"
|
|
);
|
|
- emms();
|
|
+ __asm__ __volatile__ ("emms");
|
|
|
|
}
|
|
#else
|