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