• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 WEBRTC_MODULES_AUDIO_CODING_ACM2_ACM_SEND_TEST_OLDAPI_H_
12 #define WEBRTC_MODULES_AUDIO_CODING_ACM2_ACM_SEND_TEST_OLDAPI_H_
13 
14 #include <vector>
15 
16 #include "webrtc/base/constructormagic.h"
17 #include "webrtc/base/scoped_ptr.h"
18 #include "webrtc/modules/audio_coding/include/audio_coding_module.h"
19 #include "webrtc/modules/audio_coding/neteq/tools/packet_source.h"
20 #include "webrtc/system_wrappers/include/clock.h"
21 
22 namespace webrtc {
23 class AudioEncoder;
24 
25 namespace test {
26 class InputAudioFile;
27 class Packet;
28 
29 class AcmSendTestOldApi : public AudioPacketizationCallback,
30                           public PacketSource {
31  public:
32   AcmSendTestOldApi(InputAudioFile* audio_source,
33                     int source_rate_hz,
34                     int test_duration_ms);
~AcmSendTestOldApi()35   virtual ~AcmSendTestOldApi() {}
36 
37   // Registers the send codec. Returns true on success, false otherwise.
38   bool RegisterCodec(const char* payload_name,
39                      int sampling_freq_hz,
40                      int channels,
41                      int payload_type,
42                      int frame_size_samples);
43 
44   // Registers an external send codec. Returns true on success, false otherwise.
45   bool RegisterExternalCodec(AudioEncoder* external_speech_encoder);
46 
47   // Returns the next encoded packet. Returns NULL if the test duration was
48   // exceeded. Ownership of the packet is handed over to the caller.
49   // Inherited from PacketSource.
50   Packet* NextPacket();
51 
52   // Inherited from AudioPacketizationCallback.
53   int32_t SendData(FrameType frame_type,
54                    uint8_t payload_type,
55                    uint32_t timestamp,
56                    const uint8_t* payload_data,
57                    size_t payload_len_bytes,
58                    const RTPFragmentationHeader* fragmentation) override;
59 
acm()60   AudioCodingModule* acm() { return acm_.get(); }
61 
62  private:
63   static const int kBlockSizeMs = 10;
64 
65   // Creates a Packet object from the last packet produced by ACM (and received
66   // through the SendData method as a callback). Ownership of the new Packet
67   // object is transferred to the caller.
68   Packet* CreatePacket();
69 
70   SimulatedClock clock_;
71   rtc::scoped_ptr<AudioCodingModule> acm_;
72   InputAudioFile* audio_source_;
73   int source_rate_hz_;
74   const size_t input_block_size_samples_;
75   AudioFrame input_frame_;
76   bool codec_registered_;
77   int test_duration_ms_;
78   // The following member variables are set whenever SendData() is called.
79   FrameType frame_type_;
80   int payload_type_;
81   uint32_t timestamp_;
82   uint16_t sequence_number_;
83   std::vector<uint8_t> last_payload_vec_;
84   bool data_to_send_;
85 
86   RTC_DISALLOW_COPY_AND_ASSIGN(AcmSendTestOldApi);
87 };
88 
89 }  // namespace test
90 }  // namespace webrtc
91 #endif  // WEBRTC_MODULES_AUDIO_CODING_ACM2_ACM_SEND_TEST_OLDAPI_H_
92