Chromium Code Reviews| Index: webrtc/modules/video_coding/jitter_buffer.cc |
| diff --git a/webrtc/modules/video_coding/jitter_buffer.cc b/webrtc/modules/video_coding/jitter_buffer.cc |
| index 7cd874cabf716dcc3b9c036f27e919ff700d02b9..c50d92cbc202b79d433eb423757bcf513dacc9cb 100644 |
| --- a/webrtc/modules/video_coding/jitter_buffer.cc |
| +++ b/webrtc/modules/video_coding/jitter_buffer.cc |
| @@ -229,7 +229,7 @@ VCMJitterBuffer::VCMJitterBuffer(Clock* clock, |
| incomplete_frames_(), |
| last_decoded_state_(), |
| first_packet_since_reset_(true), |
| - stats_callback_(NULL), |
| + stats_callback_(nullptr), |
| incoming_frame_rate_(0), |
| incoming_frame_count_(0), |
| time_last_incoming_frame_count_(0), |
| @@ -247,6 +247,7 @@ VCMJitterBuffer::VCMJitterBuffer(Clock* clock, |
| low_rtt_nack_threshold_ms_(-1), |
| high_rtt_nack_threshold_ms_(-1), |
| missing_sequence_numbers_(SequenceNumberLessThan()), |
| + latest_received_sequence_number_(0), |
| max_nack_list_size_(0), |
| max_packet_age_to_nack_(0), |
| max_incomplete_time_ms_(0), |
| @@ -325,30 +326,20 @@ void VCMJitterBuffer::Start() { |
| first_packet_since_reset_ = true; |
| rtt_ms_ = kDefaultRtt; |
| last_decoded_state_.Reset(); |
| + |
| + decodable_frames_.Reset(&free_frames_); |
| + incomplete_frames_.Reset(&free_frames_); |
| } |
| void VCMJitterBuffer::Stop() { |
| - crit_sect_->Enter(); |
| - UpdateHistograms(); |
| - running_ = false; |
| - last_decoded_state_.Reset(); |
| + { |
|
pbos-webrtc
2016/07/13 16:43:05
Remove the {}s, the time for calling event->set()
sprang_webrtc
2016/07/13 16:51:32
Done.
|
| + CriticalSectionScoped cs(crit_sect_); |
| + UpdateHistograms(); |
| + running_ = false; |
| - // Make sure all frames are free and reset. |
| - for (FrameList::iterator it = decodable_frames_.begin(); |
| - it != decodable_frames_.end(); ++it) { |
| - free_frames_.push_back(it->second); |
| - } |
| - for (FrameList::iterator it = incomplete_frames_.begin(); |
| - it != incomplete_frames_.end(); ++it) { |
| - free_frames_.push_back(it->second); |
| - } |
| - for (UnorderedFrameList::iterator it = free_frames_.begin(); |
| - it != free_frames_.end(); ++it) { |
| - (*it)->Reset(); |
| + last_decoded_state_.Reset(); |
| } |
| - decodable_frames_.clear(); |
| - incomplete_frames_.clear(); |
| - crit_sect_->Leave(); |
| + |
| // Make sure we wake up any threads waiting on these events. |
| frame_event_->Set(); |
| } |
| @@ -594,11 +585,10 @@ VCMEncodedFrame* VCMJitterBuffer::ExtractAndSetDecode(uint32_t timestamp) { |
| // Release frame when done with decoding. Should never be used to release |
| // frames from within the jitter buffer. |
| void VCMJitterBuffer::ReleaseFrame(VCMEncodedFrame* frame) { |
| + RTC_CHECK(frame != nullptr); |
| CriticalSectionScoped cs(crit_sect_); |
| VCMFrameBuffer* frame_buffer = static_cast<VCMFrameBuffer*>(frame); |
| - if (frame_buffer) { |
| - free_frames_.push_back(frame_buffer); |
| - } |
| + RecycleFrameBuffer(frame_buffer); |
| } |
| // Gets frame to use for this timestamp. If no match, get empty frame. |
| @@ -624,9 +614,9 @@ VCMFrameBufferEnum VCMJitterBuffer::GetFrame(const VCMPacket& packet, |
| LOG(LS_WARNING) << "Unable to get empty frame; Recycling."; |
| bool found_key_frame = RecycleFramesUntilKeyFrame(); |
| *frame = GetEmptyFrame(); |
| - assert(*frame); |
| + RTC_CHECK(*frame); |
| if (!found_key_frame) { |
| - free_frames_.push_back(*frame); |
| + RecycleFrameBuffer(*frame); |
| return kFlushIndicator; |
| } |
| } |
| @@ -753,7 +743,7 @@ VCMFrameBufferEnum VCMJitterBuffer::InsertPacket(const VCMPacket& packet, |
| case kGeneralError: |
| case kTimeStampError: |
| case kSizeError: { |
| - free_frames_.push_back(frame); |
| + RecycleFrameBuffer(frame); |
| break; |
| } |
| case kCompleteSession: { |
| @@ -787,7 +777,7 @@ VCMFrameBufferEnum VCMJitterBuffer::InsertPacket(const VCMPacket& packet, |
| case kIncomplete: { |
| if (frame->GetState() == kStateEmpty && |
| last_decoded_state_.UpdateEmptyFrame(frame)) { |
| - free_frames_.push_back(frame); |
| + RecycleFrameBuffer(frame); |
| return kNoError; |
| } else { |
| incomplete_frames_.InsertFrame(frame); |
| @@ -807,13 +797,13 @@ VCMFrameBufferEnum VCMJitterBuffer::InsertPacket(const VCMPacket& packet, |
| if (frame_list != NULL) { |
| frame_list->InsertFrame(frame); |
| } else { |
| - free_frames_.push_back(frame); |
| + RecycleFrameBuffer(frame); |
| } |
| ++num_duplicated_packets_; |
| break; |
| } |
| case kFlushIndicator: |
| - free_frames_.push_back(frame); |
| + RecycleFrameBuffer(frame); |
| return kFlushIndicator; |
| default: |
| assert(false); |
| @@ -1315,4 +1305,9 @@ bool VCMJitterBuffer::WaitForRetransmissions() { |
| return true; |
| } |
| +void VCMJitterBuffer::RecycleFrameBuffer(VCMFrameBuffer* frame) { |
| + frame->Reset(); |
| + free_frames_.push_back(frame); |
| +} |
| + |
| } // namespace webrtc |