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

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

Issue 2483173002: Negotiate H264 profiles in SDP (Closed)
Patch Set: Extract IsSameH264Profile and don't check payload type in FindMatchingCodec Created 4 years, 1 month 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
(...skipping 620 matching lines...) Expand 10 before | Expand all | Expand 10 after
631 std::stringstream out; 631 std::stringstream out;
632 const std::vector<VideoCodec>& codecs = 632 const std::vector<VideoCodec>& codecs =
633 external_encoder_factory->supported_codecs(); 633 external_encoder_factory->supported_codecs();
634 for (size_t i = 0; i < codecs.size(); ++i) { 634 for (size_t i = 0; i < codecs.size(); ++i) {
635 VideoCodec codec = codecs[i]; 635 VideoCodec codec = codecs[i];
636 out << codec.name; 636 out << codec.name;
637 if (i != codecs.size() - 1) { 637 if (i != codecs.size() - 1) {
638 out << ", "; 638 out << ", ";
639 } 639 }
640 // Don't add internally-supported codecs twice. 640 // Don't add internally-supported codecs twice.
641 if (IsCodecSupported(supported_codecs, codec)) 641 if (FindMatchingCodec(supported_codecs, codec))
642 continue; 642 continue;
643 643
644 // External video encoders are given payloads 120-127. This also means that 644 // External video encoders are given payloads 120-127. This also means that
645 // we only support up to 8 external payload types. 645 // we only support up to 8 external payload types.
646 // TODO(deadbeef): mediasession.cc already has code to dynamically 646 // TODO(deadbeef): mediasession.cc already has code to dynamically
647 // determine a payload type. We should be able to just leave the payload 647 // determine a payload type. We should be able to just leave the payload
648 // type empty and let mediasession determine it. However, currently RTX 648 // type empty and let mediasession determine it. However, currently RTX
649 // codecs are associated to codecs by payload type, meaning we DO need 649 // codecs are associated to codecs by payload type, meaning we DO need
650 // to allocate unique payload types here. So to make this change we would 650 // to allocate unique payload types here. So to make this change we would
651 // need to make RTX codecs associated by name instead. 651 // need to make RTX codecs associated by name instead.
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
692 delete kv.second; 692 delete kv.second;
693 } 693 }
694 694
695 rtc::Optional<WebRtcVideoChannel2::VideoCodecSettings> 695 rtc::Optional<WebRtcVideoChannel2::VideoCodecSettings>
696 WebRtcVideoChannel2::SelectSendVideoCodec( 696 WebRtcVideoChannel2::SelectSendVideoCodec(
697 const std::vector<VideoCodecSettings>& remote_mapped_codecs) const { 697 const std::vector<VideoCodecSettings>& remote_mapped_codecs) const {
698 const std::vector<VideoCodec> local_supported_codecs = 698 const std::vector<VideoCodec> local_supported_codecs =
699 GetSupportedCodecs(external_encoder_factory_); 699 GetSupportedCodecs(external_encoder_factory_);
700 // Select the first remote codec that is supported locally. 700 // Select the first remote codec that is supported locally.
701 for (const VideoCodecSettings& remote_mapped_codec : remote_mapped_codecs) { 701 for (const VideoCodecSettings& remote_mapped_codec : remote_mapped_codecs) {
702 if (IsCodecSupported(local_supported_codecs, remote_mapped_codec.codec)) 702 // For H264, we will limit the encode level to the remote offered level
703 // regardless if level asymmetry is allowed or not. This is strictly not
704 // following the spec in https://tools.ietf.org/html/rfc6184#section-8.2.2
705 // since we should limit the encode level to the lower of local and remote
706 // level when level asymmetry is not allowed.
707 if (FindMatchingCodec(local_supported_codecs, remote_mapped_codec.codec))
703 return rtc::Optional<VideoCodecSettings>(remote_mapped_codec); 708 return rtc::Optional<VideoCodecSettings>(remote_mapped_codec);
704 } 709 }
705 // No remote codec was supported. 710 // No remote codec was supported.
706 return rtc::Optional<VideoCodecSettings>(); 711 return rtc::Optional<VideoCodecSettings>();
707 } 712 }
708 713
709 bool WebRtcVideoChannel2::ReceiveCodecsHaveChanged( 714 bool WebRtcVideoChannel2::ReceiveCodecsHaveChanged(
710 std::vector<VideoCodecSettings> before, 715 std::vector<VideoCodecSettings> before,
711 std::vector<VideoCodecSettings> after) { 716 std::vector<VideoCodecSettings> after) {
712 if (before.size() != after.size()) { 717 if (before.size() != after.size()) {
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
948 MapCodecs(params.codecs); 953 MapCodecs(params.codecs);
949 if (mapped_codecs.empty()) { 954 if (mapped_codecs.empty()) {
950 LOG(LS_ERROR) << "SetRecvParameters called without any video codecs."; 955 LOG(LS_ERROR) << "SetRecvParameters called without any video codecs.";
951 return false; 956 return false;
952 } 957 }
953 958
954 // Verify that every mapped codec is supported locally. 959 // Verify that every mapped codec is supported locally.
955 const std::vector<VideoCodec> local_supported_codecs = 960 const std::vector<VideoCodec> local_supported_codecs =
956 GetSupportedCodecs(external_encoder_factory_); 961 GetSupportedCodecs(external_encoder_factory_);
957 for (const VideoCodecSettings& mapped_codec : mapped_codecs) { 962 for (const VideoCodecSettings& mapped_codec : mapped_codecs) {
958 if (!IsCodecSupported(local_supported_codecs, mapped_codec.codec)) { 963 if (!FindMatchingCodec(local_supported_codecs, mapped_codec.codec)) {
959 LOG(LS_ERROR) << "SetRecvParameters called with unsupported video codec: " 964 LOG(LS_ERROR) << "SetRecvParameters called with unsupported video codec: "
960 << mapped_codec.codec.ToString(); 965 << mapped_codec.codec.ToString();
961 return false; 966 return false;
962 } 967 }
963 } 968 }
964 969
965 if (ReceiveCodecsHaveChanged(recv_codecs_, mapped_codecs)) { 970 if (ReceiveCodecsHaveChanged(recv_codecs_, mapped_codecs)) {
966 changed_params->codec_settings = 971 changed_params->codec_settings =
967 rtc::Optional<std::vector<VideoCodecSettings>>(mapped_codecs); 972 rtc::Optional<std::vector<VideoCodecSettings>>(mapped_codecs);
968 } 973 }
(...skipping 1578 matching lines...) Expand 10 before | Expand all | Expand 10 after
2547 rtx_mapping[video_codecs[i].codec.id] != 2552 rtx_mapping[video_codecs[i].codec.id] !=
2548 ulpfec_config.red_payload_type) { 2553 ulpfec_config.red_payload_type) {
2549 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; 2554 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id];
2550 } 2555 }
2551 } 2556 }
2552 2557
2553 return video_codecs; 2558 return video_codecs;
2554 } 2559 }
2555 2560
2556 } // namespace cricket 2561 } // namespace cricket
OLDNEW
« no previous file with comments | « webrtc/media/engine/fakewebrtcvideoengine.h ('k') | webrtc/media/engine/webrtcvideoengine2_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698