| 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" |
| 11 #include "media/cast/cast_defines.h" | 11 #include "media/cast/cast_defines.h" |
| 12 #include "media/cast/cast_environment.h" | 12 #include "media/cast/cast_environment.h" |
| 13 #include "media/cast/test/fake_single_thread_task_runner.h" | 13 #include "media/cast/test/fake_single_thread_task_runner.h" |
| 14 #include "media/cast/test/utility/video_utility.h" | 14 #include "media/cast/test/utility/video_utility.h" |
| 15 #include "media/cast/video_sender/video_encoder_impl.h" | 15 #include "media/cast/video_sender/video_encoder_impl.h" |
| 16 #include "testing/gmock/include/gmock/gmock.h" | 16 #include "testing/gmock/include/gmock/gmock.h" |
| 17 | 17 |
| 18 namespace media { | 18 namespace media { |
| 19 namespace cast { | 19 namespace cast { |
| 20 | 20 |
| 21 using testing::_; | 21 using testing::_; |
| 22 | 22 |
| 23 namespace { | 23 namespace { |
| 24 class TestVideoEncoderCallback | 24 class TestVideoEncoderCallback |
| 25 : public base::RefCountedThreadSafe<TestVideoEncoderCallback> { | 25 : public base::RefCountedThreadSafe<TestVideoEncoderCallback> { |
| 26 public: | 26 public: |
| 27 TestVideoEncoderCallback() {} | 27 TestVideoEncoderCallback() {} |
| 28 | 28 |
| 29 void SetExpectedResult(bool expected_key_frame, | 29 void SetExpectedResult(uint32 expected_frame_id, |
| 30 uint8 expected_frame_id, | 30 uint32 expected_base_frame_id, |
| 31 uint8 expected_last_referenced_frame_id, | |
| 32 const base::TimeTicks& expected_capture_time) { | 31 const base::TimeTicks& expected_capture_time) { |
| 33 expected_key_frame_ = expected_key_frame; | |
| 34 expected_frame_id_ = expected_frame_id; | 32 expected_frame_id_ = expected_frame_id; |
| 35 expected_last_referenced_frame_id_ = expected_last_referenced_frame_id; | 33 expected_base_frame_id_ = expected_base_frame_id; |
| 36 expected_capture_time_ = expected_capture_time; | 34 expected_capture_time_ = expected_capture_time; |
| 37 } | 35 } |
| 38 | 36 |
| 39 void DeliverEncodedVideoFrame( | 37 void DeliverEncodedVideoFrame( |
| 40 scoped_ptr<transport::EncodedVideoFrame> encoded_frame, | 38 scoped_ptr<transport::EncodedFrame> encoded_frame) { |
| 41 const base::TimeTicks& capture_time) { | |
| 42 EXPECT_EQ(expected_key_frame_, encoded_frame->key_frame); | |
| 43 EXPECT_EQ(expected_frame_id_, encoded_frame->frame_id); | 39 EXPECT_EQ(expected_frame_id_, encoded_frame->frame_id); |
| 44 EXPECT_EQ(expected_last_referenced_frame_id_, | 40 EXPECT_EQ(expected_base_frame_id_, encoded_frame->base_frame_id); |
| 45 encoded_frame->last_referenced_frame_id); | 41 EXPECT_EQ(expected_capture_time_, encoded_frame->reference_time); |
| 46 EXPECT_EQ(expected_capture_time_, capture_time); | |
| 47 } | 42 } |
| 48 | 43 |
| 49 protected: | 44 protected: |
| 50 virtual ~TestVideoEncoderCallback() {} | 45 virtual ~TestVideoEncoderCallback() {} |
| 51 | 46 |
| 52 private: | 47 private: |
| 53 friend class base::RefCountedThreadSafe<TestVideoEncoderCallback>; | 48 friend class base::RefCountedThreadSafe<TestVideoEncoderCallback>; |
| 54 | 49 |
| 55 bool expected_key_frame_; | 50 uint32 expected_frame_id_; |
| 56 uint8 expected_frame_id_; | 51 uint32 expected_base_frame_id_; |
| 57 uint8 expected_last_referenced_frame_id_; | |
| 58 base::TimeTicks expected_capture_time_; | 52 base::TimeTicks expected_capture_time_; |
| 59 | 53 |
| 60 DISALLOW_COPY_AND_ASSIGN(TestVideoEncoderCallback); | 54 DISALLOW_COPY_AND_ASSIGN(TestVideoEncoderCallback); |
| 61 }; | 55 }; |
| 62 } // namespace | 56 } // namespace |
| 63 | 57 |
| 64 class VideoEncoderImplTest : public ::testing::Test { | 58 class VideoEncoderImplTest : public ::testing::Test { |
| 65 protected: | 59 protected: |
| 66 VideoEncoderImplTest() | 60 VideoEncoderImplTest() |
| 67 : test_video_encoder_callback_(new TestVideoEncoderCallback()) { | 61 : test_video_encoder_callback_(new TestVideoEncoderCallback()) { |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 121 | 115 |
| 122 TEST_F(VideoEncoderImplTest, EncodePattern30fpsRunningOutOfAck) { | 116 TEST_F(VideoEncoderImplTest, EncodePattern30fpsRunningOutOfAck) { |
| 123 Configure(3); | 117 Configure(3); |
| 124 | 118 |
| 125 VideoEncoder::FrameEncodedCallback frame_encoded_callback = | 119 VideoEncoder::FrameEncodedCallback frame_encoded_callback = |
| 126 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame, | 120 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame, |
| 127 test_video_encoder_callback_.get()); | 121 test_video_encoder_callback_.get()); |
| 128 | 122 |
| 129 base::TimeTicks capture_time; | 123 base::TimeTicks capture_time; |
| 130 capture_time += base::TimeDelta::FromMilliseconds(33); | 124 capture_time += base::TimeDelta::FromMilliseconds(33); |
| 131 test_video_encoder_callback_->SetExpectedResult(true, 0, 0, capture_time); | 125 test_video_encoder_callback_->SetExpectedResult(0, 0, capture_time); |
| 132 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( | 126 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( |
| 133 video_frame_, capture_time, frame_encoded_callback)); | 127 video_frame_, capture_time, frame_encoded_callback)); |
| 134 task_runner_->RunTasks(); | 128 task_runner_->RunTasks(); |
| 135 | 129 |
| 136 capture_time += base::TimeDelta::FromMilliseconds(33); | 130 capture_time += base::TimeDelta::FromMilliseconds(33); |
| 137 video_encoder_->LatestFrameIdToReference(0); | 131 video_encoder_->LatestFrameIdToReference(0); |
| 138 test_video_encoder_callback_->SetExpectedResult(false, 1, 0, capture_time); | 132 test_video_encoder_callback_->SetExpectedResult(1, 0, capture_time); |
| 139 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( | 133 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( |
| 140 video_frame_, capture_time, frame_encoded_callback)); | 134 video_frame_, capture_time, frame_encoded_callback)); |
| 141 task_runner_->RunTasks(); | 135 task_runner_->RunTasks(); |
| 142 | 136 |
| 143 capture_time += base::TimeDelta::FromMilliseconds(33); | 137 capture_time += base::TimeDelta::FromMilliseconds(33); |
| 144 video_encoder_->LatestFrameIdToReference(1); | 138 video_encoder_->LatestFrameIdToReference(1); |
| 145 test_video_encoder_callback_->SetExpectedResult(false, 2, 1, capture_time); | 139 test_video_encoder_callback_->SetExpectedResult(2, 1, capture_time); |
| 146 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( | 140 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( |
| 147 video_frame_, capture_time, frame_encoded_callback)); | 141 video_frame_, capture_time, frame_encoded_callback)); |
| 148 task_runner_->RunTasks(); | 142 task_runner_->RunTasks(); |
| 149 | 143 |
| 150 video_encoder_->LatestFrameIdToReference(2); | 144 video_encoder_->LatestFrameIdToReference(2); |
| 151 | 145 |
| 152 for (int i = 3; i < 6; ++i) { | 146 for (int i = 3; i < 6; ++i) { |
| 153 capture_time += base::TimeDelta::FromMilliseconds(33); | 147 capture_time += base::TimeDelta::FromMilliseconds(33); |
| 154 test_video_encoder_callback_->SetExpectedResult(false, i, 2, capture_time); | 148 test_video_encoder_callback_->SetExpectedResult(i, 2, capture_time); |
| 155 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( | 149 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( |
| 156 video_frame_, capture_time, frame_encoded_callback)); | 150 video_frame_, capture_time, frame_encoded_callback)); |
| 157 task_runner_->RunTasks(); | 151 task_runner_->RunTasks(); |
| 158 } | 152 } |
| 159 } | 153 } |
| 160 | 154 |
| 161 // TODO(pwestin): Re-enabled after redesign the encoder to control number of | 155 // TODO(pwestin): Re-enabled after redesign the encoder to control number of |
| 162 // frames in flight. | 156 // frames in flight. |
| 163 TEST_F(VideoEncoderImplTest, DISABLED_EncodePattern60fpsRunningOutOfAck) { | 157 TEST_F(VideoEncoderImplTest, DISABLED_EncodePattern60fpsRunningOutOfAck) { |
| 164 video_config_.max_number_of_video_buffers_used = 1; | 158 video_config_.max_number_of_video_buffers_used = 1; |
| 165 Configure(6); | 159 Configure(6); |
| 166 | 160 |
| 167 base::TimeTicks capture_time; | 161 base::TimeTicks capture_time; |
| 168 VideoEncoder::FrameEncodedCallback frame_encoded_callback = | 162 VideoEncoder::FrameEncodedCallback frame_encoded_callback = |
| 169 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame, | 163 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame, |
| 170 test_video_encoder_callback_.get()); | 164 test_video_encoder_callback_.get()); |
| 171 | 165 |
| 172 capture_time += base::TimeDelta::FromMilliseconds(33); | 166 capture_time += base::TimeDelta::FromMilliseconds(33); |
| 173 test_video_encoder_callback_->SetExpectedResult(true, 0, 0, capture_time); | 167 test_video_encoder_callback_->SetExpectedResult(0, 0, capture_time); |
| 174 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( | 168 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( |
| 175 video_frame_, capture_time, frame_encoded_callback)); | 169 video_frame_, capture_time, frame_encoded_callback)); |
| 176 task_runner_->RunTasks(); | 170 task_runner_->RunTasks(); |
| 177 | 171 |
| 178 video_encoder_->LatestFrameIdToReference(0); | 172 video_encoder_->LatestFrameIdToReference(0); |
| 179 capture_time += base::TimeDelta::FromMilliseconds(33); | 173 capture_time += base::TimeDelta::FromMilliseconds(33); |
| 180 test_video_encoder_callback_->SetExpectedResult(false, 1, 0, capture_time); | 174 test_video_encoder_callback_->SetExpectedResult(1, 0, capture_time); |
| 181 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( | 175 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( |
| 182 video_frame_, capture_time, frame_encoded_callback)); | 176 video_frame_, capture_time, frame_encoded_callback)); |
| 183 task_runner_->RunTasks(); | 177 task_runner_->RunTasks(); |
| 184 | 178 |
| 185 video_encoder_->LatestFrameIdToReference(1); | 179 video_encoder_->LatestFrameIdToReference(1); |
| 186 capture_time += base::TimeDelta::FromMilliseconds(33); | 180 capture_time += base::TimeDelta::FromMilliseconds(33); |
| 187 test_video_encoder_callback_->SetExpectedResult(false, 2, 0, capture_time); | 181 test_video_encoder_callback_->SetExpectedResult(2, 0, capture_time); |
| 188 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( | 182 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( |
| 189 video_frame_, capture_time, frame_encoded_callback)); | 183 video_frame_, capture_time, frame_encoded_callback)); |
| 190 task_runner_->RunTasks(); | 184 task_runner_->RunTasks(); |
| 191 | 185 |
| 192 video_encoder_->LatestFrameIdToReference(2); | 186 video_encoder_->LatestFrameIdToReference(2); |
| 193 | 187 |
| 194 for (int i = 3; i < 9; ++i) { | 188 for (int i = 3; i < 9; ++i) { |
| 195 capture_time += base::TimeDelta::FromMilliseconds(33); | 189 capture_time += base::TimeDelta::FromMilliseconds(33); |
| 196 test_video_encoder_callback_->SetExpectedResult(false, i, 2, capture_time); | 190 test_video_encoder_callback_->SetExpectedResult(i, 2, capture_time); |
| 197 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( | 191 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( |
| 198 video_frame_, capture_time, frame_encoded_callback)); | 192 video_frame_, capture_time, frame_encoded_callback)); |
| 199 task_runner_->RunTasks(); | 193 task_runner_->RunTasks(); |
| 200 } | 194 } |
| 201 } | 195 } |
| 202 | 196 |
| 203 // TODO(pwestin): Re-enabled after redesign the encoder to control number of | 197 // TODO(pwestin): Re-enabled after redesign the encoder to control number of |
| 204 // frames in flight. | 198 // frames in flight. |
| 205 TEST_F(VideoEncoderImplTest, | 199 TEST_F(VideoEncoderImplTest, |
| 206 DISABLED_EncodePattern60fps200msDelayRunningOutOfAck) { | 200 DISABLED_EncodePattern60fps200msDelayRunningOutOfAck) { |
| 207 Configure(12); | 201 Configure(12); |
| 208 | 202 |
| 209 base::TimeTicks capture_time; | 203 base::TimeTicks capture_time; |
| 210 VideoEncoder::FrameEncodedCallback frame_encoded_callback = | 204 VideoEncoder::FrameEncodedCallback frame_encoded_callback = |
| 211 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame, | 205 base::Bind(&TestVideoEncoderCallback::DeliverEncodedVideoFrame, |
| 212 test_video_encoder_callback_.get()); | 206 test_video_encoder_callback_.get()); |
| 213 | 207 |
| 214 capture_time += base::TimeDelta::FromMilliseconds(33); | 208 capture_time += base::TimeDelta::FromMilliseconds(33); |
| 215 test_video_encoder_callback_->SetExpectedResult(true, 0, 0, capture_time); | 209 test_video_encoder_callback_->SetExpectedResult(0, 0, capture_time); |
| 216 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( | 210 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( |
| 217 video_frame_, capture_time, frame_encoded_callback)); | 211 video_frame_, capture_time, frame_encoded_callback)); |
| 218 task_runner_->RunTasks(); | 212 task_runner_->RunTasks(); |
| 219 | 213 |
| 220 video_encoder_->LatestFrameIdToReference(0); | 214 video_encoder_->LatestFrameIdToReference(0); |
| 221 capture_time += base::TimeDelta::FromMilliseconds(33); | 215 capture_time += base::TimeDelta::FromMilliseconds(33); |
| 222 test_video_encoder_callback_->SetExpectedResult(false, 1, 0, capture_time); | 216 test_video_encoder_callback_->SetExpectedResult(1, 0, capture_time); |
| 223 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( | 217 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( |
| 224 video_frame_, capture_time, frame_encoded_callback)); | 218 video_frame_, capture_time, frame_encoded_callback)); |
| 225 task_runner_->RunTasks(); | 219 task_runner_->RunTasks(); |
| 226 | 220 |
| 227 video_encoder_->LatestFrameIdToReference(1); | 221 video_encoder_->LatestFrameIdToReference(1); |
| 228 capture_time += base::TimeDelta::FromMilliseconds(33); | 222 capture_time += base::TimeDelta::FromMilliseconds(33); |
| 229 test_video_encoder_callback_->SetExpectedResult(false, 2, 0, capture_time); | 223 test_video_encoder_callback_->SetExpectedResult(2, 0, capture_time); |
| 230 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( | 224 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( |
| 231 video_frame_, capture_time, frame_encoded_callback)); | 225 video_frame_, capture_time, frame_encoded_callback)); |
| 232 task_runner_->RunTasks(); | 226 task_runner_->RunTasks(); |
| 233 | 227 |
| 234 video_encoder_->LatestFrameIdToReference(2); | 228 video_encoder_->LatestFrameIdToReference(2); |
| 235 capture_time += base::TimeDelta::FromMilliseconds(33); | 229 capture_time += base::TimeDelta::FromMilliseconds(33); |
| 236 test_video_encoder_callback_->SetExpectedResult(false, 3, 0, capture_time); | 230 test_video_encoder_callback_->SetExpectedResult(3, 0, capture_time); |
| 237 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( | 231 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( |
| 238 video_frame_, capture_time, frame_encoded_callback)); | 232 video_frame_, capture_time, frame_encoded_callback)); |
| 239 task_runner_->RunTasks(); | 233 task_runner_->RunTasks(); |
| 240 | 234 |
| 241 video_encoder_->LatestFrameIdToReference(3); | 235 video_encoder_->LatestFrameIdToReference(3); |
| 242 capture_time += base::TimeDelta::FromMilliseconds(33); | 236 capture_time += base::TimeDelta::FromMilliseconds(33); |
| 243 test_video_encoder_callback_->SetExpectedResult(false, 4, 0, capture_time); | 237 test_video_encoder_callback_->SetExpectedResult(4, 0, capture_time); |
| 244 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( | 238 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( |
| 245 video_frame_, capture_time, frame_encoded_callback)); | 239 video_frame_, capture_time, frame_encoded_callback)); |
| 246 task_runner_->RunTasks(); | 240 task_runner_->RunTasks(); |
| 247 | 241 |
| 248 video_encoder_->LatestFrameIdToReference(4); | 242 video_encoder_->LatestFrameIdToReference(4); |
| 249 | 243 |
| 250 for (int i = 5; i < 17; ++i) { | 244 for (int i = 5; i < 17; ++i) { |
| 251 test_video_encoder_callback_->SetExpectedResult(false, i, 4, capture_time); | 245 test_video_encoder_callback_->SetExpectedResult(i, 4, capture_time); |
| 252 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( | 246 EXPECT_TRUE(video_encoder_->EncodeVideoFrame( |
| 253 video_frame_, capture_time, frame_encoded_callback)); | 247 video_frame_, capture_time, frame_encoded_callback)); |
| 254 task_runner_->RunTasks(); | 248 task_runner_->RunTasks(); |
| 255 } | 249 } |
| 256 } | 250 } |
| 257 | 251 |
| 258 } // namespace cast | 252 } // namespace cast |
| 259 } // namespace media | 253 } // namespace media |
| OLD | NEW |