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

Side by Side Diff: webrtc/media/engine/webrtcvideoengine2.cc

Issue 1766653002: Replace SetCapturer and SetCaptureDevice by SetSource. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebased, no longer any proxy object changes. Created 4 years, 8 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
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #include "webrtc/media/engine/webrtcvideoengine2.h" 11 #include "webrtc/media/engine/webrtcvideoengine2.h"
12 12
13 #include <stdio.h> 13 #include <stdio.h>
14 #include <algorithm> 14 #include <algorithm>
15 #include <set> 15 #include <set>
16 #include <string> 16 #include <string>
17 17
18 #include "webrtc/base/copyonwritebuffer.h" 18 #include "webrtc/base/copyonwritebuffer.h"
19 #include "webrtc/base/logging.h" 19 #include "webrtc/base/logging.h"
20 #include "webrtc/base/stringutils.h" 20 #include "webrtc/base/stringutils.h"
21 #include "webrtc/base/timeutils.h" 21 #include "webrtc/base/timeutils.h"
22 #include "webrtc/base/trace_event.h" 22 #include "webrtc/base/trace_event.h"
23 #include "webrtc/call.h" 23 #include "webrtc/call.h"
24 #include "webrtc/media/base/videocapturer.h"
25 #include "webrtc/media/engine/constants.h" 24 #include "webrtc/media/engine/constants.h"
26 #include "webrtc/media/engine/simulcast.h" 25 #include "webrtc/media/engine/simulcast.h"
27 #include "webrtc/media/engine/webrtcmediaengine.h" 26 #include "webrtc/media/engine/webrtcmediaengine.h"
28 #include "webrtc/media/engine/webrtcvideoencoderfactory.h" 27 #include "webrtc/media/engine/webrtcvideoencoderfactory.h"
29 #include "webrtc/media/engine/webrtcvideoframe.h" 28 #include "webrtc/media/engine/webrtcvideoframe.h"
30 #include "webrtc/media/engine/webrtcvoiceengine.h" 29 #include "webrtc/media/engine/webrtcvoiceengine.h"
31 #include "webrtc/modules/video_coding/codecs/h264/include/h264.h" 30 #include "webrtc/modules/video_coding/codecs/h264/include/h264.h"
32 #include "webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter.h" 31 #include "webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter.h"
33 #include "webrtc/system_wrappers/include/field_trial.h" 32 #include "webrtc/system_wrappers/include/field_trial.h"
34 #include "webrtc/video_decoder.h" 33 #include "webrtc/video_decoder.h"
(...skipping 959 matching lines...) Expand 10 before | Expand all | Expand 10 after
994 { 993 {
995 rtc::CritScope stream_lock(&stream_crit_); 994 rtc::CritScope stream_lock(&stream_crit_);
996 for (const auto& kv : send_streams_) { 995 for (const auto& kv : send_streams_) {
997 kv.second->SetSend(send); 996 kv.second->SetSend(send);
998 } 997 }
999 } 998 }
1000 sending_ = send; 999 sending_ = send;
1001 return true; 1000 return true;
1002 } 1001 }
1003 1002
1003 // TODO(nisse): The enable argument was used for mute logic which has
1004 // been moved to VideoBroadcaster. So delete this method, and use
1005 // SetOptions instead.
1004 bool WebRtcVideoChannel2::SetVideoSend(uint32_t ssrc, bool enable, 1006 bool WebRtcVideoChannel2::SetVideoSend(uint32_t ssrc, bool enable,
1005 const VideoOptions* options) { 1007 const VideoOptions* options) {
1006 TRACE_EVENT0("webrtc", "SetVideoSend"); 1008 TRACE_EVENT0("webrtc", "SetVideoSend");
1007 LOG(LS_INFO) << "SetVideoSend (ssrc= " << ssrc << ", enable = " << enable 1009 LOG(LS_INFO) << "SetVideoSend (ssrc= " << ssrc << ", enable = " << enable
1008 << "options: " << (options ? options->ToString() : "nullptr") 1010 << "options: " << (options ? options->ToString() : "nullptr")
1009 << ")."; 1011 << ").";
1010 1012
1011 // TODO(solenberg): The state change should be fully rolled back if any one of
1012 // these calls fail.
1013 if (!MuteStream(ssrc, !enable)) {
1014 return false;
1015 }
1016 if (enable && options) { 1013 if (enable && options) {
1017 SetOptions(ssrc, *options); 1014 SetOptions(ssrc, *options);
1018 } 1015 }
1019 return true; 1016 return true;
1020 } 1017 }
1021 1018
1022 bool WebRtcVideoChannel2::ValidateSendSsrcAvailability( 1019 bool WebRtcVideoChannel2::ValidateSendSsrcAvailability(
1023 const StreamParams& sp) const { 1020 const StreamParams& sp) const {
1024 for (uint32_t ssrc : sp.ssrcs) { 1021 for (uint32_t ssrc : sp.ssrcs) {
1025 if (send_ssrcs_.find(ssrc) != send_ssrcs_.end()) { 1022 if (send_ssrcs_.find(ssrc) != send_ssrcs_.end()) {
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
1308 // Get send stream bitrate stats. 1305 // Get send stream bitrate stats.
1309 rtc::CritScope stream_lock(&stream_crit_); 1306 rtc::CritScope stream_lock(&stream_crit_);
1310 for (std::map<uint32_t, WebRtcVideoSendStream*>::iterator stream = 1307 for (std::map<uint32_t, WebRtcVideoSendStream*>::iterator stream =
1311 send_streams_.begin(); 1308 send_streams_.begin();
1312 stream != send_streams_.end(); ++stream) { 1309 stream != send_streams_.end(); ++stream) {
1313 stream->second->FillBandwidthEstimationInfo(&bwe_info); 1310 stream->second->FillBandwidthEstimationInfo(&bwe_info);
1314 } 1311 }
1315 video_media_info->bw_estimations.push_back(bwe_info); 1312 video_media_info->bw_estimations.push_back(bwe_info);
1316 } 1313 }
1317 1314
1318 bool WebRtcVideoChannel2::SetCapturer(uint32_t ssrc, VideoCapturer* capturer) { 1315 void WebRtcVideoChannel2::SetSource(
1319 LOG(LS_INFO) << "SetCapturer: " << ssrc << " -> " 1316 uint32_t ssrc,
1320 << (capturer != NULL ? "(capturer)" : "NULL"); 1317 rtc::VideoSourceInterface<cricket::VideoFrame>* source) {
1318 LOG(LS_INFO) << "SetSource: " << ssrc << " -> "
1319 << (source ? "(source)" : "NULL");
1321 RTC_DCHECK(ssrc != 0); 1320 RTC_DCHECK(ssrc != 0);
1322 { 1321
1323 rtc::CritScope stream_lock(&stream_crit_); 1322 rtc::CritScope stream_lock(&stream_crit_);
1324 const auto& kv = send_streams_.find(ssrc); 1323 const auto& kv = send_streams_.find(ssrc);
1325 if (kv == send_streams_.end()) { 1324 if (kv == send_streams_.end()) {
1326 LOG(LS_ERROR) << "No sending stream on ssrc " << ssrc; 1325 // Allow unknown ssrc only if source is null.
1327 return false; 1326 RTC_CHECK(source == nullptr);
1328 } 1327 } else {
1329 if (!kv->second->SetCapturer(capturer)) { 1328 kv->second->SetSource(source);
1330 return false;
1331 }
1332 } 1329 }
1333 return true;
1334 } 1330 }
1335 1331
1336 void WebRtcVideoChannel2::OnPacketReceived( 1332 void WebRtcVideoChannel2::OnPacketReceived(
1337 rtc::CopyOnWriteBuffer* packet, 1333 rtc::CopyOnWriteBuffer* packet,
1338 const rtc::PacketTime& packet_time) { 1334 const rtc::PacketTime& packet_time) {
1339 const webrtc::PacketTime webrtc_packet_time(packet_time.timestamp, 1335 const webrtc::PacketTime webrtc_packet_time(packet_time.timestamp,
1340 packet_time.not_before); 1336 packet_time.not_before);
1341 const webrtc::PacketReceiver::DeliveryStatus delivery_result = 1337 const webrtc::PacketReceiver::DeliveryStatus delivery_result =
1342 call_->Receiver()->DeliverPacket( 1338 call_->Receiver()->DeliverPacket(
1343 webrtc::MediaType::VIDEO, 1339 webrtc::MediaType::VIDEO,
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
1413 ready ? webrtc::kNetworkUp : webrtc::kNetworkDown); 1409 ready ? webrtc::kNetworkUp : webrtc::kNetworkDown);
1414 } 1410 }
1415 1411
1416 void WebRtcVideoChannel2::OnNetworkRouteChanged( 1412 void WebRtcVideoChannel2::OnNetworkRouteChanged(
1417 const std::string& transport_name, 1413 const std::string& transport_name,
1418 const NetworkRoute& network_route) { 1414 const NetworkRoute& network_route) {
1419 // TODO(honghaiz): uncomment this once the function in call is implemented. 1415 // TODO(honghaiz): uncomment this once the function in call is implemented.
1420 // call_->OnNetworkRouteChanged(transport_name, network_route); 1416 // call_->OnNetworkRouteChanged(transport_name, network_route);
1421 } 1417 }
1422 1418
1423 bool WebRtcVideoChannel2::MuteStream(uint32_t ssrc, bool mute) {
1424 LOG(LS_VERBOSE) << "MuteStream: " << ssrc << " -> "
1425 << (mute ? "mute" : "unmute");
1426 RTC_DCHECK(ssrc != 0);
1427 rtc::CritScope stream_lock(&stream_crit_);
1428 const auto& kv = send_streams_.find(ssrc);
1429 if (kv == send_streams_.end()) {
1430 LOG(LS_ERROR) << "No sending stream on ssrc " << ssrc;
1431 return false;
1432 }
1433
1434 kv->second->MuteStream(mute);
1435 return true;
1436 }
1437
1438 // TODO(pbos): Remove SetOptions in favor of SetSendParameters. 1419 // TODO(pbos): Remove SetOptions in favor of SetSendParameters.
1439 void WebRtcVideoChannel2::SetOptions(uint32_t ssrc, 1420 void WebRtcVideoChannel2::SetOptions(uint32_t ssrc,
1440 const VideoOptions& options) { 1421 const VideoOptions& options) {
1441 LOG(LS_INFO) << "SetOptions: ssrc " << ssrc << ": " << options.ToString(); 1422 LOG(LS_INFO) << "SetOptions: ssrc " << ssrc << ": " << options.ToString();
1442 1423
1443 rtc::CritScope stream_lock(&stream_crit_); 1424 rtc::CritScope stream_lock(&stream_crit_);
1444 const auto& kv = send_streams_.find(ssrc); 1425 const auto& kv = send_streams_.find(ssrc);
1445 if (kv == send_streams_.end()) { 1426 if (kv == send_streams_.end()) {
1446 return; 1427 return;
1447 } 1428 }
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
1516 const std::vector<webrtc::RtpExtension>& rtp_extensions, 1497 const std::vector<webrtc::RtpExtension>& rtp_extensions,
1517 // TODO(deadbeef): Don't duplicate information between send_params, 1498 // TODO(deadbeef): Don't duplicate information between send_params,
1518 // rtp_extensions, options, etc. 1499 // rtp_extensions, options, etc.
1519 const VideoSendParameters& send_params) 1500 const VideoSendParameters& send_params)
1520 : worker_thread_(rtc::Thread::Current()), 1501 : worker_thread_(rtc::Thread::Current()),
1521 ssrcs_(sp.ssrcs), 1502 ssrcs_(sp.ssrcs),
1522 ssrc_groups_(sp.ssrc_groups), 1503 ssrc_groups_(sp.ssrc_groups),
1523 call_(call), 1504 call_(call),
1524 cpu_restricted_counter_(0), 1505 cpu_restricted_counter_(0),
1525 number_of_cpu_adapt_changes_(0), 1506 number_of_cpu_adapt_changes_(0),
1526 capturer_(nullptr), 1507 source_(nullptr),
1527 external_encoder_factory_(external_encoder_factory), 1508 external_encoder_factory_(external_encoder_factory),
1528 stream_(nullptr), 1509 stream_(nullptr),
1529 parameters_(config, options, max_bitrate_bps, codec_settings), 1510 parameters_(config, options, max_bitrate_bps, codec_settings),
1530 rtp_parameters_(CreateRtpParametersWithOneEncoding()), 1511 rtp_parameters_(CreateRtpParametersWithOneEncoding()),
1531 pending_encoder_reconfiguration_(false), 1512 pending_encoder_reconfiguration_(false),
1532 allocated_encoder_(nullptr, webrtc::kVideoCodecUnknown, false), 1513 allocated_encoder_(nullptr, webrtc::kVideoCodecUnknown, false),
1533 sending_(false), 1514 sending_(false),
1534 muted_(false),
1535 first_frame_timestamp_ms_(0), 1515 first_frame_timestamp_ms_(0),
1536 last_frame_timestamp_ms_(0) { 1516 last_frame_timestamp_ms_(0) {
1537 parameters_.config.rtp.max_packet_size = kVideoMtu; 1517 parameters_.config.rtp.max_packet_size = kVideoMtu;
1538 parameters_.conference_mode = send_params.conference_mode; 1518 parameters_.conference_mode = send_params.conference_mode;
1539 1519
1540 sp.GetPrimarySsrcs(&parameters_.config.rtp.ssrcs); 1520 sp.GetPrimarySsrcs(&parameters_.config.rtp.ssrcs);
1541 sp.GetFidSsrcs(parameters_.config.rtp.ssrcs, 1521 sp.GetFidSsrcs(parameters_.config.rtp.ssrcs,
1542 &parameters_.config.rtp.rtx.ssrcs); 1522 &parameters_.config.rtp.rtx.ssrcs);
1543 parameters_.config.rtp.c_name = sp.cname; 1523 parameters_.config.rtp.c_name = sp.cname;
1544 parameters_.config.rtp.extensions = rtp_extensions; 1524 parameters_.config.rtp.extensions = rtp_extensions;
1545 parameters_.config.rtp.rtcp_mode = send_params.rtcp.reduced_size 1525 parameters_.config.rtp.rtcp_mode = send_params.rtcp.reduced_size
1546 ? webrtc::RtcpMode::kReducedSize 1526 ? webrtc::RtcpMode::kReducedSize
1547 : webrtc::RtcpMode::kCompound; 1527 : webrtc::RtcpMode::kCompound;
1548 parameters_.config.overuse_callback = 1528 parameters_.config.overuse_callback =
1549 enable_cpu_overuse_detection ? this : nullptr; 1529 enable_cpu_overuse_detection ? this : nullptr;
1550 1530
1551 sink_wants_.rotation_applied = !ContainsHeaderExtension( 1531 sink_wants_.rotation_applied = !ContainsHeaderExtension(
1552 rtp_extensions, kRtpVideoRotationHeaderExtension); 1532 rtp_extensions, kRtpVideoRotationHeaderExtension);
1553 1533
1554 if (codec_settings) { 1534 if (codec_settings) {
1555 SetCodec(*codec_settings); 1535 SetCodec(*codec_settings);
1556 } 1536 }
1557 } 1537 }
1558 1538
1559 WebRtcVideoChannel2::WebRtcVideoSendStream::~WebRtcVideoSendStream() { 1539 WebRtcVideoChannel2::WebRtcVideoSendStream::~WebRtcVideoSendStream() {
1560 DisconnectCapturer(); 1540 DisconnectSource();
1561 if (stream_ != NULL) { 1541 if (stream_ != NULL) {
1562 call_->DestroyVideoSendStream(stream_); 1542 call_->DestroyVideoSendStream(stream_);
1563 } 1543 }
1564 DestroyVideoEncoder(&allocated_encoder_); 1544 DestroyVideoEncoder(&allocated_encoder_);
1565 } 1545 }
1566 1546
1567 static void CreateBlackFrame(webrtc::VideoFrame* video_frame, 1547 static void CreateBlackFrame(webrtc::VideoFrame* video_frame,
1568 int width, 1548 int width,
1569 int height, 1549 int height,
1570 webrtc::VideoRotation rotation) { 1550 webrtc::VideoRotation rotation) {
(...skipping 12 matching lines...) Expand all
1583 const VideoFrame& frame) { 1563 const VideoFrame& frame) {
1584 TRACE_EVENT0("webrtc", "WebRtcVideoSendStream::OnFrame"); 1564 TRACE_EVENT0("webrtc", "WebRtcVideoSendStream::OnFrame");
1585 webrtc::VideoFrame video_frame(frame.GetVideoFrameBuffer(), 0, 0, 1565 webrtc::VideoFrame video_frame(frame.GetVideoFrameBuffer(), 0, 0,
1586 frame.GetVideoRotation()); 1566 frame.GetVideoRotation());
1587 rtc::CritScope cs(&lock_); 1567 rtc::CritScope cs(&lock_);
1588 if (stream_ == NULL) { 1568 if (stream_ == NULL) {
1589 // Frame input before send codecs are configured, dropping frame. 1569 // Frame input before send codecs are configured, dropping frame.
1590 return; 1570 return;
1591 } 1571 }
1592 1572
1593 if (muted_) {
1594 // Create a black frame to transmit instead.
1595 CreateBlackFrame(&video_frame,
1596 frame.width(),
1597 frame.height(),
1598 video_frame.rotation());
1599 }
1600
1601 int64_t frame_delta_ms = frame.GetTimeStamp() / rtc::kNumNanosecsPerMillisec; 1573 int64_t frame_delta_ms = frame.GetTimeStamp() / rtc::kNumNanosecsPerMillisec;
1602 // frame->GetTimeStamp() is essentially a delta, align to webrtc time 1574 // frame->GetTimeStamp() is essentially a delta, align to webrtc time
1603 if (first_frame_timestamp_ms_ == 0) { 1575 if (first_frame_timestamp_ms_ == 0) {
1604 first_frame_timestamp_ms_ = rtc::Time() - frame_delta_ms; 1576 first_frame_timestamp_ms_ = rtc::Time() - frame_delta_ms;
1605 } 1577 }
1606 1578
1607 last_frame_timestamp_ms_ = first_frame_timestamp_ms_ + frame_delta_ms; 1579 last_frame_timestamp_ms_ = first_frame_timestamp_ms_ + frame_delta_ms;
1608 video_frame.set_render_time_ms(last_frame_timestamp_ms_); 1580 video_frame.set_render_time_ms(last_frame_timestamp_ms_);
1609 // Reconfigure codec if necessary. 1581 // Reconfigure codec if necessary.
1610 SetDimensions(video_frame.width(), video_frame.height()); 1582 SetDimensions(video_frame.width(), video_frame.height());
1611 last_rotation_ = video_frame.rotation(); 1583 last_rotation_ = video_frame.rotation();
1612 1584
1613 // Not sending, abort after reconfiguration. Reconfiguration should still 1585 // Not sending, abort after reconfiguration. Reconfiguration should still
1614 // occur to permit sending this input as quickly as possible once we start 1586 // occur to permit sending this input as quickly as possible once we start
1615 // sending (without having to reconfigure then). 1587 // sending (without having to reconfigure then).
1616 if (!sending_) { 1588 if (!sending_) {
1617 return; 1589 return;
1618 } 1590 }
1619 1591
1620 stream_->Input()->IncomingCapturedFrame(video_frame); 1592 stream_->Input()->IncomingCapturedFrame(video_frame);
1621 } 1593 }
1622 1594
1623 bool WebRtcVideoChannel2::WebRtcVideoSendStream::SetCapturer( 1595 void WebRtcVideoChannel2::WebRtcVideoSendStream::SetSource(
1624 VideoCapturer* capturer) { 1596 rtc::VideoSourceInterface<cricket::VideoFrame>* source) {
1625 TRACE_EVENT0("webrtc", "WebRtcVideoSendStream::SetCapturer"); 1597 TRACE_EVENT0("webrtc", "WebRtcVideoSendStream::SetSource");
1626 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 1598 RTC_DCHECK(thread_checker_.CalledOnValidThread());
1627 if (!DisconnectCapturer() && capturer == NULL) { 1599
1628 return false; 1600 if (!source && !source_)
1629 } 1601 return;
1602 DisconnectSource();
1630 1603
1631 { 1604 {
1632 rtc::CritScope cs(&lock_); 1605 rtc::CritScope cs(&lock_);
1633 1606
1634 // Reset timestamps to realign new incoming frames to a webrtc timestamp. A 1607 // Reset timestamps to realign new incoming frames to a webrtc timestamp. A
1635 // new capturer may have a different timestamp delta than the previous one. 1608 // new capturer may have a different timestamp delta than the previous one.
1636 first_frame_timestamp_ms_ = 0; 1609 first_frame_timestamp_ms_ = 0;
1637 1610
1638 if (capturer == NULL) { 1611 if (source == NULL) {
1639 if (stream_ != NULL) { 1612 if (stream_ != NULL) {
1640 LOG(LS_VERBOSE) << "Disabling capturer, sending black frame."; 1613 LOG(LS_VERBOSE) << "Disabling capturer, sending black frame.";
1641 webrtc::VideoFrame black_frame; 1614 webrtc::VideoFrame black_frame;
1642 1615
1643 CreateBlackFrame(&black_frame, last_dimensions_.width, 1616 CreateBlackFrame(&black_frame, last_dimensions_.width,
1644 last_dimensions_.height, last_rotation_); 1617 last_dimensions_.height, last_rotation_);
1645 1618
1646 // Force this black frame not to be dropped due to timestamp order 1619 // Force this black frame not to be dropped due to timestamp order
1647 // check. As IncomingCapturedFrame will drop the frame if this frame's 1620 // check. As IncomingCapturedFrame will drop the frame if this frame's
1648 // timestamp is less than or equal to last frame's timestamp, it is 1621 // timestamp is less than or equal to last frame's timestamp, it is
1649 // necessary to give this black frame a larger timestamp than the 1622 // necessary to give this black frame a larger timestamp than the
1650 // previous one. 1623 // previous one.
1651 last_frame_timestamp_ms_ += 1; 1624 last_frame_timestamp_ms_ += 1;
1652 black_frame.set_render_time_ms(last_frame_timestamp_ms_); 1625 black_frame.set_render_time_ms(last_frame_timestamp_ms_);
1653 stream_->Input()->IncomingCapturedFrame(black_frame); 1626 stream_->Input()->IncomingCapturedFrame(black_frame);
1654 } 1627 }
1655
1656 capturer_ = NULL;
1657 return true;
1658 } 1628 }
1659 } 1629 }
1660 capturer_ = capturer; 1630 source_ = source;
1661 // |capturer_->AddOrUpdateSink| may not be called while holding |lock_| since 1631 // |source_->AddOrUpdateSink| may not be called while holding |lock_| since
1662 // that might cause a lock order inversion. 1632 // that might cause a lock order inversion.
1663 capturer_->AddOrUpdateSink(this, sink_wants_); 1633 if (source_) {
1664 return true; 1634 source_->AddOrUpdateSink(this, sink_wants_);
1635 }
1665 } 1636 }
1666 1637
1667 void WebRtcVideoChannel2::WebRtcVideoSendStream::MuteStream(bool mute) { 1638 void WebRtcVideoChannel2::WebRtcVideoSendStream::DisconnectSource() {
1668 rtc::CritScope cs(&lock_);
1669 muted_ = mute;
1670 }
1671
1672 bool WebRtcVideoChannel2::WebRtcVideoSendStream::DisconnectCapturer() {
1673 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 1639 RTC_DCHECK(thread_checker_.CalledOnValidThread());
1674 if (capturer_ == NULL) { 1640 if (source_ == NULL) {
1675 return false; 1641 return;
1676 } 1642 }
1677 1643
1678 // |capturer_->RemoveSink| may not be called while holding |lock_| since 1644 // |source_->RemoveSink| may not be called while holding |lock_| since
1679 // that might cause a lock order inversion. 1645 // that might cause a lock order inversion.
1680 capturer_->RemoveSink(this); 1646 source_->RemoveSink(this);
1681 capturer_ = NULL; 1647 source_ = nullptr;
1682 // Reset |cpu_restricted_counter_| if the capturer is changed. It is not 1648 // Reset |cpu_restricted_counter_| if the capturer is changed. It is not
1683 // possible to know if the video resolution is restricted by CPU usage after 1649 // possible to know if the video resolution is restricted by CPU usage after
1684 // the capturer is changed since the next capturer might be screen capture 1650 // the capturer is changed since the next capturer might be screen capture
1685 // with another resolution and frame rate. 1651 // with another resolution and frame rate.
1686 cpu_restricted_counter_ = 0; 1652 cpu_restricted_counter_ = 0;
1687 return true;
1688 } 1653 }
1689 1654
1690 const std::vector<uint32_t>& 1655 const std::vector<uint32_t>&
1691 WebRtcVideoChannel2::WebRtcVideoSendStream::GetSsrcs() const { 1656 WebRtcVideoChannel2::WebRtcVideoSendStream::GetSsrcs() const {
1692 return ssrcs_; 1657 return ssrcs_;
1693 } 1658 }
1694 1659
1695 void WebRtcVideoChannel2::WebRtcVideoSendStream::SetOptions( 1660 void WebRtcVideoChannel2::WebRtcVideoSendStream::SetOptions(
1696 const VideoOptions& options) { 1661 const VideoOptions& options) {
1697 rtc::CritScope cs(&lock_); 1662 rtc::CritScope cs(&lock_);
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
1838 << "RecreateWebRtcStream (send) because of SetSendParameters"; 1803 << "RecreateWebRtcStream (send) because of SetSendParameters";
1839 RecreateWebRtcStream(); 1804 RecreateWebRtcStream();
1840 } 1805 }
1841 } // release |lock_| 1806 } // release |lock_|
1842 1807
1843 // |capturer_->AddOrUpdateSink| may not be called while holding |lock_| since 1808 // |capturer_->AddOrUpdateSink| may not be called while holding |lock_| since
1844 // that might cause a lock order inversion. 1809 // that might cause a lock order inversion.
1845 if (params.rtp_header_extensions) { 1810 if (params.rtp_header_extensions) {
1846 sink_wants_.rotation_applied = !ContainsHeaderExtension( 1811 sink_wants_.rotation_applied = !ContainsHeaderExtension(
1847 *params.rtp_header_extensions, kRtpVideoRotationHeaderExtension); 1812 *params.rtp_header_extensions, kRtpVideoRotationHeaderExtension);
1848 if (capturer_) { 1813 if (source_) {
1849 capturer_->AddOrUpdateSink(this, sink_wants_); 1814 source_->AddOrUpdateSink(this, sink_wants_);
1850 } 1815 }
1851 } 1816 }
1852 } 1817 }
1853 1818
1854 bool WebRtcVideoChannel2::WebRtcVideoSendStream::SetRtpParameters( 1819 bool WebRtcVideoChannel2::WebRtcVideoSendStream::SetRtpParameters(
1855 const webrtc::RtpParameters& new_parameters) { 1820 const webrtc::RtpParameters& new_parameters) {
1856 if (!ValidateRtpParameters(new_parameters)) { 1821 if (!ValidateRtpParameters(new_parameters)) {
1857 return false; 1822 return false;
1858 } 1823 }
1859 1824
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
2004 1969
2005 void WebRtcVideoChannel2::WebRtcVideoSendStream::OnLoadUpdate(Load load) { 1970 void WebRtcVideoChannel2::WebRtcVideoSendStream::OnLoadUpdate(Load load) {
2006 if (worker_thread_ != rtc::Thread::Current()) { 1971 if (worker_thread_ != rtc::Thread::Current()) {
2007 invoker_.AsyncInvoke<void>( 1972 invoker_.AsyncInvoke<void>(
2008 worker_thread_, 1973 worker_thread_,
2009 rtc::Bind(&WebRtcVideoChannel2::WebRtcVideoSendStream::OnLoadUpdate, 1974 rtc::Bind(&WebRtcVideoChannel2::WebRtcVideoSendStream::OnLoadUpdate,
2010 this, load)); 1975 this, load));
2011 return; 1976 return;
2012 } 1977 }
2013 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 1978 RTC_DCHECK(thread_checker_.CalledOnValidThread());
2014 if (!capturer_) { 1979 if (!source_) {
2015 return; 1980 return;
2016 } 1981 }
2017 { 1982 {
2018 rtc::CritScope cs(&lock_); 1983 rtc::CritScope cs(&lock_);
2019 LOG(LS_INFO) << "OnLoadUpdate " << load << ", is_screencast: " 1984 LOG(LS_INFO) << "OnLoadUpdate " << load << ", is_screencast: "
2020 << (parameters_.options.is_screencast 1985 << (parameters_.options.is_screencast
2021 ? (*parameters_.options.is_screencast ? "true" 1986 ? (*parameters_.options.is_screencast ? "true"
2022 : "false") 1987 : "false")
2023 : "unset"); 1988 : "unset");
2024 // Do not adapt resolution for screen content as this will likely result in 1989 // Do not adapt resolution for screen content as this will likely result in
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
2060 if (sink_wants_.max_pixel_count || 2025 if (sink_wants_.max_pixel_count ||
2061 (sink_wants_.max_pixel_count_step_up && 2026 (sink_wants_.max_pixel_count_step_up &&
2062 *sink_wants_.max_pixel_count_step_up < *max_pixel_count_step_up)) { 2027 *sink_wants_.max_pixel_count_step_up < *max_pixel_count_step_up)) {
2063 ++number_of_cpu_adapt_changes_; 2028 ++number_of_cpu_adapt_changes_;
2064 --cpu_restricted_counter_; 2029 --cpu_restricted_counter_;
2065 } 2030 }
2066 } 2031 }
2067 sink_wants_.max_pixel_count = max_pixel_count; 2032 sink_wants_.max_pixel_count = max_pixel_count;
2068 sink_wants_.max_pixel_count_step_up = max_pixel_count_step_up; 2033 sink_wants_.max_pixel_count_step_up = max_pixel_count_step_up;
2069 } 2034 }
2070 // |capturer_->AddOrUpdateSink| may not be called while holding |lock_| since 2035 // |source_->AddOrUpdateSink| may not be called while holding |lock_| since
2071 // that might cause a lock order inversion. 2036 // that might cause a lock order inversion.
2072 capturer_->AddOrUpdateSink(this, sink_wants_); 2037 source_->AddOrUpdateSink(this, sink_wants_);
2073 } 2038 }
2074 2039
2075 VideoSenderInfo 2040 VideoSenderInfo
2076 WebRtcVideoChannel2::WebRtcVideoSendStream::GetVideoSenderInfo() { 2041 WebRtcVideoChannel2::WebRtcVideoSendStream::GetVideoSenderInfo() {
2077 VideoSenderInfo info; 2042 VideoSenderInfo info;
2078 webrtc::VideoSendStream::Stats stats; 2043 webrtc::VideoSendStream::Stats stats;
2079 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 2044 RTC_DCHECK(thread_checker_.CalledOnValidThread());
2080 { 2045 {
2081 rtc::CritScope cs(&lock_); 2046 rtc::CritScope cs(&lock_);
2082 for (uint32_t ssrc : parameters_.config.rtp.ssrcs) 2047 for (uint32_t ssrc : parameters_.config.rtp.ssrcs)
(...skipping 517 matching lines...) Expand 10 before | Expand all | Expand 10 after
2600 rtx_mapping[video_codecs[i].codec.id] != 2565 rtx_mapping[video_codecs[i].codec.id] !=
2601 fec_settings.red_payload_type) { 2566 fec_settings.red_payload_type) {
2602 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; 2567 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id];
2603 } 2568 }
2604 } 2569 }
2605 2570
2606 return video_codecs; 2571 return video_codecs;
2607 } 2572 }
2608 2573
2609 } // namespace cricket 2574 } // namespace cricket
OLDNEW
« no previous file with comments | « webrtc/media/engine/webrtcvideoengine2.h ('k') | webrtc/media/engine/webrtcvideoengine2_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698