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 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 *error_desc = message; | 64 *error_desc = message; |
65 } | 65 } |
66 } | 66 } |
67 | 67 |
68 struct PacketMessageData : public rtc::MessageData { | 68 struct PacketMessageData : public rtc::MessageData { |
69 rtc::Buffer packet; | 69 rtc::Buffer packet; |
70 rtc::DiffServCodePoint dscp; | 70 rtc::DiffServCodePoint dscp; |
71 }; | 71 }; |
72 | 72 |
73 struct ScreencastEventMessageData : public rtc::MessageData { | 73 struct ScreencastEventMessageData : public rtc::MessageData { |
74 ScreencastEventMessageData(uint32 s, rtc::WindowEvent we) | 74 ScreencastEventMessageData(uint32_t s, rtc::WindowEvent we) |
75 : ssrc(s), | 75 : ssrc(s), event(we) {} |
76 event(we) { | 76 uint32_t ssrc; |
77 } | |
78 uint32 ssrc; | |
79 rtc::WindowEvent event; | 77 rtc::WindowEvent event; |
80 }; | 78 }; |
81 | 79 |
82 struct VoiceChannelErrorMessageData : public rtc::MessageData { | 80 struct VoiceChannelErrorMessageData : public rtc::MessageData { |
83 VoiceChannelErrorMessageData(uint32 in_ssrc, | 81 VoiceChannelErrorMessageData(uint32_t in_ssrc, |
84 VoiceMediaChannel::Error in_error) | 82 VoiceMediaChannel::Error in_error) |
85 : ssrc(in_ssrc), | 83 : ssrc(in_ssrc), error(in_error) {} |
86 error(in_error) { | 84 uint32_t ssrc; |
87 } | |
88 uint32 ssrc; | |
89 VoiceMediaChannel::Error error; | 85 VoiceMediaChannel::Error error; |
90 }; | 86 }; |
91 | 87 |
92 struct VideoChannelErrorMessageData : public rtc::MessageData { | 88 struct VideoChannelErrorMessageData : public rtc::MessageData { |
93 VideoChannelErrorMessageData(uint32 in_ssrc, | 89 VideoChannelErrorMessageData(uint32_t in_ssrc, |
94 VideoMediaChannel::Error in_error) | 90 VideoMediaChannel::Error in_error) |
95 : ssrc(in_ssrc), | 91 : ssrc(in_ssrc), error(in_error) {} |
96 error(in_error) { | 92 uint32_t ssrc; |
97 } | |
98 uint32 ssrc; | |
99 VideoMediaChannel::Error error; | 93 VideoMediaChannel::Error error; |
100 }; | 94 }; |
101 | 95 |
102 struct DataChannelErrorMessageData : public rtc::MessageData { | 96 struct DataChannelErrorMessageData : public rtc::MessageData { |
103 DataChannelErrorMessageData(uint32 in_ssrc, | 97 DataChannelErrorMessageData(uint32_t in_ssrc, |
104 DataMediaChannel::Error in_error) | 98 DataMediaChannel::Error in_error) |
105 : ssrc(in_ssrc), | 99 : ssrc(in_ssrc), error(in_error) {} |
106 error(in_error) {} | 100 uint32_t ssrc; |
107 uint32 ssrc; | |
108 DataMediaChannel::Error error; | 101 DataMediaChannel::Error error; |
109 }; | 102 }; |
110 | 103 |
111 | 104 |
112 struct VideoChannel::ScreencastDetailsData { | 105 struct VideoChannel::ScreencastDetailsData { |
113 explicit ScreencastDetailsData(uint32 s) | 106 explicit ScreencastDetailsData(uint32_t s) |
114 : ssrc(s), fps(0), screencast_max_pixels(0) { | 107 : ssrc(s), fps(0), screencast_max_pixels(0) {} |
115 } | 108 uint32_t ssrc; |
116 uint32 ssrc; | |
117 int fps; | 109 int fps; |
118 int screencast_max_pixels; | 110 int screencast_max_pixels; |
119 }; | 111 }; |
120 | 112 |
121 static const char* PacketType(bool rtcp) { | 113 static const char* PacketType(bool rtcp) { |
122 return (!rtcp) ? "RTP" : "RTCP"; | 114 return (!rtcp) ? "RTP" : "RTCP"; |
123 } | 115 } |
124 | 116 |
125 static bool ValidPacket(bool rtcp, const rtc::Buffer* packet) { | 117 static bool ValidPacket(bool rtcp, const rtc::Buffer* packet) { |
126 // Check the packet size. We could check the header too if needed. | 118 // Check the packet size. We could check the header too if needed. |
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
358 worker_thread_->Invoke<void>(Bind( | 350 worker_thread_->Invoke<void>(Bind( |
359 enable ? &BaseChannel::EnableMedia_w : &BaseChannel::DisableMedia_w, | 351 enable ? &BaseChannel::EnableMedia_w : &BaseChannel::DisableMedia_w, |
360 this)); | 352 this)); |
361 return true; | 353 return true; |
362 } | 354 } |
363 | 355 |
364 bool BaseChannel::AddRecvStream(const StreamParams& sp) { | 356 bool BaseChannel::AddRecvStream(const StreamParams& sp) { |
365 return InvokeOnWorker(Bind(&BaseChannel::AddRecvStream_w, this, sp)); | 357 return InvokeOnWorker(Bind(&BaseChannel::AddRecvStream_w, this, sp)); |
366 } | 358 } |
367 | 359 |
368 bool BaseChannel::RemoveRecvStream(uint32 ssrc) { | 360 bool BaseChannel::RemoveRecvStream(uint32_t ssrc) { |
369 return InvokeOnWorker(Bind(&BaseChannel::RemoveRecvStream_w, this, ssrc)); | 361 return InvokeOnWorker(Bind(&BaseChannel::RemoveRecvStream_w, this, ssrc)); |
370 } | 362 } |
371 | 363 |
372 bool BaseChannel::AddSendStream(const StreamParams& sp) { | 364 bool BaseChannel::AddSendStream(const StreamParams& sp) { |
373 return InvokeOnWorker( | 365 return InvokeOnWorker( |
374 Bind(&MediaChannel::AddSendStream, media_channel(), sp)); | 366 Bind(&MediaChannel::AddSendStream, media_channel(), sp)); |
375 } | 367 } |
376 | 368 |
377 bool BaseChannel::RemoveSendStream(uint32 ssrc) { | 369 bool BaseChannel::RemoveSendStream(uint32_t ssrc) { |
378 return InvokeOnWorker( | 370 return InvokeOnWorker( |
379 Bind(&MediaChannel::RemoveSendStream, media_channel(), ssrc)); | 371 Bind(&MediaChannel::RemoveSendStream, media_channel(), ssrc)); |
380 } | 372 } |
381 | 373 |
382 bool BaseChannel::SetLocalContent(const MediaContentDescription* content, | 374 bool BaseChannel::SetLocalContent(const MediaContentDescription* content, |
383 ContentAction action, | 375 ContentAction action, |
384 std::string* error_desc) { | 376 std::string* error_desc) { |
385 return InvokeOnWorker(Bind(&BaseChannel::SetLocalContent_w, | 377 return InvokeOnWorker(Bind(&BaseChannel::SetLocalContent_w, |
386 this, content, action, error_desc)); | 378 this, content, action, error_desc)); |
387 } | 379 } |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
559 res = srtp_filter_.ProtectRtp( | 551 res = srtp_filter_.ProtectRtp( |
560 data, len, static_cast<int>(packet->capacity()), &len); | 552 data, len, static_cast<int>(packet->capacity()), &len); |
561 #else | 553 #else |
562 options.packet_time_params.rtp_sendtime_extension_id = | 554 options.packet_time_params.rtp_sendtime_extension_id = |
563 rtp_abs_sendtime_extn_id_; | 555 rtp_abs_sendtime_extn_id_; |
564 res = srtp_filter_.ProtectRtp( | 556 res = srtp_filter_.ProtectRtp( |
565 data, len, static_cast<int>(packet->capacity()), &len, | 557 data, len, static_cast<int>(packet->capacity()), &len, |
566 &options.packet_time_params.srtp_packet_index); | 558 &options.packet_time_params.srtp_packet_index); |
567 // If protection succeeds, let's get auth params from srtp. | 559 // If protection succeeds, let's get auth params from srtp. |
568 if (res) { | 560 if (res) { |
569 uint8* auth_key = NULL; | 561 uint8_t* auth_key = NULL; |
570 int key_len; | 562 int key_len; |
571 res = srtp_filter_.GetRtpAuthParams( | 563 res = srtp_filter_.GetRtpAuthParams( |
572 &auth_key, &key_len, &options.packet_time_params.srtp_auth_tag_len); | 564 &auth_key, &key_len, &options.packet_time_params.srtp_auth_tag_len); |
573 if (res) { | 565 if (res) { |
574 options.packet_time_params.srtp_auth_key.resize(key_len); | 566 options.packet_time_params.srtp_auth_key.resize(key_len); |
575 options.packet_time_params.srtp_auth_key.assign(auth_key, | 567 options.packet_time_params.srtp_auth_key.assign(auth_key, |
576 auth_key + key_len); | 568 auth_key + key_len); |
577 } | 569 } |
578 } | 570 } |
579 #endif | 571 #endif |
580 if (!res) { | 572 if (!res) { |
581 int seq_num = -1; | 573 int seq_num = -1; |
582 uint32 ssrc = 0; | 574 uint32_t ssrc = 0; |
583 GetRtpSeqNum(data, len, &seq_num); | 575 GetRtpSeqNum(data, len, &seq_num); |
584 GetRtpSsrc(data, len, &ssrc); | 576 GetRtpSsrc(data, len, &ssrc); |
585 LOG(LS_ERROR) << "Failed to protect " << content_name_ | 577 LOG(LS_ERROR) << "Failed to protect " << content_name_ |
586 << " RTP packet: size=" << len | 578 << " RTP packet: size=" << len |
587 << ", seqnum=" << seq_num << ", SSRC=" << ssrc; | 579 << ", seqnum=" << seq_num << ", SSRC=" << ssrc; |
588 return false; | 580 return false; |
589 } | 581 } |
590 } else { | 582 } else { |
591 res = srtp_filter_.ProtectRtcp(data, len, | 583 res = srtp_filter_.ProtectRtcp(data, len, |
592 static_cast<int>(packet->capacity()), | 584 static_cast<int>(packet->capacity()), |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
653 | 645 |
654 // Unprotect the packet, if needed. | 646 // Unprotect the packet, if needed. |
655 if (srtp_filter_.IsActive()) { | 647 if (srtp_filter_.IsActive()) { |
656 char* data = packet->data<char>(); | 648 char* data = packet->data<char>(); |
657 int len = static_cast<int>(packet->size()); | 649 int len = static_cast<int>(packet->size()); |
658 bool res; | 650 bool res; |
659 if (!rtcp) { | 651 if (!rtcp) { |
660 res = srtp_filter_.UnprotectRtp(data, len, &len); | 652 res = srtp_filter_.UnprotectRtp(data, len, &len); |
661 if (!res) { | 653 if (!res) { |
662 int seq_num = -1; | 654 int seq_num = -1; |
663 uint32 ssrc = 0; | 655 uint32_t ssrc = 0; |
664 GetRtpSeqNum(data, len, &seq_num); | 656 GetRtpSeqNum(data, len, &seq_num); |
665 GetRtpSsrc(data, len, &ssrc); | 657 GetRtpSsrc(data, len, &ssrc); |
666 LOG(LS_ERROR) << "Failed to unprotect " << content_name_ | 658 LOG(LS_ERROR) << "Failed to unprotect " << content_name_ |
667 << " RTP packet: size=" << len | 659 << " RTP packet: size=" << len |
668 << ", seqnum=" << seq_num << ", SSRC=" << ssrc; | 660 << ", seqnum=" << seq_num << ", SSRC=" << ssrc; |
669 return; | 661 return; |
670 } | 662 } |
671 } else { | 663 } else { |
672 res = srtp_filter_.UnprotectRtcp(data, len, &len); | 664 res = srtp_filter_.UnprotectRtcp(data, len, &len); |
673 if (!res) { | 665 if (!res) { |
(...skipping 405 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1079 } | 1071 } |
1080 | 1072 |
1081 bool BaseChannel::AddRecvStream_w(const StreamParams& sp) { | 1073 bool BaseChannel::AddRecvStream_w(const StreamParams& sp) { |
1082 ASSERT(worker_thread() == rtc::Thread::Current()); | 1074 ASSERT(worker_thread() == rtc::Thread::Current()); |
1083 if (!media_channel()->AddRecvStream(sp)) | 1075 if (!media_channel()->AddRecvStream(sp)) |
1084 return false; | 1076 return false; |
1085 | 1077 |
1086 return bundle_filter_.AddStream(sp); | 1078 return bundle_filter_.AddStream(sp); |
1087 } | 1079 } |
1088 | 1080 |
1089 bool BaseChannel::RemoveRecvStream_w(uint32 ssrc) { | 1081 bool BaseChannel::RemoveRecvStream_w(uint32_t ssrc) { |
1090 ASSERT(worker_thread() == rtc::Thread::Current()); | 1082 ASSERT(worker_thread() == rtc::Thread::Current()); |
1091 bundle_filter_.RemoveStream(ssrc); | 1083 bundle_filter_.RemoveStream(ssrc); |
1092 return media_channel()->RemoveRecvStream(ssrc); | 1084 return media_channel()->RemoveRecvStream(ssrc); |
1093 } | 1085 } |
1094 | 1086 |
1095 bool BaseChannel::UpdateLocalStreams_w(const std::vector<StreamParams>& streams, | 1087 bool BaseChannel::UpdateLocalStreams_w(const std::vector<StreamParams>& streams, |
1096 ContentAction action, | 1088 ContentAction action, |
1097 std::string* error_desc) { | 1089 std::string* error_desc) { |
1098 if (!VERIFY(action == CA_OFFER || action == CA_ANSWER || | 1090 if (!VERIFY(action == CA_OFFER || action == CA_ANSWER || |
1099 action == CA_PRANSWER || action == CA_UPDATE)) | 1091 action == CA_PRANSWER || action == CA_UPDATE)) |
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1297 Deinit(); | 1289 Deinit(); |
1298 } | 1290 } |
1299 | 1291 |
1300 bool VoiceChannel::Init() { | 1292 bool VoiceChannel::Init() { |
1301 if (!BaseChannel::Init()) { | 1293 if (!BaseChannel::Init()) { |
1302 return false; | 1294 return false; |
1303 } | 1295 } |
1304 return true; | 1296 return true; |
1305 } | 1297 } |
1306 | 1298 |
1307 bool VoiceChannel::SetRemoteRenderer(uint32 ssrc, AudioRenderer* renderer) { | 1299 bool VoiceChannel::SetRemoteRenderer(uint32_t ssrc, AudioRenderer* renderer) { |
1308 return InvokeOnWorker(Bind(&VoiceMediaChannel::SetRemoteRenderer, | 1300 return InvokeOnWorker(Bind(&VoiceMediaChannel::SetRemoteRenderer, |
1309 media_channel(), ssrc, renderer)); | 1301 media_channel(), ssrc, renderer)); |
1310 } | 1302 } |
1311 | 1303 |
1312 bool VoiceChannel::SetAudioSend(uint32 ssrc, | 1304 bool VoiceChannel::SetAudioSend(uint32_t ssrc, |
1313 bool enable, | 1305 bool enable, |
1314 const AudioOptions* options, | 1306 const AudioOptions* options, |
1315 AudioRenderer* renderer) { | 1307 AudioRenderer* renderer) { |
1316 return InvokeOnWorker(Bind(&VoiceMediaChannel::SetAudioSend, media_channel(), | 1308 return InvokeOnWorker(Bind(&VoiceMediaChannel::SetAudioSend, media_channel(), |
1317 ssrc, enable, options, renderer)); | 1309 ssrc, enable, options, renderer)); |
1318 } | 1310 } |
1319 | 1311 |
1320 // TODO(juberti): Handle early media the right way. We should get an explicit | 1312 // TODO(juberti): Handle early media the right way. We should get an explicit |
1321 // ringing message telling us to start playing local ringback, which we cancel | 1313 // ringing message telling us to start playing local ringback, which we cancel |
1322 // if any early media actually arrives. For now, we do the opposite, which is | 1314 // if any early media actually arrives. For now, we do the opposite, which is |
(...skipping 17 matching lines...) Expand all Loading... |
1340 } | 1332 } |
1341 int duration_ms = 160; | 1333 int duration_ms = 160; |
1342 return InsertDtmf(0, digit, duration_ms, flags); | 1334 return InsertDtmf(0, digit, duration_ms, flags); |
1343 } | 1335 } |
1344 | 1336 |
1345 bool VoiceChannel::CanInsertDtmf() { | 1337 bool VoiceChannel::CanInsertDtmf() { |
1346 return InvokeOnWorker(Bind(&VoiceMediaChannel::CanInsertDtmf, | 1338 return InvokeOnWorker(Bind(&VoiceMediaChannel::CanInsertDtmf, |
1347 media_channel())); | 1339 media_channel())); |
1348 } | 1340 } |
1349 | 1341 |
1350 bool VoiceChannel::InsertDtmf(uint32 ssrc, int event_code, int duration, | 1342 bool VoiceChannel::InsertDtmf(uint32_t ssrc, |
| 1343 int event_code, |
| 1344 int duration, |
1351 int flags) { | 1345 int flags) { |
1352 return InvokeOnWorker(Bind(&VoiceChannel::InsertDtmf_w, this, | 1346 return InvokeOnWorker(Bind(&VoiceChannel::InsertDtmf_w, this, |
1353 ssrc, event_code, duration, flags)); | 1347 ssrc, event_code, duration, flags)); |
1354 } | 1348 } |
1355 | 1349 |
1356 bool VoiceChannel::SetOutputScaling(uint32 ssrc, double left, double right) { | 1350 bool VoiceChannel::SetOutputScaling(uint32_t ssrc, double left, double right) { |
1357 return InvokeOnWorker(Bind(&VoiceMediaChannel::SetOutputScaling, | 1351 return InvokeOnWorker(Bind(&VoiceMediaChannel::SetOutputScaling, |
1358 media_channel(), ssrc, left, right)); | 1352 media_channel(), ssrc, left, right)); |
1359 } | 1353 } |
1360 | 1354 |
1361 bool VoiceChannel::GetStats(VoiceMediaInfo* stats) { | 1355 bool VoiceChannel::GetStats(VoiceMediaInfo* stats) { |
1362 return InvokeOnWorker(Bind(&VoiceMediaChannel::GetStats, | 1356 return InvokeOnWorker(Bind(&VoiceMediaChannel::GetStats, |
1363 media_channel(), stats)); | 1357 media_channel(), stats)); |
1364 } | 1358 } |
1365 | 1359 |
1366 void VoiceChannel::StartMediaMonitor(int cms) { | 1360 void VoiceChannel::StartMediaMonitor(int cms) { |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1540 } | 1534 } |
1541 | 1535 |
1542 void VoiceChannel::HandleEarlyMediaTimeout() { | 1536 void VoiceChannel::HandleEarlyMediaTimeout() { |
1543 // This occurs on the main thread, not the worker thread. | 1537 // This occurs on the main thread, not the worker thread. |
1544 if (!received_media_) { | 1538 if (!received_media_) { |
1545 LOG(LS_INFO) << "No early media received before timeout"; | 1539 LOG(LS_INFO) << "No early media received before timeout"; |
1546 SignalEarlyMediaTimeout(this); | 1540 SignalEarlyMediaTimeout(this); |
1547 } | 1541 } |
1548 } | 1542 } |
1549 | 1543 |
1550 bool VoiceChannel::InsertDtmf_w(uint32 ssrc, int event, int duration, | 1544 bool VoiceChannel::InsertDtmf_w(uint32_t ssrc, |
| 1545 int event, |
| 1546 int duration, |
1551 int flags) { | 1547 int flags) { |
1552 if (!enabled()) { | 1548 if (!enabled()) { |
1553 return false; | 1549 return false; |
1554 } | 1550 } |
1555 | 1551 |
1556 return media_channel()->InsertDtmf(ssrc, event, duration, flags); | 1552 return media_channel()->InsertDtmf(ssrc, event, duration, flags); |
1557 } | 1553 } |
1558 | 1554 |
1559 void VoiceChannel::OnMessage(rtc::Message *pmsg) { | 1555 void VoiceChannel::OnMessage(rtc::Message *pmsg) { |
1560 switch (pmsg->message_id) { | 1556 switch (pmsg->message_id) { |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1608 previous_we_(rtc::WE_CLOSE) {} | 1604 previous_we_(rtc::WE_CLOSE) {} |
1609 | 1605 |
1610 bool VideoChannel::Init() { | 1606 bool VideoChannel::Init() { |
1611 if (!BaseChannel::Init()) { | 1607 if (!BaseChannel::Init()) { |
1612 return false; | 1608 return false; |
1613 } | 1609 } |
1614 return true; | 1610 return true; |
1615 } | 1611 } |
1616 | 1612 |
1617 VideoChannel::~VideoChannel() { | 1613 VideoChannel::~VideoChannel() { |
1618 std::vector<uint32> screencast_ssrcs; | 1614 std::vector<uint32_t> screencast_ssrcs; |
1619 ScreencastMap::iterator iter; | 1615 ScreencastMap::iterator iter; |
1620 while (!screencast_capturers_.empty()) { | 1616 while (!screencast_capturers_.empty()) { |
1621 if (!RemoveScreencast(screencast_capturers_.begin()->first)) { | 1617 if (!RemoveScreencast(screencast_capturers_.begin()->first)) { |
1622 LOG(LS_ERROR) << "Unable to delete screencast with ssrc " | 1618 LOG(LS_ERROR) << "Unable to delete screencast with ssrc " |
1623 << screencast_capturers_.begin()->first; | 1619 << screencast_capturers_.begin()->first; |
1624 ASSERT(false); | 1620 ASSERT(false); |
1625 break; | 1621 break; |
1626 } | 1622 } |
1627 } | 1623 } |
1628 | 1624 |
1629 StopMediaMonitor(); | 1625 StopMediaMonitor(); |
1630 // this can't be done in the base class, since it calls a virtual | 1626 // this can't be done in the base class, since it calls a virtual |
1631 DisableMedia_w(); | 1627 DisableMedia_w(); |
1632 | 1628 |
1633 Deinit(); | 1629 Deinit(); |
1634 } | 1630 } |
1635 | 1631 |
1636 bool VideoChannel::SetRenderer(uint32 ssrc, VideoRenderer* renderer) { | 1632 bool VideoChannel::SetRenderer(uint32_t ssrc, VideoRenderer* renderer) { |
1637 worker_thread()->Invoke<void>(Bind( | 1633 worker_thread()->Invoke<void>(Bind( |
1638 &VideoMediaChannel::SetRenderer, media_channel(), ssrc, renderer)); | 1634 &VideoMediaChannel::SetRenderer, media_channel(), ssrc, renderer)); |
1639 return true; | 1635 return true; |
1640 } | 1636 } |
1641 | 1637 |
1642 bool VideoChannel::ApplyViewRequest(const ViewRequest& request) { | 1638 bool VideoChannel::ApplyViewRequest(const ViewRequest& request) { |
1643 return InvokeOnWorker(Bind(&VideoChannel::ApplyViewRequest_w, this, request)); | 1639 return InvokeOnWorker(Bind(&VideoChannel::ApplyViewRequest_w, this, request)); |
1644 } | 1640 } |
1645 | 1641 |
1646 bool VideoChannel::AddScreencast(uint32 ssrc, VideoCapturer* capturer) { | 1642 bool VideoChannel::AddScreencast(uint32_t ssrc, VideoCapturer* capturer) { |
1647 return worker_thread()->Invoke<bool>(Bind( | 1643 return worker_thread()->Invoke<bool>(Bind( |
1648 &VideoChannel::AddScreencast_w, this, ssrc, capturer)); | 1644 &VideoChannel::AddScreencast_w, this, ssrc, capturer)); |
1649 } | 1645 } |
1650 | 1646 |
1651 bool VideoChannel::SetCapturer(uint32 ssrc, VideoCapturer* capturer) { | 1647 bool VideoChannel::SetCapturer(uint32_t ssrc, VideoCapturer* capturer) { |
1652 return InvokeOnWorker(Bind(&VideoMediaChannel::SetCapturer, | 1648 return InvokeOnWorker(Bind(&VideoMediaChannel::SetCapturer, |
1653 media_channel(), ssrc, capturer)); | 1649 media_channel(), ssrc, capturer)); |
1654 } | 1650 } |
1655 | 1651 |
1656 bool VideoChannel::RemoveScreencast(uint32 ssrc) { | 1652 bool VideoChannel::RemoveScreencast(uint32_t ssrc) { |
1657 return InvokeOnWorker(Bind(&VideoChannel::RemoveScreencast_w, this, ssrc)); | 1653 return InvokeOnWorker(Bind(&VideoChannel::RemoveScreencast_w, this, ssrc)); |
1658 } | 1654 } |
1659 | 1655 |
1660 bool VideoChannel::IsScreencasting() { | 1656 bool VideoChannel::IsScreencasting() { |
1661 return InvokeOnWorker(Bind(&VideoChannel::IsScreencasting_w, this)); | 1657 return InvokeOnWorker(Bind(&VideoChannel::IsScreencasting_w, this)); |
1662 } | 1658 } |
1663 | 1659 |
1664 int VideoChannel::GetScreencastFps(uint32 ssrc) { | 1660 int VideoChannel::GetScreencastFps(uint32_t ssrc) { |
1665 ScreencastDetailsData data(ssrc); | 1661 ScreencastDetailsData data(ssrc); |
1666 worker_thread()->Invoke<void>(Bind( | 1662 worker_thread()->Invoke<void>(Bind( |
1667 &VideoChannel::GetScreencastDetails_w, this, &data)); | 1663 &VideoChannel::GetScreencastDetails_w, this, &data)); |
1668 return data.fps; | 1664 return data.fps; |
1669 } | 1665 } |
1670 | 1666 |
1671 int VideoChannel::GetScreencastMaxPixels(uint32 ssrc) { | 1667 int VideoChannel::GetScreencastMaxPixels(uint32_t ssrc) { |
1672 ScreencastDetailsData data(ssrc); | 1668 ScreencastDetailsData data(ssrc); |
1673 worker_thread()->Invoke<void>(Bind( | 1669 worker_thread()->Invoke<void>(Bind( |
1674 &VideoChannel::GetScreencastDetails_w, this, &data)); | 1670 &VideoChannel::GetScreencastDetails_w, this, &data)); |
1675 return data.screencast_max_pixels; | 1671 return data.screencast_max_pixels; |
1676 } | 1672 } |
1677 | 1673 |
1678 bool VideoChannel::SendIntraFrame() { | 1674 bool VideoChannel::SendIntraFrame() { |
1679 worker_thread()->Invoke<void>(Bind( | 1675 worker_thread()->Invoke<void>(Bind( |
1680 &VideoMediaChannel::SendIntraFrame, media_channel())); | 1676 &VideoMediaChannel::SendIntraFrame, media_channel())); |
1681 return true; | 1677 return true; |
1682 } | 1678 } |
1683 | 1679 |
1684 bool VideoChannel::RequestIntraFrame() { | 1680 bool VideoChannel::RequestIntraFrame() { |
1685 worker_thread()->Invoke<void>(Bind( | 1681 worker_thread()->Invoke<void>(Bind( |
1686 &VideoMediaChannel::RequestIntraFrame, media_channel())); | 1682 &VideoMediaChannel::RequestIntraFrame, media_channel())); |
1687 return true; | 1683 return true; |
1688 } | 1684 } |
1689 | 1685 |
1690 bool VideoChannel::SetVideoSend(uint32 ssrc, | 1686 bool VideoChannel::SetVideoSend(uint32_t ssrc, |
1691 bool mute, | 1687 bool mute, |
1692 const VideoOptions* options) { | 1688 const VideoOptions* options) { |
1693 return InvokeOnWorker(Bind(&VideoMediaChannel::SetVideoSend, media_channel(), | 1689 return InvokeOnWorker(Bind(&VideoMediaChannel::SetVideoSend, media_channel(), |
1694 ssrc, mute, options)); | 1690 ssrc, mute, options)); |
1695 } | 1691 } |
1696 | 1692 |
1697 void VideoChannel::ChangeState() { | 1693 void VideoChannel::ChangeState() { |
1698 // Send outgoing data if we're the active call, we have the remote content, | 1694 // Send outgoing data if we're the active call, we have the remote content, |
1699 // and we have had some form of connectivity. | 1695 // and we have had some form of connectivity. |
1700 bool send = IsReadyToSend(); | 1696 bool send = IsReadyToSend(); |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1854 << it->selector.ssrc << ", '" | 1850 << it->selector.ssrc << ", '" |
1855 << it->selector.groupid << "', '" | 1851 << it->selector.groupid << "', '" |
1856 << it->selector.streamid << "'" | 1852 << it->selector.streamid << "'" |
1857 << ") is not in the local streams."; | 1853 << ") is not in the local streams."; |
1858 } | 1854 } |
1859 } | 1855 } |
1860 | 1856 |
1861 return ret; | 1857 return ret; |
1862 } | 1858 } |
1863 | 1859 |
1864 bool VideoChannel::AddScreencast_w(uint32 ssrc, VideoCapturer* capturer) { | 1860 bool VideoChannel::AddScreencast_w(uint32_t ssrc, VideoCapturer* capturer) { |
1865 if (screencast_capturers_.find(ssrc) != screencast_capturers_.end()) { | 1861 if (screencast_capturers_.find(ssrc) != screencast_capturers_.end()) { |
1866 return false; | 1862 return false; |
1867 } | 1863 } |
1868 capturer->SignalStateChange.connect(this, &VideoChannel::OnStateChange); | 1864 capturer->SignalStateChange.connect(this, &VideoChannel::OnStateChange); |
1869 screencast_capturers_[ssrc] = capturer; | 1865 screencast_capturers_[ssrc] = capturer; |
1870 return true; | 1866 return true; |
1871 } | 1867 } |
1872 | 1868 |
1873 bool VideoChannel::RemoveScreencast_w(uint32 ssrc) { | 1869 bool VideoChannel::RemoveScreencast_w(uint32_t ssrc) { |
1874 ScreencastMap::iterator iter = screencast_capturers_.find(ssrc); | 1870 ScreencastMap::iterator iter = screencast_capturers_.find(ssrc); |
1875 if (iter == screencast_capturers_.end()) { | 1871 if (iter == screencast_capturers_.end()) { |
1876 return false; | 1872 return false; |
1877 } | 1873 } |
1878 // Clean up VideoCapturer. | 1874 // Clean up VideoCapturer. |
1879 delete iter->second; | 1875 delete iter->second; |
1880 screencast_capturers_.erase(iter); | 1876 screencast_capturers_.erase(iter); |
1881 return true; | 1877 return true; |
1882 } | 1878 } |
1883 | 1879 |
1884 bool VideoChannel::IsScreencasting_w() const { | 1880 bool VideoChannel::IsScreencasting_w() const { |
1885 return !screencast_capturers_.empty(); | 1881 return !screencast_capturers_.empty(); |
1886 } | 1882 } |
1887 | 1883 |
1888 void VideoChannel::GetScreencastDetails_w( | 1884 void VideoChannel::GetScreencastDetails_w( |
1889 ScreencastDetailsData* data) const { | 1885 ScreencastDetailsData* data) const { |
1890 ScreencastMap::const_iterator iter = screencast_capturers_.find(data->ssrc); | 1886 ScreencastMap::const_iterator iter = screencast_capturers_.find(data->ssrc); |
1891 if (iter == screencast_capturers_.end()) { | 1887 if (iter == screencast_capturers_.end()) { |
1892 return; | 1888 return; |
1893 } | 1889 } |
1894 VideoCapturer* capturer = iter->second; | 1890 VideoCapturer* capturer = iter->second; |
1895 const VideoFormat* video_format = capturer->GetCaptureFormat(); | 1891 const VideoFormat* video_format = capturer->GetCaptureFormat(); |
1896 data->fps = VideoFormat::IntervalToFps(video_format->interval); | 1892 data->fps = VideoFormat::IntervalToFps(video_format->interval); |
1897 data->screencast_max_pixels = capturer->screencast_max_pixels(); | 1893 data->screencast_max_pixels = capturer->screencast_max_pixels(); |
1898 } | 1894 } |
1899 | 1895 |
1900 void VideoChannel::OnScreencastWindowEvent_s(uint32 ssrc, | 1896 void VideoChannel::OnScreencastWindowEvent_s(uint32_t ssrc, |
1901 rtc::WindowEvent we) { | 1897 rtc::WindowEvent we) { |
1902 ASSERT(signaling_thread() == rtc::Thread::Current()); | 1898 ASSERT(signaling_thread() == rtc::Thread::Current()); |
1903 SignalScreencastWindowEvent(ssrc, we); | 1899 SignalScreencastWindowEvent(ssrc, we); |
1904 } | 1900 } |
1905 | 1901 |
1906 void VideoChannel::OnMessage(rtc::Message *pmsg) { | 1902 void VideoChannel::OnMessage(rtc::Message *pmsg) { |
1907 switch (pmsg->message_id) { | 1903 switch (pmsg->message_id) { |
1908 case MSG_SCREENCASTWINDOWEVENT: { | 1904 case MSG_SCREENCASTWINDOWEVENT: { |
1909 const ScreencastEventMessageData* data = | 1905 const ScreencastEventMessageData* data = |
1910 static_cast<ScreencastEventMessageData*>(pmsg->pdata); | 1906 static_cast<ScreencastEventMessageData*>(pmsg->pdata); |
(...skipping 19 matching lines...) Expand all Loading... |
1930 } | 1926 } |
1931 | 1927 |
1932 // TODO(pthatcher): Look into removing duplicate code between | 1928 // TODO(pthatcher): Look into removing duplicate code between |
1933 // audio, video, and data, perhaps by using templates. | 1929 // audio, video, and data, perhaps by using templates. |
1934 void VideoChannel::OnMediaMonitorUpdate( | 1930 void VideoChannel::OnMediaMonitorUpdate( |
1935 VideoMediaChannel* media_channel, const VideoMediaInfo &info) { | 1931 VideoMediaChannel* media_channel, const VideoMediaInfo &info) { |
1936 ASSERT(media_channel == this->media_channel()); | 1932 ASSERT(media_channel == this->media_channel()); |
1937 SignalMediaMonitor(this, info); | 1933 SignalMediaMonitor(this, info); |
1938 } | 1934 } |
1939 | 1935 |
1940 void VideoChannel::OnScreencastWindowEvent(uint32 ssrc, | 1936 void VideoChannel::OnScreencastWindowEvent(uint32_t ssrc, |
1941 rtc::WindowEvent event) { | 1937 rtc::WindowEvent event) { |
1942 ScreencastEventMessageData* pdata = | 1938 ScreencastEventMessageData* pdata = |
1943 new ScreencastEventMessageData(ssrc, event); | 1939 new ScreencastEventMessageData(ssrc, event); |
1944 signaling_thread()->Post(this, MSG_SCREENCASTWINDOWEVENT, pdata); | 1940 signaling_thread()->Post(this, MSG_SCREENCASTWINDOWEVENT, pdata); |
1945 } | 1941 } |
1946 | 1942 |
1947 void VideoChannel::OnStateChange(VideoCapturer* capturer, CaptureState ev) { | 1943 void VideoChannel::OnStateChange(VideoCapturer* capturer, CaptureState ev) { |
1948 // Map capturer events to window events. In the future we may want to simply | 1944 // Map capturer events to window events. In the future we may want to simply |
1949 // pass these events up directly. | 1945 // pass these events up directly. |
1950 rtc::WindowEvent we; | 1946 rtc::WindowEvent we; |
1951 if (ev == CS_STOPPED) { | 1947 if (ev == CS_STOPPED) { |
1952 we = rtc::WE_CLOSE; | 1948 we = rtc::WE_CLOSE; |
1953 } else if (ev == CS_PAUSED) { | 1949 } else if (ev == CS_PAUSED) { |
1954 we = rtc::WE_MINIMIZE; | 1950 we = rtc::WE_MINIMIZE; |
1955 } else if (ev == CS_RUNNING && previous_we_ == rtc::WE_MINIMIZE) { | 1951 } else if (ev == CS_RUNNING && previous_we_ == rtc::WE_MINIMIZE) { |
1956 we = rtc::WE_RESTORE; | 1952 we = rtc::WE_RESTORE; |
1957 } else { | 1953 } else { |
1958 return; | 1954 return; |
1959 } | 1955 } |
1960 previous_we_ = we; | 1956 previous_we_ = we; |
1961 | 1957 |
1962 uint32 ssrc = 0; | 1958 uint32_t ssrc = 0; |
1963 if (!GetLocalSsrc(capturer, &ssrc)) { | 1959 if (!GetLocalSsrc(capturer, &ssrc)) { |
1964 return; | 1960 return; |
1965 } | 1961 } |
1966 | 1962 |
1967 OnScreencastWindowEvent(ssrc, we); | 1963 OnScreencastWindowEvent(ssrc, we); |
1968 } | 1964 } |
1969 | 1965 |
1970 bool VideoChannel::GetLocalSsrc(const VideoCapturer* capturer, uint32* ssrc) { | 1966 bool VideoChannel::GetLocalSsrc(const VideoCapturer* capturer, uint32_t* ssrc) { |
1971 *ssrc = 0; | 1967 *ssrc = 0; |
1972 for (ScreencastMap::iterator iter = screencast_capturers_.begin(); | 1968 for (ScreencastMap::iterator iter = screencast_capturers_.begin(); |
1973 iter != screencast_capturers_.end(); ++iter) { | 1969 iter != screencast_capturers_.end(); ++iter) { |
1974 if (iter->second == capturer) { | 1970 if (iter->second == capturer) { |
1975 *ssrc = iter->first; | 1971 *ssrc = iter->first; |
1976 return true; | 1972 return true; |
1977 } | 1973 } |
1978 } | 1974 } |
1979 return false; | 1975 return false; |
1980 } | 1976 } |
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2219 delete data; | 2215 delete data; |
2220 break; | 2216 break; |
2221 } | 2217 } |
2222 case MSG_CHANNEL_ERROR: { | 2218 case MSG_CHANNEL_ERROR: { |
2223 const DataChannelErrorMessageData* data = | 2219 const DataChannelErrorMessageData* data = |
2224 static_cast<DataChannelErrorMessageData*>(pmsg->pdata); | 2220 static_cast<DataChannelErrorMessageData*>(pmsg->pdata); |
2225 delete data; | 2221 delete data; |
2226 break; | 2222 break; |
2227 } | 2223 } |
2228 case MSG_STREAMCLOSEDREMOTELY: { | 2224 case MSG_STREAMCLOSEDREMOTELY: { |
2229 rtc::TypedMessageData<uint32>* data = | 2225 rtc::TypedMessageData<uint32_t>* data = |
2230 static_cast<rtc::TypedMessageData<uint32>*>(pmsg->pdata); | 2226 static_cast<rtc::TypedMessageData<uint32_t>*>(pmsg->pdata); |
2231 SignalStreamClosedRemotely(data->data()); | 2227 SignalStreamClosedRemotely(data->data()); |
2232 delete data; | 2228 delete data; |
2233 break; | 2229 break; |
2234 } | 2230 } |
2235 default: | 2231 default: |
2236 BaseChannel::OnMessage(pmsg); | 2232 BaseChannel::OnMessage(pmsg); |
2237 break; | 2233 break; |
2238 } | 2234 } |
2239 } | 2235 } |
2240 | 2236 |
(...skipping 24 matching lines...) Expand all Loading... |
2265 SignalMediaMonitor(this, info); | 2261 SignalMediaMonitor(this, info); |
2266 } | 2262 } |
2267 | 2263 |
2268 void DataChannel::OnDataReceived( | 2264 void DataChannel::OnDataReceived( |
2269 const ReceiveDataParams& params, const char* data, size_t len) { | 2265 const ReceiveDataParams& params, const char* data, size_t len) { |
2270 DataReceivedMessageData* msg = new DataReceivedMessageData( | 2266 DataReceivedMessageData* msg = new DataReceivedMessageData( |
2271 params, data, len); | 2267 params, data, len); |
2272 signaling_thread()->Post(this, MSG_DATARECEIVED, msg); | 2268 signaling_thread()->Post(this, MSG_DATARECEIVED, msg); |
2273 } | 2269 } |
2274 | 2270 |
2275 void DataChannel::OnDataChannelError( | 2271 void DataChannel::OnDataChannelError(uint32_t ssrc, |
2276 uint32 ssrc, DataMediaChannel::Error err) { | 2272 DataMediaChannel::Error err) { |
2277 DataChannelErrorMessageData* data = new DataChannelErrorMessageData( | 2273 DataChannelErrorMessageData* data = new DataChannelErrorMessageData( |
2278 ssrc, err); | 2274 ssrc, err); |
2279 signaling_thread()->Post(this, MSG_CHANNEL_ERROR, data); | 2275 signaling_thread()->Post(this, MSG_CHANNEL_ERROR, data); |
2280 } | 2276 } |
2281 | 2277 |
2282 void DataChannel::OnDataChannelReadyToSend(bool writable) { | 2278 void DataChannel::OnDataChannelReadyToSend(bool writable) { |
2283 // This is usded for congestion control to indicate that the stream is ready | 2279 // This is usded for congestion control to indicate that the stream is ready |
2284 // to send by the MediaChannel, as opposed to OnReadyToSend, which indicates | 2280 // to send by the MediaChannel, as opposed to OnReadyToSend, which indicates |
2285 // that the transport channel is ready. | 2281 // that the transport channel is ready. |
2286 signaling_thread()->Post(this, MSG_READYTOSENDDATA, | 2282 signaling_thread()->Post(this, MSG_READYTOSENDDATA, |
2287 new DataChannelReadyToSendMessageData(writable)); | 2283 new DataChannelReadyToSendMessageData(writable)); |
2288 } | 2284 } |
2289 | 2285 |
2290 void DataChannel::GetSrtpCryptoSuiteNames( | 2286 void DataChannel::GetSrtpCryptoSuiteNames( |
2291 std::vector<std::string>* ciphers) const { | 2287 std::vector<std::string>* ciphers) const { |
2292 GetSupportedDataCryptoSuites(ciphers); | 2288 GetSupportedDataCryptoSuites(ciphers); |
2293 } | 2289 } |
2294 | 2290 |
2295 bool DataChannel::ShouldSetupDtlsSrtp() const { | 2291 bool DataChannel::ShouldSetupDtlsSrtp() const { |
2296 return (data_channel_type_ == DCT_RTP); | 2292 return (data_channel_type_ == DCT_RTP); |
2297 } | 2293 } |
2298 | 2294 |
2299 void DataChannel::OnStreamClosedRemotely(uint32 sid) { | 2295 void DataChannel::OnStreamClosedRemotely(uint32_t sid) { |
2300 rtc::TypedMessageData<uint32>* message = | 2296 rtc::TypedMessageData<uint32_t>* message = |
2301 new rtc::TypedMessageData<uint32>(sid); | 2297 new rtc::TypedMessageData<uint32_t>(sid); |
2302 signaling_thread()->Post(this, MSG_STREAMCLOSEDREMOTELY, message); | 2298 signaling_thread()->Post(this, MSG_STREAMCLOSEDREMOTELY, message); |
2303 } | 2299 } |
2304 | 2300 |
2305 } // namespace cricket | 2301 } // namespace cricket |
OLD | NEW |