| #!/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@fb.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, 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 |
| 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, 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 |
| 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, 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 |
| 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, LogCmdOnly=False): |
| Utils.CmdLogger.write("::Decode\n") |
| if codec == 'av2' and method == 'aom': |
| DecodeWithAOM(test_cfg, infile, outfile, dec_perf, decode_to_yuv, LogCmdOnly) |
| elif codec == 'av1': |
| DecodeWithAV1(test_cfg, infile, outfile, dec_perf, decode_to_yuv, LogCmdOnly) |
| elif codec == 'hevc': |
| DecodeWithHEVC(test_cfg, clip, infile, outfile, dec_perf, decode_to_yuv, LogCmdOnly) |
| else: |
| raise ValueError("invalid parameter for decode.") |