gnu: libvpx: Apply bug fixes.

Fixes build on armhf.

* gnu/packages/patches/libvpx-fix-armhf-link.patch,
  gnu/packages/patches/libvpx-fix-ssse3-quantize.patch,
  gnu/packages/patches/libvpx-vp9-out-of-bounds-access.patch: New files.
* gnu-system.am (dist_patch_DATA): Add them.
* gnu/packages/video.scm (libvpx): Add patches.  On armhf, add additional
  configure flags to avoid requiring support for NEON.
This commit is contained in:
Mark H Weaver 2015-02-02 00:22:51 -05:00
parent 38012ed5cd
commit 3b02429c8a
5 changed files with 118 additions and 3 deletions

View file

@ -420,6 +420,9 @@ dist_patch_DATA = \
gnu/packages/patches/libtheora-config-guess.patch \
gnu/packages/patches/libtool-skip-tests.patch \
gnu/packages/patches/libssh-CVE-2014-0017.patch \
gnu/packages/patches/libvpx-fix-armhf-link.patch \
gnu/packages/patches/libvpx-fix-ssse3-quantize.patch \
gnu/packages/patches/libvpx-vp9-out-of-bounds-access.patch \
gnu/packages/patches/lm-sensors-hwmon-attrs.patch \
gnu/packages/patches/lua51-liblua-so.patch \
gnu/packages/patches/luit-posix.patch \

View file

@ -0,0 +1,23 @@
This patch was copied from Debian. It is needed on armhf.
--- a/build/make/configure.sh 2013-12-17 18:18:46.904410454 +0100
+++ b/build/make/configure.sh 2013-12-17 18:19:58.720758736 +0100
@@ -799,7 +799,6 @@
case ${tgt_cc} in
gcc)
- CROSS=${CROSS:-arm-none-linux-gnueabi-}
link_with_cc=gcc
setup_gnu_toolchain
arch_int=${tgt_isa##armv}
@@ -822,10 +821,6 @@
check_add_cflags -mfpu=neon #-ftree-vectorize
check_add_asflags -mfpu=neon
fi
-
- if [ -z "${tune_cpu}" ]; then
- tune_cpu=cortex-a8
- fi
else
check_add_cflags -march=${tgt_isa}
check_add_asflags -march=${tgt_isa}

View file

@ -0,0 +1,32 @@
commit 0d43bd77e5f429467fbd280a7b8f7fbc0bfe1809
Author: Yunqing Wang <yunqingwang@google.com>
Date: Fri Feb 7 14:27:07 2014 -0800
Bug fix in ssse3 quantize function
A bug was reported in Issue 702: "SIGILL (Illegal instruction) when
transcoding with vp9 - using FFmpeg". It was reproduced and fixed.
Change-Id: Ie32c149a89af02856084aeaf289e848a905c7700
diff --git a/vp9/encoder/x86/vp9_quantize_ssse3.asm b/vp9/encoder/x86/vp9_quantize_ssse3.asm
index db30660..48ccef8 100644
--- a/vp9/encoder/x86/vp9_quantize_ssse3.asm
+++ b/vp9/encoder/x86/vp9_quantize_ssse3.asm
@@ -188,7 +188,8 @@ cglobal quantize_%1, 0, %2, 15, coeff, ncoeff, skip, zbin, round, quant, \
pmaxsw m8, m7
pshuflw m7, m8, 0x1
pmaxsw m8, m7
- pextrw [r2], m8, 0
+ pextrw r6, m8, 0
+ mov [r2], r6
RET
; skip-block, i.e. just write all zeroes
@@ -214,5 +215,5 @@ cglobal quantize_%1, 0, %2, 15, coeff, ncoeff, skip, zbin, round, quant, \
%endmacro
INIT_XMM ssse3
-QUANTIZE_FN b, 6
+QUANTIZE_FN b, 7
QUANTIZE_FN b_32x32, 7

View file

@ -0,0 +1,35 @@
Copied from Debian.
# HG changeset patch
# User Ralph Giles <giles@mozilla.com>
# Date 1412209683 25200
# Node ID 6023f0b4f8ba49dd117106cc98cd8007c2142bf6
# Parent 8c431dcec0ffde13988d47eacf341113ea883245
Bug 1063327 - Reject vp9 frames with invalid tiles. r=kinetik, a=abillings
diff --git a/vp9/decoder/vp9_decodframe.c b/vp9/decoder/vp9_decodframe.c
--- a/vp9/decoder/vp9_decodframe.c
+++ b/vp9/decoder/vp9_decodframe.c
@@ -863,16 +863,21 @@ static size_t get_tile(const uint8_t *co
if (!is_last) {
if (!read_is_valid(*data, 4, data_end))
vpx_internal_error(error_info, VPX_CODEC_CORRUPT_FRAME,
"Truncated packet or corrupt tile length");
size = read_be32(*data);
*data += 4;
+
+ if (size > data_end - *data) {
+ vpx_internal_error(error_info, VPX_CODEC_CORRUPT_FRAME,
+ "Truncated packet or corrupt tile size");
+ }
} else {
size = data_end - *data;
}
return size;
}
typedef struct TileBuffer {
const uint8_t *data;

View file

@ -1,7 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2014 David Thompson <davet@gnu.org>
;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;
@ -26,6 +26,7 @@ (define-module (gnu packages video)
#:use-module (guix download)
#:use-module (guix build-system gnu)
#:use-module (guix build-system python)
#:use-module (gnu packages)
#:use-module (gnu packages algebra)
#:use-module (gnu packages avahi)
#:use-module (gnu packages cdrom)
@ -371,10 +372,14 @@ (define-public libvpx
version ".tar.bz2"))
(sha256
(base32
"1aai0h0z1bhp89pxmg4fkrwpmqq24k39fhr15cw6q77m9bccip6k"))))
"1aai0h0z1bhp89pxmg4fkrwpmqq24k39fhr15cw6q77m9bccip6k"))
(patches
(list (search-patch "libvpx-vp9-out-of-bounds-access.patch")
(search-patch "libvpx-fix-ssse3-quantize.patch")
(search-patch "libvpx-fix-armhf-link.patch")))))
(build-system gnu-build-system)
(arguments
'(#:phases (alist-replace
`(#:phases (alist-replace
'configure
(lambda* (#:key outputs #:allow-other-keys)
(setenv "CONFIG_SHELL" (which "bash"))
@ -382,6 +387,23 @@ (define-public libvpx
(zero? (system* "./configure"
"--enable-shared"
"--as=yasm"
,@(if (and (not (%current-target-system))
(string-prefix?
"armhf-"
(%current-system)))
;; When building on ARMv7, libvpx
;; assumes that NEON will be
;; available. On Guix, armhf
;; does not require NEON, so we
;; build for ARMv6 and -marm (since
;; no thumb2 on ARMv6) to ensure
;; compatibility with all ARMv7
;; cores we support. Based on
;; the Debian libvpx package.
'("--target=armv6-linux-gcc"
"--extra-cflags=-marm"
"--enable-small")
'())
(string-append "--prefix=" out)))))
%standard-phases)
#:tests? #f)) ; no check target