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

Side by Side Diff: media/cast/rtcp/rtcp_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
« no previous file with comments | « media/cast/rtcp/rtcp_sender.h ('k') | media/cast/rtcp/rtcp_sender_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/rtcp/rtcp_sender.h" 5 #include "media/cast/rtcp/rtcp_sender.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "media/cast/cast_environment.h" 11 #include "media/cast/cast_environment.h"
12 #include "media/cast/rtcp/rtcp_utility.h" 12 #include "media/cast/rtcp/rtcp_utility.h"
13 #include "media/cast/transport/cast_transport_defines.h" 13 #include "media/cast/transport/cast_transport_defines.h"
14 #include "media/cast/transport/pacing/paced_sender.h" 14 #include "media/cast/transport/pacing/paced_sender.h"
15 #include "net/base/big_endian.h" 15 #include "net/base/big_endian.h"
16 16
17 static const size_t kRtcpCastLogHeaderSize = 12; 17 static const size_t kRtcpCastLogHeaderSize = 12;
18 static const size_t kRtcpSenderFrameLogSize = 4; 18 static const size_t kRtcpSenderFrameLogSize = 4;
19 static const size_t kRtcpReceiverFrameLogSize = 8; 19 static const size_t kRtcpReceiverFrameLogSize = 8;
20 static const size_t kRtcpReceiverEventLogSize = 4; 20 static const size_t kRtcpReceiverEventLogSize = 4;
21 21
22 namespace { 22 namespace {
23
24 // Converts a log event type to an integer value.
25 int ConvertEventTypeToWireFormat(const media::cast::CastLoggingEvent& event) {
26 switch (event) {
27 case media::cast::kAudioAckSent:
28 return 1;
29 case media::cast::kAudioPlayoutDelay:
30 return 2;
31 case media::cast::kAudioFrameDecoded:
32 return 3;
33 case media::cast::kAudioPacketReceived:
34 return 4;
35 case media::cast::kVideoAckSent:
36 return 5;
37 case media::cast::kVideoFrameDecoded:
38 return 6;
39 case media::cast::kVideoRenderDelay:
40 return 7;
41 case media::cast::kVideoPacketReceived:
42 return 8;
43 case media::cast::kDuplicatePacketReceived:
44 return 9;
45 default:
46 return 0; // Not an interesting event.
47 }
48 }
49
23 uint16 MergeEventTypeAndTimestampForWireFormat( 50 uint16 MergeEventTypeAndTimestampForWireFormat(
24 const media::cast::CastLoggingEvent& event, 51 const media::cast::CastLoggingEvent& event,
25 const base::TimeDelta& time_delta) { 52 const base::TimeDelta& time_delta) {
26 int64 time_delta_ms = time_delta.InMilliseconds(); 53 int64 time_delta_ms = time_delta.InMilliseconds();
27 // Max delta is 4096 milliseconds. 54 // Max delta is 4096 milliseconds.
28 DCHECK_GE(GG_INT64_C(0xfff), time_delta_ms); 55 DCHECK_GE(GG_INT64_C(0xfff), time_delta_ms);
29 56
30 uint16 event_type_and_timestamp_delta = 57 uint16 event_type_and_timestamp_delta =
31 static_cast<uint16>(time_delta_ms & 0xfff); 58 static_cast<uint16>(time_delta_ms & 0xfff);
32 59
33 uint16 event_type = 0; 60 uint16 event_type = ConvertEventTypeToWireFormat(event);
34 switch (event) { 61 DCHECK(event_type);
35 case media::cast::kAudioAckSent:
36 event_type = 1;
37 break;
38 case media::cast::kAudioPlayoutDelay:
39 event_type = 2;
40 break;
41 case media::cast::kAudioFrameDecoded:
42 event_type = 3;
43 break;
44 case media::cast::kAudioPacketReceived:
45 event_type = 4;
46 break;
47 case media::cast::kVideoAckSent:
48 event_type = 5;
49 break;
50 case media::cast::kVideoFrameDecoded:
51 event_type = 6;
52 break;
53 case media::cast::kVideoRenderDelay:
54 event_type = 7;
55 break;
56 case media::cast::kVideoPacketReceived:
57 event_type = 8;
58 break;
59 case media::cast::kDuplicatePacketReceived:
60 event_type = 9;
61 break;
62 default:
63 NOTREACHED();
64 }
65 DCHECK(!(event_type & 0xfff0)); 62 DCHECK(!(event_type & 0xfff0));
66 return (event_type << 12) + event_type_and_timestamp_delta; 63 return (event_type << 12) + event_type_and_timestamp_delta;
67 } 64 }
68 65
69 bool ScanRtcpReceiverLogMessage( 66 bool ScanRtcpReceiverLogMessage(
70 const media::cast::RtcpReceiverLogMessage& receiver_log_message, 67 const media::cast::RtcpReceiverLogMessage& receiver_log_message,
71 size_t start_size, 68 size_t start_size,
72 size_t* number_of_frames, 69 size_t* number_of_frames,
73 size_t* total_number_of_messages_to_send, 70 size_t* total_number_of_messages_to_send,
74 size_t* rtcp_log_size) { 71 size_t* rtcp_log_size) {
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 const std::string& c_name) 137 const std::string& c_name)
141 : ssrc_(sending_ssrc), 138 : ssrc_(sending_ssrc),
142 c_name_(c_name), 139 c_name_(c_name),
143 transport_(outgoing_transport), 140 transport_(outgoing_transport),
144 cast_environment_(cast_environment) { 141 cast_environment_(cast_environment) {
145 DCHECK_LT(c_name_.length(), kRtcpCnameSize) << "Invalid config"; 142 DCHECK_LT(c_name_.length(), kRtcpCnameSize) << "Invalid config";
146 } 143 }
147 144
148 RtcpSender::~RtcpSender() {} 145 RtcpSender::~RtcpSender() {}
149 146
147 // static
148 bool RtcpSender::IsReceiverEvent(const media::cast::CastLoggingEvent& event) {
149 return ConvertEventTypeToWireFormat(event) != 0;
150 }
151
150 void RtcpSender::SendRtcpFromRtpReceiver( 152 void RtcpSender::SendRtcpFromRtpReceiver(
151 uint32 packet_type_flags, 153 uint32 packet_type_flags,
152 const transport::RtcpReportBlock* report_block, 154 const transport::RtcpReportBlock* report_block,
153 const RtcpReceiverReferenceTimeReport* rrtr, 155 const RtcpReceiverReferenceTimeReport* rrtr,
154 const RtcpCastMessage* cast_message, 156 const RtcpCastMessage* cast_message,
155 RtcpReceiverLogMessage* receiver_log) { 157 RtcpReceiverLogMessage* receiver_log) {
156 if (packet_type_flags & kRtcpSr || 158 if (packet_type_flags & kRtcpSr ||
157 packet_type_flags & kRtcpDlrr || 159 packet_type_flags & kRtcpDlrr ||
158 packet_type_flags & kRtcpSenderLog) { 160 packet_type_flags & kRtcpSenderLog) {
159 NOTREACHED() << "Invalid argument"; 161 NOTREACHED() << "Invalid argument";
(...skipping 502 matching lines...) Expand 10 before | Expand all | Expand 10 after
662 if (frame_log_messages.event_log_messages_.empty()) { 664 if (frame_log_messages.event_log_messages_.empty()) {
663 // We sent all messages on this frame; pop the frame header. 665 // We sent all messages on this frame; pop the frame header.
664 receiver_log_message->pop_front(); 666 receiver_log_message->pop_front();
665 } 667 }
666 } 668 }
667 DCHECK_EQ(total_number_of_messages_to_send, 0); 669 DCHECK_EQ(total_number_of_messages_to_send, 0);
668 } 670 }
669 671
670 } // namespace cast 672 } // namespace cast
671 } // namespace media 673 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/rtcp/rtcp_sender.h ('k') | media/cast/rtcp/rtcp_sender_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698