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