| #!/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 Utils | 
 | from Config import AOMDEC, AV1DEC, EnableTimingInfo, Platform, UsePerfUtil, FFMPEG | 
 | from Utils import ExecuteCmd, GetShortContentName, ConvertYUVToY4M, DeleteFile | 
 |  | 
 | def DecodeWithAOM(test_cfg, infile, outfile, dec_perf, decode_to_yuv, dec_log, LogCmdOnly=False): | 
 |     if decode_to_yuv: | 
 |         args = " --codec=av1 --summary --rawvideo -o %s %s" % (outfile, infile) | 
 |     else: | 
 |         args = " --codec=av1 --summary -o %s %s" % (outfile, infile) | 
 |     cmd = AOMDEC + args + "> %s 2>&1"%dec_log | 
 |     if EnableTimingInfo: | 
 |         if Platform == "Windows": | 
 |             cmd = "ptime " + cmd + " >%s"%dec_perf | 
 |         elif Platform == "Darwin": | 
 |             cmd = "gtime --verbose --output=%s "%dec_perf + cmd | 
 |         else: | 
 |             if UsePerfUtil: | 
 |                 cmd = "3>%s perf stat --log-fd 3 "%dec_perf +cmd | 
 |             else: | 
 |                 cmd = "/usr/bin/time --verbose --output=%s "%dec_perf + cmd | 
 |  | 
 |     ExecuteCmd(cmd, LogCmdOnly) | 
 |  | 
 | def DecodeWithAV1(test_cfg, infile, outfile, dec_perf, decode_to_yuv, dec_log, LogCmdOnly=False): | 
 |     if decode_to_yuv: | 
 |         args = " --codec=av1 --summary --rawvideo -o %s %s" % (outfile, infile) | 
 |     else: | 
 |         args = " --codec=av1 --summary -o %s %s" % (outfile, infile) | 
 |     cmd = AV1DEC + args + "> %s 2>&1"%dec_log | 
 |     if EnableTimingInfo: | 
 |         if Platform == "Windows": | 
 |             cmd = "ptime " + cmd + " >%s" % dec_perf | 
 |         elif Platform == "Darwin": | 
 |             cmd = "gtime --verbose --output=%s " % dec_perf + cmd | 
 |         else: | 
 |             if UsePerfUtil: | 
 |                 cmd = "3>%s perf stat --log-fd 3 " % dec_perf + cmd | 
 |             else: | 
 |                 cmd = "/usr/bin/time --verbose --output=%s " % dec_perf + cmd | 
 |  | 
 |     ExecuteCmd(cmd, LogCmdOnly) | 
 |  | 
 | def DecodeWithHEVC(test_cfg, clip, infile, outfile, dec_perf, decode_to_yuv, dec_log, LogCmdOnly=False): | 
 |     args = " -i %s " % infile | 
 |     if clip.fmt == '420' and clip.bit_depth == 8: | 
 |         pix_fmt = "yuv420p" | 
 |     elif clip.fmt == '420' and clip.bit_depth == 10: | 
 |         pix_fmt = "yuv420p10le -strict -1" | 
 |     else: | 
 |         print("Unsupported color format") | 
 |  | 
 |     args += " -pix_fmt %s %s" % (pix_fmt, outfile) | 
 |     cmd = FFMPEG + args + "> %s 2>&1"%dec_log | 
 |     if EnableTimingInfo: | 
 |         if Platform == "Windows": | 
 |             cmd = "ptime " + cmd + " >%s" % dec_perf | 
 |         elif Platform == "Darwin": | 
 |             cmd = "gtime --verbose --output=%s " % dec_perf + cmd | 
 |         else: | 
 |             if UsePerfUtil: | 
 |                 cmd = "3>%s perf stat --log-fd 3 " % dec_perf + cmd | 
 |             else: | 
 |                 cmd = "/usr/bin/time --verbose --output=%s " % dec_perf + cmd | 
 |  | 
 |     ExecuteCmd(cmd, LogCmdOnly) | 
 |  | 
 | def VideoDecode(clip, method, test_cfg, codec, infile, outfile, dec_perf, decode_to_yuv, dec_log, LogCmdOnly=False): | 
 |     Utils.CmdLogger.write("::Decode\n") | 
 |     if codec == 'av2' and method == 'aom': | 
 |         DecodeWithAOM(test_cfg, infile, outfile, dec_perf, decode_to_yuv, dec_log, LogCmdOnly) | 
 |     elif codec == 'av1': | 
 |         DecodeWithAV1(test_cfg, infile, outfile, dec_perf, decode_to_yuv, dec_log, LogCmdOnly) | 
 |     elif codec == 'hevc': | 
 |         DecodeWithHEVC(test_cfg, clip, infile, outfile, dec_perf, decode_to_yuv, dec_log, LogCmdOnly) | 
 |     else: | 
 |         raise ValueError("invalid parameter for decode.") |