| Server IP : 82.208.35.60 / Your IP : 216.73.216.238 Web Server : Apache/2.4.55 (FreeBSD) OpenSSL/1.1.1q-freebsd PHP/7.3.31 System : FreeBSD server7.d2m.cz 12.4-RELEASE-p9 FreeBSD 12.4-RELEASE-p9 GENERIC amd64 User : studiokobylisy_cz ( 1008) PHP Version : 7.3.31 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /usr/ports/audio/webrtc-audio-processing/files/ |
Upload File : |
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))