From 86903c93aa86051cac41329165762102ca334f5e Mon Sep 17 00:00:00 2001 From: SummerTail <1525249038@noreply.localhost> Date: Sun, 14 Apr 2024 14:40:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=9B=BE=E5=83=8F=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- avs2bdnxml.c | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/avs2bdnxml.c b/avs2bdnxml.c index 178fc35..2122f09 100644 --- a/avs2bdnxml.c +++ b/avs2bdnxml.c @@ -160,6 +160,7 @@ #include "sup.h" #include "ass.h" #include "abstract_lists.h" +#include // 包含SSE指令集的头文件 /* AVIS input code taken from muxers.c from the x264 project (GPLv2 or later). * Authors: Laurent Aimar @@ -545,10 +546,33 @@ int detect_sse2 () int is_identical (stream_info_t *s_info, char *img, char *img_old) { - if (detect_sse2()) - return asm_is_identical_sse2(s_info, img, img_old); - else - return is_identical_c(s_info, img, img_old); + + // 按128位加载两个图像数据 + __m128i* ptr1 = (__m128i*)img1; + __m128i* ptr2 = (__m128i*)img2; + + // 计算比较的次数(以128位为单位) + int num_iterations = size / 16; + + // 逐一比较图像数据,使用SSE指令进行并行比较 + for (int i = 0; i < num_iterations; ++i) { + __m128i xmm1 = _mm_load_si128(ptr1 + i); // 加载128位数据 + __m128i xmm2 = _mm_load_si128(ptr2 + i); // 加载128位数据 + + // 比较两个128位数据是否相等 + __m128i cmp_result = _mm_cmpeq_epi8(xmm1, xmm2); + + // 判断比较结果是否全为1 + int result_mask = _mm_movemask_epi8(cmp_result); + + // 如果存在不相等的元素,返回0 + if (result_mask != 0xFFFF) { + return 0; + } + } + + // 如果所有元素都相等,返回1 + return 1; } int is_empty (stream_info_t *s_info, char *img)