svn commit: r478807 - in head/multimedia: . aom aom/files ffmpeg
Jan Beich
jbeich at FreeBSD.org
Sun Sep 2 16:32:24 UTC 2018
Author: jbeich
Date: Sun Sep 2 16:32:21 2018
New Revision: 478807
URL: https://svnweb.freebsd.org/changeset/ports/478807
Log:
multimedia/aom: add new port
AOMedia Video 1 (AV1), is an open, royalty-free video coding format
designed for video transmissions over the Internet. It is being
developed by the Alliance for Open Media (AOMedia), a consortium of
firms from the semiconductor industry, video on demand providers, and
web browser developers, founded in 2015.
https://aomedia.org/
Added:
head/multimedia/aom/
head/multimedia/aom/Makefile (contents, props changed)
head/multimedia/aom/distinfo (contents, props changed)
head/multimedia/aom/files/
head/multimedia/aom/files/patch-aom__ports_arm__cpudetect.c (contents, props changed)
head/multimedia/aom/files/patch-aom__ports_ppc__cpudetect.c (contents, props changed)
head/multimedia/aom/files/patch-av1_encoder_rd.h (contents, props changed)
head/multimedia/aom/files/patch-build_cmake_aom__configure.cmake (contents, props changed)
head/multimedia/aom/files/patch-build_cmake_aom__optimization.cmake (contents, props changed)
head/multimedia/aom/pkg-descr (contents, props changed)
head/multimedia/aom/pkg-plist (contents, props changed)
Modified:
head/multimedia/Makefile (contents, props changed)
head/multimedia/ffmpeg/Makefile (contents, props changed)
Modified: head/multimedia/Makefile
==============================================================================
--- head/multimedia/Makefile Sun Sep 2 16:29:56 2018 (r478806)
+++ head/multimedia/Makefile Sun Sep 2 16:32:21 2018 (r478807)
@@ -10,6 +10,7 @@
SUBDIR += abby
SUBDIR += acidrip
SUBDIR += aegisub
+ SUBDIR += aom
SUBDIR += aravis
SUBDIR += asdcplib
SUBDIR += assimp
Added: head/multimedia/aom/Makefile
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/multimedia/aom/Makefile Sun Sep 2 16:32:21 2018 (r478807)
@@ -0,0 +1,32 @@
+# $FreeBSD$
+
+PORTNAME= aom
+DISTVERSIONPREFIX= v
+DISTVERSION= 1.0.0
+CATEGORIES= multimedia
+MASTER_SITES= LOCAL/jbeich # GitHub mirror is still importing...
+
+MAINTAINER= jbeich at FreeBSD.org
+COMMENT= AV1 Codec Library
+
+LICENSE= BSD2CLAUSE
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+BUILD_DEPENDS= ${BUILD_DEPENDS_${ARCH}}
+BUILD_DEPENDS_amd64= nasm:devel/nasm
+BUILD_DEPENDS_i386= nasm:devel/nasm
+
+USES= cmake:outsource compiler:c++11-lib perl5
+USE_GITHUB= yes
+USE_PERL5= build
+USE_LDCONFIG= yes
+GH_ACCOUNT= jbeich # mirror
+CMAKE_ON= BUILD_SHARED_LIBS
+CMAKE_OFF= ENABLE_DOCS ENABLE_TESTS
+
+post-patch:
+# Extract (snapshot) version from GH_TAGNAME instead of CHANGELOG
+ @${REINPLACE_CMD} 's,$${AOM_ROOT}/CHANGELOG,${GH_TAGNAME:S/^v//},' \
+ ${WRKSRC}/build/cmake/version.cmake
+
+.include <bsd.port.mk>
Added: head/multimedia/aom/distinfo
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/multimedia/aom/distinfo Sun Sep 2 16:32:21 2018 (r478807)
@@ -0,0 +1,3 @@
+TIMESTAMP = 1535885385
+SHA256 (jbeich-aom-v1.0.0_GH0.tar.gz) = c6506418aaaa7cb787d5fd8a67ca3dd749139a6cceab72c6bc76c5f48247635b
+SIZE (jbeich-aom-v1.0.0_GH0.tar.gz) = 2776803
Added: head/multimedia/aom/files/patch-aom__ports_arm__cpudetect.c
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/multimedia/aom/files/patch-aom__ports_arm__cpudetect.c Sun Sep 2 16:32:21 2018 (r478807)
@@ -0,0 +1,77 @@
+- Assume NEON is enabled on aarch64
+- Implement NEON runtime detection on FreeBSD
+
+--- aom_ports/arm_cpudetect.c.orig 2018-06-25 14:54:59 UTC
++++ aom_ports/arm_cpudetect.c
+@@ -38,7 +38,7 @@ static int arm_cpu_env_mask(void) {
+ return env && *env ? (int)strtol(env, NULL, 0) : ~0;
+ }
+
+-#if !CONFIG_RUNTIME_CPU_DETECT
++#if !CONFIG_RUNTIME_CPU_DETECT || defined(__ARM_NEON)
+
+ int arm_cpu_caps(void) {
+ /* This function should actually be a no-op. There is no way to adjust any of
+@@ -143,7 +143,61 @@ int arm_cpu_caps(void) {
+ }
+ return flags & mask;
+ }
+-#else /* end __linux__ */
++#elif defined(__FreeBSD__)
++
++#if 0 // __has_include(<sys/auxv.h>)
++#include <sys/auxv.h>
++#else
++#include <sys/param.h>
++#include <sys/sysctl.h>
++#include <elf.h>
++#include <errno.h>
++#include <unistd.h>
++
++static unsigned long getauxval(unsigned long type) {
++ Elf_Auxinfo auxv[AT_COUNT];
++ size_t len = sizeof(auxv);
++ int mib[] = {
++ CTL_KERN,
++ KERN_PROC,
++ KERN_PROC_AUXV,
++ getpid(),
++ };
++
++ if (sysctl(mib, nitems(mib), auxv, &len, NULL, 0) != -1) {
++ for (size_t i = 0; i < nitems(auxv); i++)
++ if ((unsigned long)auxv[i].a_type == type)
++ return auxv[i].a_un.a_val;
++
++ errno = ENOENT;
++ }
++ return 0;
++}
++#endif
++
++#ifndef AT_HWCAP
++#define AT_HWCAP 25 /* 16 on Linux */
++#endif
++
++#ifndef HWCAP_NEON
++#define HWCAP_NEON (1 << 12)
++#endif
++
++int arm_cpu_caps(void) {
++ int flags;
++ int mask;
++ unsigned long hwcaps;
++ if (!arm_cpu_env_flags(&flags)) {
++ return flags;
++ }
++ mask = arm_cpu_env_mask();
++ hwcaps = getauxval(AT_HWCAP);
++#if HAVE_NEON
++ if (hwcaps & HWCAP_NEON) flags |= HAS_NEON;
++#endif
++ return flags & mask;
++}
++#else /* end __FreeBSD__ */
+ #error \
+ "--enable-runtime-cpu-detect selected, but no CPU detection method " \
+ "available for your platform. Reconfigure with --disable-runtime-cpu-detect."
Added: head/multimedia/aom/files/patch-aom__ports_ppc__cpudetect.c
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/multimedia/aom/files/patch-aom__ports_ppc__cpudetect.c Sun Sep 2 16:32:21 2018 (r478807)
@@ -0,0 +1,68 @@
+- Implement VSX detection on FreeBSD
+
+--- aom_ports/ppc_cpudetect.c.orig 2018-06-25 14:54:59 UTC
++++ aom_ports/ppc_cpudetect.c
+@@ -9,12 +9,6 @@
+ * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
+ */
+
+-#include <fcntl.h>
+-#include <unistd.h>
+-#include <stdint.h>
+-#include <asm/cputable.h>
+-#include <linux/auxvec.h>
+-
+ #include "config/aom_config.h"
+
+ #include "aom_ports/ppc.h"
+@@ -37,6 +31,13 @@ static int cpu_env_mask(void) {
+ return env && *env ? (int)strtol(env, NULL, 0) : ~0;
+ }
+
++#if defined(__linux__)
++#include <fcntl.h>
++#include <unistd.h>
++#include <stdint.h>
++#include <asm/cputable.h>
++#include <linux/auxvec.h>
++
+ int ppc_simd_caps(void) {
+ int flags;
+ int mask;
+@@ -75,6 +76,36 @@ out_close:
+ close(fd);
+ return flags & mask;
+ }
++#elif defined(__FreeBSD__)
++#include <sys/types.h>
++#include <sys/sysctl.h>
++#include <machine/cpu.h>
++
++int ppc_simd_caps(void) {
++ int flags;
++ int mask;
++ u_long cpu_features = 0;
++ size_t sz = sizeof(cpu_features);
++
++ // If AOM_SIMD_CAPS is set then allow only those capabilities.
++ if (!cpu_env_flags(&flags)) {
++ return flags;
++ }
++
++ mask = cpu_env_mask();
++
++ sysctlbyname("hw.cpu_features", &cpu_features, &sz, NULL, 0);
++#if HAVE_VSX
++ if (cpu_features & PPC_FEATURE_HAS_VSX) flags |= HAS_VSX;
++#endif
++
++ return flags & mask;
++}
++#else
++#error \
++ "--enable-runtime-cpu-detect selected, but no CPU detection method " \
++"available for your platform. Reconfigure with --disable-runtime-cpu-detect."
++#endif /* end __FreeBSD__ */
+ #else
+ // If there is no RTCD the function pointers are not used and can not be
+ // changed.
Added: head/multimedia/aom/files/patch-av1_encoder_rd.h
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/multimedia/aom/files/patch-av1_encoder_rd.h Sun Sep 2 16:32:21 2018 (r478807)
@@ -0,0 +1,31 @@
+<stdint.h> isn't bootlegged via gtest.h on FreeBSD 10.* leading to
+
+In file included from test/horz_superres_test.cc:14:
+In file included from av1/encoder/encoder.h:36:
+av1/encoder/rd.h:304:26: error: use of undeclared identifier 'INT64_MAX'
+ rd_stats->ref_rdcost = INT64_MAX;
+ ^
+av1/encoder/rd.h:325:20: error: use of undeclared identifier 'INT64_MAX'
+ rd_stats->dist = INT64_MAX;
+ ^
+av1/encoder/rd.h:326:22: error: use of undeclared identifier 'INT64_MAX'
+ rd_stats->rdcost = INT64_MAX;
+ ^
+av1/encoder/rd.h:327:19: error: use of undeclared identifier 'INT64_MAX'
+ rd_stats->sse = INT64_MAX;
+ ^
+av1/encoder/rd.h:331:26: error: use of undeclared identifier 'INT64_MAX'
+ rd_stats->ref_rdcost = INT64_MAX;
+ ^
+5 errors generated.
+
+--- av1/encoder/rd.h.orig 2018-06-25 14:54:59 UTC
++++ av1/encoder/rd.h
+@@ -13,6 +13,7 @@
+ #define AV1_ENCODER_RD_H_
+
+ #include <limits.h>
++#include <stdint.h>
+
+ #include "av1/common/blockd.h"
+
Added: head/multimedia/aom/files/patch-build_cmake_aom__configure.cmake
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/multimedia/aom/files/patch-build_cmake_aom__configure.cmake Sun Sep 2 16:32:21 2018 (r478807)
@@ -0,0 +1,52 @@
+- uname -p returns amd64 on FreeBSD/OpenBSD but x86_64 on DragonFly/NetBSD
+- Automatically fall back to generic without forcing downstream to maintain whitelist
+- More ELF platforms can use GNU assembler on non-x86
+
+--- build/cmake/aom_configure.cmake.orig 2018-06-25 14:54:59 UTC
++++ build/cmake/aom_configure.cmake
+@@ -51,6 +51,7 @@ endforeach()
+ # Detect target CPU.
+ if(NOT AOM_TARGET_CPU)
+ if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "AMD64" OR
++ "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "amd64" OR
+ "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
+ if(${CMAKE_SIZEOF_VOID_P} EQUAL 4)
+ set(AOM_TARGET_CPU "x86")
+@@ -122,10 +123,8 @@ else()
+ endif()
+
+ if(NOT "${AOM_SUPPORTED_CPU_TARGETS}" MATCHES "${AOM_TARGET_CPU}")
+- message(FATAL_ERROR
+- "No RTCD support for ${AOM_TARGET_CPU}. Create it, or "
+- "add -DAOM_TARGET_CPU=generic to your cmake command line for a "
+- "generic build of libaom and tools.")
++ message(WARNING "No RTCD support for ${AOM_TARGET_CPU}. Assuming generic.")
++ set(AOM_TARGET_CPU generic)
+ endif()
+
+ if("${AOM_TARGET_CPU}" STREQUAL "x86" OR "${AOM_TARGET_CPU}" STREQUAL "x86_64")
+@@ -151,20 +150,15 @@ elseif("${AOM_TARGET_CPU}" MATCHES "arm")
+ if("${AOM_TARGET_SYSTEM}" STREQUAL "Darwin")
+ set(AS_EXECUTABLE as)
+ set(AOM_AS_FLAGS -arch ${AOM_TARGET_CPU} -isysroot ${CMAKE_OSX_SYSROOT})
+- elseif("${AOM_TARGET_SYSTEM}" STREQUAL "Linux")
+- if(NOT AS_EXECUTABLE)
+- set(AS_EXECUTABLE as)
+- endif()
+ elseif("${AOM_TARGET_SYSTEM}" STREQUAL "Windows")
+ if(NOT AS_EXECUTABLE)
+ set(AS_EXECUTABLE ${CMAKE_C_COMPILER} -c -mimplicit-it=always)
+ endif()
++ else()
++ if(NOT AS_EXECUTABLE)
++ set(AS_EXECUTABLE as)
++ endif()
+ endif()
+- if(NOT AS_EXECUTABLE)
+- message(FATAL_ERROR
+- "Unknown assembler for: ${AOM_TARGET_CPU}-${AOM_TARGET_SYSTEM}")
+- endif()
+-
+ string(STRIP "${AOM_AS_FLAGS}" AOM_AS_FLAGS)
+ endif()
+
Added: head/multimedia/aom/files/patch-build_cmake_aom__optimization.cmake
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/multimedia/aom/files/patch-build_cmake_aom__optimization.cmake Sun Sep 2 16:32:21 2018 (r478807)
@@ -0,0 +1,61 @@
+ELF is also used on Solaris, BSDs, Haiku, Fuchsia, etc.
+
+--- build/cmake/aom_optimization.cmake.orig 2018-06-25 14:54:59 UTC
++++ build/cmake/aom_optimization.cmake
+@@ -83,24 +83,20 @@ function(get_asm_obj_format out_format)
+ if("${AOM_TARGET_CPU}" STREQUAL "x86_64")
+ if("${AOM_TARGET_SYSTEM}" STREQUAL "Darwin")
+ set(objformat "macho64")
+- elseif("${AOM_TARGET_SYSTEM}" STREQUAL "Linux")
+- set(objformat "elf64")
+ elseif("${AOM_TARGET_SYSTEM}" STREQUAL "MSYS" OR "${AOM_TARGET_SYSTEM}"
+ STREQUAL "Windows")
+ set(objformat "win64")
+ else()
+- message(FATAL_ERROR "Unknown obj format: ${AOM_TARGET_SYSTEM}")
++ set(objformat "elf64")
+ endif()
+ elseif("${AOM_TARGET_CPU}" STREQUAL "x86")
+ if("${AOM_TARGET_SYSTEM}" STREQUAL "Darwin")
+ set(objformat "macho32")
+- elseif("${AOM_TARGET_SYSTEM}" STREQUAL "Linux")
+- set(objformat "elf32")
+ elseif("${AOM_TARGET_SYSTEM}" STREQUAL "MSYS" OR "${AOM_TARGET_SYSTEM}"
+ STREQUAL "Windows")
+ set(objformat "win32")
+ else()
+- message(FATAL_ERROR "Unknown obj format: ${AOM_TARGET_SYSTEM}")
++ set(objformat "elf32")
+ endif()
+ else()
+ message(FATAL_ERROR
+@@ -171,7 +167,13 @@ function(test_nasm)
+ message(FATAL_ERROR
+ "Unsupported nasm: macho32 object format not supported.")
+ endif()
+- elseif("${AOM_TARGET_SYSTEM}" STREQUAL "Linux")
++ elseif("${AOM_TARGET_SYSTEM}" STREQUAL "MSYS" OR "${AOM_TARGET_SYSTEM}"
++ STREQUAL "Windows")
++ if(NOT "${nasm_helptext}" MATCHES "win32")
++ message(FATAL_ERROR
++ "Unsupported nasm: win32 object format not supported.")
++ endif()
++ else()
+ if(NOT "${nasm_helptext}" MATCHES "elf32")
+ message(FATAL_ERROR
+ "Unsupported nasm: elf32 object format not supported.")
+@@ -183,7 +185,13 @@ function(test_nasm)
+ message(FATAL_ERROR
+ "Unsupported nasm: macho64 object format not supported.")
+ endif()
+- elseif("${AOM_TARGET_SYSTEM}" STREQUAL "Linux")
++ elseif("${AOM_TARGET_SYSTEM}" STREQUAL "MSYS" OR "${AOM_TARGET_SYSTEM}"
++ STREQUAL "Windows")
++ if(NOT "${nasm_helptext}" MATCHES "win64")
++ message(FATAL_ERROR
++ "Unsupported nasm: win64 object format not supported.")
++ endif()
++ else()
+ if(NOT "${nasm_helptext}" MATCHES "elf64")
+ message(FATAL_ERROR
+ "Unsupported nasm: elf64 object format not supported.")
Added: head/multimedia/aom/pkg-descr
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/multimedia/aom/pkg-descr Sun Sep 2 16:32:21 2018 (r478807)
@@ -0,0 +1,7 @@
+AOMedia Video 1 (AV1), is an open, royalty-free video coding format
+designed for video transmissions over the Internet. It is being
+developed by the Alliance for Open Media (AOMedia), a consortium of
+firms from the semiconductor industry, video on demand providers, and
+web browser developers, founded in 2015.
+
+WWW: https://aomedia.org/
Added: head/multimedia/aom/pkg-plist
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/multimedia/aom/pkg-plist Sun Sep 2 16:32:21 2018 (r478807)
@@ -0,0 +1,14 @@
+bin/aomdec
+bin/aomenc
+include/aom/aom.h
+include/aom/aom_codec.h
+include/aom/aom_decoder.h
+include/aom/aom_encoder.h
+include/aom/aom_frame_buffer.h
+include/aom/aom_image.h
+include/aom/aom_integer.h
+include/aom/aomcx.h
+include/aom/aomdx.h
+lib/libaom.so
+lib/libaom.so.0
+libdata/pkgconfig/aom.pc
Modified: head/multimedia/ffmpeg/Makefile
==============================================================================
--- head/multimedia/ffmpeg/Makefile Sun Sep 2 16:29:56 2018 (r478806)
+++ head/multimedia/ffmpeg/Makefile Sun Sep 2 16:32:21 2018 (r478807)
@@ -41,12 +41,6 @@ OPTIONS_DEFAULT= FONTCONFIG FREETYPE FREI0R GMP GNUTLS
OPENCV OPTIMIZED_CFLAGS OPUS RTCPU THEORA V4L VAAPI VDPAU \
VORBIS VPX X264 X265 XVID
-.if !exists(${.CURDIR:H:H}/multimedia/aom)
-# https://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff/c438899a7064
-# https://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff/43778a501f1b
-OPTIONS_EXCLUDE+= AOM
-.endif
-
.if !exists(${.CURDIR:H:H}/net/srt)
# https://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff/a2fc8dbae853
OPTIONS_EXCLUDE+= SRT
More information about the svn-ports-head
mailing list