blob: 0b20a154084245ebc6d96411178303fc16b48c6c [file] [log] [blame] [edit]
"""
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()