#!/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 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("%f, %f, %f, %f" % (matrix[0][0] * transform_range, matrix[1][0] * transform_range, matrix[2][0] * transform_range, 0.0)) print("%f, %f, %f, %f" % (matrix[0][1] * transform_range, matrix[1][1] * transform_range, matrix[2][1] * transform_range, 0.0)) print("%f, %f, %f, %f" % (matrix[0][2] * transform_range, matrix[1][2] * transform_range, matrix[2][2] * transform_range, 0.0)) print("%f, %f, %f, %f" % (matrix[3][0] + luma_offset, matrix[3][1], matrix[3][2], 1.0)) main(sys.argv)