|  | /* | 
|  | *  Copyright (c) 2022 The WebRTC project authors. All Rights Reserved. | 
|  | * | 
|  | *  Use of this source code is governed by a BSD-style license | 
|  | *  that can be found in the LICENSE file in the root of the source | 
|  | *  tree. An additional intellectual property rights grant can be found | 
|  | *  in the file PATENTS.  All contributing project authors may | 
|  | *  be found in the AUTHORS file in the root of the source tree. | 
|  | */ | 
|  |  | 
|  | #include "api/video_codecs/simulcast_stream.h" | 
|  |  | 
|  | #include <optional> | 
|  |  | 
|  | #include "api/video_codecs/scalability_mode.h" | 
|  | #include "rtc_base/checks.h" | 
|  |  | 
|  | namespace webrtc { | 
|  |  | 
|  | unsigned char SimulcastStream::GetNumberOfTemporalLayers() const { | 
|  | return numberOfTemporalLayers; | 
|  | } | 
|  | void SimulcastStream::SetNumberOfTemporalLayers(unsigned char n) { | 
|  | RTC_DCHECK_GE(n, 1); | 
|  | RTC_DCHECK_LE(n, 3); | 
|  | numberOfTemporalLayers = n; | 
|  | } | 
|  |  | 
|  | std::optional<ScalabilityMode> SimulcastStream::GetScalabilityMode() const { | 
|  | static const ScalabilityMode scalability_modes[3] = { | 
|  | ScalabilityMode::kL1T1, | 
|  | ScalabilityMode::kL1T2, | 
|  | ScalabilityMode::kL1T3, | 
|  | }; | 
|  | if (numberOfTemporalLayers < 1 || numberOfTemporalLayers > 3) { | 
|  | return std::nullopt; | 
|  | } | 
|  | return scalability_modes[numberOfTemporalLayers - 1]; | 
|  | } | 
|  |  | 
|  | bool SimulcastStream::operator==(const SimulcastStream& other) const { | 
|  | return (width == other.width && height == other.height && | 
|  | maxFramerate == other.maxFramerate && | 
|  | numberOfTemporalLayers == other.numberOfTemporalLayers && | 
|  | maxBitrate == other.maxBitrate && | 
|  | targetBitrate == other.targetBitrate && | 
|  | minBitrate == other.minBitrate && qpMax == other.qpMax && | 
|  | active == other.active); | 
|  | } | 
|  |  | 
|  | }  // namespace webrtc |