blob: baea3130dbcdeebf6c06ab194c6b360594d0cd09 [file] [log] [blame]
#!/usr/bin/env python
## Copyright (c) 2021, Alliance for Open Media. All rights reserved
##
## This source code is subject to the terms of the BSD 3-Clause Clear License and the
## Alliance for Open Media Patent License 1.0. If the BSD 3-Clause Clear License was
## not distributed with this source code in the LICENSE file, you can obtain it
## at aomedia.org/license/software-license/bsd-3-c-c/. 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 aomedia.org/license/patent-license/.
##
__author__ = "maggie.sun@intel.com, ryanlei@meta.com"
import os
import xlsxwriter
import xlrd
import logging
from CalculateQualityMetrics import CalculateQualityMetric, GatherQualityMetrics
from VideoScaler import GetDownScaledOutFile, DownScaling, UpScaling,\
GetUpScaledOutFile
from Config import DnScaleRatio, FrameNum, QualityList, LoggerName,\
Path_ScalingResults, AS_DOWNSCALE_ON_THE_FLY
from Utils import Cleanfolder, GetShortContentName, Clip, DeleteFile
import Utils
subloggername = "ScalingTest"
loggername = LoggerName + '.' + '%s' % subloggername
logger = logging.getLogger(loggername)
def Run_Scaling_Test(clip, dnScalAlgo, upScalAlgo, path_dnscl, path_upscl,
path_log, path_cfg, savememory, keepupscaledyuv, ScaleMethod,
LogCmdOnly=False):
logger.info("start running scaling tests with content %s"
% os.path.basename(clip.file_name))
DnScaledRes = [(int(clip.width / ratio), int(clip.height / ratio))
for ratio in DnScaleRatio]
for i in range(len(DnScaledRes)):
DnScaledW = DnScaledRes[i][0]
DnScaledH = DnScaledRes[i][1]
if (DnScaledW == clip.width and DnScaledH == clip.height):
continue
logger.info("start downscaling content to %dx%d" % (DnScaledW, DnScaledH))
JobName = '%s_Downscaling_%dx%d' % \
(GetShortContentName(clip.file_name, False), DnScaledW, DnScaledH)
if LogCmdOnly:
Utils.CmdLogger.write("============== %s Job Start =================\n"%JobName)
# downscaling
dnscalyuv = GetDownScaledOutFile(clip, DnScaledW, DnScaledH,
path_dnscl, ScaleMethod, dnScalAlgo)
if not os.path.isfile(dnscalyuv):
dnscalyuv = DownScaling(ScaleMethod, clip, FrameNum['AS'], DnScaledW, DnScaledH,
path_dnscl, path_cfg, dnScalAlgo, LogCmdOnly)
dnscaled_clip = Clip(GetShortContentName(dnscalyuv, False)+'.y4m',
dnscalyuv, "", DnScaledW, DnScaledH,
clip.fmt, clip.fps_num, clip.fps_denom,
clip.bit_depth)
upscaleyuv = UpScaling(ScaleMethod, dnscaled_clip, FrameNum['AS'], clip.width, clip.height,
path_upscl, path_cfg, upScalAlgo, LogCmdOnly)
CalculateQualityMetric(clip.file_path, FrameNum['AS'], upscaleyuv, clip.fmt,
clip.width, clip.height, clip.bit_depth,
path_log, LogCmdOnly)
if savememory:
if dnscalyuv != clip.file_path:
DeleteFile(dnscalyuv, LogCmdOnly)
if not keepupscaledyuv:
DeleteFile(upscaleyuv, LogCmdOnly)
if LogCmdOnly:
Utils.CmdLogger.write("============== %s Job End =================\n" % JobName)
logger.info("finish running scaling test.")