e02b57e397
Added packetLoss parameter to qm_select, and some code clean-up. Review URL: http://webrtc-codereview.appspot.com/44009 git-svn-id: http://webrtc.googlecode.com/svn/trunk@128 4adac7df-926f-26a2-2b94-8c16560cd09d
186 lines
5.1 KiB
C++
186 lines
5.1 KiB
C++
/*
|
|
* 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 for content-aware media optimization
|
|
****************************************************************/
|
|
|
|
#include "typedefs.h"
|
|
|
|
namespace webrtc
|
|
{
|
|
|
|
//
|
|
// PARAMETERS FOR RESOLUTION ADAPTATION
|
|
//
|
|
|
|
// Initial level of buffer in secs: should corresponds to wrapper settings
|
|
#define INIT_BUFFER_LEVEL 0.5
|
|
|
|
// 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
|
|
|
|
// Avoid outliers in seq-rate MM
|
|
#define THRESH_SUM_MM 1000
|
|
|
|
// 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
|
|
|
|
// Threshold on packet loss rate, above which favor resolution reduction
|
|
#define LOSS_THR 0.1
|
|
|
|
// Factor for reducing transitonal bitrate under packet loss
|
|
#define LOSS_RATE_FAC 1.0
|
|
|
|
// Maximum possible transitional rate for down-sampling:
|
|
// (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.63f, // 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.63f, // D, D
|
|
0.25f // D, H
|
|
};
|
|
|
|
// Action for down-sampling:
|
|
// motion=L/H/D,spatial==L/H/D: for low, high, middle levels
|
|
const WebRtc_UWord8 kSpatialAction[9] = {
|
|
1, // L, L
|
|
1, // L, H
|
|
1, // L, D
|
|
4, // H ,L
|
|
1, // H, H
|
|
4, // H, D
|
|
4, // D, L
|
|
1, // D, D
|
|
1, // D, H
|
|
};
|
|
|
|
const WebRtc_UWord8 kTemporalAction[9] = {
|
|
1, // L, L
|
|
2, // L, H
|
|
2, // L, D
|
|
1, // H ,L
|
|
2, // H, H
|
|
1, // H, D
|
|
1, // D, L
|
|
2, // D, D
|
|
1, // 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
|
|
|
|
// Minimum image size for a spatial down-sampling:
|
|
// no spatial down-sampling if input size <= MIN_IMAGE_SIZE
|
|
#define MIN_IMAGE_SIZE 25344 //176*144
|
|
|
|
// Minimum frame rate for temporal down-sampling:
|
|
// no frame rate reduction if incomingFrameRate <= MIN_FRAME_RATE
|
|
#define MIN_FRAME_RATE_QM 8
|
|
|
|
// Boundaries for the closest standard frame size
|
|
const WebRtc_UWord32 kFrameSizeTh[6] = {
|
|
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
|
|
};
|
|
|
|
|
|
//
|
|
// PARAMETERS FOR FEC ADJUSTMENT: TODO (marpan)
|
|
//
|
|
|
|
|
|
//
|
|
// PARAMETETS FOR SETTING LOW/HIGH STATES OF CONTENT 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
|
|
|
|
// percentage reduction in transitional bitrate for 2x2 selected over 1x2/2x1
|
|
#define RATE_RED_SPATIAL_2X2 0.6
|
|
|
|
#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
|
|
|
|
} // namespace webrtc
|
|
|
|
#endif // WEBRTC_MODULES_VIDEO_CODING_SOURCE_QM_SELECT_DATA_H_
|