| OLD | NEW |
| 1 /* | 1 /* |
| 2 * libjingle | 2 * libjingle |
| 3 * Copyright 2012 Google Inc. | 3 * Copyright 2012 Google Inc. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
| 7 * | 7 * |
| 8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
| 9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 88 | 88 |
| 89 void RtpDataMediaChannel::Construct(rtc::Timing* timing) { | 89 void RtpDataMediaChannel::Construct(rtc::Timing* timing) { |
| 90 sending_ = false; | 90 sending_ = false; |
| 91 receiving_ = false; | 91 receiving_ = false; |
| 92 timing_ = timing; | 92 timing_ = timing; |
| 93 send_limiter_.reset(new rtc::RateLimiter(kDataMaxBandwidth / 8, 1.0)); | 93 send_limiter_.reset(new rtc::RateLimiter(kDataMaxBandwidth / 8, 1.0)); |
| 94 } | 94 } |
| 95 | 95 |
| 96 | 96 |
| 97 RtpDataMediaChannel::~RtpDataMediaChannel() { | 97 RtpDataMediaChannel::~RtpDataMediaChannel() { |
| 98 std::map<uint32, RtpClock*>::const_iterator iter; | 98 std::map<uint32_t, RtpClock*>::const_iterator iter; |
| 99 for (iter = rtp_clock_by_send_ssrc_.begin(); | 99 for (iter = rtp_clock_by_send_ssrc_.begin(); |
| 100 iter != rtp_clock_by_send_ssrc_.end(); | 100 iter != rtp_clock_by_send_ssrc_.end(); |
| 101 ++iter) { | 101 ++iter) { |
| 102 delete iter->second; | 102 delete iter->second; |
| 103 } | 103 } |
| 104 } | 104 } |
| 105 | 105 |
| 106 void RtpClock::Tick( | 106 void RtpClock::Tick(double now, int* seq_num, uint32_t* timestamp) { |
| 107 double now, int* seq_num, uint32* timestamp) { | |
| 108 *seq_num = ++last_seq_num_; | 107 *seq_num = ++last_seq_num_; |
| 109 *timestamp = timestamp_offset_ + static_cast<uint32>(now * clockrate_); | 108 *timestamp = timestamp_offset_ + static_cast<uint32_t>(now * clockrate_); |
| 110 } | 109 } |
| 111 | 110 |
| 112 const DataCodec* FindUnknownCodec(const std::vector<DataCodec>& codecs) { | 111 const DataCodec* FindUnknownCodec(const std::vector<DataCodec>& codecs) { |
| 113 DataCodec data_codec(kGoogleRtpDataCodecId, kGoogleRtpDataCodecName, 0); | 112 DataCodec data_codec(kGoogleRtpDataCodecId, kGoogleRtpDataCodecName, 0); |
| 114 std::vector<DataCodec>::const_iterator iter; | 113 std::vector<DataCodec>::const_iterator iter; |
| 115 for (iter = codecs.begin(); iter != codecs.end(); ++iter) { | 114 for (iter = codecs.begin(); iter != codecs.end(); ++iter) { |
| 116 if (!iter->Matches(data_codec)) { | 115 if (!iter->Matches(data_codec)) { |
| 117 return &(*iter); | 116 return &(*iter); |
| 118 } | 117 } |
| 119 } | 118 } |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 181 // And we should probably allow more than one per stream. | 180 // And we should probably allow more than one per stream. |
| 182 rtp_clock_by_send_ssrc_[stream.first_ssrc()] = new RtpClock( | 181 rtp_clock_by_send_ssrc_[stream.first_ssrc()] = new RtpClock( |
| 183 kDataCodecClockrate, | 182 kDataCodecClockrate, |
| 184 rtc::CreateRandomNonZeroId(), rtc::CreateRandomNonZeroId()); | 183 rtc::CreateRandomNonZeroId(), rtc::CreateRandomNonZeroId()); |
| 185 | 184 |
| 186 LOG(LS_INFO) << "Added data send stream '" << stream.id | 185 LOG(LS_INFO) << "Added data send stream '" << stream.id |
| 187 << "' with ssrc=" << stream.first_ssrc(); | 186 << "' with ssrc=" << stream.first_ssrc(); |
| 188 return true; | 187 return true; |
| 189 } | 188 } |
| 190 | 189 |
| 191 bool RtpDataMediaChannel::RemoveSendStream(uint32 ssrc) { | 190 bool RtpDataMediaChannel::RemoveSendStream(uint32_t ssrc) { |
| 192 if (!GetStreamBySsrc(send_streams_, ssrc)) { | 191 if (!GetStreamBySsrc(send_streams_, ssrc)) { |
| 193 return false; | 192 return false; |
| 194 } | 193 } |
| 195 | 194 |
| 196 RemoveStreamBySsrc(&send_streams_, ssrc); | 195 RemoveStreamBySsrc(&send_streams_, ssrc); |
| 197 delete rtp_clock_by_send_ssrc_[ssrc]; | 196 delete rtp_clock_by_send_ssrc_[ssrc]; |
| 198 rtp_clock_by_send_ssrc_.erase(ssrc); | 197 rtp_clock_by_send_ssrc_.erase(ssrc); |
| 199 return true; | 198 return true; |
| 200 } | 199 } |
| 201 | 200 |
| 202 bool RtpDataMediaChannel::AddRecvStream(const StreamParams& stream) { | 201 bool RtpDataMediaChannel::AddRecvStream(const StreamParams& stream) { |
| 203 if (!stream.has_ssrcs()) { | 202 if (!stream.has_ssrcs()) { |
| 204 return false; | 203 return false; |
| 205 } | 204 } |
| 206 | 205 |
| 207 if (GetStreamBySsrc(recv_streams_, stream.first_ssrc())) { | 206 if (GetStreamBySsrc(recv_streams_, stream.first_ssrc())) { |
| 208 LOG(LS_WARNING) << "Not adding data recv stream '" << stream.id | 207 LOG(LS_WARNING) << "Not adding data recv stream '" << stream.id |
| 209 << "' with ssrc=" << stream.first_ssrc() | 208 << "' with ssrc=" << stream.first_ssrc() |
| 210 << " because stream already exists."; | 209 << " because stream already exists."; |
| 211 return false; | 210 return false; |
| 212 } | 211 } |
| 213 | 212 |
| 214 recv_streams_.push_back(stream); | 213 recv_streams_.push_back(stream); |
| 215 LOG(LS_INFO) << "Added data recv stream '" << stream.id | 214 LOG(LS_INFO) << "Added data recv stream '" << stream.id |
| 216 << "' with ssrc=" << stream.first_ssrc(); | 215 << "' with ssrc=" << stream.first_ssrc(); |
| 217 return true; | 216 return true; |
| 218 } | 217 } |
| 219 | 218 |
| 220 bool RtpDataMediaChannel::RemoveRecvStream(uint32 ssrc) { | 219 bool RtpDataMediaChannel::RemoveRecvStream(uint32_t ssrc) { |
| 221 RemoveStreamBySsrc(&recv_streams_, ssrc); | 220 RemoveStreamBySsrc(&recv_streams_, ssrc); |
| 222 return true; | 221 return true; |
| 223 } | 222 } |
| 224 | 223 |
| 225 void RtpDataMediaChannel::OnPacketReceived( | 224 void RtpDataMediaChannel::OnPacketReceived( |
| 226 rtc::Buffer* packet, const rtc::PacketTime& packet_time) { | 225 rtc::Buffer* packet, const rtc::PacketTime& packet_time) { |
| 227 RtpHeader header; | 226 RtpHeader header; |
| 228 if (!GetRtpHeader(packet->data(), packet->size(), &header)) { | 227 if (!GetRtpHeader(packet->data(), packet->size(), &header)) { |
| 229 // Don't want to log for every corrupt packet. | 228 // Don't want to log for every corrupt packet. |
| 230 // LOG(LS_WARNING) << "Could not read rtp header from packet of length " | 229 // LOG(LS_WARNING) << "Could not read rtp header from packet of length " |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 362 | 361 |
| 363 MediaChannel::SendPacket(&packet); | 362 MediaChannel::SendPacket(&packet); |
| 364 send_limiter_->Use(packet_len, now); | 363 send_limiter_->Use(packet_len, now); |
| 365 if (result) { | 364 if (result) { |
| 366 *result = SDR_SUCCESS; | 365 *result = SDR_SUCCESS; |
| 367 } | 366 } |
| 368 return true; | 367 return true; |
| 369 } | 368 } |
| 370 | 369 |
| 371 } // namespace cricket | 370 } // namespace cricket |
| OLD | NEW |