diff options
-rw-r--r-- | .SRCINFO | 10 | ||||
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | PKGBUILD | 43 | ||||
-rw-r--r-- | mathops_fix.patch | 76 |
4 files changed, 107 insertions, 23 deletions
@@ -1,11 +1,8 @@ -# Generated by mksrcinfo v8 -# Sat Aug 27 10:32:56 UTC 2016 pkgbase = openhevc-git pkgdesc = A open HEVC decoder. (GIT Version) - pkgver = r2070.20160819.dc94771 + pkgver = r2075.20170530.7c37bd65 pkgrel = 1 url = http://openhevc.github.io/openHEVC - arch = i686 arch = x86_64 license = LGPL2.1 makedepends = git @@ -16,7 +13,8 @@ pkgbase = openhevc-git provides = openhevc conflicts = openhevc source = openhevc::git+https://github.com/OpenHEVC/openHEVC.git#branch=hevc_rext - sha1sums = SKIP + source = mathops_fix.patch + sha256sums = SKIP + sha256sums = a50d7da9870a3fd801ad3a4d13d5c9b260acb094cf8bfa4afd95a54741173a7f pkgname = openhevc-git - diff --git a/.gitignore b/.gitignore index 05c6d4d4c97b..ce84b2113c72 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ !.gitignore !.SRCINFO !PKGBUILD +!mathops_fix.patch @@ -1,23 +1,31 @@ # Maintainer: Gustavo Alvarez <sl1pkn07@gmail.com> pkgname=openhevc-git -pkgver=r2070.20160819.dc94771 +pkgver=r2075.20170530.7c37bd65 pkgrel=1 pkgdesc="A open HEVC decoder. (GIT Version)" -arch=('i686' 'x86_64') +arch=('x86_64') url='http://openhevc.github.io/openHEVC' license=('LGPL2.1') -depends=('sdl' - 'sdl2' - ) -makedepends=('git' - 'cmake' - 'yasm' - ) +depends=( + 'sdl' + 'sdl2' +) +makedepends=( + 'git' + 'cmake' + 'yasm' +) provides=('openhevc') conflicts=('openhevc') -source=('openhevc::git+https://github.com/OpenHEVC/openHEVC.git#branch=hevc_rext') -sha1sums=('SKIP') +source=( + 'openhevc::git+https://github.com/OpenHEVC/openHEVC.git#branch=hevc_rext' + 'mathops_fix.patch' +) +sha256sums=( + 'SKIP' + 'a50d7da9870a3fd801ad3a4d13d5c9b260acb094cf8bfa4afd95a54741173a7f' +) pkgver() { cd openhevc @@ -25,21 +33,22 @@ pkgver() { } prepare() { - mkdir -p build + patch -d openhevc -p1 -i "${srcdir}/mathops_fix.patch" } build() { - cd build - cmake ../openhevc \ + CFLAGS+=' -Wl,--allow-multiple-definition' + cmake -S openhevc -B build \ -DCMAKE_INSTALL_PREFIX=/usr \ - -DCMAKE_BUILD_TYPE=RELEASE \ + -DCMAKE_BUILD_TYPE=None \ -DCMAKE_SKIP_RPATH=ON \ -DBUILD_SHARED_LIBS=ON - make + + cmake --build build } package() { - make -C build DESTDIR="${pkgdir}" install + DESTDIR="${pkgdir}" cmake --install build install -Dm755 build/hevc "${pkgdir}/usr/bin/openhevc" install -Dm755 build/hevc_sdl2 "${pkgdir}/usr/bin/openhevc_sdl2" } diff --git a/mathops_fix.patch b/mathops_fix.patch new file mode 100644 index 000000000000..33fd3d484fb6 --- /dev/null +++ b/mathops_fix.patch @@ -0,0 +1,76 @@ +From effadce6c756247ea8bae32dc13bb3e6f464f0eb Mon Sep 17 00:00:00 2001 +From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= <remi@remlab.net> +Date: Sun, 16 Jul 2023 18:18:02 +0300 +Subject: [PATCH] avcodec/x86/mathops: clip constants used with shift + instructions within inline assembly + +Fixes assembling with binutil as >= 2.41 + +Signed-off-by: James Almer <jamrial@gmail.com> +--- + libavcodec/x86/mathops.h | 26 +++++++++++++++++++++++--- + 1 file changed, 23 insertions(+), 3 deletions(-) + +diff --git a/libavcodec/x86/mathops.h b/libavcodec/x86/mathops.h +index 6298f5ed19..ca7e2dffc1 100644 +--- a/libavcodec/x86/mathops.h ++++ b/libavcodec/x86/mathops.h +@@ -35,12 +35,20 @@ + static av_always_inline av_const int MULL(int a, int b, unsigned shift) + { + int rt, dummy; ++ if (__builtin_constant_p(shift)) + __asm__ ( + "imull %3 \n\t" + "shrdl %4, %%edx, %%eax \n\t" + :"=a"(rt), "=d"(dummy) +- :"a"(a), "rm"(b), "ci"((uint8_t)shift) ++ :"a"(a), "rm"(b), "i"(shift & 0x1F) + ); ++ else ++ __asm__ ( ++ "imull %3 \n\t" ++ "shrdl %4, %%edx, %%eax \n\t" ++ :"=a"(rt), "=d"(dummy) ++ :"a"(a), "rm"(b), "c"((uint8_t)shift) ++ ); + return rt; + } + +@@ -113,19 +121,31 @@ __asm__ volatile(\ + // avoid +32 for shift optimization (gcc should do that ...) + #define NEG_SSR32 NEG_SSR32 + static inline int32_t NEG_SSR32( int32_t a, int8_t s){ ++ if (__builtin_constant_p(s)) + __asm__ ("sarl %1, %0\n\t" + : "+r" (a) +- : "ic" ((uint8_t)(-s)) ++ : "i" (-s & 0x1F) + ); ++ else ++ __asm__ ("sarl %1, %0\n\t" ++ : "+r" (a) ++ : "c" ((uint8_t)(-s)) ++ ); + return a; + } + + #define NEG_USR32 NEG_USR32 + static inline uint32_t NEG_USR32(uint32_t a, int8_t s){ ++ if (__builtin_constant_p(s)) + __asm__ ("shrl %1, %0\n\t" + : "+r" (a) +- : "ic" ((uint8_t)(-s)) ++ : "i" (-s & 0x1F) + ); ++ else ++ __asm__ ("shrl %1, %0\n\t" ++ : "+r" (a) ++ : "c" ((uint8_t)(-s)) ++ ); + return a; + } + +-- +2.30.2 + |