| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 161 frame->spatial_layer = spatial_layer; | 161 frame->spatial_layer = spatial_layer; |
| 162 frame->timestamp = ts_ms * 90; | 162 frame->timestamp = ts_ms * 90; |
| 163 frame->num_references = references.size(); | 163 frame->num_references = references.size(); |
| 164 frame->inter_layer_predicted = inter_layer_predicted; | 164 frame->inter_layer_predicted = inter_layer_predicted; |
| 165 for (size_t r = 0; r < references.size(); ++r) | 165 for (size_t r = 0; r < references.size(); ++r) |
| 166 frame->references[r] = references[r]; | 166 frame->references[r] = references[r]; |
| 167 | 167 |
| 168 return buffer_.InsertFrame(std::move(frame)); | 168 return buffer_.InsertFrame(std::move(frame)); |
| 169 } | 169 } |
| 170 | 170 |
| 171 void ExtractFrame(int64_t max_wait_time = 0) { | 171 void ExtractFrame(int64_t max_wait_time = 0, bool keyframe_required = false) { |
| 172 crit_.Enter(); | 172 crit_.Enter(); |
| 173 if (max_wait_time == 0) { | 173 if (max_wait_time == 0) { |
| 174 std::unique_ptr<FrameObject> frame; | 174 std::unique_ptr<FrameObject> frame; |
| 175 FrameBuffer::ReturnReason res = buffer_.NextFrame(0, &frame); | 175 FrameBuffer::ReturnReason res = |
| 176 buffer_.NextFrame(0, &frame, keyframe_required); |
| 176 if (res != FrameBuffer::ReturnReason::kStopped) | 177 if (res != FrameBuffer::ReturnReason::kStopped) |
| 177 frames_.emplace_back(std::move(frame)); | 178 frames_.emplace_back(std::move(frame)); |
| 178 crit_.Leave(); | 179 crit_.Leave(); |
| 179 } else { | 180 } else { |
| 180 max_wait_time_ = max_wait_time; | 181 max_wait_time_ = max_wait_time; |
| 181 trigger_extract_event_.Set(); | 182 trigger_extract_event_.Set(); |
| 182 crit_.Leave(); | 183 crit_.Leave(); |
| 183 // Make sure |crit_| is aquired by |extract_thread_| before returning. | 184 // Make sure |crit_| is aquired by |extract_thread_| before returning. |
| 184 crit_acquired_event_.Wait(rtc::Event::kForever); | 185 crit_acquired_event_.Wait(rtc::Event::kForever); |
| 185 } | 186 } |
| (...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 534 } | 535 } |
| 535 | 536 |
| 536 // TODO(philipel): implement more unittests related to invalid references. | 537 // TODO(philipel): implement more unittests related to invalid references. |
| 537 TEST_F(TestFrameBuffer2, InvalidReferences) { | 538 TEST_F(TestFrameBuffer2, InvalidReferences) { |
| 538 EXPECT_EQ(-1, InsertFrame(0, 0, 1000, false, 2)); | 539 EXPECT_EQ(-1, InsertFrame(0, 0, 1000, false, 2)); |
| 539 EXPECT_EQ(1, InsertFrame(1, 0, 2000, false)); | 540 EXPECT_EQ(1, InsertFrame(1, 0, 2000, false)); |
| 540 ExtractFrame(); | 541 ExtractFrame(); |
| 541 EXPECT_EQ(2, InsertFrame(2, 0, 3000, false, 1)); | 542 EXPECT_EQ(2, InsertFrame(2, 0, 3000, false, 1)); |
| 542 } | 543 } |
| 543 | 544 |
| 545 TEST_F(TestFrameBuffer2, KeyframeRequired) { |
| 546 EXPECT_EQ(1, InsertFrame(1, 0, 1000, false)); |
| 547 EXPECT_EQ(2, InsertFrame(2, 0, 2000, false, 1)); |
| 548 EXPECT_EQ(3, InsertFrame(3, 0, 3000, false)); |
| 549 ExtractFrame(); |
| 550 ExtractFrame(0, true); |
| 551 ExtractFrame(); |
| 552 |
| 553 CheckFrame(0, 1, 0); |
| 554 CheckFrame(1, 3, 0); |
| 555 CheckNoFrame(2); |
| 556 } |
| 557 |
| 544 } // namespace video_coding | 558 } // namespace video_coding |
| 545 } // namespace webrtc | 559 } // namespace webrtc |
| OLD | NEW |