Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(123)

Side by Side Diff: media/cast/video_sender/video_sender.cc

Issue 145443005: Fixes for memory and threading issues in cast (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix compile Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "media/cast/video_sender/video_sender.h" 5 #include "media/cast/video_sender/video_sender.h"
6 6
7 #include <list> 7 #include <list>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
178 } 178 }
179 179
180 void VideoSender::SendRtcpReport() { 180 void VideoSender::SendRtcpReport() {
181 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); 181 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
182 182
183 transport::RtcpSenderLogMessage sender_log_message; 183 transport::RtcpSenderLogMessage sender_log_message;
184 VideoRtcpRawMap video_logs = 184 VideoRtcpRawMap video_logs =
185 cast_environment_->Logging()->GetVideoRtcpRawData(); 185 cast_environment_->Logging()->GetVideoRtcpRawData();
186 186
187 while (!video_logs.empty()) { 187 while (!video_logs.empty()) {
188 // TODO(hclam): Avoid calling begin() within a loop.
188 VideoRtcpRawMap::iterator it = video_logs.begin(); 189 VideoRtcpRawMap::iterator it = video_logs.begin();
189 uint32 rtp_timestamp = it->first; 190 uint32 rtp_timestamp = it->first;
190 191
191 transport::RtcpSenderFrameLogMessage frame_message; 192 transport::RtcpSenderFrameLogMessage frame_message;
192 frame_message.rtp_timestamp = rtp_timestamp; 193 frame_message.rtp_timestamp = rtp_timestamp;
193 frame_message.frame_status = transport::kRtcpSenderFrameStatusUnknown; 194 frame_message.frame_status = transport::kRtcpSenderFrameStatusUnknown;
195 bool ignore_event = false;
194 196
195 switch (it->second.type) { 197 switch (it->second.type) {
196 case kVideoFrameCaptured: 198 case kVideoFrameCaptured:
197 frame_message.frame_status = 199 frame_message.frame_status =
198 transport::kRtcpSenderFrameStatusDroppedByFlowControl; 200 transport::kRtcpSenderFrameStatusDroppedByFlowControl;
199 break; 201 break;
200 case kVideoFrameSentToEncoder: 202 case kVideoFrameSentToEncoder:
201 frame_message.frame_status = 203 frame_message.frame_status =
202 transport::kRtcpSenderFrameStatusDroppedByEncoder; 204 transport::kRtcpSenderFrameStatusDroppedByEncoder;
203 break; 205 break;
204 case kVideoFrameEncoded: 206 case kVideoFrameEncoded:
205 frame_message.frame_status = 207 frame_message.frame_status =
206 transport::kRtcpSenderFrameStatusSentToNetwork; 208 transport::kRtcpSenderFrameStatusSentToNetwork;
207 break; 209 break;
208 default: 210 default:
209 NOTREACHED(); 211 ignore_event = true;
210 break;
211 } 212 }
212 video_logs.erase(rtp_timestamp); 213 video_logs.erase(rtp_timestamp);
213 sender_log_message.push_back(frame_message); 214 if (!ignore_event)
215 sender_log_message.push_back(frame_message);
214 } 216 }
215 217
216 rtcp_->SendRtcpFromRtpSender(sender_log_message); 218 rtcp_->SendRtcpFromRtpSender(sender_log_message);
217 if (!sender_log_message.empty()) { 219 if (!sender_log_message.empty()) {
218 VLOG(1) << "Failed to send all log messages"; 220 VLOG(1) << "Failed to send all log messages";
219 } 221 }
220 ScheduleNextRtcpReport(); 222 ScheduleNextRtcpReport();
221 } 223 }
222 224
223 void VideoSender::ScheduleNextResendCheck() { 225 void VideoSender::ScheduleNextResendCheck() {
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
402 404
403 void VideoSender::ResendPacketsOnTransportThread( 405 void VideoSender::ResendPacketsOnTransportThread(
404 const transport::MissingFramesAndPacketsMap& missing_packets) { 406 const transport::MissingFramesAndPacketsMap& missing_packets) {
405 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::TRANSPORT)); 407 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::TRANSPORT));
406 last_send_time_ = cast_environment_->Clock()->NowTicks(); 408 last_send_time_ = cast_environment_->Clock()->NowTicks();
407 transport_sender_->ResendPackets(false, missing_packets); 409 transport_sender_->ResendPackets(false, missing_packets);
408 } 410 }
409 411
410 } // namespace cast 412 } // namespace cast
411 } // namespace media 413 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/video_sender/video_encoder_impl_unittest.cc ('k') | media/cast/video_sender/video_sender_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698