92 lines
2.7 KiB
Python
92 lines
2.7 KiB
Python
#!/usr/bin/env python3
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
# -----------------------------------------------------------------------------
|
|
# Copyright 2021-2022 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 generate 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())
|