summaryrefslogtreecommitdiff
path: root/chromium/third_party/webrtc/api/audio
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-12 14:27:29 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-13 09:35:20 +0000
commitc30a6232df03e1efbd9f3b226777b07e087a1122 (patch)
treee992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/third_party/webrtc/api/audio
parent7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff)
downloadqtwebengine-chromium-85-based.tar.gz
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/third_party/webrtc/api/audio')
-rw-r--r--chromium/third_party/webrtc/api/audio/BUILD.gn2
-rw-r--r--chromium/third_party/webrtc/api/audio/audio_frame.cc24
-rw-r--r--chromium/third_party/webrtc/api/audio/audio_frame.h4
-rw-r--r--chromium/third_party/webrtc/api/audio/test/audio_frame_unittest.cc50
4 files changed, 79 insertions, 1 deletions
diff --git a/chromium/third_party/webrtc/api/audio/BUILD.gn b/chromium/third_party/webrtc/api/audio/BUILD.gn
index 4c8004ed2db..117e5cc0abe 100644
--- a/chromium/third_party/webrtc/api/audio/BUILD.gn
+++ b/chromium/third_party/webrtc/api/audio/BUILD.gn
@@ -61,8 +61,8 @@ rtc_library("aec3_config_json") {
"../../rtc_base:rtc_base_approved",
"../../rtc_base:rtc_json",
"../../rtc_base/system:rtc_export",
- "//third_party/abseil-cpp/absl/strings",
]
+ absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
}
rtc_library("aec3_factory") {
diff --git a/chromium/third_party/webrtc/api/audio/audio_frame.cc b/chromium/third_party/webrtc/api/audio/audio_frame.cc
index 47459ac333b..c6e5cf4dd61 100644
--- a/chromium/third_party/webrtc/api/audio/audio_frame.cc
+++ b/chromium/third_party/webrtc/api/audio/audio_frame.cc
@@ -11,6 +11,8 @@
#include "api/audio/audio_frame.h"
#include <string.h>
+#include <algorithm>
+#include <utility>
#include "rtc_base/checks.h"
#include "rtc_base/time_utils.h"
@@ -22,6 +24,28 @@ AudioFrame::AudioFrame() {
static_assert(sizeof(data_) == kMaxDataSizeBytes, "kMaxDataSizeBytes");
}
+void swap(AudioFrame& a, AudioFrame& b) {
+ using std::swap;
+ swap(a.timestamp_, b.timestamp_);
+ swap(a.elapsed_time_ms_, b.elapsed_time_ms_);
+ swap(a.ntp_time_ms_, b.ntp_time_ms_);
+ swap(a.samples_per_channel_, b.samples_per_channel_);
+ swap(a.sample_rate_hz_, b.sample_rate_hz_);
+ swap(a.num_channels_, b.num_channels_);
+ swap(a.channel_layout_, b.channel_layout_);
+ swap(a.speech_type_, b.speech_type_);
+ swap(a.vad_activity_, b.vad_activity_);
+ swap(a.profile_timestamp_ms_, b.profile_timestamp_ms_);
+ swap(a.packet_infos_, b.packet_infos_);
+ const size_t length_a = a.samples_per_channel_ * a.num_channels_;
+ const size_t length_b = b.samples_per_channel_ * b.num_channels_;
+ RTC_DCHECK_LE(length_a, AudioFrame::kMaxDataSizeSamples);
+ RTC_DCHECK_LE(length_b, AudioFrame::kMaxDataSizeSamples);
+ std::swap_ranges(a.data_, a.data_ + std::max(length_a, length_b), b.data_);
+ swap(a.muted_, b.muted_);
+ swap(a.absolute_capture_timestamp_ms_, b.absolute_capture_timestamp_ms_);
+}
+
void AudioFrame::Reset() {
ResetWithoutMuting();
muted_ = true;
diff --git a/chromium/third_party/webrtc/api/audio/audio_frame.h b/chromium/third_party/webrtc/api/audio/audio_frame.h
index 06b0b28b38f..78539f57eb5 100644
--- a/chromium/third_party/webrtc/api/audio/audio_frame.h
+++ b/chromium/third_party/webrtc/api/audio/audio_frame.h
@@ -14,6 +14,8 @@
#include <stddef.h>
#include <stdint.h>
+#include <utility>
+
#include "api/audio/channel_layout.h"
#include "api/rtp_packet_infos.h"
#include "rtc_base/constructor_magic.h"
@@ -58,6 +60,8 @@ class AudioFrame {
AudioFrame();
+ friend void swap(AudioFrame& a, AudioFrame& b);
+
// Resets all members to their default state.
void Reset();
// Same as Reset(), but leaves mute state unchanged. Muting a frame requires
diff --git a/chromium/third_party/webrtc/api/audio/test/audio_frame_unittest.cc b/chromium/third_party/webrtc/api/audio/test/audio_frame_unittest.cc
index dbf45ceabc8..f8d33182749 100644
--- a/chromium/third_party/webrtc/api/audio/test/audio_frame_unittest.cc
+++ b/chromium/third_party/webrtc/api/audio/test/audio_frame_unittest.cc
@@ -133,4 +133,54 @@ TEST(AudioFrameTest, CopyFrom) {
EXPECT_EQ(0, memcmp(frame2.data(), frame1.data(), sizeof(samples)));
}
+TEST(AudioFrameTest, SwapFrames) {
+ AudioFrame frame1, frame2;
+ int16_t samples1[kNumChannelsMono * kSamplesPerChannel];
+ for (size_t i = 0; i < kNumChannelsMono * kSamplesPerChannel; ++i) {
+ samples1[i] = i;
+ }
+ frame1.UpdateFrame(kTimestamp, samples1, kSamplesPerChannel, kSampleRateHz,
+ AudioFrame::kPLC, AudioFrame::kVadActive,
+ kNumChannelsMono);
+ frame1.set_absolute_capture_timestamp_ms(12345678);
+ const auto frame1_channel_layout = frame1.channel_layout();
+
+ int16_t samples2[(kNumChannelsMono + 1) * (kSamplesPerChannel + 1)];
+ for (size_t i = 0; i < (kNumChannelsMono + 1) * (kSamplesPerChannel + 1);
+ ++i) {
+ samples2[i] = 1000 + i;
+ }
+ frame2.UpdateFrame(kTimestamp + 1, samples2, kSamplesPerChannel + 1,
+ kSampleRateHz + 1, AudioFrame::kNormalSpeech,
+ AudioFrame::kVadPassive, kNumChannelsMono + 1);
+ const auto frame2_channel_layout = frame2.channel_layout();
+
+ swap(frame1, frame2);
+
+ EXPECT_EQ(kTimestamp + 1, frame1.timestamp_);
+ ASSERT_EQ(kSamplesPerChannel + 1, frame1.samples_per_channel_);
+ EXPECT_EQ(kSampleRateHz + 1, frame1.sample_rate_hz_);
+ EXPECT_EQ(AudioFrame::kNormalSpeech, frame1.speech_type_);
+ EXPECT_EQ(AudioFrame::kVadPassive, frame1.vad_activity_);
+ ASSERT_EQ(kNumChannelsMono + 1, frame1.num_channels_);
+ for (size_t i = 0; i < (kNumChannelsMono + 1) * (kSamplesPerChannel + 1);
+ ++i) {
+ EXPECT_EQ(samples2[i], frame1.data()[i]);
+ }
+ EXPECT_FALSE(frame1.absolute_capture_timestamp_ms());
+ EXPECT_EQ(frame2_channel_layout, frame1.channel_layout());
+
+ EXPECT_EQ(kTimestamp, frame2.timestamp_);
+ ASSERT_EQ(kSamplesPerChannel, frame2.samples_per_channel_);
+ EXPECT_EQ(kSampleRateHz, frame2.sample_rate_hz_);
+ EXPECT_EQ(AudioFrame::kPLC, frame2.speech_type_);
+ EXPECT_EQ(AudioFrame::kVadActive, frame2.vad_activity_);
+ ASSERT_EQ(kNumChannelsMono, frame2.num_channels_);
+ for (size_t i = 0; i < kNumChannelsMono * kSamplesPerChannel; ++i) {
+ EXPECT_EQ(samples1[i], frame2.data()[i]);
+ }
+ EXPECT_EQ(12345678, frame2.absolute_capture_timestamp_ms());
+ EXPECT_EQ(frame1_channel_layout, frame2.channel_layout());
+}
+
} // namespace webrtc