OLD | NEW |
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 27 matching lines...) Expand all Loading... |
38 return; | 38 return; |
39 } | 39 } |
40 callback.Run(shm.Pass()); | 40 callback.Run(shm.Pass()); |
41 } | 41 } |
42 | 42 |
43 class TestVideoEncoderCallback | 43 class TestVideoEncoderCallback |
44 : public base::RefCountedThreadSafe<TestVideoEncoderCallback> { | 44 : public base::RefCountedThreadSafe<TestVideoEncoderCallback> { |
45 public: | 45 public: |
46 TestVideoEncoderCallback() {} | 46 TestVideoEncoderCallback() {} |
47 | 47 |
48 void SetExpectedResult(bool expected_key_frame, | 48 void SetExpectedResult(uint32 expected_frame_id, |
49 uint8 expected_frame_id, | 49 uint32 expected_base_frame_id, |
50 uint8 expected_last_referenced_frame_id, | |
51 const base::TimeTicks& expected_capture_time) { | 50 const base::TimeTicks& expected_capture_time) { |
52 expected_key_frame_ = expected_key_frame; | |
53 expected_frame_id_ = expected_frame_id; | 51 expected_frame_id_ = expected_frame_id; |
54 expected_last_referenced_frame_id_ = expected_last_referenced_frame_id; | 52 expected_base_frame_id_ = expected_base_frame_id; |
55 expected_capture_time_ = expected_capture_time; | 53 expected_capture_time_ = expected_capture_time; |
56 } | 54 } |
57 | 55 |
58 void DeliverEncodedVideoFrame( | 56 void DeliverEncodedVideoFrame( |
59 scoped_ptr<transport::EncodedVideoFrame> encoded_frame, | 57 scoped_ptr<transport::EncodedFrame> encoded_frame) { |
60 const base::TimeTicks& capture_time) { | |
61 EXPECT_EQ(expected_key_frame_, encoded_frame->key_frame); | |
62 EXPECT_EQ(expected_frame_id_, encoded_frame->frame_id); | 58 EXPECT_EQ(expected_frame_id_, encoded_frame->frame_id); |
63 EXPECT_EQ(expected_last_referenced_frame_id_, | 59 EXPECT_EQ(expected_base_frame_id_, encoded_frame->base_frame_id); |
64 encoded_frame->last_referenced_frame_id); | 60 EXPECT_EQ(expected_capture_time_, encoded_frame->reference_time); |
65 EXPECT_EQ(expected_capture_time_, capture_time); | |
66 } | 61 } |
67 | 62 |
68 protected: | 63 protected: |
69 virtual ~TestVideoEncoderCallback() {} | 64 virtual ~TestVideoEncoderCallback() {} |
70 | 65 |
71 private: | 66 private: |
72 friend class base::RefCountedThreadSafe<TestVideoEncoderCallback>; | 67 friend class base::RefCountedThreadSafe<TestVideoEncoderCallback>; |
73 | 68 |
74 bool expected_key_frame_; | 69 bool expected_key_frame_; |
75 uint8 expected_frame_id_; | 70 uint32 expected_frame_id_; |
76 uint8 expected_last_referenced_frame_id_; | 71 uint32 expected_base_frame_id_; |
77 base::TimeTicks expected_capture_time_; | 72 base::TimeTicks expected_capture_time_; |
78 | 73 |
79 DISALLOW_COPY_AND_ASSIGN(TestVideoEncoderCallback); | 74 DISALLOW_COPY_AND_ASSIGN(TestVideoEncoderCallback); |
80 }; | 75 }; |
81 } // namespace | 76 } // namespace |
82 | 77 |
83 class ExternalVideoEncoderTest : public ::testing::Test { | 78 class ExternalVideoEncoderTest : public ::testing::Test { |
84 protected: | 79 protected: |
85 ExternalVideoEncoderTest() | 80 ExternalVideoEncoderTest() |
86 : test_video_encoder_callback_(new TestVideoEncoderCallback()) { | 81 : test_video_encoder_callback_(new TestVideoEncoderCallback()) { |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
138 | 133 |
139 TEST_F(ExternalVideoEncoderTest, EncodePattern30fpsRunningOutOfAck) { | 134 TEST_F(ExternalVideoEncoderTest, EncodePattern30fpsRunningOutOfAck) { |
140 task_runner_->RunTasks(); // Run the initializer on the correct thread. | 135 task_runner_->RunTasks(); // Run the initializer on the correct thread. |
141 | 136 |
142 VideoEncoder::FrameEncodedCallback frame_encoded_callback = | 137 VideoEncoder::FrameEncodedCallback frame_encoded_callback = |
143 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame, | 138 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame, |
144 test_video_encoder_callback_.get()); | 139 test_video_encoder_callback_.get()); |
145 | 140 |
146 base::TimeTicks capture_time; | 141 base::TimeTicks capture_time; |
147 capture_time += base::TimeDelta::FromMilliseconds(33); | 142 capture_time += base::TimeDelta::FromMilliseconds(33); |
148 test_video_encoder_callback_->SetExpectedResult(true, 0, 0, capture_time); | 143 test_video_encoder_callback_->SetExpectedResult(0, 0, capture_time); |
149 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( | 144 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( |
150 video_frame_, capture_time, frame_encoded_callback)); | 145 video_frame_, capture_time, frame_encoded_callback)); |
151 task_runner_->RunTasks(); | 146 task_runner_->RunTasks(); |
152 | 147 |
153 for (int i = 0; i < 6; ++i) { | 148 for (int i = 0; i < 6; ++i) { |
154 capture_time += base::TimeDelta::FromMilliseconds(33); | 149 capture_time += base::TimeDelta::FromMilliseconds(33); |
155 test_video_encoder_callback_->SetExpectedResult( | 150 test_video_encoder_callback_->SetExpectedResult(i + 1, i, capture_time); |
156 false, i + 1, i, capture_time); | |
157 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( | 151 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( |
158 video_frame_, capture_time, frame_encoded_callback)); | 152 video_frame_, capture_time, frame_encoded_callback)); |
159 task_runner_->RunTasks(); | 153 task_runner_->RunTasks(); |
160 } | 154 } |
161 // We need to run the task to cleanup the GPU instance. | 155 // We need to run the task to cleanup the GPU instance. |
162 video_encoder_.reset(NULL); | 156 video_encoder_.reset(NULL); |
163 task_runner_->RunTasks(); | 157 task_runner_->RunTasks(); |
164 } | 158 } |
165 | 159 |
166 TEST_F(ExternalVideoEncoderTest, SkipNextFrame) { | 160 TEST_F(ExternalVideoEncoderTest, SkipNextFrame) { |
167 task_runner_->RunTasks(); // Run the initializer on the correct thread. | 161 task_runner_->RunTasks(); // Run the initializer on the correct thread. |
168 | 162 |
169 VideoEncoder::FrameEncodedCallback frame_encoded_callback = | 163 VideoEncoder::FrameEncodedCallback frame_encoded_callback = |
170 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame, | 164 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame, |
171 test_video_encoder_callback_.get()); | 165 test_video_encoder_callback_.get()); |
172 | 166 |
173 base::TimeTicks capture_time; | 167 base::TimeTicks capture_time; |
174 capture_time += base::TimeDelta::FromMilliseconds(33); | 168 capture_time += base::TimeDelta::FromMilliseconds(33); |
175 test_video_encoder_callback_->SetExpectedResult(true, 0, 0, capture_time); | 169 test_video_encoder_callback_->SetExpectedResult(0, 0, capture_time); |
176 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( | 170 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( |
177 video_frame_, capture_time, frame_encoded_callback)); | 171 video_frame_, capture_time, frame_encoded_callback)); |
178 task_runner_->RunTasks(); | 172 task_runner_->RunTasks(); |
179 | 173 |
180 video_encoder_->SkipNextFrame(true); | 174 video_encoder_->SkipNextFrame(true); |
181 for (int i = 0; i < 2; ++i) { | 175 for (int i = 0; i < 2; ++i) { |
182 capture_time += base::TimeDelta::FromMilliseconds(33); | 176 capture_time += base::TimeDelta::FromMilliseconds(33); |
183 EXPECT_FALSE(video_encoder_->EncodeVideoFrame( | 177 EXPECT_FALSE(video_encoder_->EncodeVideoFrame( |
184 video_frame_, capture_time, frame_encoded_callback)); | 178 video_frame_, capture_time, frame_encoded_callback)); |
185 task_runner_->RunTasks(); | 179 task_runner_->RunTasks(); |
186 } | 180 } |
187 | 181 |
188 video_encoder_->SkipNextFrame(false); | 182 video_encoder_->SkipNextFrame(false); |
189 for (int i = 0; i < 2; ++i) { | 183 for (int i = 0; i < 2; ++i) { |
190 capture_time += base::TimeDelta::FromMilliseconds(33); | 184 capture_time += base::TimeDelta::FromMilliseconds(33); |
191 test_video_encoder_callback_->SetExpectedResult( | 185 test_video_encoder_callback_->SetExpectedResult(i + 1, i, capture_time); |
192 false, i + 1, i, capture_time); | |
193 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( | 186 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( |
194 video_frame_, capture_time, frame_encoded_callback)); | 187 video_frame_, capture_time, frame_encoded_callback)); |
195 task_runner_->RunTasks(); | 188 task_runner_->RunTasks(); |
196 } | 189 } |
197 // We need to run the task to cleanup the GPU instance. | 190 // We need to run the task to cleanup the GPU instance. |
198 video_encoder_.reset(NULL); | 191 video_encoder_.reset(NULL); |
199 task_runner_->RunTasks(); | 192 task_runner_->RunTasks(); |
200 } | 193 } |
201 | 194 |
202 TEST_F(ExternalVideoEncoderTest, StreamHeader) { | 195 TEST_F(ExternalVideoEncoderTest, StreamHeader) { |
203 task_runner_->RunTasks(); // Run the initializer on the correct thread. | 196 task_runner_->RunTasks(); // Run the initializer on the correct thread. |
204 | 197 |
205 VideoEncoder::FrameEncodedCallback frame_encoded_callback = | 198 VideoEncoder::FrameEncodedCallback frame_encoded_callback = |
206 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame, | 199 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame, |
207 test_video_encoder_callback_.get()); | 200 test_video_encoder_callback_.get()); |
208 | 201 |
209 // Force the FakeVideoEncodeAccelerator to return a dummy non-key frame first. | 202 // Force the FakeVideoEncodeAccelerator to return a dummy non-key frame first. |
210 fake_vea_->SendDummyFrameForTesting(false); | 203 fake_vea_->SendDummyFrameForTesting(false); |
211 | 204 |
212 // Verify the first returned bitstream buffer is still a key frame. | 205 // Verify the first returned bitstream buffer is still a key frame. |
213 base::TimeTicks capture_time; | 206 base::TimeTicks capture_time; |
214 capture_time += base::TimeDelta::FromMilliseconds(33); | 207 capture_time += base::TimeDelta::FromMilliseconds(33); |
215 test_video_encoder_callback_->SetExpectedResult(true, 0, 0, capture_time); | 208 test_video_encoder_callback_->SetExpectedResult(0, 0, capture_time); |
216 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( | 209 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( |
217 video_frame_, capture_time, frame_encoded_callback)); | 210 video_frame_, capture_time, frame_encoded_callback)); |
218 task_runner_->RunTasks(); | 211 task_runner_->RunTasks(); |
219 | 212 |
220 // We need to run the task to cleanup the GPU instance. | 213 // We need to run the task to cleanup the GPU instance. |
221 video_encoder_.reset(NULL); | 214 video_encoder_.reset(NULL); |
222 task_runner_->RunTasks(); | 215 task_runner_->RunTasks(); |
223 } | 216 } |
224 | 217 |
225 } // namespace cast | 218 } // namespace cast |
226 } // namespace media | 219 } // namespace media |
OLD | NEW |