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

Side by Side Diff: media/cast/sender/external_video_encoder_unittest.cc

Issue 901833004: [Cast] Repurpose CastInitializationStatus for variable frame size support. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Compile fixes. Created 5 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 <vector> 5 #include <vector>
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/memory/ref_counted.h" 8 #include "base/memory/ref_counted.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "media/base/video_frame.h" 10 #include "media/base/video_frame.h"
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 protected: 73 protected:
74 ExternalVideoEncoderTest() 74 ExternalVideoEncoderTest()
75 : testing_clock_(new base::SimpleTestTickClock()), 75 : testing_clock_(new base::SimpleTestTickClock()),
76 task_runner_(new test::FakeSingleThreadTaskRunner(testing_clock_)), 76 task_runner_(new test::FakeSingleThreadTaskRunner(testing_clock_)),
77 cast_environment_(new CastEnvironment( 77 cast_environment_(new CastEnvironment(
78 scoped_ptr<base::TickClock>(testing_clock_).Pass(), 78 scoped_ptr<base::TickClock>(testing_clock_).Pass(),
79 task_runner_, 79 task_runner_,
80 task_runner_, 80 task_runner_,
81 task_runner_)), 81 task_runner_)),
82 vea_factory_(task_runner_), 82 vea_factory_(task_runner_),
83 init_status_(STATUS_VIDEO_UNINITIALIZED), 83 operational_status_(STATUS_UNINITIALIZED),
84 test_video_encoder_callback_(new TestVideoEncoderCallback()) { 84 test_video_encoder_callback_(new TestVideoEncoderCallback()) {
85 testing_clock_->Advance(base::TimeTicks::Now() - base::TimeTicks()); 85 testing_clock_->Advance(base::TimeTicks::Now() - base::TimeTicks());
86 86
87 video_config_.ssrc = 1; 87 video_config_.ssrc = 1;
88 video_config_.receiver_ssrc = 2; 88 video_config_.receiver_ssrc = 2;
89 video_config_.rtp_payload_type = 127; 89 video_config_.rtp_payload_type = 127;
90 video_config_.use_external_encoder = true; 90 video_config_.use_external_encoder = true;
91 video_config_.max_bitrate = 5000000; 91 video_config_.max_bitrate = 5000000;
92 video_config_.min_bitrate = 1000000; 92 video_config_.min_bitrate = 1000000;
93 video_config_.start_bitrate = 2000000; 93 video_config_.start_bitrate = 2000000;
94 video_config_.max_qp = 56; 94 video_config_.max_qp = 56;
95 video_config_.min_qp = 0; 95 video_config_.min_qp = 0;
96 video_config_.max_frame_rate = 30; 96 video_config_.max_frame_rate = 30;
97 video_config_.max_number_of_video_buffers_used = 3; 97 video_config_.max_number_of_video_buffers_used = 3;
98 video_config_.codec = CODEC_VIDEO_VP8; 98 video_config_.codec = CODEC_VIDEO_VP8;
99 const gfx::Size size(320, 240); 99 const gfx::Size size(320, 240);
100 video_frame_ = media::VideoFrame::CreateFrame( 100 video_frame_ = media::VideoFrame::CreateFrame(
101 VideoFrame::I420, size, gfx::Rect(size), size, base::TimeDelta()); 101 VideoFrame::I420, size, gfx::Rect(size), size, base::TimeDelta());
102 PopulateVideoFrame(video_frame_.get(), 123); 102 PopulateVideoFrame(video_frame_.get(), 123);
103 103
104 video_encoder_.reset(new ExternalVideoEncoder( 104 video_encoder_.reset(new ExternalVideoEncoder(
105 cast_environment_, 105 cast_environment_,
106 video_config_, 106 video_config_,
107 size, 107 size,
108 base::Bind(&ExternalVideoEncoderTest::SaveInitializationStatus, 108 base::Bind(&ExternalVideoEncoderTest::SaveOperationalStatus,
109 base::Unretained(this)), 109 base::Unretained(this)),
110 base::Bind( 110 base::Bind(
111 &FakeVideoEncodeAcceleratorFactory::CreateVideoEncodeAccelerator, 111 &FakeVideoEncodeAcceleratorFactory::CreateVideoEncodeAccelerator,
112 base::Unretained(&vea_factory_)), 112 base::Unretained(&vea_factory_)),
113 base::Bind(&FakeVideoEncodeAcceleratorFactory::CreateSharedMemory, 113 base::Bind(&FakeVideoEncodeAcceleratorFactory::CreateSharedMemory,
114 base::Unretained(&vea_factory_)))); 114 base::Unretained(&vea_factory_))));
115 } 115 }
116 116
117 ~ExternalVideoEncoderTest() override {} 117 ~ExternalVideoEncoderTest() override {}
118 118
119 void AdvanceClockAndVideoFrameTimestamp() { 119 void AdvanceClockAndVideoFrameTimestamp() {
120 testing_clock_->Advance(base::TimeDelta::FromMilliseconds(33)); 120 testing_clock_->Advance(base::TimeDelta::FromMilliseconds(33));
121 video_frame_->set_timestamp( 121 video_frame_->set_timestamp(
122 video_frame_->timestamp() + base::TimeDelta::FromMilliseconds(33)); 122 video_frame_->timestamp() + base::TimeDelta::FromMilliseconds(33));
123 } 123 }
124 124
125 void SaveInitializationStatus(CastInitializationStatus result) { 125 void SaveOperationalStatus(OperationalStatus result) {
126 EXPECT_EQ(STATUS_VIDEO_UNINITIALIZED, init_status_); 126 EXPECT_EQ(STATUS_UNINITIALIZED, operational_status_);
127 init_status_ = result; 127 operational_status_ = result;
128 } 128 }
129 129
130 base::SimpleTestTickClock* const testing_clock_; // Owned by CastEnvironment. 130 base::SimpleTestTickClock* const testing_clock_; // Owned by CastEnvironment.
131 const scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; 131 const scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_;
132 const scoped_refptr<CastEnvironment> cast_environment_; 132 const scoped_refptr<CastEnvironment> cast_environment_;
133 FakeVideoEncodeAcceleratorFactory vea_factory_; 133 FakeVideoEncodeAcceleratorFactory vea_factory_;
134 CastInitializationStatus init_status_; 134 OperationalStatus operational_status_;
135 scoped_refptr<TestVideoEncoderCallback> test_video_encoder_callback_; 135 scoped_refptr<TestVideoEncoderCallback> test_video_encoder_callback_;
136 VideoSenderConfig video_config_; 136 VideoSenderConfig video_config_;
137 scoped_ptr<VideoEncoder> video_encoder_; 137 scoped_ptr<VideoEncoder> video_encoder_;
138 scoped_refptr<media::VideoFrame> video_frame_; 138 scoped_refptr<media::VideoFrame> video_frame_;
139 139
140 DISALLOW_COPY_AND_ASSIGN(ExternalVideoEncoderTest); 140 DISALLOW_COPY_AND_ASSIGN(ExternalVideoEncoderTest);
141 }; 141 };
142 142
143 TEST_F(ExternalVideoEncoderTest, EncodePattern30fpsRunningOutOfAck) { 143 TEST_F(ExternalVideoEncoderTest, EncodePattern30fpsRunningOutOfAck) {
144 vea_factory_.SetAutoRespond(true); 144 vea_factory_.SetAutoRespond(true);
145 task_runner_->RunTasks(); // Run the initializer on the correct thread. 145 task_runner_->RunTasks(); // Run the initializer on the correct thread.
146 EXPECT_EQ(STATUS_VIDEO_INITIALIZED, init_status_); 146 EXPECT_EQ(STATUS_INITIALIZED, operational_status_);
147 147
148 VideoEncoder::FrameEncodedCallback frame_encoded_callback = 148 VideoEncoder::FrameEncodedCallback frame_encoded_callback =
149 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame, 149 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame,
150 test_video_encoder_callback_.get()); 150 test_video_encoder_callback_.get());
151 151
152 test_video_encoder_callback_->SetExpectedResult( 152 test_video_encoder_callback_->SetExpectedResult(
153 0, 0, TimeDeltaToRtpDelta(video_frame_->timestamp(), kVideoFrequency), 153 0, 0, TimeDeltaToRtpDelta(video_frame_->timestamp(), kVideoFrequency),
154 testing_clock_->NowTicks()); 154 testing_clock_->NowTicks());
155 video_encoder_->SetBitRate(2000); 155 video_encoder_->SetBitRate(2000);
156 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( 156 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(
(...skipping 19 matching lines...) Expand all
176 video_encoder_.reset(NULL); 176 video_encoder_.reset(NULL);
177 task_runner_->RunTasks(); 177 task_runner_->RunTasks();
178 178
179 EXPECT_EQ(1, vea_factory_.vea_response_count()); 179 EXPECT_EQ(1, vea_factory_.vea_response_count());
180 EXPECT_EQ(3, vea_factory_.shm_response_count()); 180 EXPECT_EQ(3, vea_factory_.shm_response_count());
181 } 181 }
182 182
183 TEST_F(ExternalVideoEncoderTest, StreamHeader) { 183 TEST_F(ExternalVideoEncoderTest, StreamHeader) {
184 vea_factory_.SetAutoRespond(true); 184 vea_factory_.SetAutoRespond(true);
185 task_runner_->RunTasks(); // Run the initializer on the correct thread. 185 task_runner_->RunTasks(); // Run the initializer on the correct thread.
186 EXPECT_EQ(STATUS_VIDEO_INITIALIZED, init_status_); 186 EXPECT_EQ(STATUS_INITIALIZED, operational_status_);
187 187
188 VideoEncoder::FrameEncodedCallback frame_encoded_callback = 188 VideoEncoder::FrameEncodedCallback frame_encoded_callback =
189 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame, 189 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame,
190 test_video_encoder_callback_.get()); 190 test_video_encoder_callback_.get());
191 191
192 // Force the FakeVideoEncodeAccelerator to return a dummy non-key frame first. 192 // Force the FakeVideoEncodeAccelerator to return a dummy non-key frame first.
193 vea_factory_.last_response_vea()->SendDummyFrameForTesting(false); 193 vea_factory_.last_response_vea()->SendDummyFrameForTesting(false);
194 194
195 // Verify the first returned bitstream buffer is still a key frame. 195 // Verify the first returned bitstream buffer is still a key frame.
196 test_video_encoder_callback_->SetExpectedResult( 196 test_video_encoder_callback_->SetExpectedResult(
(...skipping 12 matching lines...) Expand all
209 } 209 }
210 210
211 // Verify that everything goes well even if ExternalVideoEncoder is destroyed 211 // Verify that everything goes well even if ExternalVideoEncoder is destroyed
212 // before it has a chance to receive the VEA creation callback. 212 // before it has a chance to receive the VEA creation callback.
213 TEST_F(ExternalVideoEncoderTest, DestroyBeforeVEACreatedCallback) { 213 TEST_F(ExternalVideoEncoderTest, DestroyBeforeVEACreatedCallback) {
214 video_encoder_.reset(); 214 video_encoder_.reset();
215 EXPECT_EQ(0, vea_factory_.vea_response_count()); 215 EXPECT_EQ(0, vea_factory_.vea_response_count());
216 vea_factory_.SetAutoRespond(true); 216 vea_factory_.SetAutoRespond(true);
217 task_runner_->RunTasks(); 217 task_runner_->RunTasks();
218 EXPECT_EQ(1, vea_factory_.vea_response_count()); 218 EXPECT_EQ(1, vea_factory_.vea_response_count());
219 EXPECT_EQ(STATUS_VIDEO_UNINITIALIZED, init_status_); 219 EXPECT_EQ(STATUS_UNINITIALIZED, operational_status_);
220 } 220 }
221 221
222 } // namespace cast 222 } // namespace cast
223 } // namespace media 223 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698