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
This commit is contained in:
dec05eba
2024-02-01 18:06:26 +01:00
parent f36182ea13
commit 017fd0a37d
13 changed files with 564 additions and 291 deletions

42
study/create_matrix.py Executable file
View File

@@ -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)