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