mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-12 21:30:45 +01:00

Calculate the RMS audio level of audio packets being sent before invoking an encoded frame transform, and pass them with the encode frame object. Before this, the audio level was calculated at send time by having rms_levels_ look at all audio samples encoded since the last send. This is fine without a transform, as this is done synchronously after encoding, but with an async transform which might take arbitrarily long, we could end up marking older audio packets with newer audio levels, or not at all. This also makes things work correctly if external encoded frames are injected from elsewhere to be sent, and exposes the AudioLevel on the TransformableFrame interface. Bug: chromium:337193823, webrtc:42226202 Change-Id: If55d2c1d30dc03408ca9fb0193d791db44428316 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/349263 Reviewed-by: Jakob Ivarsson <jakobi@webrtc.org> Reviewed-by: Harald Alvestrand <hta@webrtc.org> Commit-Queue: Tony Herre <herre@google.com> Cr-Commit-Position: refs/heads/main@{#42193}
55 lines
1.9 KiB
C++
55 lines
1.9 KiB
C++
/*
|
|
* Copyright (c) 2020 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#ifndef API_TEST_MOCK_TRANSFORMABLE_AUDIO_FRAME_H_
|
|
#define API_TEST_MOCK_TRANSFORMABLE_AUDIO_FRAME_H_
|
|
|
|
#include <string>
|
|
|
|
#include "api/frame_transformer_interface.h"
|
|
#include "test/gmock.h"
|
|
|
|
namespace webrtc {
|
|
|
|
class MockTransformableAudioFrame : public TransformableAudioFrameInterface {
|
|
public:
|
|
MOCK_METHOD(rtc::ArrayView<const uint8_t>, GetData, (), (const, override));
|
|
MOCK_METHOD(void, SetData, (rtc::ArrayView<const uint8_t>), (override));
|
|
MOCK_METHOD(void, SetRTPTimestamp, (uint32_t), (override));
|
|
MOCK_METHOD(uint8_t, GetPayloadType, (), (const, override));
|
|
MOCK_METHOD(uint32_t, GetSsrc, (), (const, override));
|
|
MOCK_METHOD(uint32_t, GetTimestamp, (), (const, override));
|
|
MOCK_METHOD(std::string, GetMimeType, (), (const, override));
|
|
MOCK_METHOD(rtc::ArrayView<const uint32_t>,
|
|
GetContributingSources,
|
|
(),
|
|
(const override));
|
|
MOCK_METHOD(const absl::optional<uint16_t>,
|
|
SequenceNumber,
|
|
(),
|
|
(const, override));
|
|
MOCK_METHOD(TransformableFrameInterface::Direction,
|
|
GetDirection,
|
|
(),
|
|
(const, override));
|
|
MOCK_METHOD(absl::optional<uint64_t>,
|
|
AbsoluteCaptureTimestamp,
|
|
(),
|
|
(const, override));
|
|
MOCK_METHOD(TransformableAudioFrameInterface::FrameType,
|
|
Type,
|
|
(),
|
|
(const, override));
|
|
MOCK_METHOD(absl::optional<uint8_t>, AudioLevel, (), (const, override));
|
|
};
|
|
|
|
} // namespace webrtc
|
|
|
|
#endif // API_TEST_MOCK_TRANSFORMABLE_AUDIO_FRAME_H_
|