Before this CL VP8 and AV1 used the same max QP=56. Tests show that at this QP AV1 delivers a worse PSNR than VP8. We want AV1 min quality to be not worse than VP8. This CL reduces the default max QP for AV1 to 52. With this value libaom AV1 encoder delivers PSNR close to libvpx VP8 at QP 56. Bug: webrtc:351644568, b/369540380 Change-Id: I2e27ddab562f9c9710b11dc09076b03d7b308bb0 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/374041 Commit-Queue: Sergey Silkin <ssilkin@webrtc.org> Reviewed-by: Erik Språng <sprang@webrtc.org> Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> Cr-Commit-Position: refs/heads/main@{#43751}
152 lines
5.5 KiB
C++
152 lines
5.5 KiB
C++
/*
|
|
* 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 "media/base/media_constants.h"
|
|
|
|
namespace cricket {
|
|
|
|
const int kVideoCodecClockrate = 90000;
|
|
|
|
const int kVideoMtu = 1200;
|
|
const int kVideoRtpSendBufferSize = 262144;
|
|
const int kVideoRtpRecvBufferSize = 1048576;
|
|
|
|
const float kHighSystemCpuThreshold = 0.85f;
|
|
const float kLowSystemCpuThreshold = 0.65f;
|
|
const float kProcessCpuThreshold = 0.10f;
|
|
|
|
const char kRedCodecName[] = "red";
|
|
const char kUlpfecCodecName[] = "ulpfec";
|
|
|
|
// TODO(brandtr): Change this to 'flexfec' when we are confident that the
|
|
// header format is not changing anymore.
|
|
const char kFlexfecCodecName[] = "flexfec-03";
|
|
|
|
// draft-ietf-payload-flexible-fec-scheme-02.txt
|
|
const char kFlexfecFmtpRepairWindow[] = "repair-window";
|
|
|
|
// RFC 4588 RTP Retransmission Payload Format
|
|
const char kRtxCodecName[] = "rtx";
|
|
const char kCodecParamRtxTime[] = "rtx-time";
|
|
const char kCodecParamAssociatedPayloadType[] = "apt";
|
|
|
|
const char kCodecParamAssociatedCodecName[] = "acn";
|
|
// Parameters that do not follow the key-value convention
|
|
// are treated as having the empty string as key.
|
|
const char kCodecParamNotInNameValueFormat[] = "";
|
|
|
|
const char kOpusCodecName[] = "opus";
|
|
const char kL16CodecName[] = "L16";
|
|
const char kG722CodecName[] = "G722";
|
|
const char kIlbcCodecName[] = "ILBC";
|
|
const char kPcmuCodecName[] = "PCMU";
|
|
const char kPcmaCodecName[] = "PCMA";
|
|
const char kCnCodecName[] = "CN";
|
|
const char kDtmfCodecName[] = "telephone-event";
|
|
|
|
// draft-spittka-payload-rtp-opus-03.txt
|
|
const char kCodecParamPTime[] = "ptime";
|
|
const char kCodecParamMaxPTime[] = "maxptime";
|
|
const char kCodecParamMinPTime[] = "minptime";
|
|
const char kCodecParamSPropStereo[] = "sprop-stereo";
|
|
const char kCodecParamStereo[] = "stereo";
|
|
const char kCodecParamUseInbandFec[] = "useinbandfec";
|
|
const char kCodecParamUseDtx[] = "usedtx";
|
|
const char kCodecParamMaxAverageBitrate[] = "maxaveragebitrate";
|
|
const char kCodecParamMaxPlaybackRate[] = "maxplaybackrate";
|
|
|
|
const char kParamValueTrue[] = "1";
|
|
const char kParamValueEmpty[] = "";
|
|
|
|
const int kOpusDefaultMaxPTime = 120;
|
|
const int kOpusDefaultPTime = 20;
|
|
const int kOpusDefaultMinPTime = 3;
|
|
const int kOpusDefaultSPropStereo = 0;
|
|
const int kOpusDefaultStereo = 0;
|
|
const int kOpusDefaultUseInbandFec = 0;
|
|
const int kOpusDefaultUseDtx = 0;
|
|
const int kOpusDefaultMaxPlaybackRate = 48000;
|
|
|
|
const int kPreferredMaxPTime = 120;
|
|
const int kPreferredMinPTime = 10;
|
|
const int kPreferredSPropStereo = 0;
|
|
const int kPreferredStereo = 0;
|
|
const int kPreferredUseInbandFec = 0;
|
|
|
|
const char kPacketizationParamRaw[] = "raw";
|
|
|
|
const char kRtcpFbParamLntf[] = "goog-lntf";
|
|
const char kRtcpFbParamNack[] = "nack";
|
|
const char kRtcpFbNackParamPli[] = "pli";
|
|
const char kRtcpFbParamRemb[] = "goog-remb";
|
|
const char kRtcpFbParamTransportCc[] = "transport-cc";
|
|
|
|
const char kRtcpFbParamCcm[] = "ccm";
|
|
const char kRtcpFbCcmParamFir[] = "fir";
|
|
const char kRtcpFbParamRrtr[] = "rrtr";
|
|
const char kCodecParamMaxBitrate[] = "x-google-max-bitrate";
|
|
const char kCodecParamMinBitrate[] = "x-google-min-bitrate";
|
|
const char kCodecParamStartBitrate[] = "x-google-start-bitrate";
|
|
const char kCodecParamMaxQuantization[] = "x-google-max-quantization";
|
|
const char kCodecParamPerLayerPictureLossIndication[] =
|
|
"x-google-per-layer-pli";
|
|
|
|
const char kComfortNoiseCodecName[] = "CN";
|
|
|
|
const char kVp8CodecName[] = "VP8";
|
|
const char kVp9CodecName[] = "VP9";
|
|
const char kAv1CodecName[] = "AV1";
|
|
const char kH264CodecName[] = "H264";
|
|
const char kH265CodecName[] = "H265";
|
|
|
|
// RFC 6184 RTP Payload Format for H.264 video
|
|
const char kH264FmtpProfileLevelId[] = "profile-level-id";
|
|
const char kH264FmtpLevelAsymmetryAllowed[] = "level-asymmetry-allowed";
|
|
const char kH264FmtpPacketizationMode[] = "packetization-mode";
|
|
const char kH264FmtpSpropParameterSets[] = "sprop-parameter-sets";
|
|
const char kH264FmtpSpsPpsIdrInKeyframe[] = "sps-pps-idr-in-keyframe";
|
|
const char kH264ProfileLevelConstrainedBaseline[] = "42e01f";
|
|
const char kH264ProfileLevelConstrainedHigh[] = "640c1f";
|
|
|
|
// RFC 7798 RTP Payload Format for H.265 video
|
|
const char kH265FmtpProfileSpace[] = "profile-space";
|
|
const char kH265FmtpTierFlag[] = "tier-flag";
|
|
const char kH265FmtpProfileId[] = "profile-id";
|
|
const char kH265FmtpLevelId[] = "level-id";
|
|
const char kH265FmtpProfileCompatibilityIndicator[] =
|
|
"profile-compatibility-indicator";
|
|
const char kH265FmtpInteropConstraints[] = "interop-constraints";
|
|
const char kH265FmtpTxMode[] = "tx-mode";
|
|
|
|
// draft-ietf-payload-vp9
|
|
const char kVP9ProfileId[] = "profile-id";
|
|
|
|
// https://aomediacodec.github.io/av1-rtp-spec/
|
|
const char kAv1FmtpProfile[] = "profile";
|
|
const char kAv1FmtpLevelIdx[] = "level-idx";
|
|
const char kAv1FmtpTier[] = "tier";
|
|
|
|
const int kDefaultVideoMaxFramerate = 60;
|
|
// Max encode quantizer for VP8/9 and AV1 encoders assuming libvpx/libaom API
|
|
// range [0, 63]
|
|
const int kDefaultVideoMaxQpVpx = 56;
|
|
const int kDefaultVideoMaxQpAv1 = 52;
|
|
// Max encode quantizer for H264/5 assuming the bitstream range [0, 51].
|
|
const int kDefaultVideoMaxQpH26x = 51;
|
|
|
|
const size_t kConferenceMaxNumSpatialLayers = 3;
|
|
const size_t kConferenceMaxNumTemporalLayers = 3;
|
|
const size_t kConferenceDefaultNumTemporalLayers = 3;
|
|
|
|
// RFC 3556 and RFC 3890
|
|
const char kApplicationSpecificBandwidth[] = "AS";
|
|
const char kTransportSpecificBandwidth[] = "TIAS";
|
|
} // namespace cricket
|