Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(84)

Side by Side Diff: webrtc/media/base/videoframe_unittest.h

Issue 1728503002: Replace scoped_ptr with unique_ptr in webrtc/media/ (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@up1
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/media/base/videoengine_unittest.h ('k') | webrtc/media/base/videoframefactory.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2004 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2004 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 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 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 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #ifndef WEBRTC_MEDIA_BASE_VIDEOFRAME_UNITTEST_H_ 11 #ifndef WEBRTC_MEDIA_BASE_VIDEOFRAME_UNITTEST_H_
12 #define WEBRTC_MEDIA_BASE_VIDEOFRAME_UNITTEST_H_ 12 #define WEBRTC_MEDIA_BASE_VIDEOFRAME_UNITTEST_H_
13 13
14 #include <algorithm> 14 #include <algorithm>
15 #include <memory>
15 #include <string> 16 #include <string>
16 17
17 #include "libyuv/convert.h" 18 #include "libyuv/convert.h"
18 #include "libyuv/convert_from.h" 19 #include "libyuv/convert_from.h"
19 #include "libyuv/planar_functions.h" 20 #include "libyuv/planar_functions.h"
20 #include "libyuv/rotate.h" 21 #include "libyuv/rotate.h"
21 #include "webrtc/base/gunit.h" 22 #include "webrtc/base/gunit.h"
22 #include "webrtc/base/pathutils.h" 23 #include "webrtc/base/pathutils.h"
23 #include "webrtc/base/stream.h" 24 #include "webrtc/base/stream.h"
24 #include "webrtc/base/stringutils.h" 25 #include "webrtc/base/stringutils.h"
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 webrtc::kVideoRotation_0, frame); 75 webrtc::kVideoRotation_0, frame);
75 } 76 }
76 bool LoadFrame(const std::string& filename, 77 bool LoadFrame(const std::string& filename,
77 uint32_t format, 78 uint32_t format,
78 int32_t width, 79 int32_t width,
79 int32_t height, 80 int32_t height,
80 int dw, 81 int dw,
81 int dh, 82 int dh,
82 webrtc::VideoRotation rotation, 83 webrtc::VideoRotation rotation,
83 T* frame) { 84 T* frame) {
84 rtc::scoped_ptr<rtc::MemoryStream> ms(LoadSample(filename)); 85 std::unique_ptr<rtc::MemoryStream> ms(LoadSample(filename));
85 return LoadFrame(ms.get(), format, width, height, dw, dh, rotation, frame); 86 return LoadFrame(ms.get(), format, width, height, dw, dh, rotation, frame);
86 } 87 }
87 // Load a video frame from a memory stream. 88 // Load a video frame from a memory stream.
88 bool LoadFrame(rtc::MemoryStream* ms, 89 bool LoadFrame(rtc::MemoryStream* ms,
89 uint32_t format, 90 uint32_t format,
90 int32_t width, 91 int32_t width,
91 int32_t height, 92 int32_t height,
92 T* frame) { 93 T* frame) {
93 return LoadFrame(ms, format, width, height, width, abs(height), 94 return LoadFrame(ms, format, width, height, width, abs(height),
94 webrtc::kVideoRotation_0, frame); 95 webrtc::kVideoRotation_0, frame);
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 bool ret = false; 136 bool ret = false;
136 for (int i = 0; i < repeat_; ++i) { 137 for (int i = 0; i < repeat_; ++i) {
137 ret = frame->Init(format, width, height, dw, dh, 138 ret = frame->Init(format, width, height, dw, dh,
138 sample, sample_size, 0, rotation); 139 sample, sample_size, 0, rotation);
139 } 140 }
140 return ret; 141 return ret;
141 } 142 }
142 143
143 rtc::MemoryStream* LoadSample(const std::string& filename) { 144 rtc::MemoryStream* LoadSample(const std::string& filename) {
144 rtc::Pathname path(cricket::GetTestFilePath(filename)); 145 rtc::Pathname path(cricket::GetTestFilePath(filename));
145 rtc::scoped_ptr<rtc::FileStream> fs( 146 std::unique_ptr<rtc::FileStream> fs(
146 rtc::Filesystem::OpenFile(path, "rb")); 147 rtc::Filesystem::OpenFile(path, "rb"));
147 if (!fs.get()) { 148 if (!fs.get()) {
148 LOG(LS_ERROR) << "Could not open test file path: " << path.pathname() 149 LOG(LS_ERROR) << "Could not open test file path: " << path.pathname()
149 << " from current dir " 150 << " from current dir "
150 << rtc::Filesystem::GetCurrentDirectory().pathname(); 151 << rtc::Filesystem::GetCurrentDirectory().pathname();
151 return NULL; 152 return NULL;
152 } 153 }
153 154
154 char buf[4096]; 155 char buf[4096];
155 rtc::scoped_ptr<rtc::MemoryStream> ms( 156 std::unique_ptr<rtc::MemoryStream> ms(
156 new rtc::MemoryStream()); 157 new rtc::MemoryStream());
157 rtc::StreamResult res = Flow(fs.get(), buf, sizeof(buf), ms.get()); 158 rtc::StreamResult res = Flow(fs.get(), buf, sizeof(buf), ms.get());
158 if (res != rtc::SR_SUCCESS) { 159 if (res != rtc::SR_SUCCESS) {
159 LOG(LS_ERROR) << "Could not load test file path: " << path.pathname(); 160 LOG(LS_ERROR) << "Could not load test file path: " << path.pathname();
160 return NULL; 161 return NULL;
161 } 162 }
162 163
163 return ms.release(); 164 return ms.release();
164 } 165 }
165 166
166 bool DumpSample(const std::string& filename, const void* buffer, int size) { 167 bool DumpSample(const std::string& filename, const void* buffer, int size) {
167 rtc::Pathname path(filename); 168 rtc::Pathname path(filename);
168 rtc::scoped_ptr<rtc::FileStream> fs( 169 std::unique_ptr<rtc::FileStream> fs(
169 rtc::Filesystem::OpenFile(path, "wb")); 170 rtc::Filesystem::OpenFile(path, "wb"));
170 if (!fs.get()) { 171 if (!fs.get()) {
171 return false; 172 return false;
172 } 173 }
173 174
174 return (fs->Write(buffer, size, NULL, NULL) == rtc::SR_SUCCESS); 175 return (fs->Write(buffer, size, NULL, NULL) == rtc::SR_SUCCESS);
175 } 176 }
176 177
177 // Create a test image in the desired color space. 178 // Create a test image in the desired color space.
178 // The image is a checkerboard pattern with 63x63 squares, which allows 179 // The image is a checkerboard pattern with 63x63 squares, which allows
179 // I420 chroma artifacts to easily be seen on the square boundaries. 180 // I420 chroma artifacts to easily be seen on the square boundaries.
180 // The pattern is { { green, orange }, { blue, purple } } 181 // The pattern is { { green, orange }, { blue, purple } }
181 // There is also a gradient within each square to ensure that the luma 182 // There is also a gradient within each square to ensure that the luma
182 // values are handled properly. 183 // values are handled properly.
183 rtc::MemoryStream* CreateYuv422Sample(uint32_t fourcc, 184 rtc::MemoryStream* CreateYuv422Sample(uint32_t fourcc,
184 uint32_t width, 185 uint32_t width,
185 uint32_t height) { 186 uint32_t height) {
186 int y1_pos, y2_pos, u_pos, v_pos; 187 int y1_pos, y2_pos, u_pos, v_pos;
187 if (!GetYuv422Packing(fourcc, &y1_pos, &y2_pos, &u_pos, &v_pos)) { 188 if (!GetYuv422Packing(fourcc, &y1_pos, &y2_pos, &u_pos, &v_pos)) {
188 return NULL; 189 return NULL;
189 } 190 }
190 191
191 rtc::scoped_ptr<rtc::MemoryStream> ms( 192 std::unique_ptr<rtc::MemoryStream> ms(
192 new rtc::MemoryStream); 193 new rtc::MemoryStream);
193 int awidth = (width + 1) & ~1; 194 int awidth = (width + 1) & ~1;
194 int size = awidth * 2 * height; 195 int size = awidth * 2 * height;
195 if (!ms->ReserveSize(size)) { 196 if (!ms->ReserveSize(size)) {
196 return NULL; 197 return NULL;
197 } 198 }
198 for (uint32_t y = 0; y < height; ++y) { 199 for (uint32_t y = 0; y < height; ++y) {
199 for (int x = 0; x < awidth; x += 2) { 200 for (int x = 0; x < awidth; x += 2) {
200 uint8_t quad[4]; 201 uint8_t quad[4];
201 quad[y1_pos] = (x % 63 + y % 63) + 64; 202 quad[y1_pos] = (x % 63 + y % 63) + 64;
202 quad[y2_pos] = ((x + 1) % 63 + y % 63) + 64; 203 quad[y2_pos] = ((x + 1) % 63 + y % 63) + 64;
203 quad[u_pos] = ((x / 63) & 1) ? 192 : 64; 204 quad[u_pos] = ((x / 63) & 1) ? 192 : 64;
204 quad[v_pos] = ((y / 63) & 1) ? 192 : 64; 205 quad[v_pos] = ((y / 63) & 1) ? 192 : 64;
205 ms->Write(quad, sizeof(quad), NULL, NULL); 206 ms->Write(quad, sizeof(quad), NULL, NULL);
206 } 207 }
207 } 208 }
208 return ms.release(); 209 return ms.release();
209 } 210 }
210 211
211 // Create a test image for YUV 420 formats with 12 bits per pixel. 212 // Create a test image for YUV 420 formats with 12 bits per pixel.
212 rtc::MemoryStream* CreateYuvSample(uint32_t width, 213 rtc::MemoryStream* CreateYuvSample(uint32_t width,
213 uint32_t height, 214 uint32_t height,
214 uint32_t bpp) { 215 uint32_t bpp) {
215 rtc::scoped_ptr<rtc::MemoryStream> ms( 216 std::unique_ptr<rtc::MemoryStream> ms(
216 new rtc::MemoryStream); 217 new rtc::MemoryStream);
217 if (!ms->ReserveSize(width * height * bpp / 8)) { 218 if (!ms->ReserveSize(width * height * bpp / 8)) {
218 return NULL; 219 return NULL;
219 } 220 }
220 221
221 for (uint32_t i = 0; i < width * height * bpp / 8; ++i) { 222 for (uint32_t i = 0; i < width * height * bpp / 8; ++i) {
222 uint8_t value = ((i / 63) & 1) ? 192 : 64; 223 uint8_t value = ((i / 63) & 1) ? 192 : 64;
223 ms->Write(&value, sizeof(value), NULL, NULL); 224 ms->Write(&value, sizeof(value), NULL, NULL);
224 } 225 }
225 return ms.release(); 226 return ms.release();
226 } 227 }
227 228
228 rtc::MemoryStream* CreateRgbSample(uint32_t fourcc, 229 rtc::MemoryStream* CreateRgbSample(uint32_t fourcc,
229 uint32_t width, 230 uint32_t width,
230 uint32_t height) { 231 uint32_t height) {
231 int r_pos, g_pos, b_pos, bytes; 232 int r_pos, g_pos, b_pos, bytes;
232 if (!GetRgbPacking(fourcc, &r_pos, &g_pos, &b_pos, &bytes)) { 233 if (!GetRgbPacking(fourcc, &r_pos, &g_pos, &b_pos, &bytes)) {
233 return NULL; 234 return NULL;
234 } 235 }
235 236
236 rtc::scoped_ptr<rtc::MemoryStream> ms( 237 std::unique_ptr<rtc::MemoryStream> ms(
237 new rtc::MemoryStream); 238 new rtc::MemoryStream);
238 if (!ms->ReserveSize(width * height * bytes)) { 239 if (!ms->ReserveSize(width * height * bytes)) {
239 return NULL; 240 return NULL;
240 } 241 }
241 242
242 for (uint32_t y = 0; y < height; ++y) { 243 for (uint32_t y = 0; y < height; ++y) {
243 for (uint32_t x = 0; x < width; ++x) { 244 for (uint32_t x = 0; x < width; ++x) {
244 uint8_t rgb[4] = {255, 255, 255, 255}; 245 uint8_t rgb[4] = {255, 255, 255, 255};
245 rgb[r_pos] = ((x / 63) & 1) ? 224 : 32; 246 rgb[r_pos] = ((x / 63) & 1) ? 224 : 32;
246 rgb[g_pos] = (x % 63 + y % 63) + 96; 247 rgb[g_pos] = (x % 63 + y % 63) + 96;
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
498 } 499 }
499 500
500 //////////////////////// 501 ////////////////////////
501 // Construction tests // 502 // Construction tests //
502 //////////////////////// 503 ////////////////////////
503 504
504 // Test constructing an image from a I420 buffer. 505 // Test constructing an image from a I420 buffer.
505 void ConstructI420() { 506 void ConstructI420() {
506 T frame; 507 T frame;
507 EXPECT_TRUE(IsNull(frame)); 508 EXPECT_TRUE(IsNull(frame));
508 rtc::scoped_ptr<rtc::MemoryStream> ms( 509 std::unique_ptr<rtc::MemoryStream> ms(
509 CreateYuvSample(kWidth, kHeight, 12)); 510 CreateYuvSample(kWidth, kHeight, 12));
510 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_I420, 511 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_I420,
511 kWidth, kHeight, &frame)); 512 kWidth, kHeight, &frame));
512 513
513 const uint8_t* y = reinterpret_cast<uint8_t*>(ms.get()->GetBuffer()); 514 const uint8_t* y = reinterpret_cast<uint8_t*>(ms.get()->GetBuffer());
514 const uint8_t* u = y + kWidth * kHeight; 515 const uint8_t* u = y + kWidth * kHeight;
515 const uint8_t* v = u + kWidth * kHeight / 4; 516 const uint8_t* v = u + kWidth * kHeight / 4;
516 EXPECT_TRUE(IsEqual(frame, kWidth, kHeight, 0, y, kWidth, u, 517 EXPECT_TRUE(IsEqual(frame, kWidth, kHeight, 0, y, kWidth, u,
517 kWidth / 2, v, kWidth / 2, 0)); 518 kWidth / 2, v, kWidth / 2, 0));
518 } 519 }
519 520
520 // Test constructing an image from a YV12 buffer. 521 // Test constructing an image from a YV12 buffer.
521 void ConstructYV12() { 522 void ConstructYV12() {
522 T frame; 523 T frame;
523 rtc::scoped_ptr<rtc::MemoryStream> ms( 524 std::unique_ptr<rtc::MemoryStream> ms(
524 CreateYuvSample(kWidth, kHeight, 12)); 525 CreateYuvSample(kWidth, kHeight, 12));
525 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_YV12, 526 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_YV12,
526 kWidth, kHeight, &frame)); 527 kWidth, kHeight, &frame));
527 528
528 const uint8_t* y = reinterpret_cast<uint8_t*>(ms.get()->GetBuffer()); 529 const uint8_t* y = reinterpret_cast<uint8_t*>(ms.get()->GetBuffer());
529 const uint8_t* v = y + kWidth * kHeight; 530 const uint8_t* v = y + kWidth * kHeight;
530 const uint8_t* u = v + kWidth * kHeight / 4; 531 const uint8_t* u = v + kWidth * kHeight / 4;
531 EXPECT_TRUE(IsEqual(frame, kWidth, kHeight, 0, y, kWidth, u, 532 EXPECT_TRUE(IsEqual(frame, kWidth, kHeight, 0, y, kWidth, u,
532 kWidth / 2, v, kWidth / 2, 0)); 533 kWidth / 2, v, kWidth / 2, 0));
533 } 534 }
534 535
535 // Test constructing an image from a I422 buffer. 536 // Test constructing an image from a I422 buffer.
536 void ConstructI422() { 537 void ConstructI422() {
537 T frame1, frame2; 538 T frame1, frame2;
538 ASSERT_TRUE(LoadFrameNoRepeat(&frame1)); 539 ASSERT_TRUE(LoadFrameNoRepeat(&frame1));
539 size_t buf_size = kWidth * kHeight * 2; 540 size_t buf_size = kWidth * kHeight * 2;
540 rtc::scoped_ptr<uint8_t[]> buf(new uint8_t[buf_size + kAlignment]); 541 std::unique_ptr<uint8_t[]> buf(new uint8_t[buf_size + kAlignment]);
541 uint8_t* y = ALIGNP(buf.get(), kAlignment); 542 uint8_t* y = ALIGNP(buf.get(), kAlignment);
542 uint8_t* u = y + kWidth * kHeight; 543 uint8_t* u = y + kWidth * kHeight;
543 uint8_t* v = u + (kWidth / 2) * kHeight; 544 uint8_t* v = u + (kWidth / 2) * kHeight;
544 EXPECT_EQ(0, libyuv::I420ToI422(frame1.GetYPlane(), frame1.GetYPitch(), 545 EXPECT_EQ(0, libyuv::I420ToI422(frame1.GetYPlane(), frame1.GetYPitch(),
545 frame1.GetUPlane(), frame1.GetUPitch(), 546 frame1.GetUPlane(), frame1.GetUPitch(),
546 frame1.GetVPlane(), frame1.GetVPitch(), 547 frame1.GetVPlane(), frame1.GetVPitch(),
547 y, kWidth, 548 y, kWidth,
548 u, kWidth / 2, 549 u, kWidth / 2,
549 v, kWidth / 2, 550 v, kWidth / 2,
550 kWidth, kHeight)); 551 kWidth, kHeight));
551 EXPECT_TRUE(LoadFrame(y, buf_size, cricket::FOURCC_I422, 552 EXPECT_TRUE(LoadFrame(y, buf_size, cricket::FOURCC_I422,
552 kWidth, kHeight, &frame2)); 553 kWidth, kHeight, &frame2));
553 EXPECT_TRUE(IsEqual(frame1, frame2, 1)); 554 EXPECT_TRUE(IsEqual(frame1, frame2, 1));
554 } 555 }
555 556
556 // Test constructing an image from a YUY2 buffer. 557 // Test constructing an image from a YUY2 buffer.
557 void ConstructYuy2() { 558 void ConstructYuy2() {
558 T frame1, frame2; 559 T frame1, frame2;
559 ASSERT_TRUE(LoadFrameNoRepeat(&frame1)); 560 ASSERT_TRUE(LoadFrameNoRepeat(&frame1));
560 size_t buf_size = kWidth * kHeight * 2; 561 size_t buf_size = kWidth * kHeight * 2;
561 rtc::scoped_ptr<uint8_t[]> buf(new uint8_t[buf_size + kAlignment]); 562 std::unique_ptr<uint8_t[]> buf(new uint8_t[buf_size + kAlignment]);
562 uint8_t* yuy2 = ALIGNP(buf.get(), kAlignment); 563 uint8_t* yuy2 = ALIGNP(buf.get(), kAlignment);
563 EXPECT_EQ(0, libyuv::I420ToYUY2(frame1.GetYPlane(), frame1.GetYPitch(), 564 EXPECT_EQ(0, libyuv::I420ToYUY2(frame1.GetYPlane(), frame1.GetYPitch(),
564 frame1.GetUPlane(), frame1.GetUPitch(), 565 frame1.GetUPlane(), frame1.GetUPitch(),
565 frame1.GetVPlane(), frame1.GetVPitch(), 566 frame1.GetVPlane(), frame1.GetVPitch(),
566 yuy2, kWidth * 2, 567 yuy2, kWidth * 2,
567 kWidth, kHeight)); 568 kWidth, kHeight));
568 EXPECT_TRUE(LoadFrame(yuy2, buf_size, cricket::FOURCC_YUY2, 569 EXPECT_TRUE(LoadFrame(yuy2, buf_size, cricket::FOURCC_YUY2,
569 kWidth, kHeight, &frame2)); 570 kWidth, kHeight, &frame2));
570 EXPECT_TRUE(IsEqual(frame1, frame2, 0)); 571 EXPECT_TRUE(IsEqual(frame1, frame2, 0));
571 } 572 }
572 573
573 // Test constructing an image from a YUY2 buffer with buffer unaligned. 574 // Test constructing an image from a YUY2 buffer with buffer unaligned.
574 void ConstructYuy2Unaligned() { 575 void ConstructYuy2Unaligned() {
575 T frame1, frame2; 576 T frame1, frame2;
576 ASSERT_TRUE(LoadFrameNoRepeat(&frame1)); 577 ASSERT_TRUE(LoadFrameNoRepeat(&frame1));
577 size_t buf_size = kWidth * kHeight * 2; 578 size_t buf_size = kWidth * kHeight * 2;
578 rtc::scoped_ptr<uint8_t[]> buf(new uint8_t[buf_size + kAlignment + 1]); 579 std::unique_ptr<uint8_t[]> buf(new uint8_t[buf_size + kAlignment + 1]);
579 uint8_t* yuy2 = ALIGNP(buf.get(), kAlignment) + 1; 580 uint8_t* yuy2 = ALIGNP(buf.get(), kAlignment) + 1;
580 EXPECT_EQ(0, libyuv::I420ToYUY2(frame1.GetYPlane(), frame1.GetYPitch(), 581 EXPECT_EQ(0, libyuv::I420ToYUY2(frame1.GetYPlane(), frame1.GetYPitch(),
581 frame1.GetUPlane(), frame1.GetUPitch(), 582 frame1.GetUPlane(), frame1.GetUPitch(),
582 frame1.GetVPlane(), frame1.GetVPitch(), 583 frame1.GetVPlane(), frame1.GetVPitch(),
583 yuy2, kWidth * 2, 584 yuy2, kWidth * 2,
584 kWidth, kHeight)); 585 kWidth, kHeight));
585 EXPECT_TRUE(LoadFrame(yuy2, buf_size, cricket::FOURCC_YUY2, 586 EXPECT_TRUE(LoadFrame(yuy2, buf_size, cricket::FOURCC_YUY2,
586 kWidth, kHeight, &frame2)); 587 kWidth, kHeight, &frame2));
587 EXPECT_TRUE(IsEqual(frame1, frame2, 0)); 588 EXPECT_TRUE(IsEqual(frame1, frame2, 0));
588 } 589 }
589 590
590 // Test constructing an image from a wide YUY2 buffer. 591 // Test constructing an image from a wide YUY2 buffer.
591 // Normal is 1280x720. Wide is 12800x72 592 // Normal is 1280x720. Wide is 12800x72
592 void ConstructYuy2Wide() { 593 void ConstructYuy2Wide() {
593 T frame1, frame2; 594 T frame1, frame2;
594 rtc::scoped_ptr<rtc::MemoryStream> ms( 595 std::unique_ptr<rtc::MemoryStream> ms(
595 CreateYuv422Sample(cricket::FOURCC_YUY2, kWidth * 10, kHeight / 10)); 596 CreateYuv422Sample(cricket::FOURCC_YUY2, kWidth * 10, kHeight / 10));
596 ASSERT_TRUE(ms.get() != NULL); 597 ASSERT_TRUE(ms.get() != NULL);
597 EXPECT_TRUE(ConvertYuv422(ms.get(), cricket::FOURCC_YUY2, 598 EXPECT_TRUE(ConvertYuv422(ms.get(), cricket::FOURCC_YUY2,
598 kWidth * 10, kHeight / 10, 599 kWidth * 10, kHeight / 10,
599 &frame1)); 600 &frame1));
600 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_YUY2, 601 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_YUY2,
601 kWidth * 10, kHeight / 10, &frame2)); 602 kWidth * 10, kHeight / 10, &frame2));
602 EXPECT_TRUE(IsEqual(frame1, frame2, 0)); 603 EXPECT_TRUE(IsEqual(frame1, frame2, 0));
603 } 604 }
604 605
605 // Test constructing an image from a UYVY buffer. 606 // Test constructing an image from a UYVY buffer.
606 void ConstructUyvy() { 607 void ConstructUyvy() {
607 T frame1, frame2; 608 T frame1, frame2;
608 rtc::scoped_ptr<rtc::MemoryStream> ms( 609 std::unique_ptr<rtc::MemoryStream> ms(
609 CreateYuv422Sample(cricket::FOURCC_UYVY, kWidth, kHeight)); 610 CreateYuv422Sample(cricket::FOURCC_UYVY, kWidth, kHeight));
610 ASSERT_TRUE(ms.get() != NULL); 611 ASSERT_TRUE(ms.get() != NULL);
611 EXPECT_TRUE(ConvertYuv422(ms.get(), cricket::FOURCC_UYVY, kWidth, kHeight, 612 EXPECT_TRUE(ConvertYuv422(ms.get(), cricket::FOURCC_UYVY, kWidth, kHeight,
612 &frame1)); 613 &frame1));
613 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_UYVY, 614 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_UYVY,
614 kWidth, kHeight, &frame2)); 615 kWidth, kHeight, &frame2));
615 EXPECT_TRUE(IsEqual(frame1, frame2, 0)); 616 EXPECT_TRUE(IsEqual(frame1, frame2, 0));
616 } 617 }
617 618
618 // Test constructing an image from a random buffer. 619 // Test constructing an image from a random buffer.
619 // We are merely verifying that the code succeeds and is free of crashes. 620 // We are merely verifying that the code succeeds and is free of crashes.
620 void ConstructM420() { 621 void ConstructM420() {
621 T frame; 622 T frame;
622 rtc::scoped_ptr<rtc::MemoryStream> ms( 623 std::unique_ptr<rtc::MemoryStream> ms(
623 CreateYuvSample(kWidth, kHeight, 12)); 624 CreateYuvSample(kWidth, kHeight, 12));
624 ASSERT_TRUE(ms.get() != NULL); 625 ASSERT_TRUE(ms.get() != NULL);
625 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_M420, 626 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_M420,
626 kWidth, kHeight, &frame)); 627 kWidth, kHeight, &frame));
627 } 628 }
628 629
629 void ConstructNV21() { 630 void ConstructNV21() {
630 T frame; 631 T frame;
631 rtc::scoped_ptr<rtc::MemoryStream> ms( 632 std::unique_ptr<rtc::MemoryStream> ms(
632 CreateYuvSample(kWidth, kHeight, 12)); 633 CreateYuvSample(kWidth, kHeight, 12));
633 ASSERT_TRUE(ms.get() != NULL); 634 ASSERT_TRUE(ms.get() != NULL);
634 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_NV21, 635 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_NV21,
635 kWidth, kHeight, &frame)); 636 kWidth, kHeight, &frame));
636 } 637 }
637 638
638 void ConstructNV12() { 639 void ConstructNV12() {
639 T frame; 640 T frame;
640 rtc::scoped_ptr<rtc::MemoryStream> ms( 641 std::unique_ptr<rtc::MemoryStream> ms(
641 CreateYuvSample(kWidth, kHeight, 12)); 642 CreateYuvSample(kWidth, kHeight, 12));
642 ASSERT_TRUE(ms.get() != NULL); 643 ASSERT_TRUE(ms.get() != NULL);
643 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_NV12, 644 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_NV12,
644 kWidth, kHeight, &frame)); 645 kWidth, kHeight, &frame));
645 } 646 }
646 647
647 // Test constructing an image from a ABGR buffer 648 // Test constructing an image from a ABGR buffer
648 // Due to rounding, some pixels may differ slightly from the VideoFrame impl. 649 // Due to rounding, some pixels may differ slightly from the VideoFrame impl.
649 void ConstructABGR() { 650 void ConstructABGR() {
650 T frame1, frame2; 651 T frame1, frame2;
651 rtc::scoped_ptr<rtc::MemoryStream> ms( 652 std::unique_ptr<rtc::MemoryStream> ms(
652 CreateRgbSample(cricket::FOURCC_ABGR, kWidth, kHeight)); 653 CreateRgbSample(cricket::FOURCC_ABGR, kWidth, kHeight));
653 ASSERT_TRUE(ms.get() != NULL); 654 ASSERT_TRUE(ms.get() != NULL);
654 EXPECT_TRUE(ConvertRgb(ms.get(), cricket::FOURCC_ABGR, kWidth, kHeight, 655 EXPECT_TRUE(ConvertRgb(ms.get(), cricket::FOURCC_ABGR, kWidth, kHeight,
655 &frame1)); 656 &frame1));
656 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_ABGR, 657 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_ABGR,
657 kWidth, kHeight, &frame2)); 658 kWidth, kHeight, &frame2));
658 EXPECT_TRUE(IsEqual(frame1, frame2, 2)); 659 EXPECT_TRUE(IsEqual(frame1, frame2, 2));
659 } 660 }
660 661
661 // Test constructing an image from a ARGB buffer 662 // Test constructing an image from a ARGB buffer
662 // Due to rounding, some pixels may differ slightly from the VideoFrame impl. 663 // Due to rounding, some pixels may differ slightly from the VideoFrame impl.
663 void ConstructARGB() { 664 void ConstructARGB() {
664 T frame1, frame2; 665 T frame1, frame2;
665 rtc::scoped_ptr<rtc::MemoryStream> ms( 666 std::unique_ptr<rtc::MemoryStream> ms(
666 CreateRgbSample(cricket::FOURCC_ARGB, kWidth, kHeight)); 667 CreateRgbSample(cricket::FOURCC_ARGB, kWidth, kHeight));
667 ASSERT_TRUE(ms.get() != NULL); 668 ASSERT_TRUE(ms.get() != NULL);
668 EXPECT_TRUE(ConvertRgb(ms.get(), cricket::FOURCC_ARGB, kWidth, kHeight, 669 EXPECT_TRUE(ConvertRgb(ms.get(), cricket::FOURCC_ARGB, kWidth, kHeight,
669 &frame1)); 670 &frame1));
670 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_ARGB, 671 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_ARGB,
671 kWidth, kHeight, &frame2)); 672 kWidth, kHeight, &frame2));
672 EXPECT_TRUE(IsEqual(frame1, frame2, 2)); 673 EXPECT_TRUE(IsEqual(frame1, frame2, 2));
673 } 674 }
674 675
675 // Test constructing an image from a wide ARGB buffer 676 // Test constructing an image from a wide ARGB buffer
676 // Normal is 1280x720. Wide is 12800x72 677 // Normal is 1280x720. Wide is 12800x72
677 void ConstructARGBWide() { 678 void ConstructARGBWide() {
678 T frame1, frame2; 679 T frame1, frame2;
679 rtc::scoped_ptr<rtc::MemoryStream> ms( 680 std::unique_ptr<rtc::MemoryStream> ms(
680 CreateRgbSample(cricket::FOURCC_ARGB, kWidth * 10, kHeight / 10)); 681 CreateRgbSample(cricket::FOURCC_ARGB, kWidth * 10, kHeight / 10));
681 ASSERT_TRUE(ms.get() != NULL); 682 ASSERT_TRUE(ms.get() != NULL);
682 EXPECT_TRUE(ConvertRgb(ms.get(), cricket::FOURCC_ARGB, 683 EXPECT_TRUE(ConvertRgb(ms.get(), cricket::FOURCC_ARGB,
683 kWidth * 10, kHeight / 10, &frame1)); 684 kWidth * 10, kHeight / 10, &frame1));
684 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_ARGB, 685 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_ARGB,
685 kWidth * 10, kHeight / 10, &frame2)); 686 kWidth * 10, kHeight / 10, &frame2));
686 EXPECT_TRUE(IsEqual(frame1, frame2, 2)); 687 EXPECT_TRUE(IsEqual(frame1, frame2, 2));
687 } 688 }
688 689
689 // Test constructing an image from an BGRA buffer. 690 // Test constructing an image from an BGRA buffer.
690 // Due to rounding, some pixels may differ slightly from the VideoFrame impl. 691 // Due to rounding, some pixels may differ slightly from the VideoFrame impl.
691 void ConstructBGRA() { 692 void ConstructBGRA() {
692 T frame1, frame2; 693 T frame1, frame2;
693 rtc::scoped_ptr<rtc::MemoryStream> ms( 694 std::unique_ptr<rtc::MemoryStream> ms(
694 CreateRgbSample(cricket::FOURCC_BGRA, kWidth, kHeight)); 695 CreateRgbSample(cricket::FOURCC_BGRA, kWidth, kHeight));
695 ASSERT_TRUE(ms.get() != NULL); 696 ASSERT_TRUE(ms.get() != NULL);
696 EXPECT_TRUE(ConvertRgb(ms.get(), cricket::FOURCC_BGRA, kWidth, kHeight, 697 EXPECT_TRUE(ConvertRgb(ms.get(), cricket::FOURCC_BGRA, kWidth, kHeight,
697 &frame1)); 698 &frame1));
698 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_BGRA, 699 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_BGRA,
699 kWidth, kHeight, &frame2)); 700 kWidth, kHeight, &frame2));
700 EXPECT_TRUE(IsEqual(frame1, frame2, 2)); 701 EXPECT_TRUE(IsEqual(frame1, frame2, 2));
701 } 702 }
702 703
703 // Test constructing an image from a 24BG buffer. 704 // Test constructing an image from a 24BG buffer.
704 // Due to rounding, some pixels may differ slightly from the VideoFrame impl. 705 // Due to rounding, some pixels may differ slightly from the VideoFrame impl.
705 void Construct24BG() { 706 void Construct24BG() {
706 T frame1, frame2; 707 T frame1, frame2;
707 rtc::scoped_ptr<rtc::MemoryStream> ms( 708 std::unique_ptr<rtc::MemoryStream> ms(
708 CreateRgbSample(cricket::FOURCC_24BG, kWidth, kHeight)); 709 CreateRgbSample(cricket::FOURCC_24BG, kWidth, kHeight));
709 ASSERT_TRUE(ms.get() != NULL); 710 ASSERT_TRUE(ms.get() != NULL);
710 EXPECT_TRUE(ConvertRgb(ms.get(), cricket::FOURCC_24BG, kWidth, kHeight, 711 EXPECT_TRUE(ConvertRgb(ms.get(), cricket::FOURCC_24BG, kWidth, kHeight,
711 &frame1)); 712 &frame1));
712 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_24BG, 713 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_24BG,
713 kWidth, kHeight, &frame2)); 714 kWidth, kHeight, &frame2));
714 EXPECT_TRUE(IsEqual(frame1, frame2, 2)); 715 EXPECT_TRUE(IsEqual(frame1, frame2, 2));
715 } 716 }
716 717
717 // Test constructing an image from a raw RGB buffer. 718 // Test constructing an image from a raw RGB buffer.
718 // Due to rounding, some pixels may differ slightly from the VideoFrame impl. 719 // Due to rounding, some pixels may differ slightly from the VideoFrame impl.
719 void ConstructRaw() { 720 void ConstructRaw() {
720 T frame1, frame2; 721 T frame1, frame2;
721 rtc::scoped_ptr<rtc::MemoryStream> ms( 722 std::unique_ptr<rtc::MemoryStream> ms(
722 CreateRgbSample(cricket::FOURCC_RAW, kWidth, kHeight)); 723 CreateRgbSample(cricket::FOURCC_RAW, kWidth, kHeight));
723 ASSERT_TRUE(ms.get() != NULL); 724 ASSERT_TRUE(ms.get() != NULL);
724 EXPECT_TRUE(ConvertRgb(ms.get(), cricket::FOURCC_RAW, kWidth, kHeight, 725 EXPECT_TRUE(ConvertRgb(ms.get(), cricket::FOURCC_RAW, kWidth, kHeight,
725 &frame1)); 726 &frame1));
726 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_RAW, 727 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_RAW,
727 kWidth, kHeight, &frame2)); 728 kWidth, kHeight, &frame2));
728 EXPECT_TRUE(IsEqual(frame1, frame2, 2)); 729 EXPECT_TRUE(IsEqual(frame1, frame2, 2));
729 } 730 }
730 731
731 // Test constructing an image from a RGB565 buffer 732 // Test constructing an image from a RGB565 buffer
732 void ConstructRGB565() { 733 void ConstructRGB565() {
733 T frame1, frame2; 734 T frame1, frame2;
734 size_t out_size = kWidth * kHeight * 2; 735 size_t out_size = kWidth * kHeight * 2;
735 rtc::scoped_ptr<uint8_t[]> outbuf(new uint8_t[out_size + kAlignment]); 736 std::unique_ptr<uint8_t[]> outbuf(new uint8_t[out_size + kAlignment]);
736 uint8_t* out = ALIGNP(outbuf.get(), kAlignment); 737 uint8_t* out = ALIGNP(outbuf.get(), kAlignment);
737 T frame; 738 T frame;
738 ASSERT_TRUE(LoadFrameNoRepeat(&frame1)); 739 ASSERT_TRUE(LoadFrameNoRepeat(&frame1));
739 EXPECT_EQ(out_size, frame1.ConvertToRgbBuffer(cricket::FOURCC_RGBP, 740 EXPECT_EQ(out_size, frame1.ConvertToRgbBuffer(cricket::FOURCC_RGBP,
740 out, 741 out,
741 out_size, kWidth * 2)); 742 out_size, kWidth * 2));
742 EXPECT_TRUE(LoadFrame(out, out_size, cricket::FOURCC_RGBP, 743 EXPECT_TRUE(LoadFrame(out, out_size, cricket::FOURCC_RGBP,
743 kWidth, kHeight, &frame2)); 744 kWidth, kHeight, &frame2));
744 EXPECT_TRUE(IsEqual(frame1, frame2, 20)); 745 EXPECT_TRUE(IsEqual(frame1, frame2, 20));
745 } 746 }
746 747
747 // Test constructing an image from a ARGB1555 buffer 748 // Test constructing an image from a ARGB1555 buffer
748 void ConstructARGB1555() { 749 void ConstructARGB1555() {
749 T frame1, frame2; 750 T frame1, frame2;
750 size_t out_size = kWidth * kHeight * 2; 751 size_t out_size = kWidth * kHeight * 2;
751 rtc::scoped_ptr<uint8_t[]> outbuf(new uint8_t[out_size + kAlignment]); 752 std::unique_ptr<uint8_t[]> outbuf(new uint8_t[out_size + kAlignment]);
752 uint8_t* out = ALIGNP(outbuf.get(), kAlignment); 753 uint8_t* out = ALIGNP(outbuf.get(), kAlignment);
753 T frame; 754 T frame;
754 ASSERT_TRUE(LoadFrameNoRepeat(&frame1)); 755 ASSERT_TRUE(LoadFrameNoRepeat(&frame1));
755 EXPECT_EQ(out_size, frame1.ConvertToRgbBuffer(cricket::FOURCC_RGBO, 756 EXPECT_EQ(out_size, frame1.ConvertToRgbBuffer(cricket::FOURCC_RGBO,
756 out, 757 out,
757 out_size, kWidth * 2)); 758 out_size, kWidth * 2));
758 EXPECT_TRUE(LoadFrame(out, out_size, cricket::FOURCC_RGBO, 759 EXPECT_TRUE(LoadFrame(out, out_size, cricket::FOURCC_RGBO,
759 kWidth, kHeight, &frame2)); 760 kWidth, kHeight, &frame2));
760 EXPECT_TRUE(IsEqual(frame1, frame2, 20)); 761 EXPECT_TRUE(IsEqual(frame1, frame2, 20));
761 } 762 }
762 763
763 // Test constructing an image from a ARGB4444 buffer 764 // Test constructing an image from a ARGB4444 buffer
764 void ConstructARGB4444() { 765 void ConstructARGB4444() {
765 T frame1, frame2; 766 T frame1, frame2;
766 size_t out_size = kWidth * kHeight * 2; 767 size_t out_size = kWidth * kHeight * 2;
767 rtc::scoped_ptr<uint8_t[]> outbuf(new uint8_t[out_size + kAlignment]); 768 std::unique_ptr<uint8_t[]> outbuf(new uint8_t[out_size + kAlignment]);
768 uint8_t* out = ALIGNP(outbuf.get(), kAlignment); 769 uint8_t* out = ALIGNP(outbuf.get(), kAlignment);
769 T frame; 770 T frame;
770 ASSERT_TRUE(LoadFrameNoRepeat(&frame1)); 771 ASSERT_TRUE(LoadFrameNoRepeat(&frame1));
771 EXPECT_EQ(out_size, frame1.ConvertToRgbBuffer(cricket::FOURCC_R444, 772 EXPECT_EQ(out_size, frame1.ConvertToRgbBuffer(cricket::FOURCC_R444,
772 out, 773 out,
773 out_size, kWidth * 2)); 774 out_size, kWidth * 2));
774 EXPECT_TRUE(LoadFrame(out, out_size, cricket::FOURCC_R444, 775 EXPECT_TRUE(LoadFrame(out, out_size, cricket::FOURCC_R444,
775 kWidth, kHeight, &frame2)); 776 kWidth, kHeight, &frame2));
776 EXPECT_TRUE(IsEqual(frame1, frame2, 20)); 777 EXPECT_TRUE(IsEqual(frame1, frame2, 20));
777 } 778 }
778 779
779 // Macro to help test different rotations 780 // Macro to help test different rotations
780 #define TEST_MIRROR(FOURCC, BPP) \ 781 #define TEST_MIRROR(FOURCC, BPP) \
781 void Construct##FOURCC##Mirror() { \ 782 void Construct##FOURCC##Mirror() { \
782 T frame1, frame2, frame3; \ 783 T frame1, frame2, frame3; \
783 rtc::scoped_ptr<rtc::MemoryStream> ms( \ 784 std::unique_ptr<rtc::MemoryStream> ms( \
784 CreateYuvSample(kWidth, kHeight, BPP)); \ 785 CreateYuvSample(kWidth, kHeight, BPP)); \
785 ASSERT_TRUE(ms.get() != NULL); \ 786 ASSERT_TRUE(ms.get() != NULL); \
786 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_##FOURCC, kWidth, \ 787 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_##FOURCC, kWidth, \
787 -kHeight, kWidth, kHeight, \ 788 -kHeight, kWidth, kHeight, \
788 webrtc::kVideoRotation_180, &frame1)); \ 789 webrtc::kVideoRotation_180, &frame1)); \
789 size_t data_size; \ 790 size_t data_size; \
790 bool ret = ms->GetSize(&data_size); \ 791 bool ret = ms->GetSize(&data_size); \
791 EXPECT_TRUE(ret); \ 792 EXPECT_TRUE(ret); \
792 EXPECT_TRUE(frame2.Init(cricket::FOURCC_##FOURCC, kWidth, kHeight, kWidth, \ 793 EXPECT_TRUE(frame2.Init(cricket::FOURCC_##FOURCC, kWidth, kHeight, kWidth, \
793 kHeight, \ 794 kHeight, \
(...skipping 10 matching lines...) Expand all
804 kHeight); \ 805 kHeight); \
805 EXPECT_TRUE(IsEqual(frame1, frame3, 0)); \ 806 EXPECT_TRUE(IsEqual(frame1, frame3, 0)); \
806 } 807 }
807 808
808 TEST_MIRROR(I420, 420) 809 TEST_MIRROR(I420, 420)
809 810
810 // Macro to help test different rotations 811 // Macro to help test different rotations
811 #define TEST_ROTATE(FOURCC, BPP, ROTATE) \ 812 #define TEST_ROTATE(FOURCC, BPP, ROTATE) \
812 void Construct##FOURCC##Rotate##ROTATE() { \ 813 void Construct##FOURCC##Rotate##ROTATE() { \
813 T frame1, frame2, frame3; \ 814 T frame1, frame2, frame3; \
814 rtc::scoped_ptr<rtc::MemoryStream> ms( \ 815 std::unique_ptr<rtc::MemoryStream> ms( \
815 CreateYuvSample(kWidth, kHeight, BPP)); \ 816 CreateYuvSample(kWidth, kHeight, BPP)); \
816 ASSERT_TRUE(ms.get() != NULL); \ 817 ASSERT_TRUE(ms.get() != NULL); \
817 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_##FOURCC, kWidth, kHeight, \ 818 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_##FOURCC, kWidth, kHeight, \
818 kWidth, kHeight, webrtc::kVideoRotation_##ROTATE, \ 819 kWidth, kHeight, webrtc::kVideoRotation_##ROTATE, \
819 &frame1)); \ 820 &frame1)); \
820 size_t data_size; \ 821 size_t data_size; \
821 bool ret = ms->GetSize(&data_size); \ 822 bool ret = ms->GetSize(&data_size); \
822 EXPECT_TRUE(ret); \ 823 EXPECT_TRUE(ret); \
823 EXPECT_TRUE(frame2.Init(cricket::FOURCC_##FOURCC, kWidth, kHeight, kWidth, \ 824 EXPECT_TRUE(frame2.Init(cricket::FOURCC_##FOURCC, kWidth, kHeight, kWidth, \
824 kHeight, \ 825 kHeight, \
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
858 TEST_ROTATE(UYVY, 16, 180) 859 TEST_ROTATE(UYVY, 16, 180)
859 TEST_ROTATE(UYVY, 16, 270) 860 TEST_ROTATE(UYVY, 16, 270)
860 TEST_ROTATE(YUY2, 16, 0) 861 TEST_ROTATE(YUY2, 16, 0)
861 TEST_ROTATE(YUY2, 16, 90) 862 TEST_ROTATE(YUY2, 16, 90)
862 TEST_ROTATE(YUY2, 16, 180) 863 TEST_ROTATE(YUY2, 16, 180)
863 TEST_ROTATE(YUY2, 16, 270) 864 TEST_ROTATE(YUY2, 16, 270)
864 865
865 // Test constructing an image from a UYVY buffer rotated 90 degrees. 866 // Test constructing an image from a UYVY buffer rotated 90 degrees.
866 void ConstructUyvyRotate90() { 867 void ConstructUyvyRotate90() {
867 T frame2; 868 T frame2;
868 rtc::scoped_ptr<rtc::MemoryStream> ms( 869 std::unique_ptr<rtc::MemoryStream> ms(
869 CreateYuv422Sample(cricket::FOURCC_UYVY, kWidth, kHeight)); 870 CreateYuv422Sample(cricket::FOURCC_UYVY, kWidth, kHeight));
870 ASSERT_TRUE(ms.get() != NULL); 871 ASSERT_TRUE(ms.get() != NULL);
871 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_UYVY, kWidth, kHeight, 872 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_UYVY, kWidth, kHeight,
872 kWidth, kHeight, webrtc::kVideoRotation_90, &frame2)); 873 kWidth, kHeight, webrtc::kVideoRotation_90, &frame2));
873 } 874 }
874 875
875 // Test constructing an image from a UYVY buffer rotated 180 degrees. 876 // Test constructing an image from a UYVY buffer rotated 180 degrees.
876 void ConstructUyvyRotate180() { 877 void ConstructUyvyRotate180() {
877 T frame2; 878 T frame2;
878 rtc::scoped_ptr<rtc::MemoryStream> ms( 879 std::unique_ptr<rtc::MemoryStream> ms(
879 CreateYuv422Sample(cricket::FOURCC_UYVY, kWidth, kHeight)); 880 CreateYuv422Sample(cricket::FOURCC_UYVY, kWidth, kHeight));
880 ASSERT_TRUE(ms.get() != NULL); 881 ASSERT_TRUE(ms.get() != NULL);
881 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_UYVY, kWidth, kHeight, 882 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_UYVY, kWidth, kHeight,
882 kWidth, kHeight, webrtc::kVideoRotation_180, 883 kWidth, kHeight, webrtc::kVideoRotation_180,
883 &frame2)); 884 &frame2));
884 } 885 }
885 886
886 // Test constructing an image from a UYVY buffer rotated 270 degrees. 887 // Test constructing an image from a UYVY buffer rotated 270 degrees.
887 void ConstructUyvyRotate270() { 888 void ConstructUyvyRotate270() {
888 T frame2; 889 T frame2;
889 rtc::scoped_ptr<rtc::MemoryStream> ms( 890 std::unique_ptr<rtc::MemoryStream> ms(
890 CreateYuv422Sample(cricket::FOURCC_UYVY, kWidth, kHeight)); 891 CreateYuv422Sample(cricket::FOURCC_UYVY, kWidth, kHeight));
891 ASSERT_TRUE(ms.get() != NULL); 892 ASSERT_TRUE(ms.get() != NULL);
892 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_UYVY, kWidth, kHeight, 893 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_UYVY, kWidth, kHeight,
893 kWidth, kHeight, webrtc::kVideoRotation_270, 894 kWidth, kHeight, webrtc::kVideoRotation_270,
894 &frame2)); 895 &frame2));
895 } 896 }
896 897
897 // Test constructing an image from a YUY2 buffer rotated 90 degrees. 898 // Test constructing an image from a YUY2 buffer rotated 90 degrees.
898 void ConstructYuy2Rotate90() { 899 void ConstructYuy2Rotate90() {
899 T frame2; 900 T frame2;
900 rtc::scoped_ptr<rtc::MemoryStream> ms( 901 std::unique_ptr<rtc::MemoryStream> ms(
901 CreateYuv422Sample(cricket::FOURCC_YUY2, kWidth, kHeight)); 902 CreateYuv422Sample(cricket::FOURCC_YUY2, kWidth, kHeight));
902 ASSERT_TRUE(ms.get() != NULL); 903 ASSERT_TRUE(ms.get() != NULL);
903 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_YUY2, kWidth, kHeight, 904 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_YUY2, kWidth, kHeight,
904 kWidth, kHeight, webrtc::kVideoRotation_90, &frame2)); 905 kWidth, kHeight, webrtc::kVideoRotation_90, &frame2));
905 } 906 }
906 907
907 // Test constructing an image from a YUY2 buffer rotated 180 degrees. 908 // Test constructing an image from a YUY2 buffer rotated 180 degrees.
908 void ConstructYuy2Rotate180() { 909 void ConstructYuy2Rotate180() {
909 T frame2; 910 T frame2;
910 rtc::scoped_ptr<rtc::MemoryStream> ms( 911 std::unique_ptr<rtc::MemoryStream> ms(
911 CreateYuv422Sample(cricket::FOURCC_YUY2, kWidth, kHeight)); 912 CreateYuv422Sample(cricket::FOURCC_YUY2, kWidth, kHeight));
912 ASSERT_TRUE(ms.get() != NULL); 913 ASSERT_TRUE(ms.get() != NULL);
913 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_YUY2, kWidth, kHeight, 914 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_YUY2, kWidth, kHeight,
914 kWidth, kHeight, webrtc::kVideoRotation_180, 915 kWidth, kHeight, webrtc::kVideoRotation_180,
915 &frame2)); 916 &frame2));
916 } 917 }
917 918
918 // Test constructing an image from a YUY2 buffer rotated 270 degrees. 919 // Test constructing an image from a YUY2 buffer rotated 270 degrees.
919 void ConstructYuy2Rotate270() { 920 void ConstructYuy2Rotate270() {
920 T frame2; 921 T frame2;
921 rtc::scoped_ptr<rtc::MemoryStream> ms( 922 std::unique_ptr<rtc::MemoryStream> ms(
922 CreateYuv422Sample(cricket::FOURCC_YUY2, kWidth, kHeight)); 923 CreateYuv422Sample(cricket::FOURCC_YUY2, kWidth, kHeight));
923 ASSERT_TRUE(ms.get() != NULL); 924 ASSERT_TRUE(ms.get() != NULL);
924 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_YUY2, kWidth, kHeight, 925 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_YUY2, kWidth, kHeight,
925 kWidth, kHeight, webrtc::kVideoRotation_270, 926 kWidth, kHeight, webrtc::kVideoRotation_270,
926 &frame2)); 927 &frame2));
927 } 928 }
928 929
929 // Test 1 pixel edge case image I420 buffer. 930 // Test 1 pixel edge case image I420 buffer.
930 void ConstructI4201Pixel() { 931 void ConstructI4201Pixel() {
931 T frame; 932 T frame;
(...skipping 29 matching lines...) Expand all
961 void ConstructARGB1Pixel() { 962 void ConstructARGB1Pixel() {
962 T frame; 963 T frame;
963 uint8_t pixel[4] = {64, 128, 192, 255}; 964 uint8_t pixel[4] = {64, 128, 192, 255};
964 for (int i = 0; i < repeat_; ++i) { 965 for (int i = 0; i < repeat_; ++i) {
965 EXPECT_TRUE(frame.Init(cricket::FOURCC_ARGB, 1, 1, 1, 1, pixel, 966 EXPECT_TRUE(frame.Init(cricket::FOURCC_ARGB, 1, 1, 1, 1, pixel,
966 sizeof(pixel), 0, 967 sizeof(pixel), 0,
967 webrtc::kVideoRotation_0)); 968 webrtc::kVideoRotation_0));
968 } 969 }
969 // Convert back to ARGB. 970 // Convert back to ARGB.
970 size_t out_size = 4; 971 size_t out_size = 4;
971 rtc::scoped_ptr<uint8_t[]> outbuf(new uint8_t[out_size + kAlignment]); 972 std::unique_ptr<uint8_t[]> outbuf(new uint8_t[out_size + kAlignment]);
972 uint8_t* out = ALIGNP(outbuf.get(), kAlignment); 973 uint8_t* out = ALIGNP(outbuf.get(), kAlignment);
973 974
974 EXPECT_EQ(out_size, frame.ConvertToRgbBuffer(cricket::FOURCC_ARGB, 975 EXPECT_EQ(out_size, frame.ConvertToRgbBuffer(cricket::FOURCC_ARGB,
975 out, 976 out,
976 out_size, // buffer size 977 out_size, // buffer size
977 out_size)); // stride 978 out_size)); // stride
978 #ifdef USE_LMI_CONVERT 979 #ifdef USE_LMI_CONVERT
979 // TODO(fbarchard): Expected to fail, but not crash. 980 // TODO(fbarchard): Expected to fail, but not crash.
980 EXPECT_FALSE(IsPlaneEqual("argb", pixel, 4, out, 4, 3, 1, 2)); 981 EXPECT_FALSE(IsPlaneEqual("argb", pixel, 4, out, 4, 3, 1, 2));
981 #else 982 #else
(...skipping 16 matching lines...) Expand all
998 255, 255, 255, 255, // White. 999 255, 255, 255, 255, // White.
999 255, 255, 255, 255}; // White. 1000 255, 255, 255, 255}; // White.
1000 1001
1001 for (int i = 0; i < repeat_; ++i) { 1002 for (int i = 0; i < repeat_; ++i) {
1002 EXPECT_TRUE(frame.Init(cricket::FOURCC_ARGB, 10, 1, 10, 1, pixel, 1003 EXPECT_TRUE(frame.Init(cricket::FOURCC_ARGB, 10, 1, 10, 1, pixel,
1003 sizeof(pixel), 1, 1, 0, 1004 sizeof(pixel), 1, 1, 0,
1004 webrtc::kVideoRotation_0)); 1005 webrtc::kVideoRotation_0));
1005 } 1006 }
1006 // Convert back to ARGB 1007 // Convert back to ARGB
1007 size_t out_size = 10 * 4; 1008 size_t out_size = 10 * 4;
1008 rtc::scoped_ptr<uint8_t[]> outbuf(new uint8_t[out_size + kAlignment]); 1009 std::unique_ptr<uint8_t[]> outbuf(new uint8_t[out_size + kAlignment]);
1009 uint8_t* out = ALIGNP(outbuf.get(), kAlignment); 1010 uint8_t* out = ALIGNP(outbuf.get(), kAlignment);
1010 1011
1011 EXPECT_EQ(out_size, frame.ConvertToRgbBuffer(cricket::FOURCC_ARGB, 1012 EXPECT_EQ(out_size, frame.ConvertToRgbBuffer(cricket::FOURCC_ARGB,
1012 out, 1013 out,
1013 out_size, // buffer size. 1014 out_size, // buffer size.
1014 out_size)); // stride. 1015 out_size)); // stride.
1015 EXPECT_TRUE(IsPlaneEqual("argb", pixel, out_size, 1016 EXPECT_TRUE(IsPlaneEqual("argb", pixel, out_size,
1016 out, out_size, 1017 out, out_size,
1017 out_size, 1, 2)); 1018 out_size, 1, 2));
1018 } 1019 }
1019 1020
1020 // Test constructing an image from an I420 buffer with horizontal cropping. 1021 // Test constructing an image from an I420 buffer with horizontal cropping.
1021 void ConstructI420CropHorizontal() { 1022 void ConstructI420CropHorizontal() {
1022 T frame1, frame2; 1023 T frame1, frame2;
1023 ASSERT_TRUE(LoadFrameNoRepeat(&frame1)); 1024 ASSERT_TRUE(LoadFrameNoRepeat(&frame1));
1024 ASSERT_TRUE(LoadFrame(kImageFilename, cricket::FOURCC_I420, kWidth, kHeight, 1025 ASSERT_TRUE(LoadFrame(kImageFilename, cricket::FOURCC_I420, kWidth, kHeight,
1025 kWidth * 3 / 4, kHeight, webrtc::kVideoRotation_0, 1026 kWidth * 3 / 4, kHeight, webrtc::kVideoRotation_0,
1026 &frame2)); 1027 &frame2));
1027 EXPECT_TRUE(IsEqualWithCrop(frame2, frame1, kWidth / 8, 0, 0)); 1028 EXPECT_TRUE(IsEqualWithCrop(frame2, frame1, kWidth / 8, 0, 0));
1028 } 1029 }
1029 1030
1030 // Test constructing an image from a YUY2 buffer with horizontal cropping. 1031 // Test constructing an image from a YUY2 buffer with horizontal cropping.
1031 void ConstructYuy2CropHorizontal() { 1032 void ConstructYuy2CropHorizontal() {
1032 T frame1, frame2; 1033 T frame1, frame2;
1033 rtc::scoped_ptr<rtc::MemoryStream> ms( 1034 std::unique_ptr<rtc::MemoryStream> ms(
1034 CreateYuv422Sample(cricket::FOURCC_YUY2, kWidth, kHeight)); 1035 CreateYuv422Sample(cricket::FOURCC_YUY2, kWidth, kHeight));
1035 ASSERT_TRUE(ms.get() != NULL); 1036 ASSERT_TRUE(ms.get() != NULL);
1036 EXPECT_TRUE(ConvertYuv422(ms.get(), cricket::FOURCC_YUY2, kWidth, kHeight, 1037 EXPECT_TRUE(ConvertYuv422(ms.get(), cricket::FOURCC_YUY2, kWidth, kHeight,
1037 &frame1)); 1038 &frame1));
1038 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_YUY2, kWidth, kHeight, 1039 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_YUY2, kWidth, kHeight,
1039 kWidth * 3 / 4, kHeight, webrtc::kVideoRotation_0, 1040 kWidth * 3 / 4, kHeight, webrtc::kVideoRotation_0,
1040 &frame2)); 1041 &frame2));
1041 EXPECT_TRUE(IsEqualWithCrop(frame2, frame1, kWidth / 8, 0, 0)); 1042 EXPECT_TRUE(IsEqualWithCrop(frame2, frame1, kWidth / 8, 0, 0));
1042 } 1043 }
1043 1044
1044 // Test constructing an image from an ARGB buffer with horizontal cropping. 1045 // Test constructing an image from an ARGB buffer with horizontal cropping.
1045 void ConstructARGBCropHorizontal() { 1046 void ConstructARGBCropHorizontal() {
1046 T frame1, frame2; 1047 T frame1, frame2;
1047 rtc::scoped_ptr<rtc::MemoryStream> ms( 1048 std::unique_ptr<rtc::MemoryStream> ms(
1048 CreateRgbSample(cricket::FOURCC_ARGB, kWidth, kHeight)); 1049 CreateRgbSample(cricket::FOURCC_ARGB, kWidth, kHeight));
1049 ASSERT_TRUE(ms.get() != NULL); 1050 ASSERT_TRUE(ms.get() != NULL);
1050 EXPECT_TRUE(ConvertRgb(ms.get(), cricket::FOURCC_ARGB, kWidth, kHeight, 1051 EXPECT_TRUE(ConvertRgb(ms.get(), cricket::FOURCC_ARGB, kWidth, kHeight,
1051 &frame1)); 1052 &frame1));
1052 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_ARGB, kWidth, kHeight, 1053 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_ARGB, kWidth, kHeight,
1053 kWidth * 3 / 4, kHeight, webrtc::kVideoRotation_0, 1054 kWidth * 3 / 4, kHeight, webrtc::kVideoRotation_0,
1054 &frame2)); 1055 &frame2));
1055 EXPECT_TRUE(IsEqualWithCrop(frame2, frame1, kWidth / 8, 0, 2)); 1056 EXPECT_TRUE(IsEqualWithCrop(frame2, frame1, kWidth / 8, 0, 2));
1056 } 1057 }
1057 1058
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
1127 EXPECT_TRUE(IsEqual(frame1, frame2, 128)); 1128 EXPECT_TRUE(IsEqual(frame1, frame2, 128));
1128 } 1129 }
1129 1130
1130 // Test constructing an image from an I420 MJPG buffer. 1131 // Test constructing an image from an I420 MJPG buffer.
1131 void ValidateFrame(const char* name, 1132 void ValidateFrame(const char* name,
1132 uint32_t fourcc, 1133 uint32_t fourcc,
1133 int data_adjust, 1134 int data_adjust,
1134 int size_adjust, 1135 int size_adjust,
1135 bool expected_result) { 1136 bool expected_result) {
1136 T frame; 1137 T frame;
1137 rtc::scoped_ptr<rtc::MemoryStream> ms(LoadSample(name)); 1138 std::unique_ptr<rtc::MemoryStream> ms(LoadSample(name));
1138 ASSERT_TRUE(ms.get() != NULL); 1139 ASSERT_TRUE(ms.get() != NULL);
1139 const uint8_t* sample = 1140 const uint8_t* sample =
1140 reinterpret_cast<const uint8_t*>(ms.get()->GetBuffer()); 1141 reinterpret_cast<const uint8_t*>(ms.get()->GetBuffer());
1141 size_t sample_size; 1142 size_t sample_size;
1142 ms->GetSize(&sample_size); 1143 ms->GetSize(&sample_size);
1143 // Optional adjust size to test invalid size. 1144 // Optional adjust size to test invalid size.
1144 size_t data_size = sample_size + data_adjust; 1145 size_t data_size = sample_size + data_adjust;
1145 1146
1146 // Allocate a buffer with end page aligned. 1147 // Allocate a buffer with end page aligned.
1147 const int kPadToHeapSized = 16 * 1024 * 1024; 1148 const int kPadToHeapSized = 16 * 1024 * 1024;
1148 rtc::scoped_ptr<uint8_t[]> page_buffer( 1149 std::unique_ptr<uint8_t[]> page_buffer(
1149 new uint8_t[((data_size + kPadToHeapSized + 4095) & ~4095)]); 1150 new uint8_t[((data_size + kPadToHeapSized + 4095) & ~4095)]);
1150 uint8_t* data_ptr = page_buffer.get(); 1151 uint8_t* data_ptr = page_buffer.get();
1151 if (!data_ptr) { 1152 if (!data_ptr) {
1152 LOG(LS_WARNING) << "Failed to allocate memory for ValidateFrame test."; 1153 LOG(LS_WARNING) << "Failed to allocate memory for ValidateFrame test.";
1153 EXPECT_FALSE(expected_result); // NULL is okay if failure was expected. 1154 EXPECT_FALSE(expected_result); // NULL is okay if failure was expected.
1154 return; 1155 return;
1155 } 1156 }
1156 data_ptr += kPadToHeapSized + (-(static_cast<int>(data_size)) & 4095); 1157 data_ptr += kPadToHeapSized + (-(static_cast<int>(data_size)) & 4095);
1157 memcpy(data_ptr, sample, std::min(data_size, sample_size)); 1158 memcpy(data_ptr, sample, std::min(data_size, sample_size));
1158 for (int i = 0; i < repeat_; ++i) { 1159 for (int i = 0; i < repeat_; ++i) {
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
1244 FAIL() << "Validate was expected to cause EXCEPTION_ACCESS_VIOLATION."; 1245 FAIL() << "Validate was expected to cause EXCEPTION_ACCESS_VIOLATION.";
1245 } __except(ExceptionFilter(GetExceptionCode(), GetExceptionInformation())) { 1246 } __except(ExceptionFilter(GetExceptionCode(), GetExceptionInformation())) {
1246 return; // Successfully crashed in ValidateFrame. 1247 return; // Successfully crashed in ValidateFrame.
1247 } 1248 }
1248 } 1249 }
1249 #endif 1250 #endif
1250 1251
1251 // Test constructing an image from a YUY2 buffer (and synonymous formats). 1252 // Test constructing an image from a YUY2 buffer (and synonymous formats).
1252 void ConstructYuy2Aliases() { 1253 void ConstructYuy2Aliases() {
1253 T frame1, frame2, frame3, frame4; 1254 T frame1, frame2, frame3, frame4;
1254 rtc::scoped_ptr<rtc::MemoryStream> ms( 1255 std::unique_ptr<rtc::MemoryStream> ms(
1255 CreateYuv422Sample(cricket::FOURCC_YUY2, kWidth, kHeight)); 1256 CreateYuv422Sample(cricket::FOURCC_YUY2, kWidth, kHeight));
1256 ASSERT_TRUE(ms.get() != NULL); 1257 ASSERT_TRUE(ms.get() != NULL);
1257 EXPECT_TRUE(ConvertYuv422(ms.get(), cricket::FOURCC_YUY2, kWidth, kHeight, 1258 EXPECT_TRUE(ConvertYuv422(ms.get(), cricket::FOURCC_YUY2, kWidth, kHeight,
1258 &frame1)); 1259 &frame1));
1259 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_YUY2, 1260 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_YUY2,
1260 kWidth, kHeight, &frame2)); 1261 kWidth, kHeight, &frame2));
1261 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_YUVS, 1262 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_YUVS,
1262 kWidth, kHeight, &frame3)); 1263 kWidth, kHeight, &frame3));
1263 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_YUYV, 1264 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_YUYV,
1264 kWidth, kHeight, &frame4)); 1265 kWidth, kHeight, &frame4));
1265 EXPECT_TRUE(IsEqual(frame1, frame2, 0)); 1266 EXPECT_TRUE(IsEqual(frame1, frame2, 0));
1266 EXPECT_TRUE(IsEqual(frame1, frame3, 0)); 1267 EXPECT_TRUE(IsEqual(frame1, frame3, 0));
1267 EXPECT_TRUE(IsEqual(frame1, frame4, 0)); 1268 EXPECT_TRUE(IsEqual(frame1, frame4, 0));
1268 } 1269 }
1269 1270
1270 // Test constructing an image from a UYVY buffer (and synonymous formats). 1271 // Test constructing an image from a UYVY buffer (and synonymous formats).
1271 void ConstructUyvyAliases() { 1272 void ConstructUyvyAliases() {
1272 T frame1, frame2, frame3, frame4; 1273 T frame1, frame2, frame3, frame4;
1273 rtc::scoped_ptr<rtc::MemoryStream> ms( 1274 std::unique_ptr<rtc::MemoryStream> ms(
1274 CreateYuv422Sample(cricket::FOURCC_UYVY, kWidth, kHeight)); 1275 CreateYuv422Sample(cricket::FOURCC_UYVY, kWidth, kHeight));
1275 ASSERT_TRUE(ms.get() != NULL); 1276 ASSERT_TRUE(ms.get() != NULL);
1276 EXPECT_TRUE(ConvertYuv422(ms.get(), cricket::FOURCC_UYVY, kWidth, kHeight, 1277 EXPECT_TRUE(ConvertYuv422(ms.get(), cricket::FOURCC_UYVY, kWidth, kHeight,
1277 &frame1)); 1278 &frame1));
1278 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_UYVY, 1279 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_UYVY,
1279 kWidth, kHeight, &frame2)); 1280 kWidth, kHeight, &frame2));
1280 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_2VUY, 1281 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_2VUY,
1281 kWidth, kHeight, &frame3)); 1282 kWidth, kHeight, &frame3));
1282 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_HDYC, 1283 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_HDYC,
1283 kWidth, kHeight, &frame4)); 1284 kWidth, kHeight, &frame4));
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1318 EXPECT_TRUE(IsSize(frame, kWidth, kHeight)); 1319 EXPECT_TRUE(IsSize(frame, kWidth, kHeight));
1319 EXPECT_TRUE(IsBlack(frame)); 1320 EXPECT_TRUE(IsBlack(frame));
1320 } 1321 }
1321 1322
1322 // Test constructing an image from a YUY2 buffer with a range of sizes. 1323 // Test constructing an image from a YUY2 buffer with a range of sizes.
1323 // Only tests that conversion does not crash or corrupt heap. 1324 // Only tests that conversion does not crash or corrupt heap.
1324 void ConstructYuy2AllSizes() { 1325 void ConstructYuy2AllSizes() {
1325 T frame1, frame2; 1326 T frame1, frame2;
1326 for (int height = kMinHeightAll; height <= kMaxHeightAll; ++height) { 1327 for (int height = kMinHeightAll; height <= kMaxHeightAll; ++height) {
1327 for (int width = kMinWidthAll; width <= kMaxWidthAll; ++width) { 1328 for (int width = kMinWidthAll; width <= kMaxWidthAll; ++width) {
1328 rtc::scoped_ptr<rtc::MemoryStream> ms( 1329 std::unique_ptr<rtc::MemoryStream> ms(
1329 CreateYuv422Sample(cricket::FOURCC_YUY2, width, height)); 1330 CreateYuv422Sample(cricket::FOURCC_YUY2, width, height));
1330 ASSERT_TRUE(ms.get() != NULL); 1331 ASSERT_TRUE(ms.get() != NULL);
1331 EXPECT_TRUE(ConvertYuv422(ms.get(), cricket::FOURCC_YUY2, width, height, 1332 EXPECT_TRUE(ConvertYuv422(ms.get(), cricket::FOURCC_YUY2, width, height,
1332 &frame1)); 1333 &frame1));
1333 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_YUY2, 1334 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_YUY2,
1334 width, height, &frame2)); 1335 width, height, &frame2));
1335 EXPECT_TRUE(IsEqual(frame1, frame2, 0)); 1336 EXPECT_TRUE(IsEqual(frame1, frame2, 0));
1336 } 1337 }
1337 } 1338 }
1338 } 1339 }
1339 1340
1340 // Test constructing an image from a ARGB buffer with a range of sizes. 1341 // Test constructing an image from a ARGB buffer with a range of sizes.
1341 // Only tests that conversion does not crash or corrupt heap. 1342 // Only tests that conversion does not crash or corrupt heap.
1342 void ConstructARGBAllSizes() { 1343 void ConstructARGBAllSizes() {
1343 T frame1, frame2; 1344 T frame1, frame2;
1344 for (int height = kMinHeightAll; height <= kMaxHeightAll; ++height) { 1345 for (int height = kMinHeightAll; height <= kMaxHeightAll; ++height) {
1345 for (int width = kMinWidthAll; width <= kMaxWidthAll; ++width) { 1346 for (int width = kMinWidthAll; width <= kMaxWidthAll; ++width) {
1346 rtc::scoped_ptr<rtc::MemoryStream> ms( 1347 std::unique_ptr<rtc::MemoryStream> ms(
1347 CreateRgbSample(cricket::FOURCC_ARGB, width, height)); 1348 CreateRgbSample(cricket::FOURCC_ARGB, width, height));
1348 ASSERT_TRUE(ms.get() != NULL); 1349 ASSERT_TRUE(ms.get() != NULL);
1349 EXPECT_TRUE(ConvertRgb(ms.get(), cricket::FOURCC_ARGB, width, height, 1350 EXPECT_TRUE(ConvertRgb(ms.get(), cricket::FOURCC_ARGB, width, height,
1350 &frame1)); 1351 &frame1));
1351 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_ARGB, 1352 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_ARGB,
1352 width, height, &frame2)); 1353 width, height, &frame2));
1353 EXPECT_TRUE(IsEqual(frame1, frame2, 64)); 1354 EXPECT_TRUE(IsEqual(frame1, frame2, 64));
1354 } 1355 }
1355 } 1356 }
1356 // Test a practical window size for screencasting usecase. 1357 // Test a practical window size for screencasting usecase.
1357 const int kOddWidth = 1228; 1358 const int kOddWidth = 1228;
1358 const int kOddHeight = 260; 1359 const int kOddHeight = 260;
1359 for (int j = 0; j < 2; ++j) { 1360 for (int j = 0; j < 2; ++j) {
1360 for (int i = 0; i < 2; ++i) { 1361 for (int i = 0; i < 2; ++i) {
1361 rtc::scoped_ptr<rtc::MemoryStream> ms( 1362 std::unique_ptr<rtc::MemoryStream> ms(
1362 CreateRgbSample(cricket::FOURCC_ARGB, kOddWidth + i, kOddHeight + j)); 1363 CreateRgbSample(cricket::FOURCC_ARGB, kOddWidth + i, kOddHeight + j));
1363 ASSERT_TRUE(ms.get() != NULL); 1364 ASSERT_TRUE(ms.get() != NULL);
1364 EXPECT_TRUE(ConvertRgb(ms.get(), cricket::FOURCC_ARGB, 1365 EXPECT_TRUE(ConvertRgb(ms.get(), cricket::FOURCC_ARGB,
1365 kOddWidth + i, kOddHeight + j, 1366 kOddWidth + i, kOddHeight + j,
1366 &frame1)); 1367 &frame1));
1367 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_ARGB, 1368 EXPECT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_ARGB,
1368 kOddWidth + i, kOddHeight + j, &frame2)); 1369 kOddWidth + i, kOddHeight + j, &frame2));
1369 EXPECT_TRUE(IsEqual(frame1, frame2, 64)); 1370 EXPECT_TRUE(IsEqual(frame1, frame2, 64));
1370 } 1371 }
1371 } 1372 }
1372 } 1373 }
1373 1374
1374 // Tests re-initing an existing image. 1375 // Tests re-initing an existing image.
1375 void Reset(webrtc::VideoRotation rotation, bool apply_rotation) { 1376 void Reset(webrtc::VideoRotation rotation, bool apply_rotation) {
1376 T frame1, frame2; 1377 T frame1, frame2;
1377 rtc::scoped_ptr<rtc::MemoryStream> ms( 1378 std::unique_ptr<rtc::MemoryStream> ms(
1378 LoadSample(kImageFilename)); 1379 LoadSample(kImageFilename));
1379 ASSERT_TRUE(ms.get() != NULL); 1380 ASSERT_TRUE(ms.get() != NULL);
1380 size_t data_size; 1381 size_t data_size;
1381 ms->GetSize(&data_size); 1382 ms->GetSize(&data_size);
1382 EXPECT_TRUE(frame1.InitToBlack(kWidth, kHeight, 0)); 1383 EXPECT_TRUE(frame1.InitToBlack(kWidth, kHeight, 0));
1383 EXPECT_TRUE(frame2.InitToBlack(kWidth, kHeight, 0)); 1384 EXPECT_TRUE(frame2.InitToBlack(kWidth, kHeight, 0));
1384 EXPECT_TRUE(IsBlack(frame1)); 1385 EXPECT_TRUE(IsBlack(frame1));
1385 EXPECT_TRUE(IsEqual(frame1, frame2, 0)); 1386 EXPECT_TRUE(IsEqual(frame1, frame2, 0));
1386 EXPECT_TRUE(frame1.Reset(cricket::FOURCC_I420, kWidth, kHeight, kWidth, 1387 EXPECT_TRUE(frame1.Reset(cricket::FOURCC_I420, kWidth, kHeight, kWidth,
1387 kHeight, 1388 kHeight,
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1435 uint8_t* dst_v, 1436 uint8_t* dst_v,
1436 int dst_stride_v, 1437 int dst_stride_v,
1437 int width, 1438 int width,
1438 int height)) { 1439 int height)) {
1439 T frame1, frame2; 1440 T frame1, frame2;
1440 int repeat_to = (to_from == TO) ? repeat_ : 1; 1441 int repeat_to = (to_from == TO) ? repeat_ : 1;
1441 int repeat_from = (to_from == FROM) ? repeat_ : 1; 1442 int repeat_from = (to_from == FROM) ? repeat_ : 1;
1442 1443
1443 int astride = kWidth * bpp + rowpad; 1444 int astride = kWidth * bpp + rowpad;
1444 size_t out_size = astride * kHeight; 1445 size_t out_size = astride * kHeight;
1445 rtc::scoped_ptr<uint8_t[]> outbuf(new uint8_t[out_size + kAlignment + 1]); 1446 std::unique_ptr<uint8_t[]> outbuf(new uint8_t[out_size + kAlignment + 1]);
1446 memset(outbuf.get(), 0, out_size + kAlignment + 1); 1447 memset(outbuf.get(), 0, out_size + kAlignment + 1);
1447 uint8_t* outtop = ALIGNP(outbuf.get(), kAlignment); 1448 uint8_t* outtop = ALIGNP(outbuf.get(), kAlignment);
1448 uint8_t* out = outtop; 1449 uint8_t* out = outtop;
1449 int stride = astride; 1450 int stride = astride;
1450 if (invert) { 1451 if (invert) {
1451 out += (kHeight - 1) * stride; // Point to last row. 1452 out += (kHeight - 1) * stride; // Point to last row.
1452 stride = -stride; 1453 stride = -stride;
1453 } 1454 }
1454 ASSERT_TRUE(LoadFrameNoRepeat(&frame1)); 1455 ASSERT_TRUE(LoadFrameNoRepeat(&frame1));
1455 1456
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
1753 } 1754 }
1754 void ConvertFromUYVYBufferInverted() { 1755 void ConvertFromUYVYBufferInverted() {
1755 ConvertToBuffer(2, 0, true, FROM, kError, 1756 ConvertToBuffer(2, 0, true, FROM, kError,
1756 cricket::FOURCC_UYVY, libyuv::UYVYToI420); 1757 cricket::FOURCC_UYVY, libyuv::UYVYToI420);
1757 } 1758 }
1758 1759
1759 // Test converting from I420 to I422. 1760 // Test converting from I420 to I422.
1760 void ConvertToI422Buffer() { 1761 void ConvertToI422Buffer() {
1761 T frame1, frame2; 1762 T frame1, frame2;
1762 size_t out_size = kWidth * kHeight * 2; 1763 size_t out_size = kWidth * kHeight * 2;
1763 rtc::scoped_ptr<uint8_t[]> buf(new uint8_t[out_size + kAlignment]); 1764 std::unique_ptr<uint8_t[]> buf(new uint8_t[out_size + kAlignment]);
1764 uint8_t* y = ALIGNP(buf.get(), kAlignment); 1765 uint8_t* y = ALIGNP(buf.get(), kAlignment);
1765 uint8_t* u = y + kWidth * kHeight; 1766 uint8_t* u = y + kWidth * kHeight;
1766 uint8_t* v = u + (kWidth / 2) * kHeight; 1767 uint8_t* v = u + (kWidth / 2) * kHeight;
1767 ASSERT_TRUE(LoadFrameNoRepeat(&frame1)); 1768 ASSERT_TRUE(LoadFrameNoRepeat(&frame1));
1768 for (int i = 0; i < repeat_; ++i) { 1769 for (int i = 0; i < repeat_; ++i) {
1769 EXPECT_EQ(0, libyuv::I420ToI422(frame1.GetYPlane(), frame1.GetYPitch(), 1770 EXPECT_EQ(0, libyuv::I420ToI422(frame1.GetYPlane(), frame1.GetYPitch(),
1770 frame1.GetUPlane(), frame1.GetUPitch(), 1771 frame1.GetUPlane(), frame1.GetUPitch(),
1771 frame1.GetVPlane(), frame1.GetVPitch(), 1772 frame1.GetVPlane(), frame1.GetVPitch(),
1772 y, kWidth, 1773 y, kWidth,
1773 u, kWidth / 2, 1774 u, kWidth / 2,
1774 v, kWidth / 2, 1775 v, kWidth / 2,
1775 kWidth, kHeight)); 1776 kWidth, kHeight));
1776 } 1777 }
1777 EXPECT_TRUE(frame2.Init(cricket::FOURCC_I422, kWidth, kHeight, kWidth, 1778 EXPECT_TRUE(frame2.Init(cricket::FOURCC_I422, kWidth, kHeight, kWidth,
1778 kHeight, y, out_size, 1, 1, 0, 1779 kHeight, y, out_size, 1, 1, 0,
1779 webrtc::kVideoRotation_0)); 1780 webrtc::kVideoRotation_0));
1780 EXPECT_TRUE(IsEqual(frame1, frame2, 1)); 1781 EXPECT_TRUE(IsEqual(frame1, frame2, 1));
1781 } 1782 }
1782 1783
1783 /////////////////// 1784 ///////////////////
1784 // General tests // 1785 // General tests //
1785 /////////////////// 1786 ///////////////////
1786 1787
1787 void Copy() { 1788 void Copy() {
1788 rtc::scoped_ptr<T> source(new T); 1789 std::unique_ptr<T> source(new T);
1789 rtc::scoped_ptr<cricket::VideoFrame> target; 1790 std::unique_ptr<cricket::VideoFrame> target;
1790 ASSERT_TRUE(LoadFrameNoRepeat(source.get())); 1791 ASSERT_TRUE(LoadFrameNoRepeat(source.get()));
1791 target.reset(source->Copy()); 1792 target.reset(source->Copy());
1792 EXPECT_TRUE(IsEqual(*source, *target, 0)); 1793 EXPECT_TRUE(IsEqual(*source, *target, 0));
1793 source.reset(); 1794 source.reset();
1794 EXPECT_TRUE(target->GetYPlane() != NULL); 1795 EXPECT_TRUE(target->GetYPlane() != NULL);
1795 } 1796 }
1796 1797
1797 void CopyIsRef() { 1798 void CopyIsRef() {
1798 rtc::scoped_ptr<T> source(new T); 1799 std::unique_ptr<T> source(new T);
1799 rtc::scoped_ptr<const cricket::VideoFrame> target; 1800 std::unique_ptr<const cricket::VideoFrame> target;
1800 ASSERT_TRUE(LoadFrameNoRepeat(source.get())); 1801 ASSERT_TRUE(LoadFrameNoRepeat(source.get()));
1801 target.reset(source->Copy()); 1802 target.reset(source->Copy());
1802 EXPECT_TRUE(IsEqual(*source, *target, 0)); 1803 EXPECT_TRUE(IsEqual(*source, *target, 0));
1803 const T* const_source = source.get(); 1804 const T* const_source = source.get();
1804 EXPECT_EQ(const_source->GetYPlane(), target->GetYPlane()); 1805 EXPECT_EQ(const_source->GetYPlane(), target->GetYPlane());
1805 EXPECT_EQ(const_source->GetUPlane(), target->GetUPlane()); 1806 EXPECT_EQ(const_source->GetUPlane(), target->GetUPlane());
1806 EXPECT_EQ(const_source->GetVPlane(), target->GetVPlane()); 1807 EXPECT_EQ(const_source->GetVPlane(), target->GetVPlane());
1807 } 1808 }
1808 1809
1809 void MakeExclusive() { 1810 void MakeExclusive() {
1810 rtc::scoped_ptr<T> source(new T); 1811 std::unique_ptr<T> source(new T);
1811 rtc::scoped_ptr<cricket::VideoFrame> target; 1812 std::unique_ptr<cricket::VideoFrame> target;
1812 ASSERT_TRUE(LoadFrameNoRepeat(source.get())); 1813 ASSERT_TRUE(LoadFrameNoRepeat(source.get()));
1813 target.reset(source->Copy()); 1814 target.reset(source->Copy());
1814 EXPECT_TRUE(target->MakeExclusive()); 1815 EXPECT_TRUE(target->MakeExclusive());
1815 EXPECT_TRUE(IsEqual(*source, *target, 0)); 1816 EXPECT_TRUE(IsEqual(*source, *target, 0));
1816 EXPECT_NE(target->GetYPlane(), source->GetYPlane()); 1817 EXPECT_NE(target->GetYPlane(), source->GetYPlane());
1817 EXPECT_NE(target->GetUPlane(), source->GetUPlane()); 1818 EXPECT_NE(target->GetUPlane(), source->GetUPlane());
1818 EXPECT_NE(target->GetVPlane(), source->GetVPlane()); 1819 EXPECT_NE(target->GetVPlane(), source->GetVPlane());
1819 } 1820 }
1820 1821
1821 void CopyToFrame() { 1822 void CopyToFrame() {
1822 T source; 1823 T source;
1823 rtc::scoped_ptr<rtc::MemoryStream> ms( 1824 std::unique_ptr<rtc::MemoryStream> ms(
1824 LoadSample(kImageFilename)); 1825 LoadSample(kImageFilename));
1825 ASSERT_TRUE(ms.get() != NULL); 1826 ASSERT_TRUE(ms.get() != NULL);
1826 ASSERT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_I420, kWidth, kHeight, 1827 ASSERT_TRUE(LoadFrame(ms.get(), cricket::FOURCC_I420, kWidth, kHeight,
1827 &source)); 1828 &source));
1828 1829
1829 // Create the target frame by loading from a file. 1830 // Create the target frame by loading from a file.
1830 T target; 1831 T target;
1831 ASSERT_TRUE(LoadFrameNoRepeat(&target)); 1832 ASSERT_TRUE(LoadFrameNoRepeat(&target));
1832 EXPECT_FALSE(IsBlack(target)); 1833 EXPECT_FALSE(IsBlack(target));
1833 1834
(...skipping 23 matching lines...) Expand all
1857 ASSERT_TRUE(LoadFrameNoRepeat(&target2)); 1858 ASSERT_TRUE(LoadFrameNoRepeat(&target2));
1858 source.StretchToFrame(&target2, true, true); 1859 source.StretchToFrame(&target2, true, true);
1859 EXPECT_TRUE(IsBlack(target2)); 1860 EXPECT_TRUE(IsBlack(target2));
1860 EXPECT_EQ(source.GetTimeStamp(), target2.GetTimeStamp()); 1861 EXPECT_EQ(source.GetTimeStamp(), target2.GetTimeStamp());
1861 } 1862 }
1862 1863
1863 int repeat_; 1864 int repeat_;
1864 }; 1865 };
1865 1866
1866 #endif // WEBRTC_MEDIA_BASE_VIDEOFRAME_UNITTEST_H_ 1867 #endif // WEBRTC_MEDIA_BASE_VIDEOFRAME_UNITTEST_H_
OLDNEW
« no previous file with comments | « webrtc/media/base/videoengine_unittest.h ('k') | webrtc/media/base/videoframefactory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698