Line data Source code
1 : /*
2 : * Copyright (c) 2016 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_PROCESSING_AEC3_BLOCK_FRAMER_H_
12 : #define WEBRTC_MODULES_AUDIO_PROCESSING_AEC3_BLOCK_FRAMER_H_
13 :
14 : #include <vector>
15 :
16 : #include "webrtc/base/array_view.h"
17 : #include "webrtc/base/constructormagic.h"
18 : #include "webrtc/modules/audio_processing/aec3/aec3_constants.h"
19 :
20 : namespace webrtc {
21 :
22 : // Class for producing frames consisting of 1 or 2 subframes of 80 samples each
23 : // from 64 sample blocks. The class is designed to work together with the
24 : // FrameBlocker class which performs the reverse conversion. Used together with
25 : // that, this class produces output frames are the same rate as frames are
26 : // received by the FrameBlocker class. Note that the internal buffers will
27 : // overrun if any other rate of packets insertion is used.
28 0 : class BlockFramer {
29 : public:
30 : explicit BlockFramer(size_t num_bands);
31 : ~BlockFramer();
32 : // Adds a 64 sample block into the data that will form the next output frame.
33 : void InsertBlock(const std::vector<std::vector<float>>& block);
34 : // Adds a 64 sample block and extracts an 80 sample subframe.
35 : void InsertBlockAndExtractSubFrame(
36 : const std::vector<std::vector<float>>& block,
37 : std::vector<rtc::ArrayView<float>>* sub_frame);
38 :
39 : private:
40 : const size_t num_bands_;
41 : std::vector<std::vector<float>> buffer_;
42 :
43 : RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(BlockFramer);
44 : };
45 : } // namespace webrtc
46 :
47 : #endif // WEBRTC_MODULES_AUDIO_PROCESSING_AEC3_BLOCK_FRAMER_H_
|