[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