49 lines
1.7 KiB
Python
Executable File
49 lines
1.7 KiB
Python
Executable File
#!/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)
|