[SCM] handbrake/master: Embed non-public cpu detection algorithm
siretart at users.alioth.debian.org
siretart at users.alioth.debian.org
Sat Feb 15 15:18:07 UTC 2014
The following commit has been merged in the master branch:
commit 564b8f005ae223dabf632eecefb53ba569ab67f9
Author: Reinhard Tartler <siretart at tauware.de>
Date: Sat Feb 15 13:52:57 2014 +0000
Embed non-public cpu detection algorithm
Patch provided from Upstream
diff --git a/debian/patches/0020-include-cpuid.patch b/debian/patches/0020-include-cpuid.patch
new file mode 100644
index 0000000..d670313
--- /dev/null
+++ b/debian/patches/0020-include-cpuid.patch
@@ -0,0 +1,118 @@
+From: John Stebbins <stebbins at jetheaddev.com>
+Description: cpuid is not exported in libavutil, and needs to be embedded here
+
+Patch currently under review upstream, needs testing on mac and windows
+before inclusion, which is not relevant for Debian.
+
+--- a/libhb/ports.c
++++ b/libhb/ports.c
+@@ -264,6 +264,24 @@ const char* hb_get_cpu_platform_name()
+ }
+ }
+
++#if ARCH_X86_64
++# define REG_b "rbx"
++# define REG_S "rsi"
++#elif ARCH_X86_32
++# define REG_b "ebx"
++# define REG_S "esi"
++#endif // ARCH_X86_32
++
++#if ARCH_X86_64 || ARCH_X86_32
++#define cpuid(index, eax, ebx, ecx, edx) \
++ __asm__ volatile ( \
++ "mov %%"REG_b", %%"REG_S" \n\t" \
++ "cpuid \n\t" \
++ "xchg %%"REG_b", %%"REG_S \
++ : "=a" (eax), "=S" (ebx), "=c" (ecx), "=d" (edx) \
++ : "0" (index))
++#endif // ARCH_X86_64 || ARCH_X86_32
++
+ static void init_cpu_info()
+ {
+ hb_cpu_info.name = NULL;
+@@ -272,9 +290,10 @@ static void init_cpu_info()
+
+ if (av_get_cpu_flags() & AV_CPU_FLAG_SSE)
+ {
++#if ARCH_X86_64 || ARCH_X86_32
+ int eax, ebx, ecx, edx, family, model;
+
+- ff_cpu_cpuid(1, &eax, &ebx, &ecx, &edx);
++ cpuid(1, eax, ebx, ecx, edx);
+ family = ((eax >> 8) & 0xf) + ((eax >> 20) & 0xff);
+ model = ((eax >> 4) & 0xf) + ((eax >> 12) & 0xf0);
+
+@@ -323,24 +342,24 @@ static void init_cpu_info()
+ // Intel 64 and IA-32 Architectures Software Developer's Manual, Vol. 2A
+ // Figure 3-8: Determination of Support for the Processor Brand String
+ // Table 3-17: Information Returned by CPUID Instruction
+- ff_cpu_cpuid(0x80000000, &eax, &ebx, &ecx, &edx);
++ cpuid(0x80000000, eax, ebx, ecx, edx);
+ if ((eax & 0x80000004) < 0x80000004)
+ {
+- ff_cpu_cpuid(0x80000002,
+- (int*)&hb_cpu_info.buf[ 0],
+- (int*)&hb_cpu_info.buf[ 4],
+- (int*)&hb_cpu_info.buf[ 8],
+- (int*)&hb_cpu_info.buf[12]);
+- ff_cpu_cpuid(0x80000003,
+- (int*)&hb_cpu_info.buf[16],
+- (int*)&hb_cpu_info.buf[20],
+- (int*)&hb_cpu_info.buf[24],
+- (int*)&hb_cpu_info.buf[28]);
+- ff_cpu_cpuid(0x80000004,
+- (int*)&hb_cpu_info.buf[32],
+- (int*)&hb_cpu_info.buf[36],
+- (int*)&hb_cpu_info.buf[40],
+- (int*)&hb_cpu_info.buf[44]);
++ cpuid(0x80000002,
++ *(int*)&hb_cpu_info.buf[ 0],
++ *(int*)&hb_cpu_info.buf[ 4],
++ *(int*)&hb_cpu_info.buf[ 8],
++ *(int*)&hb_cpu_info.buf[12]);
++ cpuid(0x80000003,
++ *(int*)&hb_cpu_info.buf[16],
++ *(int*)&hb_cpu_info.buf[20],
++ *(int*)&hb_cpu_info.buf[24],
++ *(int*)&hb_cpu_info.buf[28]);
++ cpuid(0x80000004,
++ *(int*)&hb_cpu_info.buf[32],
++ *(int*)&hb_cpu_info.buf[36],
++ *(int*)&hb_cpu_info.buf[40],
++ *(int*)&hb_cpu_info.buf[44]);
+
+ hb_cpu_info.name = hb_cpu_info.buf;
+ hb_cpu_info.buf[47] = '\0'; // just in case
+@@ -351,6 +370,7 @@ static void init_cpu_info()
+ hb_cpu_info.name++;
+ }
+ }
++#endif // ARCH_X86_64 || ARCH_X86_32
+ }
+ }
+
+--- a/libhb/ports.h
++++ b/libhb/ports.h
+@@ -33,7 +33,6 @@ int hb_get_cpu_count();
+ int hb_get_cpu_platform();
+ const char* hb_get_cpu_name();
+ const char* hb_get_cpu_platform_name();
+-extern void ff_cpu_cpuid(int index, int *eax, int *ebx, int *ecx, int *edx);
+
+ /************************************************************************
+ * Utils
+--- a/make/configure.py
++++ b/make/configure.py
+@@ -1738,6 +1738,11 @@ int main ()
+ doc.add( 'GCC.sysroot', '' )
+ doc.add( 'GCC.minver', '' )
+
++ if build.match( 'i?86-*' ):
++ doc.add( 'LIBHB.GCC.D', 'ARCH_X86_32', append=True )
++ elif build.match( 'x86_64-*' ):
++ doc.add( 'LIBHB.GCC.D', 'ARCH_X86_64', append=True )
++
+ if options.enable_asm and ( not Tools.yasm.fail or options.enable_local_yasm ):
+ asm = ''
+ if build.match( 'i?86-*' ):
diff --git a/debian/patches/series b/debian/patches/series
index e7bb305..a71afd7 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -4,3 +4,4 @@
0014-Use-unpatched-a52.patch
0016-use-older-libmkv.patch
0017-fixup-libmkv.patch
+0020-include-cpuid.patch
--
handbrake packaging
More information about the pkg-multimedia-commits
mailing list