| /* | |
| * Copyright (c) 2014 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 MODULES_AUDIO_CODING_CODECS_TOOLS_AUDIO_CODEC_SPEED_TEST_H_ | |
| #define MODULES_AUDIO_CODING_CODECS_TOOLS_AUDIO_CODEC_SPEED_TEST_H_ | |
| #include <cstddef> | |
| #include <cstdint> | |
| #include <cstdio> | |
| #include <memory> | |
| #include <string> | |
| #include <tuple> | |
| #include "test/gtest.h" | |
| namespace webrtc { | |
| // Define coding parameter as | |
| // <channels, bit_rate, file_name, extension, if_save_output>. | |
| typedef std::tuple<size_t, int, std::string, std::string, bool> coding_param; | |
| class AudioCodecSpeedTest : public ::testing::TestWithParam<coding_param> { | |
| protected: | |
| AudioCodecSpeedTest(int block_duration_ms, | |
| int input_sampling_khz, | |
| int output_sampling_khz); | |
| virtual void SetUp(); | |
| virtual void TearDown(); | |
| // EncodeABlock(...) does the following: | |
| // 1. encodes a block of audio, saved in `in_data`, | |
| // 2. save the bit stream to `bit_stream` of `max_bytes` bytes in size, | |
| // 3. assign `encoded_bytes` with the length of the bit stream (in bytes), | |
| // 4. return the cost of time (in millisecond) spent on actual encoding. | |
| virtual float EncodeABlock(int16_t* in_data, | |
| uint8_t* bit_stream, | |
| size_t max_bytes, | |
| size_t* encoded_bytes) = 0; | |
| // DecodeABlock(...) does the following: | |
| // 1. decodes the bit stream in `bit_stream` with a length of `encoded_bytes` | |
| // (in bytes), | |
| // 2. save the decoded audio in `out_data`, | |
| // 3. return the cost of time (in millisecond) spent on actual decoding. | |
| virtual float DecodeABlock(const uint8_t* bit_stream, | |
| size_t encoded_bytes, | |
| int16_t* out_data) = 0; | |
| // Encoding and decode an audio of `audio_duration` (in seconds) and | |
| // record the runtime for encoding and decoding separately. | |
| void EncodeDecode(size_t audio_duration); | |
| int block_duration_ms_; | |
| int input_sampling_khz_; | |
| int output_sampling_khz_; | |
| // Number of samples-per-channel in a frame. | |
| size_t input_length_sample_; | |
| // Expected output number of samples-per-channel in a frame. | |
| size_t output_length_sample_; | |
| std::unique_ptr<int16_t[]> in_data_; | |
| std::unique_ptr<int16_t[]> out_data_; | |
| size_t data_pointer_; | |
| size_t loop_length_samples_; | |
| std::unique_ptr<uint8_t[]> bit_stream_; | |
| // Maximum number of bytes in output bitstream for a frame of audio. | |
| size_t max_bytes_; | |
| size_t encoded_bytes_; | |
| float encoding_time_ms_; | |
| float decoding_time_ms_; | |
| FILE* out_file_; | |
| size_t channels_; | |
| // Bit rate is in bit-per-second. | |
| int bit_rate_; | |
| std::string in_filename_; | |
| // Determines whether to save the output to file. | |
| bool save_out_data_; | |
| }; | |
| } // namespace webrtc | |
| #endif // MODULES_AUDIO_CODING_CODECS_TOOLS_AUDIO_CODEC_SPEED_TEST_H_ |