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

Side by Side Diff: content/common/gpu/media/video_encode_accelerator_unittest.cc

Issue 1801343002: Revert of H264 HW encode using VideoToolbox (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 #include <inttypes.h> 5 #include <inttypes.h>
6 #include <stddef.h> 6 #include <stddef.h>
7 #include <stdint.h> 7 #include <stdint.h>
8 #include <algorithm> 8 #include <algorithm>
9 #include <queue> 9 #include <queue>
10 #include <string> 10 #include <string>
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 #if defined(OS_CHROMEOS) 48 #if defined(OS_CHROMEOS)
49 #if defined(ARCH_CPU_ARMEL) || (defined(USE_OZONE) && defined(USE_V4L2_CODEC)) 49 #if defined(ARCH_CPU_ARMEL) || (defined(USE_OZONE) && defined(USE_V4L2_CODEC))
50 #include "content/common/gpu/media/v4l2_video_encode_accelerator.h" 50 #include "content/common/gpu/media/v4l2_video_encode_accelerator.h"
51 #endif 51 #endif
52 #if defined(ARCH_CPU_X86_FAMILY) 52 #if defined(ARCH_CPU_X86_FAMILY)
53 #include "content/common/gpu/media/vaapi_video_encode_accelerator.h" 53 #include "content/common/gpu/media/vaapi_video_encode_accelerator.h"
54 #include "content/common/gpu/media/vaapi_wrapper.h" 54 #include "content/common/gpu/media/vaapi_wrapper.h"
55 // Status has been defined as int in Xlib.h. 55 // Status has been defined as int in Xlib.h.
56 #undef Status 56 #undef Status
57 #endif // defined(ARCH_CPU_X86_FAMILY) 57 #endif // defined(ARCH_CPU_X86_FAMILY)
58 #elif defined(OS_MACOSX)
59 #include "content/common/gpu/media/vt_video_encode_accelerator_mac.h"
60 #else 58 #else
61 #error The VideoEncodeAcceleratorUnittest is not supported on this platform. 59 #error The VideoEncodeAcceleratorUnittest is not supported on this platform.
62 #endif 60 #endif
63 61
64 using media::VideoEncodeAccelerator; 62 using media::VideoEncodeAccelerator;
65 63
66 namespace content { 64 namespace content {
67 namespace { 65 namespace {
68 66
69 const media::VideoPixelFormat kInputFormat = media::PIXEL_FORMAT_I420; 67 const media::VideoPixelFormat kInputFormat = media::PIXEL_FORMAT_I420;
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 // Further parameters are optional (need to provide preceding positional 119 // Further parameters are optional (need to provide preceding positional
122 // parameters if a specific subsequent parameter is required): 120 // parameters if a specific subsequent parameter is required):
123 // - |requested_bitrate| requested bitrate in bits per second. 121 // - |requested_bitrate| requested bitrate in bits per second.
124 // - |requested_framerate| requested initial framerate. 122 // - |requested_framerate| requested initial framerate.
125 // - |requested_subsequent_bitrate| bitrate to switch to in the middle of the 123 // - |requested_subsequent_bitrate| bitrate to switch to in the middle of the
126 // stream. 124 // stream.
127 // - |requested_subsequent_framerate| framerate to switch to in the middle 125 // - |requested_subsequent_framerate| framerate to switch to in the middle
128 // of the stream. 126 // of the stream.
129 // Bitrate is only forced for tests that test bitrate. 127 // Bitrate is only forced for tests that test bitrate.
130 const char* g_default_in_filename = "bear_320x192_40frames.yuv"; 128 const char* g_default_in_filename = "bear_320x192_40frames.yuv";
131 #if !defined(OS_MACOSX)
132 const char* g_default_in_parameters = ":320:192:1:out.h264:200000"; 129 const char* g_default_in_parameters = ":320:192:1:out.h264:200000";
133 #else
134 const char* g_default_in_parameters = ":320:192:0:out.h264:200000";
135 #endif
136 130
137 // Enabled by including a --fake_encoder flag to the command line invoking the 131 // Enabled by including a --fake_encoder flag to the command line invoking the
138 // test. 132 // test.
139 bool g_fake_encoder = false; 133 bool g_fake_encoder = false;
140 134
141 // Environment to store test stream data for all test cases. 135 // Environment to store test stream data for all test cases.
142 class VideoEncodeAcceleratorTestEnvironment; 136 class VideoEncodeAcceleratorTestEnvironment;
143 VideoEncodeAcceleratorTestEnvironment* g_env; 137 VideoEncodeAcceleratorTestEnvironment* g_env;
144 138
145 // The number of frames to be encoded. This variable is set by the switch 139 // The number of frames to be encoded. This variable is set by the switch
(...skipping 665 matching lines...) Expand 10 before | Expand all | Expand 10 after
811 805
812 private: 806 private:
813 bool has_encoder() { return encoder_.get(); } 807 bool has_encoder() { return encoder_.get(); }
814 808
815 // Return the number of encoded frames per second. 809 // Return the number of encoded frames per second.
816 double frames_per_second(); 810 double frames_per_second();
817 811
818 scoped_ptr<media::VideoEncodeAccelerator> CreateFakeVEA(); 812 scoped_ptr<media::VideoEncodeAccelerator> CreateFakeVEA();
819 scoped_ptr<media::VideoEncodeAccelerator> CreateV4L2VEA(); 813 scoped_ptr<media::VideoEncodeAccelerator> CreateV4L2VEA();
820 scoped_ptr<media::VideoEncodeAccelerator> CreateVaapiVEA(); 814 scoped_ptr<media::VideoEncodeAccelerator> CreateVaapiVEA();
821 scoped_ptr<media::VideoEncodeAccelerator> CreateVTVEA();
822 815
823 void SetState(ClientState new_state); 816 void SetState(ClientState new_state);
824 817
825 // Set current stream parameters to given |bitrate| at |framerate|. 818 // Set current stream parameters to given |bitrate| at |framerate|.
826 void SetStreamParameters(unsigned int bitrate, unsigned int framerate); 819 void SetStreamParameters(unsigned int bitrate, unsigned int framerate);
827 820
828 // Called when encoder is done with a VideoFrame. 821 // Called when encoder is done with a VideoFrame.
829 void InputNoLongerNeededCallback(int32_t input_id); 822 void InputNoLongerNeededCallback(int32_t input_id);
830 823
831 // Feed the encoder with one input frame. 824 // Feed the encoder with one input frame.
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
1073 } 1066 }
1074 1067
1075 scoped_ptr<media::VideoEncodeAccelerator> VEAClient::CreateVaapiVEA() { 1068 scoped_ptr<media::VideoEncodeAccelerator> VEAClient::CreateVaapiVEA() {
1076 scoped_ptr<media::VideoEncodeAccelerator> encoder; 1069 scoped_ptr<media::VideoEncodeAccelerator> encoder;
1077 #if defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) 1070 #if defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY)
1078 encoder.reset(new VaapiVideoEncodeAccelerator()); 1071 encoder.reset(new VaapiVideoEncodeAccelerator());
1079 #endif 1072 #endif
1080 return encoder; 1073 return encoder;
1081 } 1074 }
1082 1075
1083 scoped_ptr<media::VideoEncodeAccelerator> VEAClient::CreateVTVEA() {
1084 scoped_ptr<media::VideoEncodeAccelerator> encoder;
1085 #if defined(OS_MACOSX)
1086 encoder.reset(new VTVideoEncodeAccelerator());
1087 #endif
1088 return encoder;
1089 }
1090
1091 void VEAClient::CreateEncoder() { 1076 void VEAClient::CreateEncoder() {
1092 DCHECK(thread_checker_.CalledOnValidThread()); 1077 DCHECK(thread_checker_.CalledOnValidThread());
1093 LOG_ASSERT(!has_encoder()); 1078 LOG_ASSERT(!has_encoder());
1094 1079
1095 scoped_ptr<media::VideoEncodeAccelerator> encoders[] = { 1080 scoped_ptr<media::VideoEncodeAccelerator> encoders[] = {
1096 CreateFakeVEA(), 1081 CreateFakeVEA(),
1097 CreateV4L2VEA(), 1082 CreateV4L2VEA(),
1098 CreateVaapiVEA(), 1083 CreateVaapiVEA()
1099 CreateVTVEA()
1100 }; 1084 };
1101 1085
1102 DVLOG(1) << "Profile: " << test_stream_->requested_profile 1086 DVLOG(1) << "Profile: " << test_stream_->requested_profile
1103 << ", initial bitrate: " << requested_bitrate_; 1087 << ", initial bitrate: " << requested_bitrate_;
1104 1088
1105 for (size_t i = 0; i < arraysize(encoders); ++i) { 1089 for (size_t i = 0; i < arraysize(encoders); ++i) {
1106 if (!encoders[i]) 1090 if (!encoders[i])
1107 continue; 1091 continue;
1108 encoder_ = std::move(encoders[i]); 1092 encoder_ = std::move(encoders[i]);
1109 SetState(CS_ENCODER_SET); 1093 SetState(CS_ENCODER_SET);
(...skipping 550 matching lines...) Expand 10 before | Expand all | Expand 10 after
1660 for (size_t i = 0; i < num_concurrent_encoders; ++i) { 1644 for (size_t i = 0; i < num_concurrent_encoders; ++i) {
1661 encoder_thread.message_loop()->PostTask( 1645 encoder_thread.message_loop()->PostTask(
1662 FROM_HERE, 1646 FROM_HERE,
1663 base::Bind(&VEAClient::DestroyEncoder, base::Unretained(clients[i]))); 1647 base::Bind(&VEAClient::DestroyEncoder, base::Unretained(clients[i])));
1664 } 1648 }
1665 1649
1666 // This ensures all tasks have finished. 1650 // This ensures all tasks have finished.
1667 encoder_thread.Stop(); 1651 encoder_thread.Stop();
1668 } 1652 }
1669 1653
1670 #if !defined(OS_MACOSX)
1671 INSTANTIATE_TEST_CASE_P( 1654 INSTANTIATE_TEST_CASE_P(
1672 SimpleEncode, 1655 SimpleEncode,
1673 VideoEncodeAcceleratorTest, 1656 VideoEncodeAcceleratorTest,
1674 ::testing::Values( 1657 ::testing::Values(
1675 base::MakeTuple(1, true, 0, false, false, false, false, false), 1658 base::MakeTuple(1, true, 0, false, false, false, false, false),
1676 base::MakeTuple(1, true, 0, false, false, false, false, true))); 1659 base::MakeTuple(1, true, 0, false, false, false, false, true)));
1677 1660
1678 INSTANTIATE_TEST_CASE_P( 1661 INSTANTIATE_TEST_CASE_P(
1679 EncoderPerf, 1662 EncoderPerf,
1680 VideoEncodeAcceleratorTest, 1663 VideoEncodeAcceleratorTest,
(...skipping 24 matching lines...) Expand all
1705 ::testing::Values( 1688 ::testing::Values(
1706 base::MakeTuple(1, false, 0, true, false, false, true, false))); 1689 base::MakeTuple(1, false, 0, true, false, false, true, false)));
1707 1690
1708 INSTANTIATE_TEST_CASE_P( 1691 INSTANTIATE_TEST_CASE_P(
1709 MultipleEncoders, 1692 MultipleEncoders,
1710 VideoEncodeAcceleratorTest, 1693 VideoEncodeAcceleratorTest,
1711 ::testing::Values( 1694 ::testing::Values(
1712 base::MakeTuple(3, false, 0, false, false, false, false, false), 1695 base::MakeTuple(3, false, 0, false, false, false, false, false),
1713 base::MakeTuple(3, false, 0, true, false, false, true, false), 1696 base::MakeTuple(3, false, 0, true, false, false, true, false),
1714 base::MakeTuple(3, false, 0, true, false, true, false, false))); 1697 base::MakeTuple(3, false, 0, true, false, true, false, false)));
1715 #else
1716 INSTANTIATE_TEST_CASE_P(
1717 SimpleEncode,
1718 VideoEncodeAcceleratorTest,
1719 ::testing::Values(
1720 base::MakeTuple(1, true, 0, false, false, false, false, false),
1721 base::MakeTuple(1, true, 0, false, false, false, false, true)));
1722
1723 INSTANTIATE_TEST_CASE_P(
1724 EncoderPerf,
1725 VideoEncodeAcceleratorTest,
1726 ::testing::Values(
1727 base::MakeTuple(1, false, 0, false, true, false, false, false)));
1728
1729 INSTANTIATE_TEST_CASE_P(
1730 MultipleEncoders,
1731 VideoEncodeAcceleratorTest,
1732 ::testing::Values(
1733 base::MakeTuple(3, false, 0, false, false, false, false, false)));
1734 #endif
1735 1698
1736 // TODO(posciak): more tests: 1699 // TODO(posciak): more tests:
1737 // - async FeedEncoderWithOutput 1700 // - async FeedEncoderWithOutput
1738 // - out-of-order return of outputs to encoder 1701 // - out-of-order return of outputs to encoder
1739 // - multiple encoders + decoders 1702 // - multiple encoders + decoders
1740 // - mid-stream encoder_->Destroy() 1703 // - mid-stream encoder_->Destroy()
1741 1704
1742 } // namespace 1705 } // namespace
1743 } // namespace content 1706 } // namespace content
1744 1707
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
1822 1785
1823 content::g_env = 1786 content::g_env =
1824 reinterpret_cast<content::VideoEncodeAcceleratorTestEnvironment*>( 1787 reinterpret_cast<content::VideoEncodeAcceleratorTestEnvironment*>(
1825 testing::AddGlobalTestEnvironment( 1788 testing::AddGlobalTestEnvironment(
1826 new content::VideoEncodeAcceleratorTestEnvironment( 1789 new content::VideoEncodeAcceleratorTestEnvironment(
1827 std::move(test_stream_data), log_path, run_at_fps, 1790 std::move(test_stream_data), log_path, run_at_fps,
1828 needs_encode_latency, verify_all_output))); 1791 needs_encode_latency, verify_all_output)));
1829 1792
1830 return RUN_ALL_TESTS(); 1793 return RUN_ALL_TESTS();
1831 } 1794 }
OLDNEW
« no previous file with comments | « content/common/gpu/media/gpu_video_encode_accelerator.cc ('k') | content/common/gpu/media/vt_video_encode_accelerator_mac.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698