#!/usr/bin/env python3 # SPDX-License-Identifier: Apache-2.0 # ----------------------------------------------------------------------------- # Copyright 2021 Arm Limited # # Licensed under the Apache License, Version 2.0 (the "License"); you may not # use this file except in compliance with the License. You may obtain a copy # of the License at: # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. # ----------------------------------------------------------------------------- """ A benchmarking sweep helper, which can genrate a performance-vs-quality sweep for a single input images. Like other test functionality, this uses structured image directory layouts for determining image settings to pass to the codec. """ import argparse import os import platform import sys import testlib.encoder as te import testlib.image as ti def parse_command_line(): """ Parse the command line. Returns: Namespace: The parsed command line container. """ parser = argparse.ArgumentParser() # All reference encoders parser.add_argument("--step", dest="step", default="10", type=int, help="step size") parser.add_argument("--repeats", dest="repeats", type=int, default=1, help="repeats") parser.add_argument(dest="image", default=None, help="select the test image to run") args = parser.parse_args() return args def main(): """ The main function. Returns: int: The process return code. """ # Parse command lines args = parse_command_line() blockSizes = ["4x4", "5x5", "6x6", "8x8", "10x10"] repeats = max(args.repeats, 1) step = max(args.step, 1) image = ti.TestImage(args.image) codec = te.Encoder2x("avx2") print("Block Size, Quality, PSNR (dB), Coding Time (s), Coding Rate (MT/s)") for blockSize in blockSizes: for quality in range(0, 101, args.step): localRepeats = repeats if quality < 20: localRepeats = localRepeats * 2 if quality < 40: localRepeats = localRepeats * 2 results = codec.run_test(image, blockSize, f"{quality}", localRepeats, False) psnr = results[0] codingTime = results[2] mts = results[3] print(f"{blockSize}, {quality}, {psnr}, {codingTime}, {mts}") return 0 if __name__ == "__main__": sys.exit(main())