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

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

Issue 439863003: Cast: Use fixed bitrate and set it once for hardware encoder (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: comments Created 6 years, 4 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | media/cast/sender/video_sender.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 // 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 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 PopulateVideoFrame(video_frame_, 123); 106 PopulateVideoFrame(video_frame_, 123);
107 107
108 testing_clock_ = new base::SimpleTestTickClock(); 108 testing_clock_ = new base::SimpleTestTickClock();
109 task_runner_ = new test::FakeSingleThreadTaskRunner(testing_clock_); 109 task_runner_ = new test::FakeSingleThreadTaskRunner(testing_clock_);
110 cast_environment_ = 110 cast_environment_ =
111 new CastEnvironment(scoped_ptr<base::TickClock>(testing_clock_).Pass(), 111 new CastEnvironment(scoped_ptr<base::TickClock>(testing_clock_).Pass(),
112 task_runner_, 112 task_runner_,
113 task_runner_, 113 task_runner_,
114 task_runner_); 114 task_runner_);
115 115
116 fake_vea_ = new test::FakeVideoEncodeAccelerator(task_runner_); 116 fake_vea_ = new test::FakeVideoEncodeAccelerator(task_runner_,
117 &stored_bitrates_);
117 scoped_ptr<VideoEncodeAccelerator> fake_vea(fake_vea_); 118 scoped_ptr<VideoEncodeAccelerator> fake_vea(fake_vea_);
118 video_encoder_.reset( 119 video_encoder_.reset(
119 new ExternalVideoEncoder(cast_environment_, 120 new ExternalVideoEncoder(cast_environment_,
120 video_config_, 121 video_config_,
121 base::Bind(&CreateVideoEncodeAccelerator, 122 base::Bind(&CreateVideoEncodeAccelerator,
122 task_runner_, 123 task_runner_,
123 base::Passed(&fake_vea)), 124 base::Passed(&fake_vea)),
124 base::Bind(&CreateSharedMemory))); 125 base::Bind(&CreateSharedMemory)));
125 } 126 }
126 127
127 virtual ~ExternalVideoEncoderTest() {} 128 virtual ~ExternalVideoEncoderTest() {}
128 129
129 base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment. 130 base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment.
130 test::FakeVideoEncodeAccelerator* fake_vea_; // Owned by video_encoder_. 131 test::FakeVideoEncodeAccelerator* fake_vea_; // Owned by video_encoder_.
132 std::vector<uint32> stored_bitrates_;
131 scoped_refptr<TestVideoEncoderCallback> test_video_encoder_callback_; 133 scoped_refptr<TestVideoEncoderCallback> test_video_encoder_callback_;
132 VideoSenderConfig video_config_; 134 VideoSenderConfig video_config_;
133 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; 135 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_;
134 scoped_ptr<VideoEncoder> video_encoder_; 136 scoped_ptr<VideoEncoder> video_encoder_;
135 scoped_refptr<media::VideoFrame> video_frame_; 137 scoped_refptr<media::VideoFrame> video_frame_;
136 scoped_refptr<CastEnvironment> cast_environment_; 138 scoped_refptr<CastEnvironment> cast_environment_;
137 139
138 DISALLOW_COPY_AND_ASSIGN(ExternalVideoEncoderTest); 140 DISALLOW_COPY_AND_ASSIGN(ExternalVideoEncoderTest);
139 }; 141 };
140 142
141 TEST_F(ExternalVideoEncoderTest, EncodePattern30fpsRunningOutOfAck) { 143 TEST_F(ExternalVideoEncoderTest, EncodePattern30fpsRunningOutOfAck) {
142 task_runner_->RunTasks(); // Run the initializer on the correct thread. 144 task_runner_->RunTasks(); // Run the initializer on the correct thread.
143 145
144 VideoEncoder::FrameEncodedCallback frame_encoded_callback = 146 VideoEncoder::FrameEncodedCallback frame_encoded_callback =
145 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame, 147 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame,
146 test_video_encoder_callback_.get()); 148 test_video_encoder_callback_.get());
147 149
148 base::TimeTicks capture_time; 150 base::TimeTicks capture_time;
149 capture_time += base::TimeDelta::FromMilliseconds(33); 151 capture_time += base::TimeDelta::FromMilliseconds(33);
150 test_video_encoder_callback_->SetExpectedResult(0, 0, capture_time); 152 test_video_encoder_callback_->SetExpectedResult(0, 0, capture_time);
153 video_encoder_->SetBitRate(2000);
151 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( 154 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(
152 video_frame_, capture_time, frame_encoded_callback)); 155 video_frame_, capture_time, frame_encoded_callback));
153 task_runner_->RunTasks(); 156 task_runner_->RunTasks();
154 157
155 for (int i = 0; i < 6; ++i) { 158 for (int i = 0; i < 6; ++i) {
156 capture_time += base::TimeDelta::FromMilliseconds(33); 159 capture_time += base::TimeDelta::FromMilliseconds(33);
157 test_video_encoder_callback_->SetExpectedResult(i + 1, i, capture_time); 160 test_video_encoder_callback_->SetExpectedResult(i + 1, i, capture_time);
158 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( 161 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(
159 video_frame_, capture_time, frame_encoded_callback)); 162 video_frame_, capture_time, frame_encoded_callback));
160 task_runner_->RunTasks(); 163 task_runner_->RunTasks();
161 } 164 }
162 // We need to run the task to cleanup the GPU instance. 165 // We need to run the task to cleanup the GPU instance.
163 video_encoder_.reset(NULL); 166 video_encoder_.reset(NULL);
164 task_runner_->RunTasks(); 167 task_runner_->RunTasks();
168
169 ASSERT_EQ(1u, stored_bitrates_.size());
170 EXPECT_EQ(2000u, stored_bitrates_[0]);
165 } 171 }
166 172
167 TEST_F(ExternalVideoEncoderTest, StreamHeader) { 173 TEST_F(ExternalVideoEncoderTest, StreamHeader) {
168 task_runner_->RunTasks(); // Run the initializer on the correct thread. 174 task_runner_->RunTasks(); // Run the initializer on the correct thread.
169 175
170 VideoEncoder::FrameEncodedCallback frame_encoded_callback = 176 VideoEncoder::FrameEncodedCallback frame_encoded_callback =
171 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame, 177 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame,
172 test_video_encoder_callback_.get()); 178 test_video_encoder_callback_.get());
173 179
174 // Force the FakeVideoEncodeAccelerator to return a dummy non-key frame first. 180 // Force the FakeVideoEncodeAccelerator to return a dummy non-key frame first.
175 fake_vea_->SendDummyFrameForTesting(false); 181 fake_vea_->SendDummyFrameForTesting(false);
176 182
177 // Verify the first returned bitstream buffer is still a key frame. 183 // Verify the first returned bitstream buffer is still a key frame.
178 base::TimeTicks capture_time; 184 base::TimeTicks capture_time;
179 capture_time += base::TimeDelta::FromMilliseconds(33); 185 capture_time += base::TimeDelta::FromMilliseconds(33);
180 test_video_encoder_callback_->SetExpectedResult(0, 0, capture_time); 186 test_video_encoder_callback_->SetExpectedResult(0, 0, capture_time);
181 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( 187 EXPECT_TRUE(video_encoder_->EncodeVideoFrame(
182 video_frame_, capture_time, frame_encoded_callback)); 188 video_frame_, capture_time, frame_encoded_callback));
183 task_runner_->RunTasks(); 189 task_runner_->RunTasks();
184 190
185 // We need to run the task to cleanup the GPU instance. 191 // We need to run the task to cleanup the GPU instance.
186 video_encoder_.reset(NULL); 192 video_encoder_.reset(NULL);
187 task_runner_->RunTasks(); 193 task_runner_->RunTasks();
188 } 194 }
189 195
190 } // namespace cast 196 } // namespace cast
191 } // namespace media 197 } // namespace media
OLDNEW
« no previous file with comments | « no previous file | media/cast/sender/video_sender.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698