|  | """ | 
|  | 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() |