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

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

Issue 1335923002: Add RTC_ prefix to (D)CHECKs and related macros. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebase. Created 5 years, 3 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 * libjingle 2 * libjingle
3 * Copyright 2014 Google Inc. 3 * Copyright 2014 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 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 for (const auto& codec : codecs) { 99 for (const auto& codec : codecs) {
100 if (codec.type == webrtc::kVideoCodecVP8) { 100 if (codec.type == webrtc::kVideoCodecVP8) {
101 return true; 101 return true;
102 } 102 }
103 } 103 }
104 return false; 104 return false;
105 } 105 }
106 106
107 webrtc::VideoEncoder* CreateVideoEncoder( 107 webrtc::VideoEncoder* CreateVideoEncoder(
108 webrtc::VideoCodecType type) override { 108 webrtc::VideoCodecType type) override {
109 DCHECK(factory_ != NULL); 109 RTC_DCHECK(factory_ != NULL);
110 // If it's a codec type we can simulcast, create a wrapped encoder. 110 // If it's a codec type we can simulcast, create a wrapped encoder.
111 if (type == webrtc::kVideoCodecVP8) { 111 if (type == webrtc::kVideoCodecVP8) {
112 return new webrtc::SimulcastEncoderAdapter( 112 return new webrtc::SimulcastEncoderAdapter(
113 new EncoderFactoryAdapter(factory_)); 113 new EncoderFactoryAdapter(factory_));
114 } 114 }
115 webrtc::VideoEncoder* encoder = factory_->CreateVideoEncoder(type); 115 webrtc::VideoEncoder* encoder = factory_->CreateVideoEncoder(type);
116 if (encoder) { 116 if (encoder) {
117 non_simulcast_encoders_.push_back(encoder); 117 non_simulcast_encoders_.push_back(encoder);
118 } 118 }
119 return encoder; 119 return encoder;
(...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after
593 << codec.ToString(); 593 << codec.ToString();
594 return false; 594 return false;
595 } 595 }
596 596
597 return true; 597 return true;
598 } 598 }
599 599
600 WebRtcVideoChannel2* WebRtcVideoEngine2::CreateChannel( 600 WebRtcVideoChannel2* WebRtcVideoEngine2::CreateChannel(
601 webrtc::Call* call, 601 webrtc::Call* call,
602 const VideoOptions& options) { 602 const VideoOptions& options) {
603 DCHECK(initialized_); 603 RTC_DCHECK(initialized_);
604 LOG(LS_INFO) << "CreateChannel. Options: " << options.ToString(); 604 LOG(LS_INFO) << "CreateChannel. Options: " << options.ToString();
605 WebRtcVideoChannel2* channel = new WebRtcVideoChannel2(call, options, 605 WebRtcVideoChannel2* channel = new WebRtcVideoChannel2(call, options,
606 external_encoder_factory_, external_decoder_factory_); 606 external_encoder_factory_, external_decoder_factory_);
607 channel->SetRecvCodecs(video_codecs_); 607 channel->SetRecvCodecs(video_codecs_);
608 return channel; 608 return channel;
609 } 609 }
610 610
611 const std::vector<VideoCodec>& WebRtcVideoEngine2::codecs() const { 611 const std::vector<VideoCodec>& WebRtcVideoEngine2::codecs() const {
612 return video_codecs_; 612 return video_codecs_;
613 } 613 }
614 614
615 const std::vector<RtpHeaderExtension>& 615 const std::vector<RtpHeaderExtension>&
616 WebRtcVideoEngine2::rtp_header_extensions() const { 616 WebRtcVideoEngine2::rtp_header_extensions() const {
617 return rtp_header_extensions_; 617 return rtp_header_extensions_;
618 } 618 }
619 619
620 void WebRtcVideoEngine2::SetLogging(int min_sev, const char* filter) { 620 void WebRtcVideoEngine2::SetLogging(int min_sev, const char* filter) {
621 // TODO(pbos): Set up logging. 621 // TODO(pbos): Set up logging.
622 LOG(LS_VERBOSE) << "SetLogging: " << min_sev << '"' << filter << '"'; 622 LOG(LS_VERBOSE) << "SetLogging: " << min_sev << '"' << filter << '"';
623 // if min_sev == -1, we keep the current log level. 623 // if min_sev == -1, we keep the current log level.
624 if (min_sev < 0) { 624 if (min_sev < 0) {
625 DCHECK(min_sev == -1); 625 RTC_DCHECK(min_sev == -1);
626 return; 626 return;
627 } 627 }
628 } 628 }
629 629
630 void WebRtcVideoEngine2::SetExternalDecoderFactory( 630 void WebRtcVideoEngine2::SetExternalDecoderFactory(
631 WebRtcVideoDecoderFactory* decoder_factory) { 631 WebRtcVideoDecoderFactory* decoder_factory) {
632 DCHECK(!initialized_); 632 RTC_DCHECK(!initialized_);
633 external_decoder_factory_ = decoder_factory; 633 external_decoder_factory_ = decoder_factory;
634 } 634 }
635 635
636 void WebRtcVideoEngine2::SetExternalEncoderFactory( 636 void WebRtcVideoEngine2::SetExternalEncoderFactory(
637 WebRtcVideoEncoderFactory* encoder_factory) { 637 WebRtcVideoEncoderFactory* encoder_factory) {
638 DCHECK(!initialized_); 638 RTC_DCHECK(!initialized_);
639 if (external_encoder_factory_ == encoder_factory) 639 if (external_encoder_factory_ == encoder_factory)
640 return; 640 return;
641 641
642 // No matter what happens we shouldn't hold on to a stale 642 // No matter what happens we shouldn't hold on to a stale
643 // WebRtcSimulcastEncoderFactory. 643 // WebRtcSimulcastEncoderFactory.
644 simulcast_encoder_factory_.reset(); 644 simulcast_encoder_factory_.reset();
645 645
646 if (encoder_factory && 646 if (encoder_factory &&
647 WebRtcSimulcastEncoderFactory::UseSimulcastEncoderFactory( 647 WebRtcSimulcastEncoderFactory::UseSimulcastEncoderFactory(
648 encoder_factory->codecs())) { 648 encoder_factory->codecs())) {
(...skipping 25 matching lines...) Expand all
674 return false; 674 return false;
675 } 675 }
676 676
677 // Tells whether the |requested| codec can be transmitted or not. If it can be 677 // Tells whether the |requested| codec can be transmitted or not. If it can be
678 // transmitted |out| is set with the best settings supported. Aspect ratio will 678 // transmitted |out| is set with the best settings supported. Aspect ratio will
679 // be set as close to |current|'s as possible. If not set |requested|'s 679 // be set as close to |current|'s as possible. If not set |requested|'s
680 // dimensions will be used for aspect ratio matching. 680 // dimensions will be used for aspect ratio matching.
681 bool WebRtcVideoEngine2::CanSendCodec(const VideoCodec& requested, 681 bool WebRtcVideoEngine2::CanSendCodec(const VideoCodec& requested,
682 const VideoCodec& current, 682 const VideoCodec& current,
683 VideoCodec* out) { 683 VideoCodec* out) {
684 DCHECK(out != NULL); 684 RTC_DCHECK(out != NULL);
685 685
686 if (requested.width != requested.height && 686 if (requested.width != requested.height &&
687 (requested.height == 0 || requested.width == 0)) { 687 (requested.height == 0 || requested.width == 0)) {
688 // 0xn and nx0 are invalid resolutions. 688 // 0xn and nx0 are invalid resolutions.
689 return false; 689 return false;
690 } 690 }
691 691
692 VideoCodec matching_codec; 692 VideoCodec matching_codec;
693 if (!FindFirstMatchingCodec(video_codecs_, requested, &matching_codec)) { 693 if (!FindFirstMatchingCodec(video_codecs_, requested, &matching_codec)) {
694 // Codec not supported. 694 // Codec not supported.
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
740 for (size_t i = 0; i < codecs.size(); ++i) { 740 for (size_t i = 0; i < codecs.size(); ++i) {
741 // Don't add internally-supported codecs twice. 741 // Don't add internally-supported codecs twice.
742 if (CodecIsInternallySupported(codecs[i].name)) { 742 if (CodecIsInternallySupported(codecs[i].name)) {
743 continue; 743 continue;
744 } 744 }
745 745
746 // External video encoders are given payloads 120-127. This also means that 746 // External video encoders are given payloads 120-127. This also means that
747 // we only support up to 8 external payload types. 747 // we only support up to 8 external payload types.
748 const int kExternalVideoPayloadTypeBase = 120; 748 const int kExternalVideoPayloadTypeBase = 120;
749 size_t payload_type = kExternalVideoPayloadTypeBase + i; 749 size_t payload_type = kExternalVideoPayloadTypeBase + i;
750 DCHECK(payload_type < 128); 750 RTC_DCHECK(payload_type < 128);
751 VideoCodec codec(static_cast<int>(payload_type), 751 VideoCodec codec(static_cast<int>(payload_type),
752 codecs[i].name, 752 codecs[i].name,
753 codecs[i].max_width, 753 codecs[i].max_width,
754 codecs[i].max_height, 754 codecs[i].max_height,
755 codecs[i].max_fps, 755 codecs[i].max_fps,
756 0); 756 0);
757 757
758 AddDefaultFeedbackParams(&codec); 758 AddDefaultFeedbackParams(&codec);
759 supported_codecs.push_back(codec); 759 supported_codecs.push_back(codec);
760 } 760 }
761 return supported_codecs; 761 return supported_codecs;
762 } 762 }
763 763
764 WebRtcVideoChannel2::WebRtcVideoChannel2( 764 WebRtcVideoChannel2::WebRtcVideoChannel2(
765 webrtc::Call* call, 765 webrtc::Call* call,
766 const VideoOptions& options, 766 const VideoOptions& options,
767 WebRtcVideoEncoderFactory* external_encoder_factory, 767 WebRtcVideoEncoderFactory* external_encoder_factory,
768 WebRtcVideoDecoderFactory* external_decoder_factory) 768 WebRtcVideoDecoderFactory* external_decoder_factory)
769 : call_(call), 769 : call_(call),
770 unsignalled_ssrc_handler_(&default_unsignalled_ssrc_handler_), 770 unsignalled_ssrc_handler_(&default_unsignalled_ssrc_handler_),
771 external_encoder_factory_(external_encoder_factory), 771 external_encoder_factory_(external_encoder_factory),
772 external_decoder_factory_(external_decoder_factory) { 772 external_decoder_factory_(external_decoder_factory) {
773 DCHECK(thread_checker_.CalledOnValidThread()); 773 RTC_DCHECK(thread_checker_.CalledOnValidThread());
774 SetDefaultOptions(); 774 SetDefaultOptions();
775 options_.SetAll(options); 775 options_.SetAll(options);
776 options_.cpu_overuse_detection.Get(&signal_cpu_adaptation_); 776 options_.cpu_overuse_detection.Get(&signal_cpu_adaptation_);
777 rtcp_receiver_report_ssrc_ = kDefaultRtcpReceiverReportSsrc; 777 rtcp_receiver_report_ssrc_ = kDefaultRtcpReceiverReportSsrc;
778 sending_ = false; 778 sending_ = false;
779 default_send_ssrc_ = 0; 779 default_send_ssrc_ = 0;
780 } 780 }
781 781
782 void WebRtcVideoChannel2::SetDefaultOptions() { 782 void WebRtcVideoChannel2::SetDefaultOptions() {
783 options_.cpu_overuse_detection.Set(true); 783 options_.cpu_overuse_detection.Set(true);
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
956 // Using same codec, avoid reconfiguring. 956 // Using same codec, avoid reconfiguring.
957 return true; 957 return true;
958 } 958 }
959 959
960 send_codec_.Set(supported_codecs.front()); 960 send_codec_.Set(supported_codecs.front());
961 961
962 rtc::CritScope stream_lock(&stream_crit_); 962 rtc::CritScope stream_lock(&stream_crit_);
963 LOG(LS_INFO) << "Change the send codec because SetSendCodecs has a different " 963 LOG(LS_INFO) << "Change the send codec because SetSendCodecs has a different "
964 "first supported codec."; 964 "first supported codec.";
965 for (auto& kv : send_streams_) { 965 for (auto& kv : send_streams_) {
966 DCHECK(kv.second != nullptr); 966 RTC_DCHECK(kv.second != nullptr);
967 kv.second->SetCodec(supported_codecs.front()); 967 kv.second->SetCodec(supported_codecs.front());
968 } 968 }
969 LOG(LS_INFO) << "SetNackAndRemb on all the receive streams because the send " 969 LOG(LS_INFO) << "SetNackAndRemb on all the receive streams because the send "
970 "codec has changed."; 970 "codec has changed.";
971 for (auto& kv : receive_streams_) { 971 for (auto& kv : receive_streams_) {
972 DCHECK(kv.second != nullptr); 972 RTC_DCHECK(kv.second != nullptr);
973 kv.second->SetNackAndRemb(HasNack(supported_codecs.front().codec), 973 kv.second->SetNackAndRemb(HasNack(supported_codecs.front().codec),
974 HasRemb(supported_codecs.front().codec)); 974 HasRemb(supported_codecs.front().codec));
975 } 975 }
976 976
977 // TODO(holmer): Changing the codec parameters shouldn't necessarily mean that 977 // TODO(holmer): Changing the codec parameters shouldn't necessarily mean that
978 // we change the min/max of bandwidth estimation. Reevaluate this. 978 // we change the min/max of bandwidth estimation. Reevaluate this.
979 VideoCodec codec = supported_codecs.front().codec; 979 VideoCodec codec = supported_codecs.front().codec;
980 int bitrate_kbps; 980 int bitrate_kbps;
981 if (codec.GetParam(kCodecParamMinBitrate, &bitrate_kbps) && 981 if (codec.GetParam(kCodecParamMinBitrate, &bitrate_kbps) &&
982 bitrate_kbps > 0) { 982 bitrate_kbps > 0) {
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
1101 new WebRtcVideoSendStream(call_, 1101 new WebRtcVideoSendStream(call_,
1102 sp, 1102 sp,
1103 config, 1103 config,
1104 external_encoder_factory_, 1104 external_encoder_factory_,
1105 options_, 1105 options_,
1106 bitrate_config_.max_bitrate_bps, 1106 bitrate_config_.max_bitrate_bps,
1107 send_codec_, 1107 send_codec_,
1108 send_rtp_extensions_); 1108 send_rtp_extensions_);
1109 1109
1110 uint32 ssrc = sp.first_ssrc(); 1110 uint32 ssrc = sp.first_ssrc();
1111 DCHECK(ssrc != 0); 1111 RTC_DCHECK(ssrc != 0);
1112 send_streams_[ssrc] = stream; 1112 send_streams_[ssrc] = stream;
1113 1113
1114 if (rtcp_receiver_report_ssrc_ == kDefaultRtcpReceiverReportSsrc) { 1114 if (rtcp_receiver_report_ssrc_ == kDefaultRtcpReceiverReportSsrc) {
1115 rtcp_receiver_report_ssrc_ = ssrc; 1115 rtcp_receiver_report_ssrc_ = ssrc;
1116 LOG(LS_INFO) << "SetLocalSsrc on all the receive streams because we added " 1116 LOG(LS_INFO) << "SetLocalSsrc on all the receive streams because we added "
1117 "a send stream."; 1117 "a send stream.";
1118 for (auto& kv : receive_streams_) 1118 for (auto& kv : receive_streams_)
1119 kv.second->SetLocalSsrc(ssrc); 1119 kv.second->SetLocalSsrc(ssrc);
1120 } 1120 }
1121 if (default_send_ssrc_ == 0) { 1121 if (default_send_ssrc_ == 0) {
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1172 receive_ssrcs_.erase(old_ssrc); 1172 receive_ssrcs_.erase(old_ssrc);
1173 delete stream; 1173 delete stream;
1174 } 1174 }
1175 1175
1176 bool WebRtcVideoChannel2::AddRecvStream(const StreamParams& sp) { 1176 bool WebRtcVideoChannel2::AddRecvStream(const StreamParams& sp) {
1177 return AddRecvStream(sp, false); 1177 return AddRecvStream(sp, false);
1178 } 1178 }
1179 1179
1180 bool WebRtcVideoChannel2::AddRecvStream(const StreamParams& sp, 1180 bool WebRtcVideoChannel2::AddRecvStream(const StreamParams& sp,
1181 bool default_stream) { 1181 bool default_stream) {
1182 DCHECK(thread_checker_.CalledOnValidThread()); 1182 RTC_DCHECK(thread_checker_.CalledOnValidThread());
1183 1183
1184 LOG(LS_INFO) << "AddRecvStream" << (default_stream ? " (default stream)" : "") 1184 LOG(LS_INFO) << "AddRecvStream" << (default_stream ? " (default stream)" : "")
1185 << ": " << sp.ToString(); 1185 << ": " << sp.ToString();
1186 if (!ValidateStreamParams(sp)) 1186 if (!ValidateStreamParams(sp))
1187 return false; 1187 return false;
1188 1188
1189 uint32 ssrc = sp.first_ssrc(); 1189 uint32 ssrc = sp.first_ssrc();
1190 DCHECK(ssrc != 0); // TODO(pbos): Is this ever valid? 1190 RTC_DCHECK(ssrc != 0); // TODO(pbos): Is this ever valid?
1191 1191
1192 rtc::CritScope stream_lock(&stream_crit_); 1192 rtc::CritScope stream_lock(&stream_crit_);
1193 // Remove running stream if this was a default stream. 1193 // Remove running stream if this was a default stream.
1194 auto prev_stream = receive_streams_.find(ssrc); 1194 auto prev_stream = receive_streams_.find(ssrc);
1195 if (prev_stream != receive_streams_.end()) { 1195 if (prev_stream != receive_streams_.end()) {
1196 if (default_stream || !prev_stream->second->IsDefaultStream()) { 1196 if (default_stream || !prev_stream->second->IsDefaultStream()) {
1197 LOG(LS_ERROR) << "Receive stream for SSRC '" << ssrc 1197 LOG(LS_ERROR) << "Receive stream for SSRC '" << ssrc
1198 << "' already exists."; 1198 << "' already exists.";
1199 return false; 1199 return false;
1200 } 1200 }
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
1369 stream != send_streams_.end(); 1369 stream != send_streams_.end();
1370 ++stream) { 1370 ++stream) {
1371 stream->second->FillBandwidthEstimationInfo(&bwe_info); 1371 stream->second->FillBandwidthEstimationInfo(&bwe_info);
1372 } 1372 }
1373 video_media_info->bw_estimations.push_back(bwe_info); 1373 video_media_info->bw_estimations.push_back(bwe_info);
1374 } 1374 }
1375 1375
1376 bool WebRtcVideoChannel2::SetCapturer(uint32 ssrc, VideoCapturer* capturer) { 1376 bool WebRtcVideoChannel2::SetCapturer(uint32 ssrc, VideoCapturer* capturer) {
1377 LOG(LS_INFO) << "SetCapturer: " << ssrc << " -> " 1377 LOG(LS_INFO) << "SetCapturer: " << ssrc << " -> "
1378 << (capturer != NULL ? "(capturer)" : "NULL"); 1378 << (capturer != NULL ? "(capturer)" : "NULL");
1379 DCHECK(ssrc != 0); 1379 RTC_DCHECK(ssrc != 0);
1380 { 1380 {
1381 rtc::CritScope stream_lock(&stream_crit_); 1381 rtc::CritScope stream_lock(&stream_crit_);
1382 if (send_streams_.find(ssrc) == send_streams_.end()) { 1382 if (send_streams_.find(ssrc) == send_streams_.end()) {
1383 LOG(LS_ERROR) << "No sending stream on ssrc " << ssrc; 1383 LOG(LS_ERROR) << "No sending stream on ssrc " << ssrc;
1384 return false; 1384 return false;
1385 } 1385 }
1386 if (!send_streams_[ssrc]->SetCapturer(capturer)) { 1386 if (!send_streams_[ssrc]->SetCapturer(capturer)) {
1387 return false; 1387 return false;
1388 } 1388 }
1389 } 1389 }
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
1484 } 1484 }
1485 1485
1486 void WebRtcVideoChannel2::OnReadyToSend(bool ready) { 1486 void WebRtcVideoChannel2::OnReadyToSend(bool ready) {
1487 LOG(LS_VERBOSE) << "OnReadyToSend: " << (ready ? "Ready." : "Not ready."); 1487 LOG(LS_VERBOSE) << "OnReadyToSend: " << (ready ? "Ready." : "Not ready.");
1488 call_->SignalNetworkState(ready ? webrtc::kNetworkUp : webrtc::kNetworkDown); 1488 call_->SignalNetworkState(ready ? webrtc::kNetworkUp : webrtc::kNetworkDown);
1489 } 1489 }
1490 1490
1491 bool WebRtcVideoChannel2::MuteStream(uint32 ssrc, bool mute) { 1491 bool WebRtcVideoChannel2::MuteStream(uint32 ssrc, bool mute) {
1492 LOG(LS_VERBOSE) << "MuteStream: " << ssrc << " -> " 1492 LOG(LS_VERBOSE) << "MuteStream: " << ssrc << " -> "
1493 << (mute ? "mute" : "unmute"); 1493 << (mute ? "mute" : "unmute");
1494 DCHECK(ssrc != 0); 1494 RTC_DCHECK(ssrc != 0);
1495 rtc::CritScope stream_lock(&stream_crit_); 1495 rtc::CritScope stream_lock(&stream_crit_);
1496 if (send_streams_.find(ssrc) == send_streams_.end()) { 1496 if (send_streams_.find(ssrc) == send_streams_.end()) {
1497 LOG(LS_ERROR) << "No sending stream on ssrc " << ssrc; 1497 LOG(LS_ERROR) << "No sending stream on ssrc " << ssrc;
1498 return false; 1498 return false;
1499 } 1499 }
1500 1500
1501 send_streams_[ssrc]->MuteStream(mute); 1501 send_streams_[ssrc]->MuteStream(mute);
1502 return true; 1502 return true;
1503 } 1503 }
1504 1504
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
1787 // Frame input before send codecs are configured, dropping frame. 1787 // Frame input before send codecs are configured, dropping frame.
1788 return; 1788 return;
1789 } 1789 }
1790 1790
1791 // Not sending, abort early to prevent expensive reconfigurations while 1791 // Not sending, abort early to prevent expensive reconfigurations while
1792 // setting up codecs etc. 1792 // setting up codecs etc.
1793 if (!sending_) 1793 if (!sending_)
1794 return; 1794 return;
1795 1795
1796 if (format_.width == 0) { // Dropping frames. 1796 if (format_.width == 0) { // Dropping frames.
1797 DCHECK(format_.height == 0); 1797 RTC_DCHECK(format_.height == 0);
1798 LOG(LS_VERBOSE) << "VideoFormat 0x0 set, Dropping frame."; 1798 LOG(LS_VERBOSE) << "VideoFormat 0x0 set, Dropping frame.";
1799 return; 1799 return;
1800 } 1800 }
1801 if (muted_) { 1801 if (muted_) {
1802 // Create a black frame to transmit instead. 1802 // Create a black frame to transmit instead.
1803 CreateBlackFrame(&video_frame, 1803 CreateBlackFrame(&video_frame,
1804 static_cast<int>(frame->GetWidth()), 1804 static_cast<int>(frame->GetWidth()),
1805 static_cast<int>(frame->GetHeight())); 1805 static_cast<int>(frame->GetHeight()));
1806 } 1806 }
1807 1807
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
1981 } else if (type == webrtc::kVideoCodecVP9) { 1981 } else if (type == webrtc::kVideoCodecVP9) {
1982 return AllocatedEncoder( 1982 return AllocatedEncoder(
1983 webrtc::VideoEncoder::Create(webrtc::VideoEncoder::kVp9), type, false); 1983 webrtc::VideoEncoder::Create(webrtc::VideoEncoder::kVp9), type, false);
1984 } else if (type == webrtc::kVideoCodecH264) { 1984 } else if (type == webrtc::kVideoCodecH264) {
1985 return AllocatedEncoder( 1985 return AllocatedEncoder(
1986 webrtc::VideoEncoder::Create(webrtc::VideoEncoder::kH264), type, false); 1986 webrtc::VideoEncoder::Create(webrtc::VideoEncoder::kH264), type, false);
1987 } 1987 }
1988 1988
1989 // This shouldn't happen, we should not be trying to create something we don't 1989 // This shouldn't happen, we should not be trying to create something we don't
1990 // support. 1990 // support.
1991 DCHECK(false); 1991 RTC_DCHECK(false);
1992 return AllocatedEncoder(NULL, webrtc::kVideoCodecUnknown, false); 1992 return AllocatedEncoder(NULL, webrtc::kVideoCodecUnknown, false);
1993 } 1993 }
1994 1994
1995 void WebRtcVideoChannel2::WebRtcVideoSendStream::DestroyVideoEncoder( 1995 void WebRtcVideoChannel2::WebRtcVideoSendStream::DestroyVideoEncoder(
1996 AllocatedEncoder* encoder) { 1996 AllocatedEncoder* encoder) {
1997 if (encoder->external) { 1997 if (encoder->external) {
1998 external_encoder_factory_->DestroyVideoEncoder(encoder->external_encoder); 1998 external_encoder_factory_->DestroyVideoEncoder(encoder->external_encoder);
1999 } 1999 }
2000 delete encoder->encoder; 2000 delete encoder->encoder;
2001 } 2001 }
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
2136 // Configured using the same parameters, do not reconfigure. 2136 // Configured using the same parameters, do not reconfigure.
2137 return; 2137 return;
2138 } 2138 }
2139 LOG(LS_INFO) << "SetDimensions: " << width << "x" << height 2139 LOG(LS_INFO) << "SetDimensions: " << width << "x" << height
2140 << (is_screencast ? " (screencast)" : " (not screencast)"); 2140 << (is_screencast ? " (screencast)" : " (not screencast)");
2141 2141
2142 last_dimensions_.width = width; 2142 last_dimensions_.width = width;
2143 last_dimensions_.height = height; 2143 last_dimensions_.height = height;
2144 last_dimensions_.is_screencast = is_screencast; 2144 last_dimensions_.is_screencast = is_screencast;
2145 2145
2146 DCHECK(!parameters_.encoder_config.streams.empty()); 2146 RTC_DCHECK(!parameters_.encoder_config.streams.empty());
2147 2147
2148 VideoCodecSettings codec_settings; 2148 VideoCodecSettings codec_settings;
2149 parameters_.codec_settings.Get(&codec_settings); 2149 parameters_.codec_settings.Get(&codec_settings);
2150 2150
2151 webrtc::VideoEncoderConfig encoder_config = 2151 webrtc::VideoEncoderConfig encoder_config =
2152 CreateVideoEncoderConfig(last_dimensions_, codec_settings.codec); 2152 CreateVideoEncoderConfig(last_dimensions_, codec_settings.codec);
2153 2153
2154 encoder_config.encoder_specific_settings = ConfigureVideoEncoderSettings( 2154 encoder_config.encoder_specific_settings = ConfigureVideoEncoderSettings(
2155 codec_settings.codec, parameters_.options, is_screencast); 2155 codec_settings.codec, parameters_.options, is_screencast);
2156 2156
2157 bool stream_reconfigured = stream_->ReconfigureVideoEncoder(encoder_config); 2157 bool stream_reconfigured = stream_->ReconfigureVideoEncoder(encoder_config);
2158 2158
2159 encoder_config.encoder_specific_settings = NULL; 2159 encoder_config.encoder_specific_settings = NULL;
2160 2160
2161 if (!stream_reconfigured) { 2161 if (!stream_reconfigured) {
2162 LOG(LS_WARNING) << "Failed to reconfigure video encoder for dimensions: " 2162 LOG(LS_WARNING) << "Failed to reconfigure video encoder for dimensions: "
2163 << width << "x" << height; 2163 << width << "x" << height;
2164 return; 2164 return;
2165 } 2165 }
2166 2166
2167 parameters_.encoder_config = encoder_config; 2167 parameters_.encoder_config = encoder_config;
2168 } 2168 }
2169 2169
2170 void WebRtcVideoChannel2::WebRtcVideoSendStream::Start() { 2170 void WebRtcVideoChannel2::WebRtcVideoSendStream::Start() {
2171 rtc::CritScope cs(&lock_); 2171 rtc::CritScope cs(&lock_);
2172 DCHECK(stream_ != NULL); 2172 RTC_DCHECK(stream_ != NULL);
2173 stream_->Start(); 2173 stream_->Start();
2174 sending_ = true; 2174 sending_ = true;
2175 } 2175 }
2176 2176
2177 void WebRtcVideoChannel2::WebRtcVideoSendStream::Stop() { 2177 void WebRtcVideoChannel2::WebRtcVideoSendStream::Stop() {
2178 rtc::CritScope cs(&lock_); 2178 rtc::CritScope cs(&lock_);
2179 if (stream_ != NULL) { 2179 if (stream_ != NULL) {
2180 stream_->Stop(); 2180 stream_->Stop();
2181 } 2181 }
2182 sending_ = false; 2182 sending_ = false;
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
2413 webrtc::VideoDecoder::Create(webrtc::VideoDecoder::kVp9), type, false); 2413 webrtc::VideoDecoder::Create(webrtc::VideoDecoder::kVp9), type, false);
2414 } 2414 }
2415 2415
2416 if (type == webrtc::kVideoCodecH264) { 2416 if (type == webrtc::kVideoCodecH264) {
2417 return AllocatedDecoder( 2417 return AllocatedDecoder(
2418 webrtc::VideoDecoder::Create(webrtc::VideoDecoder::kH264), type, false); 2418 webrtc::VideoDecoder::Create(webrtc::VideoDecoder::kH264), type, false);
2419 } 2419 }
2420 2420
2421 // This shouldn't happen, we should not be trying to create something we don't 2421 // This shouldn't happen, we should not be trying to create something we don't
2422 // support. 2422 // support.
2423 DCHECK(false); 2423 RTC_DCHECK(false);
2424 return AllocatedDecoder(NULL, webrtc::kVideoCodecUnknown, false); 2424 return AllocatedDecoder(NULL, webrtc::kVideoCodecUnknown, false);
2425 } 2425 }
2426 2426
2427 void WebRtcVideoChannel2::WebRtcVideoReceiveStream::SetRecvCodecs( 2427 void WebRtcVideoChannel2::WebRtcVideoReceiveStream::SetRecvCodecs(
2428 const std::vector<VideoCodecSettings>& recv_codecs) { 2428 const std::vector<VideoCodecSettings>& recv_codecs) {
2429 std::vector<AllocatedDecoder> old_decoders = allocated_decoders_; 2429 std::vector<AllocatedDecoder> old_decoders = allocated_decoders_;
2430 allocated_decoders_.clear(); 2430 allocated_decoders_.clear();
2431 config_.decoders.clear(); 2431 config_.decoders.clear();
2432 for (size_t i = 0; i < recv_codecs.size(); ++i) { 2432 for (size_t i = 0; i < recv_codecs.size(); ++i) {
2433 AllocatedDecoder allocated_decoder = 2433 AllocatedDecoder allocated_decoder =
(...skipping 13 matching lines...) Expand all
2447 HasNack(recv_codecs.begin()->codec) ? kNackHistoryMs : 0; 2447 HasNack(recv_codecs.begin()->codec) ? kNackHistoryMs : 0;
2448 2448
2449 ClearDecoders(&old_decoders); 2449 ClearDecoders(&old_decoders);
2450 LOG(LS_INFO) << "RecreateWebRtcStream (recv) because of SetRecvCodecs: " 2450 LOG(LS_INFO) << "RecreateWebRtcStream (recv) because of SetRecvCodecs: "
2451 << CodecSettingsVectorToString(recv_codecs); 2451 << CodecSettingsVectorToString(recv_codecs);
2452 RecreateWebRtcStream(); 2452 RecreateWebRtcStream();
2453 } 2453 }
2454 2454
2455 void WebRtcVideoChannel2::WebRtcVideoReceiveStream::SetLocalSsrc( 2455 void WebRtcVideoChannel2::WebRtcVideoReceiveStream::SetLocalSsrc(
2456 uint32_t local_ssrc) { 2456 uint32_t local_ssrc) {
2457 // TODO(pbos): Consider turning this sanity check into a DCHECK. You should 2457 // TODO(pbos): Consider turning this sanity check into a RTC_DCHECK. You
2458 // not be able to create a sender with the same SSRC as a receiver, but right 2458 // should not be able to create a sender with the same SSRC as a receiver, but
2459 // now this can't be done due to unittests depending on receiving what they 2459 // right now this can't be done due to unittests depending on receiving what
2460 // are sending from the same MediaChannel. 2460 // they are sending from the same MediaChannel.
2461 if (local_ssrc == config_.rtp.remote_ssrc) { 2461 if (local_ssrc == config_.rtp.remote_ssrc) {
2462 LOG(LS_INFO) << "Ignoring call to SetLocalSsrc because parameters are " 2462 LOG(LS_INFO) << "Ignoring call to SetLocalSsrc because parameters are "
2463 "unchanged; local_ssrc=" << local_ssrc; 2463 "unchanged; local_ssrc=" << local_ssrc;
2464 return; 2464 return;
2465 } 2465 }
2466 2466
2467 config_.rtp.local_ssrc = local_ssrc; 2467 config_.rtp.local_ssrc = local_ssrc;
2468 LOG(LS_INFO) 2468 LOG(LS_INFO)
2469 << "RecreateWebRtcStream (recv) because of SetLocalSsrc; local_ssrc=" 2469 << "RecreateWebRtcStream (recv) because of SetLocalSsrc; local_ssrc="
2470 << local_ssrc; 2470 << local_ssrc;
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
2645 rtx_payload_type == other.rtx_payload_type; 2645 rtx_payload_type == other.rtx_payload_type;
2646 } 2646 }
2647 2647
2648 bool WebRtcVideoChannel2::VideoCodecSettings::operator!=( 2648 bool WebRtcVideoChannel2::VideoCodecSettings::operator!=(
2649 const WebRtcVideoChannel2::VideoCodecSettings& other) const { 2649 const WebRtcVideoChannel2::VideoCodecSettings& other) const {
2650 return !(*this == other); 2650 return !(*this == other);
2651 } 2651 }
2652 2652
2653 std::vector<WebRtcVideoChannel2::VideoCodecSettings> 2653 std::vector<WebRtcVideoChannel2::VideoCodecSettings>
2654 WebRtcVideoChannel2::MapCodecs(const std::vector<VideoCodec>& codecs) { 2654 WebRtcVideoChannel2::MapCodecs(const std::vector<VideoCodec>& codecs) {
2655 DCHECK(!codecs.empty()); 2655 RTC_DCHECK(!codecs.empty());
2656 2656
2657 std::vector<VideoCodecSettings> video_codecs; 2657 std::vector<VideoCodecSettings> video_codecs;
2658 std::map<int, bool> payload_used; 2658 std::map<int, bool> payload_used;
2659 std::map<int, VideoCodec::CodecType> payload_codec_type; 2659 std::map<int, VideoCodec::CodecType> payload_codec_type;
2660 // |rtx_mapping| maps video payload type to rtx payload type. 2660 // |rtx_mapping| maps video payload type to rtx payload type.
2661 std::map<int, int> rtx_mapping; 2661 std::map<int, int> rtx_mapping;
2662 2662
2663 webrtc::FecConfig fec_settings; 2663 webrtc::FecConfig fec_settings;
2664 2664
2665 for (size_t i = 0; i < codecs.size(); ++i) { 2665 for (size_t i = 0; i < codecs.size(); ++i) {
2666 const VideoCodec& in_codec = codecs[i]; 2666 const VideoCodec& in_codec = codecs[i];
2667 int payload_type = in_codec.id; 2667 int payload_type = in_codec.id;
2668 2668
2669 if (payload_used[payload_type]) { 2669 if (payload_used[payload_type]) {
2670 LOG(LS_ERROR) << "Payload type already registered: " 2670 LOG(LS_ERROR) << "Payload type already registered: "
2671 << in_codec.ToString(); 2671 << in_codec.ToString();
2672 return std::vector<VideoCodecSettings>(); 2672 return std::vector<VideoCodecSettings>();
2673 } 2673 }
2674 payload_used[payload_type] = true; 2674 payload_used[payload_type] = true;
2675 payload_codec_type[payload_type] = in_codec.GetCodecType(); 2675 payload_codec_type[payload_type] = in_codec.GetCodecType();
2676 2676
2677 switch (in_codec.GetCodecType()) { 2677 switch (in_codec.GetCodecType()) {
2678 case VideoCodec::CODEC_RED: { 2678 case VideoCodec::CODEC_RED: {
2679 // RED payload type, should not have duplicates. 2679 // RED payload type, should not have duplicates.
2680 DCHECK(fec_settings.red_payload_type == -1); 2680 RTC_DCHECK(fec_settings.red_payload_type == -1);
2681 fec_settings.red_payload_type = in_codec.id; 2681 fec_settings.red_payload_type = in_codec.id;
2682 continue; 2682 continue;
2683 } 2683 }
2684 2684
2685 case VideoCodec::CODEC_ULPFEC: { 2685 case VideoCodec::CODEC_ULPFEC: {
2686 // ULPFEC payload type, should not have duplicates. 2686 // ULPFEC payload type, should not have duplicates.
2687 DCHECK(fec_settings.ulpfec_payload_type == -1); 2687 RTC_DCHECK(fec_settings.ulpfec_payload_type == -1);
2688 fec_settings.ulpfec_payload_type = in_codec.id; 2688 fec_settings.ulpfec_payload_type = in_codec.id;
2689 continue; 2689 continue;
2690 } 2690 }
2691 2691
2692 case VideoCodec::CODEC_RTX: { 2692 case VideoCodec::CODEC_RTX: {
2693 int associated_payload_type; 2693 int associated_payload_type;
2694 if (!in_codec.GetParam(kCodecParamAssociatedPayloadType, 2694 if (!in_codec.GetParam(kCodecParamAssociatedPayloadType,
2695 &associated_payload_type) || 2695 &associated_payload_type) ||
2696 !IsValidRtpPayloadType(associated_payload_type)) { 2696 !IsValidRtpPayloadType(associated_payload_type)) {
2697 LOG(LS_ERROR) 2697 LOG(LS_ERROR)
2698 << "RTX codec with invalid or no associated payload type: " 2698 << "RTX codec with invalid or no associated payload type: "
2699 << in_codec.ToString(); 2699 << in_codec.ToString();
2700 return std::vector<VideoCodecSettings>(); 2700 return std::vector<VideoCodecSettings>();
2701 } 2701 }
2702 rtx_mapping[associated_payload_type] = in_codec.id; 2702 rtx_mapping[associated_payload_type] = in_codec.id;
2703 continue; 2703 continue;
2704 } 2704 }
2705 2705
2706 case VideoCodec::CODEC_VIDEO: 2706 case VideoCodec::CODEC_VIDEO:
2707 break; 2707 break;
2708 } 2708 }
2709 2709
2710 video_codecs.push_back(VideoCodecSettings()); 2710 video_codecs.push_back(VideoCodecSettings());
2711 video_codecs.back().codec = in_codec; 2711 video_codecs.back().codec = in_codec;
2712 } 2712 }
2713 2713
2714 // One of these codecs should have been a video codec. Only having FEC 2714 // One of these codecs should have been a video codec. Only having FEC
2715 // parameters into this code is a logic error. 2715 // parameters into this code is a logic error.
2716 DCHECK(!video_codecs.empty()); 2716 RTC_DCHECK(!video_codecs.empty());
2717 2717
2718 for (std::map<int, int>::const_iterator it = rtx_mapping.begin(); 2718 for (std::map<int, int>::const_iterator it = rtx_mapping.begin();
2719 it != rtx_mapping.end(); 2719 it != rtx_mapping.end();
2720 ++it) { 2720 ++it) {
2721 if (!payload_used[it->first]) { 2721 if (!payload_used[it->first]) {
2722 LOG(LS_ERROR) << "RTX mapped to payload not in codec list."; 2722 LOG(LS_ERROR) << "RTX mapped to payload not in codec list.";
2723 return std::vector<VideoCodecSettings>(); 2723 return std::vector<VideoCodecSettings>();
2724 } 2724 }
2725 if (payload_codec_type[it->first] != VideoCodec::CODEC_VIDEO && 2725 if (payload_codec_type[it->first] != VideoCodec::CODEC_VIDEO &&
2726 payload_codec_type[it->first] != VideoCodec::CODEC_RED) { 2726 payload_codec_type[it->first] != VideoCodec::CODEC_RED) {
(...skipping 14 matching lines...) Expand all
2741 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; 2741 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id];
2742 } 2742 }
2743 } 2743 }
2744 2744
2745 return video_codecs; 2745 return video_codecs;
2746 } 2746 }
2747 2747
2748 } // namespace cricket 2748 } // namespace cricket
2749 2749
2750 #endif // HAVE_WEBRTC_VIDEO 2750 #endif // HAVE_WEBRTC_VIDEO
OLDNEW
« no previous file with comments | « talk/media/webrtc/webrtcvideocapturer.cc ('k') | talk/media/webrtc/webrtcvideoengine2_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698