OLD | NEW |
1 /* | 1 /* |
2 * libjingle | 2 * libjingle |
3 * Copyright 2004 Google Inc. | 3 * Copyright 2004 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 27 matching lines...) Expand all Loading... |
38 #include "talk/session/media/srtpfilter.h" | 38 #include "talk/session/media/srtpfilter.h" |
39 #include "webrtc/base/helpers.h" | 39 #include "webrtc/base/helpers.h" |
40 #include "webrtc/base/logging.h" | 40 #include "webrtc/base/logging.h" |
41 #include "webrtc/base/scoped_ptr.h" | 41 #include "webrtc/base/scoped_ptr.h" |
42 #include "webrtc/base/stringutils.h" | 42 #include "webrtc/base/stringutils.h" |
43 #include "webrtc/p2p/base/constants.h" | 43 #include "webrtc/p2p/base/constants.h" |
44 | 44 |
45 #ifdef HAVE_SCTP | 45 #ifdef HAVE_SCTP |
46 #include "talk/media/sctp/sctpdataengine.h" | 46 #include "talk/media/sctp/sctpdataengine.h" |
47 #else | 47 #else |
48 static const uint32 kMaxSctpSid = 1023; | 48 static const uint32_t kMaxSctpSid = 1023; |
49 #endif | 49 #endif |
50 | 50 |
51 namespace { | 51 namespace { |
52 const char kInline[] = "inline:"; | 52 const char kInline[] = "inline:"; |
53 } | 53 } |
54 | 54 |
55 namespace cricket { | 55 namespace cricket { |
56 | 56 |
57 using rtc::scoped_ptr; | 57 using rtc::scoped_ptr; |
58 | 58 |
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
243 } while (FindFirstStreamParamsByCname(params_vec, *cname)); | 243 } while (FindFirstStreamParamsByCname(params_vec, *cname)); |
244 | 244 |
245 return true; | 245 return true; |
246 } | 246 } |
247 | 247 |
248 // Generate random SSRC values that are not already present in |params_vec|. | 248 // Generate random SSRC values that are not already present in |params_vec|. |
249 // The generated values are added to |ssrcs|. | 249 // The generated values are added to |ssrcs|. |
250 // |num_ssrcs| is the number of the SSRC will be generated. | 250 // |num_ssrcs| is the number of the SSRC will be generated. |
251 static void GenerateSsrcs(const StreamParamsVec& params_vec, | 251 static void GenerateSsrcs(const StreamParamsVec& params_vec, |
252 int num_ssrcs, | 252 int num_ssrcs, |
253 std::vector<uint32>* ssrcs) { | 253 std::vector<uint32_t>* ssrcs) { |
254 for (int i = 0; i < num_ssrcs; i++) { | 254 for (int i = 0; i < num_ssrcs; i++) { |
255 uint32 candidate; | 255 uint32_t candidate; |
256 do { | 256 do { |
257 candidate = rtc::CreateRandomNonZeroId(); | 257 candidate = rtc::CreateRandomNonZeroId(); |
258 } while (GetStreamBySsrc(params_vec, candidate) || | 258 } while (GetStreamBySsrc(params_vec, candidate) || |
259 std::count(ssrcs->begin(), ssrcs->end(), candidate) > 0); | 259 std::count(ssrcs->begin(), ssrcs->end(), candidate) > 0); |
260 ssrcs->push_back(candidate); | 260 ssrcs->push_back(candidate); |
261 } | 261 } |
262 } | 262 } |
263 | 263 |
264 // Returns false if we exhaust the range of SIDs. | 264 // Returns false if we exhaust the range of SIDs. |
265 static bool GenerateSctpSid(const StreamParamsVec& params_vec, | 265 static bool GenerateSctpSid(const StreamParamsVec& params_vec, uint32_t* sid) { |
266 uint32* sid) { | |
267 if (params_vec.size() > kMaxSctpSid) { | 266 if (params_vec.size() > kMaxSctpSid) { |
268 LOG(LS_WARNING) << | 267 LOG(LS_WARNING) << |
269 "Could not generate an SCTP SID: too many SCTP streams."; | 268 "Could not generate an SCTP SID: too many SCTP streams."; |
270 return false; | 269 return false; |
271 } | 270 } |
272 while (true) { | 271 while (true) { |
273 uint32 candidate = rtc::CreateRandomNonZeroId() % kMaxSctpSid; | 272 uint32_t candidate = rtc::CreateRandomNonZeroId() % kMaxSctpSid; |
274 if (!GetStreamBySsrc(params_vec, candidate)) { | 273 if (!GetStreamBySsrc(params_vec, candidate)) { |
275 *sid = candidate; | 274 *sid = candidate; |
276 return true; | 275 return true; |
277 } | 276 } |
278 } | 277 } |
279 } | 278 } |
280 | 279 |
281 static bool GenerateSctpSids(const StreamParamsVec& params_vec, | 280 static bool GenerateSctpSids(const StreamParamsVec& params_vec, |
282 std::vector<uint32>* sids) { | 281 std::vector<uint32_t>* sids) { |
283 uint32 sid; | 282 uint32_t sid; |
284 if (!GenerateSctpSid(params_vec, &sid)) { | 283 if (!GenerateSctpSid(params_vec, &sid)) { |
285 LOG(LS_WARNING) << "Could not generated an SCTP SID."; | 284 LOG(LS_WARNING) << "Could not generated an SCTP SID."; |
286 return false; | 285 return false; |
287 } | 286 } |
288 sids->push_back(sid); | 287 sids->push_back(sid); |
289 return true; | 288 return true; |
290 } | 289 } |
291 | 290 |
292 // Finds all StreamParams of all media types and attach them to stream_params. | 291 // Finds all StreamParams of all media types and attach them to stream_params. |
293 static void GetCurrentStreamParams(const SessionDescription* sdesc, | 292 static void GetCurrentStreamParams(const SessionDescription* sdesc, |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
434 MediaType media_type, | 433 MediaType media_type, |
435 const MediaSessionOptions::Streams& streams, | 434 const MediaSessionOptions::Streams& streams, |
436 StreamParamsVec* current_streams, | 435 StreamParamsVec* current_streams, |
437 MediaContentDescriptionImpl<C>* content_description, | 436 MediaContentDescriptionImpl<C>* content_description, |
438 const bool add_legacy_stream) { | 437 const bool add_legacy_stream) { |
439 const bool include_rtx_streams = | 438 const bool include_rtx_streams = |
440 ContainsRtxCodec(content_description->codecs()); | 439 ContainsRtxCodec(content_description->codecs()); |
441 | 440 |
442 if (streams.empty() && add_legacy_stream) { | 441 if (streams.empty() && add_legacy_stream) { |
443 // TODO(perkj): Remove this legacy stream when all apps use StreamParams. | 442 // TODO(perkj): Remove this legacy stream when all apps use StreamParams. |
444 std::vector<uint32> ssrcs; | 443 std::vector<uint32_t> ssrcs; |
445 if (IsSctp(content_description)) { | 444 if (IsSctp(content_description)) { |
446 GenerateSctpSids(*current_streams, &ssrcs); | 445 GenerateSctpSids(*current_streams, &ssrcs); |
447 } else { | 446 } else { |
448 int num_ssrcs = include_rtx_streams ? 2 : 1; | 447 int num_ssrcs = include_rtx_streams ? 2 : 1; |
449 GenerateSsrcs(*current_streams, num_ssrcs, &ssrcs); | 448 GenerateSsrcs(*current_streams, num_ssrcs, &ssrcs); |
450 } | 449 } |
451 if (include_rtx_streams) { | 450 if (include_rtx_streams) { |
452 content_description->AddLegacyStream(ssrcs[0], ssrcs[1]); | 451 content_description->AddLegacyStream(ssrcs[0], ssrcs[1]); |
453 content_description->set_multistream(true); | 452 content_description->set_multistream(true); |
454 } else { | 453 } else { |
(...skipping 14 matching lines...) Expand all Loading... |
469 // MediaSessionDescriptionFactory. | 468 // MediaSessionDescriptionFactory. |
470 if (!param) { | 469 if (!param) { |
471 // This is a new stream. | 470 // This is a new stream. |
472 // Get a CNAME. Either new or same as one of the other synched streams. | 471 // Get a CNAME. Either new or same as one of the other synched streams. |
473 std::string cname; | 472 std::string cname; |
474 if (!GenerateCname(*current_streams, streams, stream_it->sync_label, | 473 if (!GenerateCname(*current_streams, streams, stream_it->sync_label, |
475 &cname)) { | 474 &cname)) { |
476 return false; | 475 return false; |
477 } | 476 } |
478 | 477 |
479 std::vector<uint32> ssrcs; | 478 std::vector<uint32_t> ssrcs; |
480 if (IsSctp(content_description)) { | 479 if (IsSctp(content_description)) { |
481 GenerateSctpSids(*current_streams, &ssrcs); | 480 GenerateSctpSids(*current_streams, &ssrcs); |
482 } else { | 481 } else { |
483 GenerateSsrcs(*current_streams, stream_it->num_sim_layers, &ssrcs); | 482 GenerateSsrcs(*current_streams, stream_it->num_sim_layers, &ssrcs); |
484 } | 483 } |
485 StreamParams stream_param; | 484 StreamParams stream_param; |
486 stream_param.id = stream_it->id; | 485 stream_param.id = stream_it->id; |
487 // Add the generated ssrc. | 486 // Add the generated ssrc. |
488 for (size_t i = 0; i < ssrcs.size(); ++i) { | 487 for (size_t i = 0; i < ssrcs.size(); ++i) { |
489 stream_param.ssrcs.push_back(ssrcs[i]); | 488 stream_param.ssrcs.push_back(ssrcs[i]); |
490 } | 489 } |
491 if (stream_it->num_sim_layers > 1) { | 490 if (stream_it->num_sim_layers > 1) { |
492 SsrcGroup group(kSimSsrcGroupSemantics, stream_param.ssrcs); | 491 SsrcGroup group(kSimSsrcGroupSemantics, stream_param.ssrcs); |
493 stream_param.ssrc_groups.push_back(group); | 492 stream_param.ssrc_groups.push_back(group); |
494 } | 493 } |
495 // Generate extra ssrcs for include_rtx_streams case. | 494 // Generate extra ssrcs for include_rtx_streams case. |
496 if (include_rtx_streams) { | 495 if (include_rtx_streams) { |
497 // Generate an RTX ssrc for every ssrc in the group. | 496 // Generate an RTX ssrc for every ssrc in the group. |
498 std::vector<uint32> rtx_ssrcs; | 497 std::vector<uint32_t> rtx_ssrcs; |
499 GenerateSsrcs(*current_streams, static_cast<int>(ssrcs.size()), | 498 GenerateSsrcs(*current_streams, static_cast<int>(ssrcs.size()), |
500 &rtx_ssrcs); | 499 &rtx_ssrcs); |
501 for (size_t i = 0; i < ssrcs.size(); ++i) { | 500 for (size_t i = 0; i < ssrcs.size(); ++i) { |
502 stream_param.AddFidSsrc(ssrcs[i], rtx_ssrcs[i]); | 501 stream_param.AddFidSsrc(ssrcs[i], rtx_ssrcs[i]); |
503 } | 502 } |
504 content_description->set_multistream(true); | 503 content_description->set_multistream(true); |
505 } | 504 } |
506 stream_param.cname = cname; | 505 stream_param.cname = cname; |
507 stream_param.sync_label = stream_it->sync_label; | 506 stream_param.sync_label = stream_it->sync_label; |
508 content_description->AddStream(stream_param); | 507 content_description->AddStream(stream_param); |
(...skipping 1393 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1902 GetFirstMediaContentDescription(sdesc, MEDIA_TYPE_VIDEO)); | 1901 GetFirstMediaContentDescription(sdesc, MEDIA_TYPE_VIDEO)); |
1903 } | 1902 } |
1904 | 1903 |
1905 const DataContentDescription* GetFirstDataContentDescription( | 1904 const DataContentDescription* GetFirstDataContentDescription( |
1906 const SessionDescription* sdesc) { | 1905 const SessionDescription* sdesc) { |
1907 return static_cast<const DataContentDescription*>( | 1906 return static_cast<const DataContentDescription*>( |
1908 GetFirstMediaContentDescription(sdesc, MEDIA_TYPE_DATA)); | 1907 GetFirstMediaContentDescription(sdesc, MEDIA_TYPE_DATA)); |
1909 } | 1908 } |
1910 | 1909 |
1911 } // namespace cricket | 1910 } // namespace cricket |
OLD | NEW |