From 017fd0a37da0fc3dddcd635d09770c123f133e57 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Thu, 1 Feb 2024 18:06:26 +0100 Subject: Add support for hdr capture on amd/intel Nvidia support will be added in the future. Note that hdr metadata is missing from the output file as amd and intel both have bugged drivers that dont add hdr metadata to the output file. Need to find a workaround for this (patching the video bitstream?). Add -cr limited|full, to set color range --- study/color_space_transform_matrix.png | Bin 0 -> 7166 bytes study/create_matrix.py | 42 +++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 study/color_space_transform_matrix.png create mode 100755 study/create_matrix.py (limited to 'study') diff --git a/study/color_space_transform_matrix.png b/study/color_space_transform_matrix.png new file mode 100644 index 0000000..2b7729e5 Binary files /dev/null and b/study/color_space_transform_matrix.png differ diff --git a/study/create_matrix.py b/study/create_matrix.py new file mode 100755 index 0000000..96bfcd4 --- /dev/null +++ b/study/create_matrix.py @@ -0,0 +1,42 @@ +#!/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) -- cgit v1.2.3