| 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 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 338 if (frame_ref->second.num_missing_continuous == 0) { | 338 if (frame_ref->second.num_missing_continuous == 0) { |
| 339 frame_ref->second.continuous = true; | 339 frame_ref->second.continuous = true; |
| 340 continuous_frames.push(frame_ref); | 340 continuous_frames.push(frame_ref); |
| 341 } | 341 } |
| 342 } | 342 } |
| 343 } | 343 } |
| 344 } | 344 } |
| 345 | 345 |
| 346 void FrameBuffer::PropagateDecodability(const FrameInfo& info) { | 346 void FrameBuffer::PropagateDecodability(const FrameInfo& info) { |
| 347 TRACE_EVENT0("webrtc", "FrameBuffer::PropagateDecodability"); | 347 TRACE_EVENT0("webrtc", "FrameBuffer::PropagateDecodability"); |
| 348 RTC_CHECK(info.num_dependent_frames < FrameInfo::kMaxNumDependentFrames); |
| 348 for (size_t d = 0; d < info.num_dependent_frames; ++d) { | 349 for (size_t d = 0; d < info.num_dependent_frames; ++d) { |
| 349 auto ref_info = frames_.find(info.dependent_frames[d]); | 350 auto ref_info = frames_.find(info.dependent_frames[d]); |
| 350 RTC_DCHECK(ref_info != frames_.end()); | 351 RTC_DCHECK(ref_info != frames_.end()); |
| 351 RTC_DCHECK_GT(ref_info->second.num_missing_decodable, 0U); | 352 // TODO(philipel): Look into why we've seen this happen. |
| 352 --ref_info->second.num_missing_decodable; | 353 if (ref_info != frames_.end()) { |
| 354 RTC_DCHECK_GT(ref_info->second.num_missing_decodable, 0U); |
| 355 --ref_info->second.num_missing_decodable; |
| 356 } |
| 353 } | 357 } |
| 354 } | 358 } |
| 355 | 359 |
| 356 void FrameBuffer::AdvanceLastDecodedFrame(FrameMap::iterator decoded) { | 360 void FrameBuffer::AdvanceLastDecodedFrame(FrameMap::iterator decoded) { |
| 357 TRACE_EVENT0("webrtc", "FrameBuffer::AdvanceLastDecodedFrame"); | 361 TRACE_EVENT0("webrtc", "FrameBuffer::AdvanceLastDecodedFrame"); |
| 358 if (last_decoded_frame_it_ == frames_.end()) { | 362 if (last_decoded_frame_it_ == frames_.end()) { |
| 359 last_decoded_frame_it_ = frames_.begin(); | 363 last_decoded_frame_it_ = frames_.begin(); |
| 360 } else { | 364 } else { |
| 361 RTC_DCHECK(last_decoded_frame_it_->first < decoded->first); | 365 RTC_DCHECK(last_decoded_frame_it_->first < decoded->first); |
| 362 ++last_decoded_frame_it_; | 366 ++last_decoded_frame_it_; |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 411 if (ref_info == frames_.end()) | 415 if (ref_info == frames_.end()) |
| 412 ref_info = frames_.insert(std::make_pair(ref_key, FrameInfo())).first; | 416 ref_info = frames_.insert(std::make_pair(ref_key, FrameInfo())).first; |
| 413 | 417 |
| 414 if (ref_info->second.continuous) | 418 if (ref_info->second.continuous) |
| 415 --info->second.num_missing_continuous; | 419 --info->second.num_missing_continuous; |
| 416 | 420 |
| 417 // Add backwards reference so |frame| can be updated when new | 421 // Add backwards reference so |frame| can be updated when new |
| 418 // frames are inserted or decoded. | 422 // frames are inserted or decoded. |
| 419 ref_info->second.dependent_frames[ref_info->second.num_dependent_frames] = | 423 ref_info->second.dependent_frames[ref_info->second.num_dependent_frames] = |
| 420 key; | 424 key; |
| 421 ++ref_info->second.num_dependent_frames; | 425 RTC_DCHECK_LT(ref_info->second.num_dependent_frames, |
| 426 (FrameInfo::kMaxNumDependentFrames - 1)); |
| 427 // TODO(philipel): Look into why this could happen and handle |
| 428 // appropriately. |
| 429 if (ref_info->second.num_dependent_frames < |
| 430 (FrameInfo::kMaxNumDependentFrames - 1)) { |
| 431 ++ref_info->second.num_dependent_frames; |
| 432 } |
| 422 } | 433 } |
| 423 RTC_DCHECK_LE(ref_info->second.num_missing_continuous, | 434 RTC_DCHECK_LE(ref_info->second.num_missing_continuous, |
| 424 ref_info->second.num_missing_decodable); | 435 ref_info->second.num_missing_decodable); |
| 425 } | 436 } |
| 426 | 437 |
| 427 // Check if we have the lower spatial layer frame. | 438 // Check if we have the lower spatial layer frame. |
| 428 if (frame.inter_layer_predicted) { | 439 if (frame.inter_layer_predicted) { |
| 429 ++info->second.num_missing_continuous; | 440 ++info->second.num_missing_continuous; |
| 430 ++info->second.num_missing_decodable; | 441 ++info->second.num_missing_decodable; |
| 431 | 442 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 478 frames_.clear(); | 489 frames_.clear(); |
| 479 last_decoded_frame_it_ = frames_.end(); | 490 last_decoded_frame_it_ = frames_.end(); |
| 480 last_continuous_frame_it_ = frames_.end(); | 491 last_continuous_frame_it_ = frames_.end(); |
| 481 next_frame_it_ = frames_.end(); | 492 next_frame_it_ = frames_.end(); |
| 482 num_frames_history_ = 0; | 493 num_frames_history_ = 0; |
| 483 num_frames_buffered_ = 0; | 494 num_frames_buffered_ = 0; |
| 484 } | 495 } |
| 485 | 496 |
| 486 } // namespace video_coding | 497 } // namespace video_coding |
| 487 } // namespace webrtc | 498 } // namespace webrtc |
| OLD | NEW |