1 /* 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3 * 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 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #ifndef WEBRTC_MODULES_VIDEO_CODING_SOURCE_QM_SELECT_DATA_H_ 12 #define WEBRTC_MODULES_VIDEO_CODING_SOURCE_QM_SELECT_DATA_H_ 13 14 /*************************************************************** 15 *QMSelectData.h 16 * This file includes parameters for content-aware media optimization 17 ****************************************************************/ 18 19 #include "webrtc/typedefs.h" 20 21 namespace webrtc { 22 // 23 // PARAMETERS FOR RESOLUTION ADAPTATION 24 // 25 26 // Initial level of buffer in secs. 27 const float kInitBufferLevel = 0.5f; 28 29 // Threshold of (max) buffer size below which we consider too low (underflow). 30 const float kPercBufferThr = 0.10f; 31 32 // Threshold on the occurrences of low buffer levels. 33 const float kMaxBufferLow = 0.30f; 34 35 // Threshold on rate mismatch. 36 const float kMaxRateMisMatch = 0.5f; 37 38 // Threshold on amount of under/over encoder shooting. 39 const float kRateOverShoot = 0.75f; 40 const float kRateUnderShoot = 0.75f; 41 42 // Factor to favor weighting the average rates with the current/last data. 43 const float kWeightRate = 0.70f; 44 45 // Factor for transitional rate for going back up in resolution. 46 const float kTransRateScaleUpSpatial = 1.25f; 47 const float kTransRateScaleUpTemp = 1.25f; 48 const float kTransRateScaleUpSpatialTemp = 1.25f; 49 50 // Threshold on packet loss rate, above which favor resolution reduction. 51 const float kPacketLossThr = 0.1f; 52 53 // Factor for reducing transitional bitrate under packet loss. 54 const float kPacketLossRateFac = 1.0f; 55 56 // Maximum possible transitional rate for down-sampling: 57 // (units in kbps), for 30fps. 58 const uint16_t kMaxRateQm[9] = { 59 0, // QCIF 60 50, // kHCIF 61 125, // kQVGA 62 200, // CIF 63 280, // HVGA 64 400, // VGA 65 700, // QFULLHD 66 1000, // WHD 67 1500 // FULLHD 68 }; 69 70 // Frame rate scale for maximum transition rate. 71 const float kFrameRateFac[4] = { 72 0.5f, // Low 73 0.7f, // Middle level 1 74 0.85f, // Middle level 2 75 1.0f, // High 76 }; 77 78 // Scale for transitional rate: based on content class 79 // motion=L/H/D,spatial==L/H/D: for low, high, middle levels 80 const float kScaleTransRateQm[18] = { 81 // VGA and lower 82 0.40f, // L, L 83 0.50f, // L, H 84 0.40f, // L, D 85 0.60f, // H ,L 86 0.60f, // H, H 87 0.60f, // H, D 88 0.50f, // D, L 89 0.50f, // D, D 90 0.50f, // D, H 91 92 // over VGA 93 0.40f, // L, L 94 0.50f, // L, H 95 0.40f, // L, D 96 0.60f, // H ,L 97 0.60f, // H, H 98 0.60f, // H, D 99 0.50f, // D, L 100 0.50f, // D, D 101 0.50f, // D, H 102 }; 103 104 // Threshold on the target rate relative to transitional rate. 105 const float kFacLowRate = 0.5f; 106 107 // Action for down-sampling: 108 // motion=L/H/D,spatial==L/H/D, for low, high, middle levels; 109 // rate = 0/1/2, for target rate state relative to transition rate. 110 const uint8_t kSpatialAction[27] = { 111 // rateClass = 0: 112 1, // L, L 113 1, // L, H 114 1, // L, D 115 4, // H ,L 116 1, // H, H 117 4, // H, D 118 4, // D, L 119 1, // D, H 120 2, // D, D 121 122 // rateClass = 1: 123 1, // L, L 124 1, // L, H 125 1, // L, D 126 2, // H ,L 127 1, // H, H 128 2, // H, D 129 2, // D, L 130 1, // D, H 131 2, // D, D 132 133 // rateClass = 2: 134 1, // L, L 135 1, // L, H 136 1, // L, D 137 2, // H ,L 138 1, // H, H 139 2, // H, D 140 2, // D, L 141 1, // D, H 142 2, // D, D 143 }; 144 145 const uint8_t kTemporalAction[27] = { 146 // rateClass = 0: 147 3, // L, L 148 2, // L, H 149 2, // L, D 150 1, // H ,L 151 3, // H, H 152 1, // H, D 153 1, // D, L 154 2, // D, H 155 1, // D, D 156 157 // rateClass = 1: 158 3, // L, L 159 3, // L, H 160 3, // L, D 161 1, // H ,L 162 3, // H, H 163 1, // H, D 164 1, // D, L 165 3, // D, H 166 1, // D, D 167 168 // rateClass = 2: 169 1, // L, L 170 3, // L, H 171 3, // L, D 172 1, // H ,L 173 3, // H, H 174 1, // H, D 175 1, // D, L 176 3, // D, H 177 1, // D, D 178 }; 179 180 // Control the total amount of down-sampling allowed. 181 const float kMaxSpatialDown = 8.0f; 182 const float kMaxTempDown = 3.0f; 183 const float kMaxTotalDown = 9.0f; 184 185 // Minimum image size for a spatial down-sampling. 186 const int kMinImageSize = 176 * 144; 187 188 // Minimum frame rate for temporal down-sampling: 189 // no frame rate reduction if incomingFrameRate <= MIN_FRAME_RATE. 190 const int kMinFrameRate = 8; 191 192 // 193 // PARAMETERS FOR FEC ADJUSTMENT: TODO (marpan) 194 // 195 196 // 197 // PARAMETETS FOR SETTING LOW/HIGH STATES OF CONTENT METRICS: 198 // 199 200 // Thresholds for frame rate: 201 const int kLowFrameRate = 10; 202 const int kMiddleFrameRate = 15; 203 const int kHighFrameRate = 25; 204 205 // Thresholds for motion: motion level is from NFD. 206 const float kHighMotionNfd = 0.075f; 207 const float kLowMotionNfd = 0.03f; 208 209 // Thresholds for spatial prediction error: 210 // this is applied on the average of (2x2,1x2,2x1). 211 const float kHighTexture = 0.035f; 212 const float kLowTexture = 0.020f; 213 214 // Used to reduce thresholds for larger/HD scenes: correction factor since 215 // higher correlation in HD scenes means lower spatial prediction error. 216 const float kScaleTexture = 0.9f; 217 218 // Percentage reduction in transitional bitrate for 2x2 selected over 1x2/2x1. 219 const float kRateRedSpatial2X2 = 0.6f; 220 221 const float kSpatialErr2x2VsHoriz = 0.1f; // percentage to favor 2x2 over H 222 const float kSpatialErr2X2VsVert = 0.1f; // percentage to favor 2x2 over V 223 const float kSpatialErrVertVsHoriz = 0.1f; // percentage to favor H over V 224 225 } // namespace webrtc 226 227 #endif // WEBRTC_MODULES_VIDEO_CODING_SOURCE_QM_SELECT_DATA_H_ 228