OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // This has to be included first. | 5 // This has to be included first. |
6 // See http://code.google.com/p/googletest/issues/detail?id=371 | 6 // See http://code.google.com/p/googletest/issues/detail?id=371 |
7 #include "testing/gtest/include/gtest/gtest.h" | 7 #include "testing/gtest/include/gtest/gtest.h" |
8 | 8 |
9 #include <stddef.h> | 9 #include <stddef.h> |
10 #include <stdint.h> | 10 #include <stdint.h> |
11 #include <string.h> | 11 #include <string.h> |
12 | 12 |
13 #include "base/at_exit.h" | 13 #include "base/at_exit.h" |
14 #include "base/bind.h" | 14 #include "base/bind.h" |
15 #include "base/command_line.h" | 15 #include "base/command_line.h" |
16 #include "base/files/file_util.h" | 16 #include "base/files/file_util.h" |
17 #include "base/logging.h" | 17 #include "base/logging.h" |
18 #include "base/macros.h" | 18 #include "base/macros.h" |
19 #include "base/memory/scoped_vector.h" | 19 #include "base/memory/scoped_vector.h" |
20 #include "base/path_service.h" | 20 #include "base/path_service.h" |
21 #include "base/strings/string_piece.h" | 21 #include "base/strings/string_piece.h" |
22 #include "base/strings/string_split.h" | 22 #include "base/strings/string_split.h" |
23 #include "base/thread_task_runner_handle.h" | 23 #include "base/thread_task_runner_handle.h" |
24 #include "build/build_config.h" | 24 #include "build/build_config.h" |
25 #include "content/common/gpu/media/video_accelerator_unittest_helpers.h" | |
26 #include "media/base/test_data_util.h" | 25 #include "media/base/test_data_util.h" |
27 #include "media/filters/jpeg_parser.h" | 26 #include "media/filters/jpeg_parser.h" |
| 27 #include "media/gpu/video_accelerator_unittest_helpers.h" |
28 #include "media/video/jpeg_decode_accelerator.h" | 28 #include "media/video/jpeg_decode_accelerator.h" |
29 #include "third_party/libyuv/include/libyuv.h" | 29 #include "third_party/libyuv/include/libyuv.h" |
30 #include "ui/gfx/codec/jpeg_codec.h" | 30 #include "ui/gfx/codec/jpeg_codec.h" |
31 | 31 |
32 #if defined(OS_CHROMEOS) | 32 #if defined(OS_CHROMEOS) |
33 #if defined(USE_V4L2_CODEC) | 33 #if defined(USE_V4L2_CODEC) |
34 #include "content/common/gpu/media/v4l2_device.h" | 34 #include "media/gpu/v4l2_device.h" |
35 #include "content/common/gpu/media/v4l2_jpeg_decode_accelerator.h" | 35 #include "media/gpu/v4l2_jpeg_decode_accelerator.h" |
36 #endif | 36 #endif |
37 #if defined(ARCH_CPU_X86_FAMILY) | 37 #if defined(ARCH_CPU_X86_FAMILY) |
38 #include "content/common/gpu/media/vaapi_jpeg_decode_accelerator.h" | 38 #include "media/gpu/vaapi_jpeg_decode_accelerator.h" |
39 #include "content/common/gpu/media/vaapi_wrapper.h" | 39 #include "media/gpu/vaapi_wrapper.h" |
40 #endif | 40 #endif |
41 #endif | 41 #endif |
42 | 42 |
43 using media::JpegDecodeAccelerator; | 43 using media::JpegDecodeAccelerator; |
44 | 44 |
45 namespace content { | 45 namespace media { |
46 namespace { | 46 namespace { |
47 | 47 |
48 // Default test image file. | 48 // Default test image file. |
49 const base::FilePath::CharType* kDefaultJpegFilename = | 49 const base::FilePath::CharType* kDefaultJpegFilename = |
50 FILE_PATH_LITERAL("peach_pi-1280x720.jpg"); | 50 FILE_PATH_LITERAL("peach_pi-1280x720.jpg"); |
51 // Decide to save decode results to files or not. Output files will be saved | 51 // Decide to save decode results to files or not. Output files will be saved |
52 // in the same directory with unittest. File name is like input file but | 52 // in the same directory with unittest. File name is like input file but |
53 // changing the extension to "yuv". | 53 // changing the extension to "yuv". |
54 bool g_save_to_file = false; | 54 bool g_save_to_file = false; |
55 // Threshold for mean absolute difference of hardware and software decode. | 55 // Threshold for mean absolute difference of hardware and software decode. |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 // Mapped memory of output buffer from hardware decoder. | 121 // Mapped memory of output buffer from hardware decoder. |
122 std::unique_ptr<base::SharedMemory> hw_out_shm_; | 122 std::unique_ptr<base::SharedMemory> hw_out_shm_; |
123 // Mapped memory of output buffer from software decoder. | 123 // Mapped memory of output buffer from software decoder. |
124 std::unique_ptr<base::SharedMemory> sw_out_shm_; | 124 std::unique_ptr<base::SharedMemory> sw_out_shm_; |
125 | 125 |
126 DISALLOW_COPY_AND_ASSIGN(JpegClient); | 126 DISALLOW_COPY_AND_ASSIGN(JpegClient); |
127 }; | 127 }; |
128 | 128 |
129 JpegClient::JpegClient(const std::vector<TestImageFile*>& test_image_files, | 129 JpegClient::JpegClient(const std::vector<TestImageFile*>& test_image_files, |
130 ClientStateNotification<ClientState>* note) | 130 ClientStateNotification<ClientState>* note) |
131 : test_image_files_(test_image_files), state_(CS_CREATED), note_(note) { | 131 : test_image_files_(test_image_files), state_(CS_CREATED), note_(note) {} |
132 } | |
133 | 132 |
134 JpegClient::~JpegClient() { | 133 JpegClient::~JpegClient() {} |
135 } | |
136 | 134 |
137 void JpegClient::CreateJpegDecoder() { | 135 void JpegClient::CreateJpegDecoder() { |
138 #if defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) | 136 #if defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) |
139 decoder_.reset( | 137 decoder_.reset( |
140 new VaapiJpegDecodeAccelerator(base::ThreadTaskRunnerHandle::Get())); | 138 new VaapiJpegDecodeAccelerator(base::ThreadTaskRunnerHandle::Get())); |
141 #elif defined(OS_CHROMEOS) && defined(USE_V4L2_CODEC) | 139 #elif defined(OS_CHROMEOS) && defined(USE_V4L2_CODEC) |
142 scoped_refptr<V4L2Device> device = | 140 scoped_refptr<V4L2Device> device = |
143 V4L2Device::Create(V4L2Device::kJpegDecoder); | 141 V4L2Device::Create(V4L2Device::kJpegDecoder); |
144 if (!device.get()) { | 142 if (!device.get()) { |
145 LOG(ERROR) << "V4L2Device::Create failed"; | 143 LOG(ERROR) << "V4L2Device::Create failed"; |
(...skipping 24 matching lines...) Expand all Loading... |
170 } | 168 } |
171 if (g_save_to_file) { | 169 if (g_save_to_file) { |
172 SaveToFile(bitstream_buffer_id); | 170 SaveToFile(bitstream_buffer_id); |
173 } | 171 } |
174 | 172 |
175 double difference = GetMeanAbsoluteDifference(bitstream_buffer_id); | 173 double difference = GetMeanAbsoluteDifference(bitstream_buffer_id); |
176 if (difference <= kDecodeSimilarityThreshold) { | 174 if (difference <= kDecodeSimilarityThreshold) { |
177 SetState(CS_DECODE_PASS); | 175 SetState(CS_DECODE_PASS); |
178 } else { | 176 } else { |
179 LOG(ERROR) << "The mean absolute difference between software and hardware " | 177 LOG(ERROR) << "The mean absolute difference between software and hardware " |
180 "decode is " << difference; | 178 "decode is " |
| 179 << difference; |
181 SetState(CS_ERROR); | 180 SetState(CS_ERROR); |
182 } | 181 } |
183 } | 182 } |
184 | 183 |
185 void JpegClient::NotifyError(int32_t bitstream_buffer_id, | 184 void JpegClient::NotifyError(int32_t bitstream_buffer_id, |
186 JpegDecodeAccelerator::Error error) { | 185 JpegDecodeAccelerator::Error error) { |
187 LOG(ERROR) << "Notifying of error " << error << " for buffer id " | 186 LOG(ERROR) << "Notifying of error " << error << " for buffer id " |
188 << bitstream_buffer_id; | 187 << bitstream_buffer_id; |
189 SetState(CS_ERROR); | 188 SetState(CS_ERROR); |
190 } | 189 } |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
247 TestImageFile* image_file = test_image_files_[bitstream_buffer_id]; | 246 TestImageFile* image_file = test_image_files_[bitstream_buffer_id]; |
248 | 247 |
249 PrepareMemory(bitstream_buffer_id); | 248 PrepareMemory(bitstream_buffer_id); |
250 | 249 |
251 base::SharedMemoryHandle dup_handle; | 250 base::SharedMemoryHandle dup_handle; |
252 dup_handle = base::SharedMemory::DuplicateHandle(in_shm_->handle()); | 251 dup_handle = base::SharedMemory::DuplicateHandle(in_shm_->handle()); |
253 media::BitstreamBuffer bitstream_buffer(bitstream_buffer_id, dup_handle, | 252 media::BitstreamBuffer bitstream_buffer(bitstream_buffer_id, dup_handle, |
254 image_file->data_str.size()); | 253 image_file->data_str.size()); |
255 scoped_refptr<media::VideoFrame> out_frame_ = | 254 scoped_refptr<media::VideoFrame> out_frame_ = |
256 media::VideoFrame::WrapExternalSharedMemory( | 255 media::VideoFrame::WrapExternalSharedMemory( |
257 media::PIXEL_FORMAT_I420, | 256 media::PIXEL_FORMAT_I420, image_file->visible_size, |
258 image_file->visible_size, | 257 gfx::Rect(image_file->visible_size), image_file->visible_size, |
259 gfx::Rect(image_file->visible_size), | 258 static_cast<uint8_t*>(hw_out_shm_->memory()), image_file->output_size, |
260 image_file->visible_size, | 259 hw_out_shm_->handle(), 0, base::TimeDelta()); |
261 static_cast<uint8_t*>(hw_out_shm_->memory()), | |
262 image_file->output_size, | |
263 hw_out_shm_->handle(), | |
264 0, | |
265 base::TimeDelta()); | |
266 LOG_ASSERT(out_frame_.get()); | 260 LOG_ASSERT(out_frame_.get()); |
267 decoder_->Decode(bitstream_buffer, out_frame_); | 261 decoder_->Decode(bitstream_buffer, out_frame_); |
268 } | 262 } |
269 | 263 |
270 bool JpegClient::GetSoftwareDecodeResult(int32_t bitstream_buffer_id) { | 264 bool JpegClient::GetSoftwareDecodeResult(int32_t bitstream_buffer_id) { |
271 media::VideoPixelFormat format = media::PIXEL_FORMAT_I420; | 265 media::VideoPixelFormat format = media::PIXEL_FORMAT_I420; |
272 TestImageFile* image_file = test_image_files_[bitstream_buffer_id]; | 266 TestImageFile* image_file = test_image_files_[bitstream_buffer_id]; |
273 | 267 |
274 uint8_t* yplane = static_cast<uint8_t*>(sw_out_shm_->memory()); | 268 uint8_t* yplane = static_cast<uint8_t*>(sw_out_shm_->memory()); |
275 uint8_t* uplane = | 269 uint8_t* uplane = |
276 yplane + | 270 yplane + |
277 media::VideoFrame::PlaneSize(format, media::VideoFrame::kYPlane, | 271 media::VideoFrame::PlaneSize(format, media::VideoFrame::kYPlane, |
278 image_file->visible_size).GetArea(); | 272 image_file->visible_size) |
| 273 .GetArea(); |
279 uint8_t* vplane = | 274 uint8_t* vplane = |
280 uplane + | 275 uplane + |
281 media::VideoFrame::PlaneSize(format, media::VideoFrame::kUPlane, | 276 media::VideoFrame::PlaneSize(format, media::VideoFrame::kUPlane, |
282 image_file->visible_size).GetArea(); | 277 image_file->visible_size) |
| 278 .GetArea(); |
283 int yplane_stride = image_file->visible_size.width(); | 279 int yplane_stride = image_file->visible_size.width(); |
284 int uv_plane_stride = yplane_stride / 2; | 280 int uv_plane_stride = yplane_stride / 2; |
285 | 281 |
286 if (libyuv::ConvertToI420( | 282 if (libyuv::ConvertToI420( |
287 static_cast<uint8_t*>(in_shm_->memory()), | 283 static_cast<uint8_t*>(in_shm_->memory()), image_file->data_str.size(), |
288 image_file->data_str.size(), | 284 yplane, yplane_stride, uplane, uv_plane_stride, vplane, |
289 yplane, | 285 uv_plane_stride, 0, 0, image_file->visible_size.width(), |
290 yplane_stride, | 286 image_file->visible_size.height(), image_file->visible_size.width(), |
291 uplane, | 287 image_file->visible_size.height(), libyuv::kRotate0, |
292 uv_plane_stride, | |
293 vplane, | |
294 uv_plane_stride, | |
295 0, | |
296 0, | |
297 image_file->visible_size.width(), | |
298 image_file->visible_size.height(), | |
299 image_file->visible_size.width(), | |
300 image_file->visible_size.height(), | |
301 libyuv::kRotate0, | |
302 libyuv::FOURCC_MJPG) != 0) { | 288 libyuv::FOURCC_MJPG) != 0) { |
303 LOG(ERROR) << "Software decode " << image_file->filename << " failed."; | 289 LOG(ERROR) << "Software decode " << image_file->filename << " failed."; |
304 return false; | 290 return false; |
305 } | 291 } |
306 return true; | 292 return true; |
307 } | 293 } |
308 | 294 |
309 class JpegDecodeAcceleratorTestEnvironment : public ::testing::Environment { | 295 class JpegDecodeAcceleratorTestEnvironment : public ::testing::Environment { |
310 public: | 296 public: |
311 JpegDecodeAcceleratorTestEnvironment( | 297 JpegDecodeAcceleratorTestEnvironment( |
312 const base::FilePath::CharType* jpeg_filenames) { | 298 const base::FilePath::CharType* jpeg_filenames) { |
313 user_jpeg_filenames_ = | 299 user_jpeg_filenames_ = |
314 jpeg_filenames ? jpeg_filenames: kDefaultJpegFilename; | 300 jpeg_filenames ? jpeg_filenames : kDefaultJpegFilename; |
315 } | 301 } |
316 void SetUp() override; | 302 void SetUp() override; |
317 void TearDown() override; | 303 void TearDown() override; |
318 | 304 |
319 // Create all black test image with |width| and |height| size. | 305 // Create all black test image with |width| and |height| size. |
320 bool CreateTestJpegImage(int width, int height, base::FilePath* filename); | 306 bool CreateTestJpegImage(int width, int height, base::FilePath* filename); |
321 | 307 |
322 // Read image from |filename| to |image_data|. | 308 // Read image from |filename| to |image_data|. |
323 void ReadTestJpegImage(base::FilePath& filename, TestImageFile* image_data); | 309 void ReadTestJpegImage(base::FilePath& filename, TestImageFile* image_data); |
324 | 310 |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
412 return false; | 398 return false; |
413 } | 399 } |
414 | 400 |
415 LOG_ASSERT(base::CreateTemporaryFile(filename)); | 401 LOG_ASSERT(base::CreateTemporaryFile(filename)); |
416 EXPECT_TRUE(base::AppendToFile( | 402 EXPECT_TRUE(base::AppendToFile( |
417 *filename, reinterpret_cast<char*>(&encoded[0]), encoded.size())); | 403 *filename, reinterpret_cast<char*>(&encoded[0]), encoded.size())); |
418 return true; | 404 return true; |
419 } | 405 } |
420 | 406 |
421 void JpegDecodeAcceleratorTestEnvironment::ReadTestJpegImage( | 407 void JpegDecodeAcceleratorTestEnvironment::ReadTestJpegImage( |
422 base::FilePath& input_file, TestImageFile* image_data) { | 408 base::FilePath& input_file, |
| 409 TestImageFile* image_data) { |
423 ASSERT_TRUE(base::ReadFileToString(input_file, &image_data->data_str)); | 410 ASSERT_TRUE(base::ReadFileToString(input_file, &image_data->data_str)); |
424 | 411 |
425 ASSERT_TRUE(media::ParseJpegPicture( | 412 ASSERT_TRUE(media::ParseJpegPicture( |
426 reinterpret_cast<const uint8_t*>(image_data->data_str.data()), | 413 reinterpret_cast<const uint8_t*>(image_data->data_str.data()), |
427 image_data->data_str.size(), | 414 image_data->data_str.size(), &image_data->parse_result)); |
428 &image_data->parse_result)); | |
429 image_data->visible_size.SetSize( | 415 image_data->visible_size.SetSize( |
430 image_data->parse_result.frame_header.visible_width, | 416 image_data->parse_result.frame_header.visible_width, |
431 image_data->parse_result.frame_header.visible_height); | 417 image_data->parse_result.frame_header.visible_height); |
432 image_data->output_size = media::VideoFrame::AllocationSize( | 418 image_data->output_size = media::VideoFrame::AllocationSize( |
433 media::PIXEL_FORMAT_I420, image_data->visible_size); | 419 media::PIXEL_FORMAT_I420, image_data->visible_size); |
434 } | 420 } |
435 | 421 |
436 class JpegDecodeAcceleratorTest : public ::testing::Test { | 422 class JpegDecodeAcceleratorTest : public ::testing::Test { |
437 protected: | 423 protected: |
438 JpegDecodeAcceleratorTest() {} | 424 JpegDecodeAcceleratorTest() {} |
(...skipping 23 matching lines...) Expand all Loading... |
462 decoder_thread.task_runner()->PostTask( | 448 decoder_thread.task_runner()->PostTask( |
463 FROM_HERE, base::Bind(&JpegClient::CreateJpegDecoder, | 449 FROM_HERE, base::Bind(&JpegClient::CreateJpegDecoder, |
464 base::Unretained(clients.back()))); | 450 base::Unretained(clients.back()))); |
465 ASSERT_EQ(notes[i]->Wait(), CS_INITIALIZED); | 451 ASSERT_EQ(notes[i]->Wait(), CS_INITIALIZED); |
466 } | 452 } |
467 | 453 |
468 for (size_t index = 0; index < test_image_files_.size(); index++) { | 454 for (size_t index = 0; index < test_image_files_.size(); index++) { |
469 for (size_t i = 0; i < num_concurrent_decoders; i++) { | 455 for (size_t i = 0; i < num_concurrent_decoders; i++) { |
470 decoder_thread.task_runner()->PostTask( | 456 decoder_thread.task_runner()->PostTask( |
471 FROM_HERE, base::Bind(&JpegClient::StartDecode, | 457 FROM_HERE, base::Bind(&JpegClient::StartDecode, |
472 base::Unretained(clients[i]), | 458 base::Unretained(clients[i]), index)); |
473 index)); | |
474 } | 459 } |
475 for (size_t i = 0; i < num_concurrent_decoders; i++) { | 460 for (size_t i = 0; i < num_concurrent_decoders; i++) { |
476 ASSERT_EQ(notes[i]->Wait(), expected_status_[index]); | 461 ASSERT_EQ(notes[i]->Wait(), expected_status_[index]); |
477 } | 462 } |
478 } | 463 } |
479 | 464 |
480 for (size_t i = 0; i < num_concurrent_decoders; i++) { | 465 for (size_t i = 0; i < num_concurrent_decoders; i++) { |
481 decoder_thread.task_runner()->PostTask( | 466 decoder_thread.task_runner()->PostTask( |
482 FROM_HERE, base::Bind(&JpegClient::DestroyJpegDecoder, | 467 FROM_HERE, base::Bind(&JpegClient::DestroyJpegDecoder, |
483 base::Unretained(clients[i]))); | 468 base::Unretained(clients[i]))); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
535 | 520 |
536 TEST_F(JpegDecodeAcceleratorTest, KeepDecodeAfterFailure) { | 521 TEST_F(JpegDecodeAcceleratorTest, KeepDecodeAfterFailure) { |
537 test_image_files_.push_back(g_env->image_data_invalid_.get()); | 522 test_image_files_.push_back(g_env->image_data_invalid_.get()); |
538 test_image_files_.push_back(g_env->image_data_1280x720_default_.get()); | 523 test_image_files_.push_back(g_env->image_data_1280x720_default_.get()); |
539 expected_status_.push_back(CS_ERROR); | 524 expected_status_.push_back(CS_ERROR); |
540 expected_status_.push_back(CS_DECODE_PASS); | 525 expected_status_.push_back(CS_DECODE_PASS); |
541 TestDecode(1); | 526 TestDecode(1); |
542 } | 527 } |
543 | 528 |
544 } // namespace | 529 } // namespace |
545 } // namespace content | 530 } // namespace media |
546 | 531 |
547 int main(int argc, char** argv) { | 532 int main(int argc, char** argv) { |
548 testing::InitGoogleTest(&argc, argv); | 533 testing::InitGoogleTest(&argc, argv); |
549 base::CommandLine::Init(argc, argv); | 534 base::CommandLine::Init(argc, argv); |
550 base::ShadowingAtExitManager at_exit_manager; | 535 base::ShadowingAtExitManager at_exit_manager; |
551 | 536 |
552 // Needed to enable DVLOG through --vmodule. | 537 // Needed to enable DVLOG through --vmodule. |
553 logging::LoggingSettings settings; | 538 logging::LoggingSettings settings; |
554 settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG; | 539 settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG; |
555 LOG_ASSERT(logging::InitLogging(settings)); | 540 LOG_ASSERT(logging::InitLogging(settings)); |
556 | 541 |
557 const base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess(); | 542 const base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess(); |
558 DCHECK(cmd_line); | 543 DCHECK(cmd_line); |
559 | 544 |
560 const base::FilePath::CharType* jpeg_filenames = nullptr; | 545 const base::FilePath::CharType* jpeg_filenames = nullptr; |
561 base::CommandLine::SwitchMap switches = cmd_line->GetSwitches(); | 546 base::CommandLine::SwitchMap switches = cmd_line->GetSwitches(); |
562 for (base::CommandLine::SwitchMap::const_iterator it = switches.begin(); | 547 for (base::CommandLine::SwitchMap::const_iterator it = switches.begin(); |
563 it != switches.end(); ++it) { | 548 it != switches.end(); ++it) { |
564 // jpeg_filenames can include one or many files and use ';' as delimiter. | 549 // jpeg_filenames can include one or many files and use ';' as delimiter. |
565 if (it->first == "jpeg_filenames") { | 550 if (it->first == "jpeg_filenames") { |
566 jpeg_filenames = it->second.c_str(); | 551 jpeg_filenames = it->second.c_str(); |
567 continue; | 552 continue; |
568 } | 553 } |
569 if (it->first == "save_to_file") { | 554 if (it->first == "save_to_file") { |
570 content::g_save_to_file = true; | 555 media::g_save_to_file = true; |
571 continue; | 556 continue; |
572 } | 557 } |
573 if (it->first == "v" || it->first == "vmodule") | 558 if (it->first == "v" || it->first == "vmodule") |
574 continue; | 559 continue; |
575 LOG(FATAL) << "Unexpected switch: " << it->first << ":" << it->second; | 560 LOG(FATAL) << "Unexpected switch: " << it->first << ":" << it->second; |
576 } | 561 } |
577 #if defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) | 562 #if defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) |
578 content::VaapiWrapper::PreSandboxInitialization(); | 563 media::VaapiWrapper::PreSandboxInitialization(); |
579 #endif | 564 #endif |
580 | 565 |
581 content::g_env = | 566 media::g_env = reinterpret_cast<media::JpegDecodeAcceleratorTestEnvironment*>( |
582 reinterpret_cast<content::JpegDecodeAcceleratorTestEnvironment*>( | 567 testing::AddGlobalTestEnvironment( |
583 testing::AddGlobalTestEnvironment( | 568 new media::JpegDecodeAcceleratorTestEnvironment(jpeg_filenames))); |
584 new content::JpegDecodeAcceleratorTestEnvironment( | |
585 jpeg_filenames))); | |
586 | 569 |
587 return RUN_ALL_TESTS(); | 570 return RUN_ALL_TESTS(); |
588 } | 571 } |
OLD | NEW |