xref: /aosp_15_r20/external/webrtc/modules/audio_coding/acm2/acm_send_test.h (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1 /*
2  *  Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #ifndef MODULES_AUDIO_CODING_ACM2_ACM_SEND_TEST_H_
12 #define MODULES_AUDIO_CODING_ACM2_ACM_SEND_TEST_H_
13 
14 #include <memory>
15 #include <vector>
16 
17 #include "absl/strings/string_view.h"
18 #include "api/audio/audio_frame.h"
19 #include "modules/audio_coding/include/audio_coding_module.h"
20 #include "modules/audio_coding/neteq/tools/packet_source.h"
21 #include "system_wrappers/include/clock.h"
22 
23 namespace webrtc {
24 class AudioEncoder;
25 
26 namespace test {
27 class InputAudioFile;
28 class Packet;
29 
30 class AcmSendTestOldApi : public AudioPacketizationCallback,
31                           public PacketSource {
32  public:
33   AcmSendTestOldApi(InputAudioFile* audio_source,
34                     int source_rate_hz,
35                     int test_duration_ms);
36   ~AcmSendTestOldApi() override;
37 
38   AcmSendTestOldApi(const AcmSendTestOldApi&) = delete;
39   AcmSendTestOldApi& operator=(const AcmSendTestOldApi&) = delete;
40 
41   // Registers the send codec. Returns true on success, false otherwise.
42   bool RegisterCodec(absl::string_view payload_name,
43                      int sampling_freq_hz,
44                      int channels,
45                      int payload_type,
46                      int frame_size_samples);
47 
48   // Registers an external send codec.
49   void RegisterExternalCodec(
50       std::unique_ptr<AudioEncoder> external_speech_encoder);
51 
52   // Inherited from PacketSource.
53   std::unique_ptr<Packet> NextPacket() override;
54 
55   // Inherited from AudioPacketizationCallback.
56   int32_t SendData(AudioFrameType frame_type,
57                    uint8_t payload_type,
58                    uint32_t timestamp,
59                    const uint8_t* payload_data,
60                    size_t payload_len_bytes,
61                    int64_t absolute_capture_timestamp_ms) override;
62 
acm()63   AudioCodingModule* acm() { return acm_.get(); }
64 
65  private:
66   static const int kBlockSizeMs = 10;
67 
68   // Creates a Packet object from the last packet produced by ACM (and received
69   // through the SendData method as a callback).
70   std::unique_ptr<Packet> CreatePacket();
71 
72   SimulatedClock clock_;
73   std::unique_ptr<AudioCodingModule> acm_;
74   InputAudioFile* audio_source_;
75   int source_rate_hz_;
76   const size_t input_block_size_samples_;
77   AudioFrame input_frame_;
78   bool codec_registered_;
79   int test_duration_ms_;
80   // The following member variables are set whenever SendData() is called.
81   AudioFrameType frame_type_;
82   int payload_type_;
83   uint32_t timestamp_;
84   uint16_t sequence_number_;
85   std::vector<uint8_t> last_payload_vec_;
86   bool data_to_send_;
87 };
88 
89 }  // namespace test
90 }  // namespace webrtc
91 #endif  // MODULES_AUDIO_CODING_ACM2_ACM_SEND_TEST_H_
92