xref: /aosp_15_r20/external/webrtc/test/mock_audio_encoder.h (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1*d9f75844SAndroid Build Coastguard Worker /*
2*d9f75844SAndroid Build Coastguard Worker  *  Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
3*d9f75844SAndroid Build Coastguard Worker  *
4*d9f75844SAndroid Build Coastguard Worker  *  Use of this source code is governed by a BSD-style license
5*d9f75844SAndroid Build Coastguard Worker  *  that can be found in the LICENSE file in the root of the source
6*d9f75844SAndroid Build Coastguard Worker  *  tree. An additional intellectual property rights grant can be found
7*d9f75844SAndroid Build Coastguard Worker  *  in the file PATENTS.  All contributing project authors may
8*d9f75844SAndroid Build Coastguard Worker  *  be found in the AUTHORS file in the root of the source tree.
9*d9f75844SAndroid Build Coastguard Worker  */
10*d9f75844SAndroid Build Coastguard Worker 
11*d9f75844SAndroid Build Coastguard Worker #ifndef TEST_MOCK_AUDIO_ENCODER_H_
12*d9f75844SAndroid Build Coastguard Worker #define TEST_MOCK_AUDIO_ENCODER_H_
13*d9f75844SAndroid Build Coastguard Worker 
14*d9f75844SAndroid Build Coastguard Worker #include <string>
15*d9f75844SAndroid Build Coastguard Worker 
16*d9f75844SAndroid Build Coastguard Worker #include "api/array_view.h"
17*d9f75844SAndroid Build Coastguard Worker #include "api/audio_codecs/audio_encoder.h"
18*d9f75844SAndroid Build Coastguard Worker #include "test/gmock.h"
19*d9f75844SAndroid Build Coastguard Worker 
20*d9f75844SAndroid Build Coastguard Worker namespace webrtc {
21*d9f75844SAndroid Build Coastguard Worker 
22*d9f75844SAndroid Build Coastguard Worker class MockAudioEncoder : public AudioEncoder {
23*d9f75844SAndroid Build Coastguard Worker  public:
24*d9f75844SAndroid Build Coastguard Worker   MockAudioEncoder();
25*d9f75844SAndroid Build Coastguard Worker   ~MockAudioEncoder();
26*d9f75844SAndroid Build Coastguard Worker   MOCK_METHOD(int, SampleRateHz, (), (const, override));
27*d9f75844SAndroid Build Coastguard Worker   MOCK_METHOD(size_t, NumChannels, (), (const, override));
28*d9f75844SAndroid Build Coastguard Worker   MOCK_METHOD(int, RtpTimestampRateHz, (), (const, override));
29*d9f75844SAndroid Build Coastguard Worker   MOCK_METHOD(size_t, Num10MsFramesInNextPacket, (), (const, override));
30*d9f75844SAndroid Build Coastguard Worker   MOCK_METHOD(size_t, Max10MsFramesInAPacket, (), (const, override));
31*d9f75844SAndroid Build Coastguard Worker   MOCK_METHOD(int, GetTargetBitrate, (), (const, override));
32*d9f75844SAndroid Build Coastguard Worker   MOCK_METHOD((absl::optional<std::pair<TimeDelta, TimeDelta>>),
33*d9f75844SAndroid Build Coastguard Worker               GetFrameLengthRange,
34*d9f75844SAndroid Build Coastguard Worker               (),
35*d9f75844SAndroid Build Coastguard Worker               (const, override));
36*d9f75844SAndroid Build Coastguard Worker 
37*d9f75844SAndroid Build Coastguard Worker   MOCK_METHOD(void, Reset, (), (override));
38*d9f75844SAndroid Build Coastguard Worker   MOCK_METHOD(bool, SetFec, (bool enable), (override));
39*d9f75844SAndroid Build Coastguard Worker   MOCK_METHOD(bool, SetDtx, (bool enable), (override));
40*d9f75844SAndroid Build Coastguard Worker   MOCK_METHOD(bool, SetApplication, (Application application), (override));
41*d9f75844SAndroid Build Coastguard Worker   MOCK_METHOD(void, SetMaxPlaybackRate, (int frequency_hz), (override));
42*d9f75844SAndroid Build Coastguard Worker   MOCK_METHOD(void,
43*d9f75844SAndroid Build Coastguard Worker               OnReceivedUplinkBandwidth,
44*d9f75844SAndroid Build Coastguard Worker               (int target_audio_bitrate_bps,
45*d9f75844SAndroid Build Coastguard Worker                absl::optional<int64_t> probing_interval_ms),
46*d9f75844SAndroid Build Coastguard Worker               (override));
47*d9f75844SAndroid Build Coastguard Worker   MOCK_METHOD(void,
48*d9f75844SAndroid Build Coastguard Worker               OnReceivedUplinkPacketLossFraction,
49*d9f75844SAndroid Build Coastguard Worker               (float uplink_packet_loss_fraction),
50*d9f75844SAndroid Build Coastguard Worker               (override));
51*d9f75844SAndroid Build Coastguard Worker   MOCK_METHOD(void,
52*d9f75844SAndroid Build Coastguard Worker               OnReceivedOverhead,
53*d9f75844SAndroid Build Coastguard Worker               (size_t overhead_bytes_per_packet),
54*d9f75844SAndroid Build Coastguard Worker               (override));
55*d9f75844SAndroid Build Coastguard Worker 
56*d9f75844SAndroid Build Coastguard Worker   MOCK_METHOD(bool,
57*d9f75844SAndroid Build Coastguard Worker               EnableAudioNetworkAdaptor,
58*d9f75844SAndroid Build Coastguard Worker               (const std::string& config_string, RtcEventLog*),
59*d9f75844SAndroid Build Coastguard Worker               (override));
60*d9f75844SAndroid Build Coastguard Worker 
61*d9f75844SAndroid Build Coastguard Worker   // Note, we explicitly chose not to create a mock for the Encode method.
62*d9f75844SAndroid Build Coastguard Worker   MOCK_METHOD(EncodedInfo,
63*d9f75844SAndroid Build Coastguard Worker               EncodeImpl,
64*d9f75844SAndroid Build Coastguard Worker               (uint32_t timestamp,
65*d9f75844SAndroid Build Coastguard Worker                rtc::ArrayView<const int16_t> audio,
66*d9f75844SAndroid Build Coastguard Worker                rtc::Buffer*),
67*d9f75844SAndroid Build Coastguard Worker               (override));
68*d9f75844SAndroid Build Coastguard Worker 
69*d9f75844SAndroid Build Coastguard Worker   class FakeEncoding {
70*d9f75844SAndroid Build Coastguard Worker    public:
71*d9f75844SAndroid Build Coastguard Worker     // Creates a functor that will return `info` and adjust the rtc::Buffer
72*d9f75844SAndroid Build Coastguard Worker     // given as input to it, so it is info.encoded_bytes larger.
73*d9f75844SAndroid Build Coastguard Worker     explicit FakeEncoding(const AudioEncoder::EncodedInfo& info);
74*d9f75844SAndroid Build Coastguard Worker 
75*d9f75844SAndroid Build Coastguard Worker     // Shorthand version of the constructor above, for when only setting
76*d9f75844SAndroid Build Coastguard Worker     // encoded_bytes in the EncodedInfo object matters.
77*d9f75844SAndroid Build Coastguard Worker     explicit FakeEncoding(size_t encoded_bytes);
78*d9f75844SAndroid Build Coastguard Worker 
79*d9f75844SAndroid Build Coastguard Worker     AudioEncoder::EncodedInfo operator()(uint32_t timestamp,
80*d9f75844SAndroid Build Coastguard Worker                                          rtc::ArrayView<const int16_t> audio,
81*d9f75844SAndroid Build Coastguard Worker                                          rtc::Buffer* encoded);
82*d9f75844SAndroid Build Coastguard Worker 
83*d9f75844SAndroid Build Coastguard Worker    private:
84*d9f75844SAndroid Build Coastguard Worker     AudioEncoder::EncodedInfo info_;
85*d9f75844SAndroid Build Coastguard Worker   };
86*d9f75844SAndroid Build Coastguard Worker 
87*d9f75844SAndroid Build Coastguard Worker   class CopyEncoding {
88*d9f75844SAndroid Build Coastguard Worker    public:
89*d9f75844SAndroid Build Coastguard Worker     ~CopyEncoding();
90*d9f75844SAndroid Build Coastguard Worker 
91*d9f75844SAndroid Build Coastguard Worker     // Creates a functor that will return `info` and append the data in the
92*d9f75844SAndroid Build Coastguard Worker     // payload to the buffer given as input to it. Up to info.encoded_bytes are
93*d9f75844SAndroid Build Coastguard Worker     // appended - make sure the payload is big enough!  Since it uses an
94*d9f75844SAndroid Build Coastguard Worker     // ArrayView, it _does not_ copy the payload. Make sure it doesn't fall out
95*d9f75844SAndroid Build Coastguard Worker     // of scope!
96*d9f75844SAndroid Build Coastguard Worker     CopyEncoding(AudioEncoder::EncodedInfo info,
97*d9f75844SAndroid Build Coastguard Worker                  rtc::ArrayView<const uint8_t> payload);
98*d9f75844SAndroid Build Coastguard Worker 
99*d9f75844SAndroid Build Coastguard Worker     // Shorthand version of the constructor above, for when you wish to append
100*d9f75844SAndroid Build Coastguard Worker     // the whole payload and do not care about any EncodedInfo attribute other
101*d9f75844SAndroid Build Coastguard Worker     // than encoded_bytes.
102*d9f75844SAndroid Build Coastguard Worker     explicit CopyEncoding(rtc::ArrayView<const uint8_t> payload);
103*d9f75844SAndroid Build Coastguard Worker 
104*d9f75844SAndroid Build Coastguard Worker     AudioEncoder::EncodedInfo operator()(uint32_t timestamp,
105*d9f75844SAndroid Build Coastguard Worker                                          rtc::ArrayView<const int16_t> audio,
106*d9f75844SAndroid Build Coastguard Worker                                          rtc::Buffer* encoded);
107*d9f75844SAndroid Build Coastguard Worker 
108*d9f75844SAndroid Build Coastguard Worker    private:
109*d9f75844SAndroid Build Coastguard Worker     AudioEncoder::EncodedInfo info_;
110*d9f75844SAndroid Build Coastguard Worker     rtc::ArrayView<const uint8_t> payload_;
111*d9f75844SAndroid Build Coastguard Worker   };
112*d9f75844SAndroid Build Coastguard Worker };
113*d9f75844SAndroid Build Coastguard Worker 
114*d9f75844SAndroid Build Coastguard Worker }  // namespace webrtc
115*d9f75844SAndroid Build Coastguard Worker 
116*d9f75844SAndroid Build Coastguard Worker #endif  // TEST_MOCK_AUDIO_ENCODER_H_
117