|  | #!/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.") |