| """ | |
| Copyright (c) 2024, 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/. | |
| """ | |
| import multiprocessing | |
| import os | |
| import sys | |
| from termcolor import cprint | |
| import parakit.config.user as user | |
| from parakit.entropy.file_collector import FileCollector | |
| def decode_task(decode_info): | |
| os.system(decode_info[0]) | |
| print(f"Decoded: {decode_info[2]}", flush=True) | |
| def run( | |
| path_bitstream="./bitstreams", | |
| path_ctx_data="./results/data", | |
| user_config_file="parameters.yaml", | |
| ): | |
| test_output_tag, _ = user.read_config_data(user_config_file) | |
| bitstream_extension = user.read_config_decode(user_config_file) | |
| fc = FileCollector(path_bitstream, bitstream_extension) | |
| bitstreams = fc.get_files() | |
| num_bitstreams = len(bitstreams) | |
| if num_bitstreams == 0: | |
| cprint( | |
| f"No bistream files with extension .{bitstream_extension} under {path_bitstream}", | |
| "red", | |
| attrs=["bold"], | |
| file=sys.stderr, | |
| ) | |
| print( | |
| f"Usage: (i) add files under {path_bitstream} path and (ii) choose the correct extension in parameters.yaml (BITSTREAM_EXTENSION field)." | |
| ) | |
| sys.exit() | |
| cprint( | |
| f"Decoding {num_bitstreams} bitstreams to collect data under {path_ctx_data}:", | |
| attrs=["bold"], | |
| ) | |
| # prepare decoding task information | |
| decode_info = [] | |
| for idx, bitstream in enumerate(bitstreams): | |
| suffix = os.path.splitext(bitstream)[0] + "_" + test_output_tag | |
| decode_info.append( | |
| ( | |
| f"binaries/aomdec {path_bitstream}/{bitstream} --path-ctxdata={path_ctx_data} --suffix-ctxdata={suffix} -o /dev/null", | |
| idx, | |
| bitstream, | |
| ) | |
| ) | |
| # run using all available cores | |
| num_cpu = os.cpu_count() | |
| with multiprocessing.Pool(num_cpu) as pool: | |
| pool.map(decode_task, decode_info) | |
| cprint("Decoding complete!\n", "green", attrs=["bold"]) | |
| if __name__ == "__main__": | |
| run() |