/* * Copyright (c) 2011 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. */ #ifndef WEBRTC_MODULES_VIDEO_CODING_SOURCE_QM_SELECT_DATA_H_ #define WEBRTC_MODULES_VIDEO_CODING_SOURCE_QM_SELECT_DATA_H_ /*************************************************************** *QMSelectData.h * This file includes parameters used by the Quality Modes selection process ****************************************************************/ #include "typedefs.h" namespace webrtc { //Initial level of buffer in secs: should corresponds to wrapper settings #define INIT_BUFFER_LEVEL 0.5 // //PARAMETERS FOR QM SELECTION // //Threshold of (max) buffer size below which we consider too low (underflow) #define PERC_BUFFER_THR 0.10 //Threshold on rate mismatch #define MAX_RATE_MM 0.5 //Threshold on the occurrences of low buffer levels #define MAX_BUFFER_LOW 0.5 //Factor for transitional rate for going back up in resolution #define TRANS_RATE_SCALE_UP_SPATIAL 1.25 #define TRANS_RATE_SCALE_UP_TEMP 1.25 //Maximum possible transitional rate: (units in kbps), for 30fps const WebRtc_UWord16 kMaxRateQm[7] = { 100, //QCIF 500, //CIF 800, //VGA 1500, //4CIF 2000, //720 HD 4:3, 2500, //720 HD 16:9 3000 //1080HD }; //Scale for transitional rate: based on content class // motion=L/H/D,spatial==L/H/D: for low, high, middle levels const float kScaleTransRateQm[18] = { //4CIF and lower 0.25f, // L, L 0.75f, // L, H 0.75f, // L, D 0.75f, // H ,L 0.50f, // H, H 0.50f, // H, D 0.50f, // D, L 0.625f, // D, D 0.25f, // D, H //over 4CIF: WHD, HD 0.25f, // L, L 0.75f, // L, H 0.75f, // L, D 0.75f, // H ,L 0.50f, // H, H 0.50f, // H, D 0.50f, // D, L 0.625f, // D, D 0.25f // D, H }; //Control the total amount of down-sampling allowed #define MAX_SPATIAL_DOWN_FACT 4 #define MAX_TEMP_DOWN_FACT 4 #define MAX_SPATIAL_TEMP_DOWN_FACT 8 // // // //PARAMETETS FOR SETTING LOW/HIGH VALUES OF METRICS: // //Threshold to determine if high amount of zero_motion #define HIGH_ZERO_MOTION_SIZE 0.95 //Thresholds for motion: motion level is derived from motion vectors: motion = size_nz*magn_nz #define HIGH_MOTION 0.7 #define LOW_MOTION 0.4 //Thresholds for motion: motion level is from NFD #define HIGH_MOTION_NFD 0.075 #define LOW_MOTION_NFD 0.04 //Thresholds for spatial prediction error: this is appLied on the min(2x2,1x2,2x1) #define HIGH_TEXTURE 0.035 #define LOW_TEXTURE 0.025 //Used to reduce thresholds for HD scenes: correction factor since higher //correlation in HD scenes means lower spatial prediction error #define SCALE_TEXTURE_HD 0.9; //Thresholds for distortion and horizontalness: applied on product: horiz_nz/dist_nz #define COHERENCE_THR 1.0 #define COH_MAX 10 // // #define RATE_RED_SPATIAL_2X2 0.6 //percentage reduction in transitional bitrate where 2x2 is selected over 1x2/2x1 #define SPATIAL_ERR_2X2_VS_H 0.1 //percentage to favor 2x2 #define SPATIAL_ERR_2X2_VS_V 0.1 //percentage to favor 2x2 over V #define SPATIAL_ERR_V_VS_H 0.1 //percentage to favor H over V //Minimum image size for a spatial mode selection: no spatial down-sampling if input size <= MIN_IMAGE_SIZE #define MIN_IMAGE_SIZE 25344 //176*144 //Minimum frame rate for temporal mode: no frame rate reduction if incomingFrameRate <= MIN_FRAME_RATE #define MIN_FRAME_RATE_QM 8 //Avoid outliers in seq-rate MM #define THRESH_SUM_MM 1000 const WebRtc_UWord32 kFrameSizeTh[6] = { // boundaries for the closest standard frame size 63360, //between 176*144 and 352*288 204288, //between 352*288 and 640*480 356352, //between 640*480 and 704*576 548352, //between 704*576 and 960*720 806400, //between 960*720 and 1280*720 1497600, // between 1280*720 and 1920*1080 }; } // namespace webrtc #endif // WEBRTC_MODULES_VIDEO_CODING_SOURCE_QM_SELECT_DATA_H_