Fixing Valgrind warnings caused by open files and undeleted memory.
Restructured scaler_unittest.cc to focus tests on testing one thing. BUG= TEST=libyuv_unittests in Debug+Release at Linux, Mac and Windows. Review URL: http://webrtc-codereview.appspot.com/329026 git-svn-id: http://webrtc.googlecode.com/svn/trunk@1329 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
parent
d439870473
commit
94558d83bf
@ -188,8 +188,8 @@ TEST_F(TestLibYuv, ConvertTest) {
|
|||||||
fwrite(res_i420_buffer, frame_length_, 1, output_file);
|
fwrite(res_i420_buffer, frame_length_, 1, output_file);
|
||||||
psnr = I420PSNR(orig_buffer, res_i420_buffer, width_, height_);
|
psnr = I420PSNR(orig_buffer, res_i420_buffer, width_, height_);
|
||||||
EXPECT_EQ(48.0, psnr);
|
EXPECT_EQ(48.0, psnr);
|
||||||
|
ASSERT_EQ(0, fclose(output_file));
|
||||||
delete [] out_yuy2_buffer;
|
delete [] out_yuy2_buffer;
|
||||||
|
|
||||||
delete [] res_i420_buffer;
|
delete [] res_i420_buffer;
|
||||||
delete [] orig_buffer;
|
delete [] orig_buffer;
|
||||||
}
|
}
|
||||||
|
@ -24,16 +24,19 @@ class TestScaler : public ::testing::Test {
|
|||||||
virtual void SetUp();
|
virtual void SetUp();
|
||||||
virtual void TearDown();
|
virtual void TearDown();
|
||||||
|
|
||||||
|
void ScaleSequence(ScaleMethod method,
|
||||||
|
FILE* source_file, std::string out_name,
|
||||||
|
int src_width, int src_height,
|
||||||
|
int dst_width, int dst_height);
|
||||||
|
|
||||||
|
Scaler test_scaler_;
|
||||||
FILE* source_file_;
|
FILE* source_file_;
|
||||||
|
uint8_t* test_buffer_;
|
||||||
const int width_;
|
const int width_;
|
||||||
const int height_;
|
const int height_;
|
||||||
const int frame_length_;
|
const int frame_length_;
|
||||||
};
|
};
|
||||||
|
|
||||||
void ScaleSequence(ScaleMethod method,
|
|
||||||
FILE* source_file, std::string out_name,
|
|
||||||
int src_width, int src_height,
|
|
||||||
int dst_width, int dst_height);
|
|
||||||
|
|
||||||
// TODO (mikhal): Use scoped_ptr when handling buffers.
|
// TODO (mikhal): Use scoped_ptr when handling buffers.
|
||||||
TestScaler::TestScaler()
|
TestScaler::TestScaler()
|
||||||
@ -44,11 +47,12 @@ TestScaler::TestScaler()
|
|||||||
}
|
}
|
||||||
|
|
||||||
void TestScaler::SetUp() {
|
void TestScaler::SetUp() {
|
||||||
const std::string input_file_name = webrtc::test::ProjectRootPath() +
|
const std::string input_file_name =
|
||||||
"resources/foreman_cif.yuv";
|
webrtc::test::ResourcePath("foreman_cif", "yuv");
|
||||||
source_file_ = fopen(input_file_name.c_str(), "rb");
|
source_file_ = fopen(input_file_name.c_str(), "rb");
|
||||||
ASSERT_TRUE(source_file_ != NULL) << "Cannot read file: "<<
|
ASSERT_TRUE(source_file_ != NULL) << "Cannot read file: "<<
|
||||||
input_file_name << "\n";
|
input_file_name << "\n";
|
||||||
|
test_buffer_ = new uint8_t[frame_length_];
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestScaler::TearDown() {
|
void TestScaler::TearDown() {
|
||||||
@ -56,35 +60,36 @@ void TestScaler::TearDown() {
|
|||||||
ASSERT_EQ(0, fclose(source_file_));
|
ASSERT_EQ(0, fclose(source_file_));
|
||||||
}
|
}
|
||||||
source_file_ = NULL;
|
source_file_ = NULL;
|
||||||
|
delete [] test_buffer_;
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(TestScaler, ScaleSanityTest) {
|
TEST_F(TestScaler, ScaleWithoutSettingValues) {
|
||||||
Scaler test_scaler;
|
|
||||||
uint8_t* test_buffer = new uint8_t[frame_length_];
|
|
||||||
// Scaling without setting values
|
|
||||||
int size = 100;
|
int size = 100;
|
||||||
EXPECT_EQ(-2, test_scaler.Scale(test_buffer, test_buffer, size));
|
EXPECT_EQ(-2, test_scaler_.Scale(test_buffer_, test_buffer_, size));
|
||||||
|
}
|
||||||
|
|
||||||
// Setting bad initial values
|
TEST_F(TestScaler, ScaleBadInitialValues) {
|
||||||
EXPECT_EQ(-1, test_scaler.Set(0, 288, 352, 288, kI420, kI420, kScalePoint));
|
EXPECT_EQ(-1, test_scaler_.Set(0, 288, 352, 288, kI420, kI420, kScalePoint));
|
||||||
EXPECT_EQ(-1, test_scaler.Set(704, 0, 352, 288, kI420, kI420, kScaleBox));
|
EXPECT_EQ(-1, test_scaler_.Set(704, 0, 352, 288, kI420, kI420, kScaleBox));
|
||||||
EXPECT_EQ(-1, test_scaler.Set(704, 576, 352, 0, kI420, kI420,
|
EXPECT_EQ(-1, test_scaler_.Set(704, 576, 352, 0, kI420, kI420,
|
||||||
kScaleBilinear));
|
kScaleBilinear));
|
||||||
EXPECT_EQ(-1, test_scaler.Set(704, 576, 0, 288, kI420, kI420, kScalePoint));
|
EXPECT_EQ(-1, test_scaler_.Set(704, 576, 0, 288, kI420, kI420, kScalePoint));
|
||||||
|
}
|
||||||
|
|
||||||
// Sending NULL pointer
|
TEST_F(TestScaler, ScaleSendingNullSourcePointer) {
|
||||||
size = 0;
|
int size = 0;
|
||||||
EXPECT_EQ(-1, test_scaler.Scale(NULL, test_buffer, size));
|
EXPECT_EQ(-1, test_scaler_.Scale(NULL, test_buffer_, size));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(TestScaler, ScaleSendingBufferTooSmall) {
|
||||||
// Sending a buffer which is too small (should reallocate and update size)
|
// Sending a buffer which is too small (should reallocate and update size)
|
||||||
EXPECT_EQ(0, test_scaler.Set(352, 288, 144, 288, kI420, kI420, kScalePoint));
|
EXPECT_EQ(0, test_scaler_.Set(352, 288, 144, 288, kI420, kI420, kScalePoint));
|
||||||
uint8_t* test_buffer2 = NULL;
|
uint8_t* test_buffer2 = NULL;
|
||||||
size = 0;
|
int size = 0;
|
||||||
EXPECT_GT(fread(test_buffer, 1, frame_length_, source_file_), 0U);
|
EXPECT_GT(fread(test_buffer_, 1, frame_length_, source_file_), 0U);
|
||||||
EXPECT_EQ(0, test_scaler.Scale(test_buffer, test_buffer2, size));
|
EXPECT_EQ(0, test_scaler_.Scale(test_buffer_, test_buffer2, size));
|
||||||
EXPECT_EQ(144 * 288 * 3 / 2, size);
|
EXPECT_EQ(144 * 288 * 3 / 2, size);
|
||||||
|
delete [] test_buffer2;
|
||||||
delete [] test_buffer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO (mikhal): Converge the test into one function that accepts the method.
|
//TODO (mikhal): Converge the test into one function that accepts the method.
|
||||||
@ -183,13 +188,12 @@ TEST_F(TestScaler, BoxScaleTest) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO (mikhal): Move part to a separate scale test.
|
// TODO (mikhal): Move part to a separate scale test.
|
||||||
void ScaleSequence(ScaleMethod method,
|
void TestScaler::ScaleSequence(ScaleMethod method,
|
||||||
FILE* source_file, std::string out_name,
|
FILE* source_file, std::string out_name,
|
||||||
int src_width, int src_height,
|
int src_width, int src_height,
|
||||||
int dst_width, int dst_height) {
|
int dst_width, int dst_height) {
|
||||||
Scaler test_scaler;
|
|
||||||
FILE* output_file;
|
FILE* output_file;
|
||||||
EXPECT_EQ(0, test_scaler.Set(src_width, src_height,
|
EXPECT_EQ(0, test_scaler_.Set(src_width, src_height,
|
||||||
dst_width, dst_height,
|
dst_width, dst_height,
|
||||||
kI420, kI420, method));
|
kI420, kI420, method));
|
||||||
|
|
||||||
@ -214,7 +218,7 @@ void ScaleSequence(ScaleMethod method,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
start_clock = TickTime::MillisecondTimestamp();
|
start_clock = TickTime::MillisecondTimestamp();
|
||||||
EXPECT_EQ(0, test_scaler.Scale(input_buffer, output_buffer,
|
EXPECT_EQ(0, test_scaler_.Scale(input_buffer, output_buffer,
|
||||||
out_required_size));
|
out_required_size));
|
||||||
total_clock += TickTime::MillisecondTimestamp() - start_clock;
|
total_clock += TickTime::MillisecondTimestamp() - start_clock;
|
||||||
fwrite(output_buffer, out_required_size, 1, output_file);
|
fwrite(output_buffer, out_required_size, 1, output_file);
|
||||||
@ -227,8 +231,9 @@ void ScaleSequence(ScaleMethod method,
|
|||||||
printf("Average time per frame[ms]: %.2lf\n",
|
printf("Average time per frame[ms]: %.2lf\n",
|
||||||
(static_cast<double>(total_clock) / frame_count));
|
(static_cast<double>(total_clock) / frame_count));
|
||||||
}
|
}
|
||||||
|
ASSERT_EQ(0, fclose(output_file));
|
||||||
delete [] input_buffer;
|
delete [] input_buffer;
|
||||||
delete [] output_buffer;
|
delete [] output_buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace webrtc
|
||||||
|
Loading…
x
Reference in New Issue
Block a user