| /* | |
| * Copyright (c) 2012 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/video_codec.h" | |
| #include <string.h> | |
| #include <string> | |
| #include "absl/strings/match.h" | |
| #include "rtc_base/checks.h" | |
| namespace webrtc { | |
| namespace { | |
| constexpr char kPayloadNameVp8[] = "VP8"; | |
| constexpr char kPayloadNameVp9[] = "VP9"; | |
| // TODO(bugs.webrtc.org/11042): Rename to AV1 when rtp payload format for av1 is | |
| // frozen. | |
| constexpr char kPayloadNameAv1[] = "AV1X"; | |
| constexpr char kPayloadNameH264[] = "H264"; | |
| constexpr char kPayloadNameGeneric[] = "Generic"; | |
| constexpr char kPayloadNameMultiplex[] = "Multiplex"; | |
| } // namespace | |
| bool VideoCodecVP8::operator==(const VideoCodecVP8& other) const { | |
| return (complexity == other.complexity && | |
| numberOfTemporalLayers == other.numberOfTemporalLayers && | |
| denoisingOn == other.denoisingOn && | |
| automaticResizeOn == other.automaticResizeOn && | |
| frameDroppingOn == other.frameDroppingOn && | |
| keyFrameInterval == other.keyFrameInterval); | |
| } | |
| bool VideoCodecVP9::operator==(const VideoCodecVP9& other) const { | |
| return (complexity == other.complexity && | |
| numberOfTemporalLayers == other.numberOfTemporalLayers && | |
| denoisingOn == other.denoisingOn && | |
| frameDroppingOn == other.frameDroppingOn && | |
| keyFrameInterval == other.keyFrameInterval && | |
| adaptiveQpMode == other.adaptiveQpMode && | |
| automaticResizeOn == other.automaticResizeOn && | |
| numberOfSpatialLayers == other.numberOfSpatialLayers && | |
| flexibleMode == other.flexibleMode); | |
| } | |
| bool VideoCodecH264::operator==(const VideoCodecH264& other) const { | |
| return (frameDroppingOn == other.frameDroppingOn && | |
| keyFrameInterval == other.keyFrameInterval && | |
| numberOfTemporalLayers == other.numberOfTemporalLayers); | |
| } | |
| bool SpatialLayer::operator==(const SpatialLayer& 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); | |
| } | |
| VideoCodec::VideoCodec() | |
| : codecType(kVideoCodecGeneric), | |
| plType(0), | |
| width(0), | |
| height(0), | |
| startBitrate(0), | |
| maxBitrate(0), | |
| minBitrate(0), | |
| maxFramerate(0), | |
| active(true), | |
| qpMax(0), | |
| numberOfSimulcastStreams(0), | |
| simulcastStream(), | |
| spatialLayers(), | |
| mode(VideoCodecMode::kRealtimeVideo), | |
| expect_encode_from_texture(false), | |
| timing_frame_thresholds({0, 0}), | |
| codec_specific_() {} | |
| VideoCodecVP8* VideoCodec::VP8() { | |
| RTC_DCHECK_EQ(codecType, kVideoCodecVP8); | |
| return &codec_specific_.VP8; | |
| } | |
| const VideoCodecVP8& VideoCodec::VP8() const { | |
| RTC_DCHECK_EQ(codecType, kVideoCodecVP8); | |
| return codec_specific_.VP8; | |
| } | |
| VideoCodecVP9* VideoCodec::VP9() { | |
| RTC_DCHECK_EQ(codecType, kVideoCodecVP9); | |
| return &codec_specific_.VP9; | |
| } | |
| const VideoCodecVP9& VideoCodec::VP9() const { | |
| RTC_DCHECK_EQ(codecType, kVideoCodecVP9); | |
| return codec_specific_.VP9; | |
| } | |
| VideoCodecH264* VideoCodec::H264() { | |
| RTC_DCHECK_EQ(codecType, kVideoCodecH264); | |
| return &codec_specific_.H264; | |
| } | |
| const VideoCodecH264& VideoCodec::H264() const { | |
| RTC_DCHECK_EQ(codecType, kVideoCodecH264); | |
| return codec_specific_.H264; | |
| } | |
| const char* CodecTypeToPayloadString(VideoCodecType type) { | |
| switch (type) { | |
| case kVideoCodecVP8: | |
| return kPayloadNameVp8; | |
| case kVideoCodecVP9: | |
| return kPayloadNameVp9; | |
| case kVideoCodecAV1: | |
| return kPayloadNameAv1; | |
| case kVideoCodecH264: | |
| return kPayloadNameH264; | |
| case kVideoCodecMultiplex: | |
| return kPayloadNameMultiplex; | |
| case kVideoCodecGeneric: | |
| return kPayloadNameGeneric; | |
| } | |
| } | |
| VideoCodecType PayloadStringToCodecType(const std::string& name) { | |
| if (absl::EqualsIgnoreCase(name, kPayloadNameVp8)) | |
| return kVideoCodecVP8; | |
| if (absl::EqualsIgnoreCase(name, kPayloadNameVp9)) | |
| return kVideoCodecVP9; | |
| if (absl::EqualsIgnoreCase(name, kPayloadNameAv1)) | |
| return kVideoCodecAV1; | |
| if (absl::EqualsIgnoreCase(name, kPayloadNameH264)) | |
| return kVideoCodecH264; | |
| if (absl::EqualsIgnoreCase(name, kPayloadNameMultiplex)) | |
| return kVideoCodecMultiplex; | |
| return kVideoCodecGeneric; | |
| } | |
| } // namespace webrtc |