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

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

Issue 1327933002: Full impl of NnChannel::SetSendParameters and NnChannel::SetRecvParameters (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 604 matching lines...) Expand 10 before | Expand all | Expand 10 after
615 return true; 615 return true;
616 } 616 }
617 617
618 WebRtcVideoChannel2* WebRtcVideoEngine2::CreateChannel( 618 WebRtcVideoChannel2* WebRtcVideoEngine2::CreateChannel(
619 const VideoOptions& options, 619 const VideoOptions& options,
620 VoiceMediaChannel* voice_channel) { 620 VoiceMediaChannel* voice_channel) {
621 DCHECK(initialized_); 621 DCHECK(initialized_);
622 LOG(LS_INFO) << "CreateChannel: " 622 LOG(LS_INFO) << "CreateChannel: "
623 << (voice_channel != NULL ? "With" : "Without") 623 << (voice_channel != NULL ? "With" : "Without")
624 << " voice channel. Options: " << options.ToString(); 624 << " voice channel. Options: " << options.ToString();
625 WebRtcVideoChannel2* channel = 625 return new WebRtcVideoChannel2(call_factory_, voice_engine_,
626 new WebRtcVideoChannel2(call_factory_, voice_engine_, 626 static_cast<WebRtcVoiceMediaChannel*>(voice_channel), options,
627 static_cast<WebRtcVoiceMediaChannel*>(voice_channel), options, 627 video_codecs_, external_encoder_factory_, external_decoder_factory_);
628 external_encoder_factory_, external_decoder_factory_);
629 if (!channel->Init()) {
630 delete channel;
631 return NULL;
632 }
633 channel->SetRecvCodecs(video_codecs_);
634 return channel;
635 } 628 }
636 629
637 const std::vector<VideoCodec>& WebRtcVideoEngine2::codecs() const { 630 const std::vector<VideoCodec>& WebRtcVideoEngine2::codecs() const {
638 return video_codecs_; 631 return video_codecs_;
639 } 632 }
640 633
641 const std::vector<RtpHeaderExtension>& 634 const std::vector<RtpHeaderExtension>&
642 WebRtcVideoEngine2::rtp_header_extensions() const { 635 WebRtcVideoEngine2::rtp_header_extensions() const {
643 return rtp_header_extensions_; 636 return rtp_header_extensions_;
644 } 637 }
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
785 supported_codecs.push_back(codec); 778 supported_codecs.push_back(codec);
786 } 779 }
787 return supported_codecs; 780 return supported_codecs;
788 } 781 }
789 782
790 WebRtcVideoChannel2::WebRtcVideoChannel2( 783 WebRtcVideoChannel2::WebRtcVideoChannel2(
791 WebRtcCallFactory* call_factory, 784 WebRtcCallFactory* call_factory,
792 WebRtcVoiceEngine* voice_engine, 785 WebRtcVoiceEngine* voice_engine,
793 WebRtcVoiceMediaChannel* voice_channel, 786 WebRtcVoiceMediaChannel* voice_channel,
794 const VideoOptions& options, 787 const VideoOptions& options,
788 const std::vector<VideoCodec>& recv_codecs,
795 WebRtcVideoEncoderFactory* external_encoder_factory, 789 WebRtcVideoEncoderFactory* external_encoder_factory,
796 WebRtcVideoDecoderFactory* external_decoder_factory) 790 WebRtcVideoDecoderFactory* external_decoder_factory)
797 : unsignalled_ssrc_handler_(&default_unsignalled_ssrc_handler_), 791 : unsignalled_ssrc_handler_(&default_unsignalled_ssrc_handler_),
798 voice_channel_(voice_channel), 792 voice_channel_(voice_channel),
799 voice_channel_id_(voice_channel ? voice_channel->voe_channel() : -1), 793 voice_channel_id_(voice_channel ? voice_channel->voe_channel() : -1),
800 external_encoder_factory_(external_encoder_factory), 794 external_encoder_factory_(external_encoder_factory),
801 external_decoder_factory_(external_decoder_factory) { 795 external_decoder_factory_(external_decoder_factory) {
802 DCHECK(thread_checker_.CalledOnValidThread()); 796 DCHECK(thread_checker_.CalledOnValidThread());
803 SetDefaultOptions(); 797 SetDefaultOptions();
804 options_.SetAll(options); 798 options_.SetAll(options);
805 options_.cpu_overuse_detection.Get(&signal_cpu_adaptation_); 799 options_.cpu_overuse_detection.Get(&signal_cpu_adaptation_);
806 webrtc::Call::Config config; 800 webrtc::Call::Config config;
807 if (voice_engine != NULL) { 801 if (voice_engine != NULL) {
808 config.voice_engine = voice_engine->voe()->engine(); 802 config.voice_engine = voice_engine->voe()->engine();
809 } 803 }
810 config.bitrate_config.min_bitrate_bps = kMinBandwidthBps; 804 config.bitrate_config.min_bitrate_bps = kMinBandwidthBps;
811 config.bitrate_config.start_bitrate_bps = kStartBandwidthBps; 805 config.bitrate_config.start_bitrate_bps = kStartBandwidthBps;
812 config.bitrate_config.max_bitrate_bps = kMaxBandwidthBps; 806 config.bitrate_config.max_bitrate_bps = kMaxBandwidthBps;
813 call_.reset(call_factory->CreateCall(config)); 807 call_.reset(call_factory->CreateCall(config));
814 if (voice_channel_) { 808 if (voice_channel_) {
815 voice_channel_->SetCall(call_.get()); 809 voice_channel_->SetCall(call_.get());
816 } 810 }
817 rtcp_receiver_report_ssrc_ = kDefaultRtcpReceiverReportSsrc; 811 rtcp_receiver_report_ssrc_ = kDefaultRtcpReceiverReportSsrc;
818 sending_ = false; 812 sending_ = false;
819 default_send_ssrc_ = 0; 813 default_send_ssrc_ = 0;
814 SetRecvCodecs(recv_codecs);
pthatcher1 2015/09/14 19:42:02 What if SetRecvCodecs fails?
820 } 815 }
821 816
822 void WebRtcVideoChannel2::SetDefaultOptions() { 817 void WebRtcVideoChannel2::SetDefaultOptions() {
823 options_.cpu_overuse_detection.Set(true); 818 options_.cpu_overuse_detection.Set(true);
824 options_.dscp.Set(false); 819 options_.dscp.Set(false);
825 options_.suspend_below_min_bitrate.Set(false); 820 options_.suspend_below_min_bitrate.Set(false);
826 options_.video_noise_reduction.Set(true); 821 options_.video_noise_reduction.Set(true);
827 options_.screencast_min_bitrate.Set(0); 822 options_.screencast_min_bitrate.Set(0);
828 } 823 }
829 824
830 WebRtcVideoChannel2::~WebRtcVideoChannel2() { 825 WebRtcVideoChannel2::~WebRtcVideoChannel2() {
831 DetachVoiceChannel(); 826 DetachVoiceChannel();
832 for (auto& kv : send_streams_) 827 for (auto& kv : send_streams_)
833 delete kv.second; 828 delete kv.second;
834 for (auto& kv : receive_streams_) 829 for (auto& kv : receive_streams_)
835 delete kv.second; 830 delete kv.second;
836 } 831 }
837 832
838 bool WebRtcVideoChannel2::Init() { return true; }
839
840 void WebRtcVideoChannel2::DetachVoiceChannel() { 833 void WebRtcVideoChannel2::DetachVoiceChannel() {
841 DCHECK(thread_checker_.CalledOnValidThread()); 834 DCHECK(thread_checker_.CalledOnValidThread());
842 if (voice_channel_) { 835 if (voice_channel_) {
843 voice_channel_->SetCall(nullptr); 836 voice_channel_->SetCall(nullptr);
844 voice_channel_ = nullptr; 837 voice_channel_ = nullptr;
845 } 838 }
846 } 839 }
847 840
848 bool WebRtcVideoChannel2::CodecIsExternallySupported( 841 bool WebRtcVideoChannel2::CodecIsExternallySupported(
849 const std::string& name) const { 842 const std::string& name) const {
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
935 out << ", "; 928 out << ", ";
936 } 929 }
937 } 930 }
938 out << '}'; 931 out << '}';
939 return out.str(); 932 return out.str();
940 } 933 }
941 934
942 bool WebRtcVideoChannel2::SetRecvCodecs(const std::vector<VideoCodec>& codecs) { 935 bool WebRtcVideoChannel2::SetRecvCodecs(const std::vector<VideoCodec>& codecs) {
943 TRACE_EVENT0("webrtc", "WebRtcVideoChannel2::SetRecvCodecs"); 936 TRACE_EVENT0("webrtc", "WebRtcVideoChannel2::SetRecvCodecs");
944 LOG(LS_INFO) << "SetRecvCodecs: " << CodecVectorToString(codecs); 937 LOG(LS_INFO) << "SetRecvCodecs: " << CodecVectorToString(codecs);
938 if (codecs.empty()) {
939 return true;
940 }
pthatcher1 2015/09/14 19:42:02 I think this should be handled by the caller of Se
the sun 2015/09/14 19:58:00 I was wondering about wether it should be at all l
pthatcher1 2015/09/16 03:45:30 I think leaving this here as-is just for unit test
945 if (!ValidateCodecFormats(codecs)) { 941 if (!ValidateCodecFormats(codecs)) {
946 return false; 942 return false;
947 } 943 }
948 944
949 const std::vector<VideoCodecSettings> mapped_codecs = MapCodecs(codecs); 945 const std::vector<VideoCodecSettings> mapped_codecs = MapCodecs(codecs);
950 if (mapped_codecs.empty()) { 946 if (mapped_codecs.empty()) {
951 LOG(LS_ERROR) << "SetRecvCodecs called without any video codecs."; 947 LOG(LS_ERROR) << "SetRecvCodecs called without any video codecs.";
952 return false; 948 return false;
953 } 949 }
954 950
(...skipping 24 matching lines...) Expand all
979 ++it) { 975 ++it) {
980 it->second->SetRecvCodecs(recv_codecs_); 976 it->second->SetRecvCodecs(recv_codecs_);
981 } 977 }
982 978
983 return true; 979 return true;
984 } 980 }
985 981
986 bool WebRtcVideoChannel2::SetSendCodecs(const std::vector<VideoCodec>& codecs) { 982 bool WebRtcVideoChannel2::SetSendCodecs(const std::vector<VideoCodec>& codecs) {
987 TRACE_EVENT0("webrtc", "WebRtcVideoChannel2::SetSendCodecs"); 983 TRACE_EVENT0("webrtc", "WebRtcVideoChannel2::SetSendCodecs");
988 LOG(LS_INFO) << "SetSendCodecs: " << CodecVectorToString(codecs); 984 LOG(LS_INFO) << "SetSendCodecs: " << CodecVectorToString(codecs);
985 if (codecs.empty()) {
986 return true;
987 }
989 if (!ValidateCodecFormats(codecs)) { 988 if (!ValidateCodecFormats(codecs)) {
990 return false; 989 return false;
991 } 990 }
992 991
993 const std::vector<VideoCodecSettings> supported_codecs = 992 const std::vector<VideoCodecSettings> supported_codecs =
994 FilterSupportedCodecs(MapCodecs(codecs)); 993 FilterSupportedCodecs(MapCodecs(codecs));
995 994
996 if (supported_codecs.empty()) { 995 if (supported_codecs.empty()) {
997 LOG(LS_ERROR) << "No video codecs supported."; 996 LOG(LS_ERROR) << "No video codecs supported.";
998 return false; 997 return false;
(...skipping 1789 matching lines...) Expand 10 before | Expand all | Expand 10 after
2788 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; 2787 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id];
2789 } 2788 }
2790 } 2789 }
2791 2790
2792 return video_codecs; 2791 return video_codecs;
2793 } 2792 }
2794 2793
2795 } // namespace cricket 2794 } // namespace cricket
2796 2795
2797 #endif // HAVE_WEBRTC_VIDEO 2796 #endif // HAVE_WEBRTC_VIDEO
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698