diff options
Diffstat (limited to '')
-rw-r--r-- | third_party/aom/tools/auto_refactor/av1_preprocess.py | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/third_party/aom/tools/auto_refactor/av1_preprocess.py b/third_party/aom/tools/auto_refactor/av1_preprocess.py new file mode 100644 index 0000000000..ea76912cf1 --- /dev/null +++ b/third_party/aom/tools/auto_refactor/av1_preprocess.py @@ -0,0 +1,113 @@ +# Copyright (c) 2021, Alliance for Open Media. All rights reserved +# +# This source code is subject to the terms of the BSD 2 Clause License and +# the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License +# was not distributed with this source code in the LICENSE file, you can +# obtain it at www.aomedia.org/license/software. 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 www.aomedia.org/license/patent. +# + +import os +import sys + + +def is_code_file(filename): + return filename.endswith(".c") or filename.endswith(".h") + + +def is_simd_file(filename): + simd_keywords = [ + "avx2", "sse2", "sse3", "ssse3", "sse4", "dspr2", "neon", "msa", "simd", + "x86" + ] + for keyword in simd_keywords: + if filename.find(keyword) >= 0: + return True + return False + + +def get_code_file_list(path, exclude_file_set): + code_file_list = [] + for cur_dir, sub_dir, file_list in os.walk(path): + for filename in file_list: + if is_code_file(filename) and not is_simd_file( + filename) and filename not in exclude_file_set: + file_path = os.path.join(cur_dir, filename) + code_file_list.append(file_path) + return code_file_list + + +def av1_exclude_file_set(): + exclude_file_set = { + "cfl_ppc.c", + "ppc_cpudetect.c", + } + return exclude_file_set + + +def get_av1_pp_command(fake_header_dir, code_file_list): + pre_command = "gcc -w -nostdinc -E -I./ -I../ -I" + fake_header_dir + (" " + "-D'ATTRIBUTE_PACKED='" + " " + "-D'__attribute__(x)='" + " " + "-D'__inline__='" + " " + "-D'float_t=float'" + " " + "-D'DECLARE_ALIGNED(n," + " typ," + " " + "val)=typ" + " val'" + " " + "-D'volatile='" + " " + "-D'AV1_K_MEANS_DIM=2'" + " " + "-D'INLINE='" + " " + "-D'AOM_INLINE='" + " " + "-D'AOM_FORCE_INLINE='" + " " + "-D'inline='" + ) + return pre_command + " " + " ".join(code_file_list) + + +def modify_av1_rtcd(build_dir): + av1_rtcd = os.path.join(build_dir, "config/av1_rtcd.h") + fp = open(av1_rtcd) + string = fp.read() + fp.close() + new_string = string.replace("#ifdef RTCD_C", "#if 0") + fp = open(av1_rtcd, "w") + fp.write(new_string) + fp.close() + + +def preprocess_av1(aom_dir, build_dir, fake_header_dir): + cur_dir = os.getcwd() + output = os.path.join(cur_dir, "av1_pp.c") + path_list = [ + os.path.join(aom_dir, "av1/encoder"), + os.path.join(aom_dir, "av1/common") + ] + code_file_list = [] + for path in path_list: + path = os.path.realpath(path) + code_file_list.extend(get_code_file_list(path, av1_exclude_file_set())) + modify_av1_rtcd(build_dir) + cmd = get_av1_pp_command(fake_header_dir, code_file_list) + " >" + output + os.chdir(build_dir) + os.system(cmd) + os.chdir(cur_dir) + + +if __name__ == "__main__": + aom_dir = sys.argv[1] + build_dir = sys.argv[2] + fake_header_dir = sys.argv[3] + preprocess_av1(aom_dir, build_dir, fake_header_dir) |