#!/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 = 10

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"],
    "CrowdRun_1920x1080":    ["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, 2.5, 3.0, 4.0] #, 6.0]  # downscale ratio
#down and up scaling algorithm, the 2 lists should be of same size
DnScalingAlgos = ['lanczos'] #['bicubic', 'bilinear', 'gauss', 'lanczos', 'sinc']
UpScalingAlgos = ['lanczos'] #['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'

# find out QP/Resolution with specified qty metrics
TargetQtyMetrics = {'VMAF_Y': [60, 70, 80, 90],
                    'PSNR_Y': [30, 35, 38, 40, 41]}

# 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]

# format for writing convexhull curve data
CvxHDataStartRow = CvxH_WtRows[-1] + 2; CvxHDataStartCol = 0
CvxHDataNum = 5  # qty, bitrate, qp, resolution, 1 empty row as internal
CvxHDataRows = [CvxHDataStartRow + 1 + CvxHDataNum * i for i in range(len(QualityList))]

######################## 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
