
use of int16_t/uint16_t. This is the upshot of a recommendation by henrik.lundin and kwiberg on an original small change ( https://webrtc-codereview.appspot.com/42569004/#ps1 ) to stop using int16_t just because values could fit in it, and is similar in nature to a previous "mass change to use size_t more" ( https://webrtc-codereview.appspot.com/23129004/ ) which also needed to be split up for review but to land all at once, since, like adding "const", such changes tend to cause a lot of transitive effects. This was be reviewed and approved in pieces: https://codereview.webrtc.org/1224093003 https://codereview.webrtc.org/1224123002 https://codereview.webrtc.org/1224163002 https://codereview.webrtc.org/1225133003 https://codereview.webrtc.org/1225173002 https://codereview.webrtc.org/1227163003 https://codereview.webrtc.org/1227203003 https://codereview.webrtc.org/1227213002 https://codereview.webrtc.org/1227893002 https://codereview.webrtc.org/1228793004 https://codereview.webrtc.org/1228803003 https://codereview.webrtc.org/1228823002 https://codereview.webrtc.org/1228823003 https://codereview.webrtc.org/1228843002 https://codereview.webrtc.org/1230693002 https://codereview.webrtc.org/1231713002 The change is being landed as TBR to all the folks who reviewed the above. BUG=chromium:81439 TEST=none R=andrew@webrtc.org, pbos@webrtc.org TBR=aluebs, andrew, asapersson, henrika, hlundin, jan.skoglund, kwiberg, minyue, pbos, pthatcher Review URL: https://codereview.webrtc.org/1230503003 . Cr-Commit-Position: refs/heads/master@{#9768}
108 lines
3.5 KiB
C++
108 lines
3.5 KiB
C++
/*
|
|
* 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.
|
|
*/
|
|
|
|
// Unit tests for FilePlayer.
|
|
|
|
#include "webrtc/modules/utility/interface/file_player.h"
|
|
|
|
#include <stdio.h>
|
|
#include <string>
|
|
|
|
#include "gflags/gflags.h"
|
|
#include "testing/gtest/include/gtest/gtest.h"
|
|
#include "webrtc/base/md5digest.h"
|
|
#include "webrtc/base/stringencode.h"
|
|
#include "webrtc/test/testsupport/fileutils.h"
|
|
#include "webrtc/test/testsupport/gtest_disable.h"
|
|
|
|
DEFINE_bool(file_player_output, false, "Generate reference files.");
|
|
|
|
namespace webrtc {
|
|
|
|
class FilePlayerTest : public ::testing::Test {
|
|
protected:
|
|
static const uint32_t kId = 0;
|
|
static const FileFormats kFileFormat = kFileFormatWavFile;
|
|
static const int kSampleRateHz = 8000;
|
|
|
|
FilePlayerTest()
|
|
: player_(FilePlayer::CreateFilePlayer(kId, kFileFormat)),
|
|
output_file_(NULL) {}
|
|
|
|
void SetUp() override {
|
|
if (FLAGS_file_player_output) {
|
|
std::string output_file =
|
|
webrtc::test::OutputPath() + "file_player_unittest_out.pcm";
|
|
output_file_ = fopen(output_file.c_str(), "wb");
|
|
ASSERT_TRUE(output_file_ != NULL);
|
|
}
|
|
}
|
|
|
|
void TearDown() override {
|
|
if (output_file_)
|
|
fclose(output_file_);
|
|
}
|
|
|
|
~FilePlayerTest() { FilePlayer::DestroyFilePlayer(player_); }
|
|
|
|
void PlayFileAndCheck(const std::string& input_file,
|
|
const std::string& ref_checksum,
|
|
int output_length_ms) {
|
|
const float kScaling = 1;
|
|
ASSERT_EQ(0,
|
|
player_->StartPlayingFile(
|
|
input_file.c_str(), false, 0, kScaling, 0, 0, NULL));
|
|
rtc::Md5Digest checksum;
|
|
for (int i = 0; i < output_length_ms / 10; ++i) {
|
|
int16_t out[10 * kSampleRateHz / 1000] = {0};
|
|
size_t num_samples;
|
|
EXPECT_EQ(0,
|
|
player_->Get10msAudioFromFile(out, num_samples, kSampleRateHz));
|
|
checksum.Update(out, num_samples * sizeof(out[0]));
|
|
if (FLAGS_file_player_output) {
|
|
ASSERT_EQ(num_samples,
|
|
fwrite(out, sizeof(out[0]), num_samples, output_file_));
|
|
}
|
|
}
|
|
char checksum_result[rtc::Md5Digest::kSize];
|
|
EXPECT_EQ(rtc::Md5Digest::kSize,
|
|
checksum.Finish(checksum_result, rtc::Md5Digest::kSize));
|
|
EXPECT_EQ(ref_checksum,
|
|
rtc::hex_encode(checksum_result, sizeof(checksum_result)));
|
|
}
|
|
|
|
FilePlayer* player_;
|
|
FILE* output_file_;
|
|
};
|
|
|
|
TEST_F(FilePlayerTest, DISABLED_ON_IOS(PlayWavPcmuFile)) {
|
|
const std::string kFileName =
|
|
test::ResourcePath("utility/encapsulated_pcmu_8khz", "wav");
|
|
// The file is longer than this, but keeping the output shorter limits the
|
|
// runtime for the test.
|
|
const int kOutputLengthMs = 10000;
|
|
const std::string kRefChecksum = "c74e7fd432d439b1311e1c16815b3e9a";
|
|
|
|
PlayFileAndCheck(kFileName, kRefChecksum, kOutputLengthMs);
|
|
}
|
|
|
|
TEST_F(FilePlayerTest, DISABLED_ON_IOS(PlayWavPcm16File)) {
|
|
const std::string kFileName =
|
|
test::ResourcePath("utility/encapsulated_pcm16b_8khz", "wav");
|
|
// The file is longer than this, but keeping the output shorter limits the
|
|
// runtime for the test.
|
|
const int kOutputLengthMs = 10000;
|
|
const std::string kRefChecksum = "e41d7e1dac8aeae9f21e8e03cd7ecd71";
|
|
|
|
PlayFileAndCheck(kFileName, kRefChecksum, kOutputLengthMs);
|
|
}
|
|
|
|
} // namespace webrtc
|