1# Copyright (C) 2025 yuygfgg
3# This file is part of Vapoursynth-llvmexpr.
5# Vapoursynth-llvmexpr is free software: you can redistribute it and/or modify
6# it under the terms of the GNU General Public License as published by
7# the Free Software Foundation, either version 3 of the License, or
8# (at your option) any later version.
10# Vapoursynth-llvmexpr is distributed in the hope that it will be useful,
11# but WITHOUT ANY WARRANTY without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13# GNU General Public License for more details.
15# You should have received a copy of the GNU General Public License
16# along with Vapoursynth-llvmexpr. If not, see <https://www.gnu.org/licenses/>.
20@define ___stdlib_std_INC(n) ((n) + 1)
21@define ___stdlib_std_DIV(a, b) ((a) / (b))
23@define ___stdlib_std_LUMA_W(i) ___stdlib_meta_PASTE(___stdlib_meta_PASTE(__INPUT_WIDTH_, i), __)
24@define ___stdlib_std_SUB_W(i) ___stdlib_meta_PASTE(___stdlib_meta_PASTE(__INPUT_SUBSAMPLE_W_, i), __)
25@define ___stdlib_std_NUM_PLANES_OF(i) ___stdlib_meta_PASTE(___stdlib_meta_PASTE(__INPUT_NUM_PLANES_, i), __)
26@define ___stdlib_std_WIDTH_OF(i, p) ((p) < 0 || (p) >= ___stdlib_std_NUM_PLANES_OF(i) ? -1 : ((p) == 0 ? ___stdlib_std_LUMA_W(i) : ___stdlib_std_DIV(___stdlib_std_LUMA_W(i), (___stdlib_std_SUB_W(i) ? 2 : 1))))
27@define ___stdlib_std_GET_WIDTH_LOOP(i, c, p) (((i) >= __INPUT_NUM__ || (i) < 0) ? -1 : ((c) == (i) ? ___stdlib_std_WIDTH_OF(i, p) : ___stdlib_std_GET_WIDTH_LOOP(___stdlib_std_INC(i), c, p)))
28@define ___stdlib_std_EXPR_WIDTH(p) ((p) < 0 || (p) >= __NUM_PLANES__ ? -1 : ((p) == 0 ? __WIDTH__ : ___stdlib_std_DIV(__WIDTH__, (__SUBSAMPLE_W__ ? 2 : 1))))
29@define ___stdlib_std_get_width_(c, p) (defined(__SINGLEEXPR__) ? ___stdlib_std_GET_WIDTH_LOOP(0, c, p) : ___stdlib_std_EXPR_WIDTH(p))
30function ___stdlib_std_get_width_expr(Value plane_idx) {
31 return ___stdlib_std_get_width_(0, plane_idx)
33function ___stdlib_std_get_width_single(Value clip_idx, Value plane_idx) {
34 return ___stdlib_std_get_width_(clip_idx, plane_idx)
37@define ___stdlib_std_LUMA_H(i) ___stdlib_meta_PASTE(___stdlib_meta_PASTE(__INPUT_HEIGHT_, i), __)
38@define ___stdlib_std_SUB_H(i) ___stdlib_meta_PASTE(___stdlib_meta_PASTE(__INPUT_SUBSAMPLE_H_, i), __)
39@define ___stdlib_std_HEIGHT_OF(i, p) ((p) < 0 || (p) >= ___stdlib_std_NUM_PLANES_OF(i) ? -1 : ((p) == 0 ? ___stdlib_std_LUMA_H(i) : ___stdlib_std_DIV(___stdlib_std_LUMA_H(i), (___stdlib_std_SUB_H(i) ? 2 : 1))))
40@define ___stdlib_std_GET_HEIGHT_LOOP(i, c, p) (((i) >= __INPUT_NUM__ || (i) < 0) ? -1 : ((c) == (i) ? ___stdlib_std_HEIGHT_OF(i, p) : ___stdlib_std_GET_HEIGHT_LOOP(___stdlib_std_INC(i), c, p)))
41@define ___stdlib_std_EXPR_HEIGHT(p) ((p) < 0 || (p) >= __NUM_PLANES__ ? -1 : ((p) == 0 ? __HEIGHT__ : ___stdlib_std_DIV(__HEIGHT__, (__SUBSAMPLE_H__ ? 2 : 1))))
42@define ___stdlib_std_get_height_(c, p) (defined(__SINGLEEXPR__) ? ___stdlib_std_GET_HEIGHT_LOOP(0, c, p) : ___stdlib_std_EXPR_HEIGHT(p))
43function ___stdlib_std_get_height_expr(Value plane_idx) {
44 return ___stdlib_std_get_height_(0, plane_idx)
46function ___stdlib_std_get_height_single(Value clip_idx, Value plane_idx) {
47 return ___stdlib_std_get_height_(clip_idx, plane_idx)
50@define ___stdlib_std_BD_OF(i) ___stdlib_meta_PASTE(___stdlib_meta_PASTE(__INPUT_BITDEPTH_, i), __)
51@define ___stdlib_std_GET_BD_LOOP(i, c) (((i) >= __INPUT_NUM__ || (i) < 0) ? -1 : ((c) == (i) ? ___stdlib_std_BD_OF(i) : ___stdlib_std_GET_BD_LOOP(___stdlib_std_INC(i), c)))
52function ___stdlib_std_get_bitdepth(Value clip_idx) {
53 return ___stdlib_std_GET_BD_LOOP(0, clip_idx)
56@define ___STDLIB_STD_cfUndefined 0
57@define ___STDLIB_STD_cfGray 1
58@define ___STDLIB_STD_cfRGB 2
59@define ___STDLIB_STD_cfYUV 3
61@define ___STDLIB_STD_stInteger 0
62@define ___STDLIB_STD_stFloat 1
64@define ___stdlib_std_SAMPLETYPE_OF(i) ___stdlib_meta_PASTE(___stdlib_meta_PASTE(__INPUT_SAMPLETYPE_, i), __)
65@define ___stdlib_std_GET_SAMPLETYPE_LOOP(i, c) (((i) >= __INPUT_NUM__ || (i) < 0) ? -1 : ((c) == (i) ? ___stdlib_std_SAMPLETYPE_OF(i) : ___stdlib_std_GET_SAMPLETYPE_LOOP(___stdlib_std_INC(i), c)))
66function ___stdlib_std_get_sampletype(Value clip_idx) {
67 return ___stdlib_std_GET_SAMPLETYPE_LOOP(0, clip_idx)
70@define ___stdlib_std_CF_OF(i) ___stdlib_meta_PASTE(___stdlib_meta_PASTE(__INPUT_COLORFAMILY_, i), __)
71@define ___stdlib_std_GET_CF_LOOP(i, c) (((i) >= __INPUT_NUM__ || (i) < 0) ? -1 : ((c) == (i) ? ___stdlib_std_CF_OF(i) : ___stdlib_std_GET_CF_LOOP(___stdlib_std_INC(i), c)))
72function ___stdlib_std_get_colorfamily(Value clip_idx) {
73 return ___stdlib_std_GET_CF_LOOP(0, clip_idx)