aboutsummaryrefslogtreecommitdiff
path: root/study/create_matrix.py
diff options
context:
space:
mode:
Diffstat (limited to 'study/create_matrix.py')
-rwxr-xr-xstudy/create_matrix.py48
1 files changed, 48 insertions, 0 deletions
diff --git a/study/create_matrix.py b/study/create_matrix.py
new file mode 100755
index 0000000..1599a12
--- /dev/null
+++ b/study/create_matrix.py
@@ -0,0 +1,48 @@
+#!/usr/bin/env python3
+
+import sys
+
+def usage():
+ print("usage: Kr Kg Kb full|limited")
+ print("examples:")
+ print(" create_matrix.py 0.2126 0.7152 0.0722 full")
+ print(" create_matrix.py 0.2126 0.7152 0.0722 limited")
+ exit(1)
+
+def a(v):
+ if v >= 0:
+ return " %f" % v
+ else:
+ return "%f" % v
+
+def main(argv):
+ if len(argv) != 5:
+ usage()
+
+ Kr = float(sys.argv[1])
+ Kg = float(sys.argv[2])
+ Kb = float(sys.argv[3])
+ color_range = sys.argv[4]
+ luma_offset = 0.0
+ transform_range = 1.0
+
+ if color_range == "full":
+ pass
+ elif color_range == "limited":
+ transform_range = (235.0 - 16.0) / 255.0
+ luma_offset = 16.0 / 255.0
+
+ matrix = [
+ [Kr, Kg, Kb],
+ [-0.5 * (Kr / (1.0 - Kb)), -0.5 * (Kg / (1.0 - Kb)), 0.5],
+ [0.5, -0.5 * (Kg / (1.0 - Kr)), -0.5 * (Kb / (1.0 -Kr))],
+ [0.0, 0.5, 0.5]
+ ]
+
+ # Transform from row major to column major for glsl
+ print("const mat4 RGBtoYUV = mat4(%f, %s, %s, %f," % (matrix[0][0] * transform_range, a(matrix[1][0] * transform_range), a(matrix[2][0] * transform_range), 0.0))
+ print(" %f, %s, %s, %f," % (matrix[0][1] * transform_range, a(matrix[1][1] * transform_range), a(matrix[2][1] * transform_range), 0.0))
+ print(" %f, %s, %s, %f," % (matrix[0][2] * transform_range, a(matrix[1][2] * transform_range), a(matrix[2][2] * transform_range), 0.0))
+ print(" %f, %s, %s, %f);" % (matrix[3][0] + luma_offset, a(matrix[3][1]), a(matrix[3][2]), 1.0))
+
+main(sys.argv)