mirror of
https://git.freebsd.org/ports.git
synced 2025-07-18 01:39:16 -04:00
audio/webrtc-audio-processing: fix build on powerpc64*
Two patches waiting for approval by upstream + one that needed to be modified for FreeBSD (s/bswap_16/bswap16/) + making pffft include altivec.h.
This commit is contained in:
parent
c7d08b1bc0
commit
c9bdb0ca7d
3 changed files with 147 additions and 2 deletions
|
@ -8,6 +8,8 @@ PATCH_SITES= https://gitlab.freedesktop.org/pulseaudio/${PORTNAME}/-/commit/
|
||||||
PATCHFILES+= 2083c9a5dd34.patch:-p1 # https://gitlab.freedesktop.org/pulseaudio/webrtc-audio-processing/-/merge_requests/6
|
PATCHFILES+= 2083c9a5dd34.patch:-p1 # https://gitlab.freedesktop.org/pulseaudio/webrtc-audio-processing/-/merge_requests/6
|
||||||
PATCHFILES+= 3f9907f93d39.patch:-p1 # https://gitlab.freedesktop.org/pulseaudio/webrtc-audio-processing/-/merge_requests/13
|
PATCHFILES+= 3f9907f93d39.patch:-p1 # https://gitlab.freedesktop.org/pulseaudio/webrtc-audio-processing/-/merge_requests/13
|
||||||
PATCHFILES+= b34c1d5746ea.patch:-p1 # https://gitlab.freedesktop.org/pulseaudio/webrtc-audio-processing/-/merge_requests/14
|
PATCHFILES+= b34c1d5746ea.patch:-p1 # https://gitlab.freedesktop.org/pulseaudio/webrtc-audio-processing/-/merge_requests/14
|
||||||
|
PATCHFILES+= d49a0855a33b.patch:-p1 # https://gitlab.freedesktop.org/pulseaudio/webrtc-audio-processing/-/merge_requests/17
|
||||||
|
PATCHFILES+= f29ff57d6ccd.patch:-p1 # https://gitlab.freedesktop.org/pulseaudio/webrtc-audio-processing/-/merge_requests/17
|
||||||
|
|
||||||
MAINTAINER= jbeich@FreeBSD.org
|
MAINTAINER= jbeich@FreeBSD.org
|
||||||
COMMENT= AudioProcessing module from WebRTC project
|
COMMENT= AudioProcessing module from WebRTC project
|
||||||
|
@ -16,7 +18,6 @@ LICENSE= BSD3CLAUSE
|
||||||
LICENSE_FILE= ${WRKSRC}/COPYING
|
LICENSE_FILE= ${WRKSRC}/COPYING
|
||||||
|
|
||||||
BROKEN_powerpc= fails to compile: ./webrtc/rtc_base/system/arch.h:54:2: Please add support for your architecture in rtc_base/system/arch.h
|
BROKEN_powerpc= fails to compile: ./webrtc/rtc_base/system/arch.h:54:2: Please add support for your architecture in rtc_base/system/arch.h
|
||||||
BROKEN_powerpc64= fails to compile: ./webrtc/rtc_base/system/arch.h:54:2: Please add support for your architecture in rtc_base/system/arch.h
|
|
||||||
BROKEN_riscv64= fails to compile: ./webrtc/rtc_base/system/arch.h:54:2: Please add support for your architecture in rtc_base/system/arch.h
|
BROKEN_riscv64= fails to compile: ./webrtc/rtc_base/system/arch.h:54:2: Please add support for your architecture in rtc_base/system/arch.h
|
||||||
|
|
||||||
BUILD_DEPENDS= cmake:devel/cmake
|
BUILD_DEPENDS= cmake:devel/cmake
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
TIMESTAMP = 1606505453
|
TIMESTAMP = 1645899872
|
||||||
SHA256 (webrtc-audio-processing-1.0.tar.gz) = 441a30d2717b2eb4145c6eb96c2d5a270fe0b4bc71aebf76716750c47be1936f
|
SHA256 (webrtc-audio-processing-1.0.tar.gz) = 441a30d2717b2eb4145c6eb96c2d5a270fe0b4bc71aebf76716750c47be1936f
|
||||||
SIZE (webrtc-audio-processing-1.0.tar.gz) = 856721
|
SIZE (webrtc-audio-processing-1.0.tar.gz) = 856721
|
||||||
SHA256 (2083c9a5dd34.patch) = 3c34cc248c0292032b26ef67f078505037e51e84b6c7955162cac058aed54360
|
SHA256 (2083c9a5dd34.patch) = 3c34cc248c0292032b26ef67f078505037e51e84b6c7955162cac058aed54360
|
||||||
|
@ -7,3 +7,7 @@ SHA256 (3f9907f93d39.patch) = 8e300c0ab9e85463ed0aebc7c69c95c293a14ef2ca0f50c7b7
|
||||||
SIZE (3f9907f93d39.patch) = 2049
|
SIZE (3f9907f93d39.patch) = 2049
|
||||||
SHA256 (b34c1d5746ea.patch) = b50edddb93a5bd4fdcc5110702111fe4ac000867358b7131e2ccce883a4c8dee
|
SHA256 (b34c1d5746ea.patch) = b50edddb93a5bd4fdcc5110702111fe4ac000867358b7131e2ccce883a4c8dee
|
||||||
SIZE (b34c1d5746ea.patch) = 923
|
SIZE (b34c1d5746ea.patch) = 923
|
||||||
|
SHA256 (d49a0855a33b.patch) = fe8a4421a664108e7f5223f61278cd5a9096d8d0f33d1d648ac2c952d4c633b4
|
||||||
|
SIZE (d49a0855a33b.patch) = 1388
|
||||||
|
SHA256 (f29ff57d6ccd.patch) = 9200b95da26ee34ef106cb3f2eed75d95eed7e9911a7632923b3d885409f9406
|
||||||
|
SIZE (f29ff57d6ccd.patch) = 858
|
||||||
|
|
140
audio/webrtc-audio-processing/files/patch-powerpc64.patch
Normal file
140
audio/webrtc-audio-processing/files/patch-powerpc64.patch
Normal file
|
@ -0,0 +1,140 @@
|
||||||
|
Modified https://gitlab.freedesktop.org/pulseaudio/webrtc-audio-processing/-/merge_requests/17/diffs?commit_id=d49a0855a33bb56cc1935642c0d4bf7a3f474fbd for FreeBSD + pffft patch to include altivec.h.
|
||||||
|
--- webrtc/common_audio/wav_file.cc
|
||||||
|
+++ webrtc/common_audio/wav_file.cc
|
||||||
|
@@ -14,6 +14,7 @@
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
#include <array>
|
||||||
|
+#include <sys/endian.h>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <type_traits>
|
||||||
|
#include <utility>
|
||||||
|
@@ -89,10 +90,6 @@ void WavReader::Reset() {
|
||||||
|
|
||||||
|
size_t WavReader::ReadSamples(const size_t num_samples,
|
||||||
|
int16_t* const samples) {
|
||||||
|
-#ifndef WEBRTC_ARCH_LITTLE_ENDIAN
|
||||||
|
-#error "Need to convert samples to big-endian when reading from WAV file"
|
||||||
|
-#endif
|
||||||
|
-
|
||||||
|
size_t num_samples_left_to_read = num_samples;
|
||||||
|
size_t next_chunk_start = 0;
|
||||||
|
while (num_samples_left_to_read > 0 && num_unread_samples_ > 0) {
|
||||||
|
@@ -124,15 +121,16 @@ size_t WavReader::ReadSamples(const size_t num_samples,
|
||||||
|
num_unread_samples_ -= num_samples_read;
|
||||||
|
num_samples_left_to_read -= num_samples_read;
|
||||||
|
}
|
||||||
|
+#ifndef WEBRTC_ARCH_LITTLE_ENDIAN
|
||||||
|
+ for (size_t i = 0; i < num_samples; i++) {
|
||||||
|
+ samples[i] = bswap16(samples[i]);
|
||||||
|
+ }
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
return num_samples - num_samples_left_to_read;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t WavReader::ReadSamples(const size_t num_samples, float* const samples) {
|
||||||
|
-#ifndef WEBRTC_ARCH_LITTLE_ENDIAN
|
||||||
|
-#error "Need to convert samples to big-endian when reading from WAV file"
|
||||||
|
-#endif
|
||||||
|
-
|
||||||
|
size_t num_samples_left_to_read = num_samples;
|
||||||
|
size_t next_chunk_start = 0;
|
||||||
|
while (num_samples_left_to_read > 0 && num_unread_samples_ > 0) {
|
||||||
|
@@ -170,6 +168,12 @@ size_t WavReader::ReadSamples(const size_t num_samples, float* const samples) {
|
||||||
|
num_unread_samples_ -= num_samples_read;
|
||||||
|
num_samples_left_to_read -= num_samples_read;
|
||||||
|
}
|
||||||
|
+#ifndef WEBRTC_ARCH_LITTLE_ENDIAN
|
||||||
|
+ // TODO: is this the right place for this?
|
||||||
|
+ for (size_t i = 0; i < num_samples; i++) {
|
||||||
|
+ samples[i] = bswap16(samples[i]);
|
||||||
|
+ }
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
return num_samples - num_samples_left_to_read;
|
||||||
|
}
|
||||||
|
@@ -213,23 +217,33 @@ WavWriter::WavWriter(FileWrapper file,
|
||||||
|
}
|
||||||
|
|
||||||
|
void WavWriter::WriteSamples(const int16_t* samples, size_t num_samples) {
|
||||||
|
-#ifndef WEBRTC_ARCH_LITTLE_ENDIAN
|
||||||
|
-#error "Need to convert samples to little-endian when writing to WAV file"
|
||||||
|
-#endif
|
||||||
|
-
|
||||||
|
for (size_t i = 0; i < num_samples; i += kMaxChunksize) {
|
||||||
|
const size_t num_remaining_samples = num_samples - i;
|
||||||
|
const size_t num_samples_to_write =
|
||||||
|
std::min(kMaxChunksize, num_remaining_samples);
|
||||||
|
|
||||||
|
if (format_ == WavFormat::kWavFormatPcm) {
|
||||||
|
+#ifndef WEBRTC_ARCH_LITTLE_ENDIAN
|
||||||
|
RTC_CHECK(
|
||||||
|
file_.Write(&samples[i], num_samples_to_write * sizeof(samples[0])));
|
||||||
|
+#else
|
||||||
|
+ std::array<int16_t, kMaxChunksize> converted_samples;
|
||||||
|
+ for (size_t j = 0; j < num_samples_to_write; ++j) {
|
||||||
|
+ converted_samples[j] = bswap16(samples[i + j]);
|
||||||
|
+ }
|
||||||
|
+ RTC_CHECK(
|
||||||
|
+ file_.Write(converted_samples.data(),
|
||||||
|
+ num_samples_to_write * sizeof(converted_samples[0])));
|
||||||
|
+#endif
|
||||||
|
} else {
|
||||||
|
RTC_CHECK_EQ(format_, WavFormat::kWavFormatIeeeFloat);
|
||||||
|
std::array<float, kMaxChunksize> converted_samples;
|
||||||
|
for (size_t j = 0; j < num_samples_to_write; ++j) {
|
||||||
|
- converted_samples[j] = S16ToFloat(samples[i + j]);
|
||||||
|
+ int16_t sample = samples[i + j];
|
||||||
|
+#ifndef WEBRTC_ARCH_LITTLE_ENDIAN
|
||||||
|
+ sample = bswap16(sample);
|
||||||
|
+#endif
|
||||||
|
+ converted_samples[j] = S16ToFloat(sample);
|
||||||
|
}
|
||||||
|
RTC_CHECK(
|
||||||
|
file_.Write(converted_samples.data(),
|
||||||
|
@@ -243,10 +257,6 @@ void WavWriter::WriteSamples(const int16_t* samples, size_t num_samples) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void WavWriter::WriteSamples(const float* samples, size_t num_samples) {
|
||||||
|
-#ifndef WEBRTC_ARCH_LITTLE_ENDIAN
|
||||||
|
-#error "Need to convert samples to little-endian when writing to WAV file"
|
||||||
|
-#endif
|
||||||
|
-
|
||||||
|
for (size_t i = 0; i < num_samples; i += kMaxChunksize) {
|
||||||
|
const size_t num_remaining_samples = num_samples - i;
|
||||||
|
const size_t num_samples_to_write =
|
||||||
|
@@ -255,7 +265,11 @@ void WavWriter::WriteSamples(const float* samples, size_t num_samples) {
|
||||||
|
if (format_ == WavFormat::kWavFormatPcm) {
|
||||||
|
std::array<int16_t, kMaxChunksize> converted_samples;
|
||||||
|
for (size_t j = 0; j < num_samples_to_write; ++j) {
|
||||||
|
- converted_samples[j] = FloatS16ToS16(samples[i + j]);
|
||||||
|
+ int16_t sample = FloatS16ToS16(samples[i + j]);
|
||||||
|
+#ifndef WEBRTC_ARCH_LITTLE_ENDIAN
|
||||||
|
+ sample = bswap16(sample);
|
||||||
|
+#endif
|
||||||
|
+ converted_samples[j] = sample;
|
||||||
|
}
|
||||||
|
RTC_CHECK(
|
||||||
|
file_.Write(converted_samples.data(),
|
||||||
|
@@ -264,6 +278,7 @@ void WavWriter::WriteSamples(const float* samples, size_t num_samples) {
|
||||||
|
RTC_CHECK_EQ(format_, WavFormat::kWavFormatIeeeFloat);
|
||||||
|
std::array<float, kMaxChunksize> converted_samples;
|
||||||
|
for (size_t j = 0; j < num_samples_to_write; ++j) {
|
||||||
|
+ // TODO: is swap needed for big-endian here?
|
||||||
|
converted_samples[j] = FloatS16ToFloat(samples[i + j]);
|
||||||
|
}
|
||||||
|
RTC_CHECK(
|
||||||
|
--
|
||||||
|
GitLab
|
||||||
|
|
||||||
|
--- webrtc/third_party/pffft/src/pffft.c.orig 2022-02-26 18:37:29 UTC
|
||||||
|
+++ webrtc/third_party/pffft/src/pffft.c
|
||||||
|
@@ -100,6 +100,7 @@
|
||||||
|
Altivec support macros
|
||||||
|
*/
|
||||||
|
#if !defined(PFFFT_SIMD_DISABLE) && (defined(__ppc__) || defined(__ppc64__))
|
||||||
|
+#include <altivec.h>
|
||||||
|
typedef vector float v4sf;
|
||||||
|
# define SIMD_SZ 4
|
||||||
|
# define VZERO() ((vector float) vec_splat_u8(0))
|
Loading…
Add table
Reference in a new issue