| 711 | } |
| 712 | |
| 713 | uint32_t FrameBuffer::GetBufferedFramesTimeMs() { |
| 714 | MutexLock lock(&mutex_); |
| 715 | if (frames_.empty()) { |
| 716 | return 0; |
| 717 | } |
| 718 | |
| 719 | absl::optional<unsigned int> last_decoded_frame_timestamp = |
| 720 | decoded_frames_history_.GetLastDecodedFrameTimestamp(); |
| 721 | if (!last_decoded_frame_timestamp.has_value()) { |
| 722 | return frames_.size() * 40; // fps 25 |
| 723 | } |
| 724 | if (last_decoded_frame_timestamp.value() == 0 || |
| 725 | frames_.rbegin()->second.frame == nullptr) { |
| 726 | return frames_.size() * 40; // fps 25 |
| 727 | } |
| 728 | |
| 729 | uint32_t buffered_frames_ms = webrtc::ForwardDiff(*last_decoded_frame_timestamp, frames_.rbegin()->second.frame->Timestamp()) / 90; |
| 730 | return buffered_frames_ms; |
| 731 | } |
| 732 | |
| 733 | FrameBuffer::FrameInfo::FrameInfo() = default; |
| 734 | FrameBuffer::FrameInfo::FrameInfo(FrameInfo&&) = default; |