blob: 027e596a4dfc94f0d7bc9ef1f8d76117953542f4 [file] [log] [blame]
#!/usr/bin/env python
## Copyright (c) 2019, Alliance for Open Media. All rights reserved
##
## This source code is subject to the terms of the BSD 2 Clause License and
## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
## was not distributed with this source code in the LICENSE file, you can
## obtain it at www.aomedia.org/license/software. If the Alliance for Open
## Media Patent License 1.0 was not distributed with this source code in the
## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
##
__author__ = "maggie.sun@intel.com, ryan.lei@intel.com"
import os
######################################
# configuration settings
######################################
RootPath = "..\\"
BinPath = os.path.join(RootPath, 'bin')
WorkPath = os.path.join(RootPath, 'test')
SMOKE_TEST = False # override some parameters to do a quick smoke test
FrameNum = 60
if SMOKE_TEST:
FrameNum = 2
############ test contents #######################################
ContentPath = "..\\video"
# when Have_Class_Subfolder is set to True, test clips are put in subfolders
# under ContentPath, each subfolder name represents a class. Class name in the
# table of Clips is the subfolder name
Have_Class_Subfolder = False
Clips = {
# basename class width height framerate bitdepth fmt
#"CrowdRun": ["ClassB", 1920, 1080, 30, 8, "yuv420p"],
#"BasketballDrive": ["ClassB", 1920, 1080, 30, 8, "yuv420p"],
"NetflixCrosswalk_1920x1080_60fps_8bit_420_60f": ["ClassB", 1920, 1080,
30, 8, "yuv420p"],
}
'''
"aspen_1080p_60f": ["ClassB", 1920, 1080, 30, 8,
"yuv420p"],
"dark720p_60f": ["ClassB", 1280, 720, 30, 8,
"yuv420p"],
"DOTA2_60f_420": ["ClassB", 1920, 1080, 30, 8,
"yuv420p"],
"duckstakeoff_1080p50_60f": ["ClassB", 1920, 1080, 30, 8,
"yuv420p"],
"KristenAndSara_1280x720_60f": ["ClassB", 1280, 720, 30, 8,
"yuv420p"],
"life_1080p30_60f": ["ClassB", 1920, 1080, 30, 8,
"yuv420p"],
"MINECRAFT_60f_420": ["ClassB", 1920, 1080, 30, 8,
"yuv420p"],
"NetflixAerial_1920x1080_60fps_8bit_420_60f": ["ClassB", 1920, 1080,
30, 8, "yuv420p"],
"NetflixBoat_1920x1080_60fps_8bit_420_60f": ["ClassB", 1920, 1080,
30, 8, "yuv420p"],
"NetflixCrosswalk_1920x1080_60fps_8bit_420_60f": ["ClassB", 1920, 1080,
30, 8, "yuv420p"],
"NetflixDrivingPOV_1280x720_60fps_8bit_420_60f": ["ClassB", 1280, 720,
30, 8, "yuv420p"],
"NetflixFoodMarket_1920x1080_60fps_8bit_420_60f": ["ClassB", 1920, 1080,
30, 8, "yuv420p"],
"NetflixPierSeaside_1920x1080_60fps_8bit_420_60f": ["ClassB", 1920, 1080,
30, 8, "yuv420p"],
"NetflixRollerCoaster_1280x720_60fps_8bit_420_60f": ["ClassB", 1280, 720,
30, 8, "yuv420p"],
"NetflixSquareAndTimelapse_1920x1080_60fps_8bit_420_60f": ["ClassB", 1920,
1080, 30, 8, "yuv420p"],
"NetflixTunnelFlag_1920x1080_60fps_8bit_420_60f": ["ClassB", 1920,
1080, 30, 8, "yuv420p"],
"rushhour_1080p25_60f": ["ClassB", 1920, 1080, 30, 8,
"yuv420p"],
"STARCRAFT_60f_420": ["ClassB", 1920, 1080, 30, 8,
"yuv420p"],
"touchdownpass_1080p_60f": ["ClassB", 1920, 1080, 30, 8,
"yuv420p"],
"vidyo1_720p_60fps_60f": ["ClassB", 1280, 720, 30, 8,
"yuv420p"],
"vidyo4_720p_60fps_60f": ["ClassB", 1280, 720, 30, 8,
"yuv420p"],
"wikipedia_420": ["ClassB", 1920, 1080, 30, 8,
"yuv420p"],
'''
############## Scaling settings ############################################
# down scaling ratio
DnScaleRatio = [1.0, 1.5, 2.0, 3.0, 4.0] #, 6.0] # downscale ratio
#down and up scaling algorithm, the 2 lists should be of same size
DnScalingAlgos = ['bicubic', 'bilinear', 'gauss', 'lanczos', 'sinc']
UpScalingAlgos = ['bicubic', 'bilinear', 'gauss', 'lanczos', 'sinc']
if SMOKE_TEST:
DnScalingAlgos = ['bicubic', 'lanczos', 'sinc']
UpScalingAlgos = ['bicubic', 'lanczos', 'sinc']
##################### Encode Config ########################################
EncodeMethods = ["ffmpeg", "aom", "svt"]
CodecNames = ["hevc", "av1"]
SUFFIX = {"hevc": ".265", "av1": ".ivf"}
FFMPEG = os.path.join(BinPath, 'ffmpeg.exe')
AOMENC = os.path.join(BinPath, 'aomenc.exe')
SVTAV1 = os.path.join(BinPath, 'SvtAv1EncApp.exe')
SVTHEVC = os.path.join(BinPath, 'SvtHevcEncApp.exe')
AOMDEC = os.path.join(BinPath, 'aomdec.exe')
QPs = list(range(22, 51, 5)) # total 6 QPs
if SMOKE_TEST:
QPs = list(range(12, 45, 10)) # total 4 QPs
######################## quality evalution config #############################
QualityList = ['VMAF_Y', 'PSNR_Y', 'PSNR_U', 'PSNR_V', 'SSIM_Y', 'MS-SSIM_Y']
# method should be one of 'VMAF', 'FFMPEG' or 'HDRTools'
QualityEvalMethods = ['VMAF', 'HDRTools', 'HDRTools', 'HDRTools', 'HDRTools',
'HDRTools']
VMAF = os.path.join(BinPath, 'vmafossexec.exe')
HDRTool = os.path.join(BinPath, 'HDRMetrics.exe')
CalcBDRateInExcel = False
######################## config for exporting data to excel #################
#https://xlsxwriter.readthedocs.io/working_with_colors.html#colors
# line color used, number of colors >= len(DnScaledRes)
LineColors = ['blue', 'red', 'green', 'orange', 'pink', 'yellow']
ConvexHullColor = 'white'
# format for exported excel of convexhull test
# if to modify below 3 variables, need to modify function
# SaveConvexHullResultsToExcel accordingly
CvxH_startCol = 1; CvxH_startRow = 2; CvxH_colInterval = 2
CvxH_WtCols = [(CvxH_colInterval + 1 + len(QualityList)) * i + CvxH_startCol
for i in range(len(DnScaleRatio))]
CvxH_WtRows = [CvxH_startRow + i for i in range(len(QPs))]
CvxH_WtLastCol = CvxH_WtCols[-1] + len(QualityList)
CvxH_WtLastRow = CvxH_WtRows[-1]
######################## post analysis #########################################
PostAnalysis_Path = os.path.join(RootPath, 'analysis')
Path_RDResults = os.path.join(PostAnalysis_Path, 'rdresult')
SummaryOutPath = os.path.join(PostAnalysis_Path, 'summary')
Path_ScalingResults = os.path.join(PostAnalysis_Path, 'scalingresult')
# vba file needed when to calculate bdrate
#VbaBinFile = os.path.join(BinPath, 'vbaProject_JVET-L0242.bin')
VbaBinFile = os.path.join(BinPath, 'vbaProject-AV2.bin')
# format for exported excel of scaling quality test
# if to modify below 3 variables, need to modify function SaveScalingResultsToExcel
# accordingly
ScalQty_startCol = 6; ScalQty_startRow = 2; ScalQty_colInterval = 1
ScalSumQty_startCol = 7
ScalQty_WtCols = [(ScalQty_colInterval +
len(QualityList)) * i + ScalQty_startCol
for i in range(len(DnScalingAlgos))]
ScalSumQty_WtCols = [(ScalQty_colInterval +
len(QualityList)) * i + ScalQty_startCol + 1
for i in range(len(DnScalingAlgos))]
######################## logging #########################################
LoggerName = "ConvexHullTest"
LogLevels = ['NONE', 'CRITICAL', 'ERROR', 'WARNING', 'INFO', 'DEBUG']
LogCmdOnly = False