mirror of
https://github.com/jellyfin/jellyfin-ffmpeg.git
synced 2026-09-03 05:09:58 +03:00
avfilter/tonemap_*: clip input range for bt2390
This commit is contained in:
+7
-3
@@ -1086,7 +1086,7 @@ Index: FFmpeg/libavfilter/cuda/tonemap.cu
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ FFmpeg/libavfilter/cuda/tonemap.cu
|
||||
@@ -0,0 +1,579 @@
|
||||
@@ -0,0 +1,583 @@
|
||||
+/*
|
||||
+ * This file is part of FFmpeg.
|
||||
+ *
|
||||
@@ -1210,7 +1210,8 @@ Index: FFmpeg/libavfilter/cuda/tonemap.cu
|
||||
+
|
||||
+static __inline__ __device__
|
||||
+float bt2390(float s, float peak, float dst_peak) {
|
||||
+ float s_pq = inverse_eotf_st2084(s);
|
||||
+ float s_clipped = min(s, peak);
|
||||
+ float s_pq = inverse_eotf_st2084(s_clipped);
|
||||
+ return eotf_st2084(bt2390_common(s_pq, peak, dst_peak));
|
||||
+}
|
||||
+
|
||||
@@ -1324,8 +1325,11 @@ Index: FFmpeg/libavfilter/cuda/tonemap.cu
|
||||
+
|
||||
+static __inline__ __device__
|
||||
+float3 map_one_pixel_itp_mode(float3 rgb, const FFCUDAFrame& src, const FFCUDAFrame& dst) {
|
||||
+ float3 ictcp = lrgb2ictcp(rgb.x, rgb.y, rgb.z);
|
||||
+ float peak = src.peak;
|
||||
+ float r = mix(rgb.x, min(rgb.x, peak), tonemap_func == TONEMAP_BT2390);
|
||||
+ float g = mix(rgb.x, min(rgb.y, peak), tonemap_func == TONEMAP_BT2390);
|
||||
+ float b = mix(rgb.x, min(rgb.z, peak), tonemap_func == TONEMAP_BT2390);
|
||||
+ float3 ictcp = lrgb2ictcp(r, g, b);
|
||||
+ float dst_peak = 1.0f;
|
||||
+ ictcp.x = max(ictcp.x, FLOAT_EPS);
|
||||
+ float i_o = ictcp.x;
|
||||
|
||||
+10
-5
@@ -526,7 +526,7 @@ Index: FFmpeg/libavfilter/opencl/tonemap.cl
|
||||
float j = tone_param;
|
||||
float a, b;
|
||||
|
||||
@@ -71,202 +85,606 @@ float mobius(float s, float peak) {
|
||||
@@ -71,202 +85,611 @@ float mobius(float s, float peak) {
|
||||
return s;
|
||||
|
||||
a = -j * j * (peak - 1.0f) / (j * j - 2.0f * j + peak);
|
||||
@@ -681,9 +681,9 @@ Index: FFmpeg/libavfilter/opencl/tonemap.cl
|
||||
+ float src_peak_delin_pq = inverse_eotf_st2084(peak);
|
||||
+ float dst_peak_delin_pq = inverse_eotf_st2084(1.0f);
|
||||
+ #ifdef TONE_MODE_RGB
|
||||
+ sig_r = inverse_eotf_st2084x4(sig_r);
|
||||
+ sig_g = inverse_eotf_st2084x4(sig_g);
|
||||
+ sig_b = inverse_eotf_st2084x4(sig_b);
|
||||
+ sig_r = inverse_eotf_st2084x4(fmin(sig_r, peak));
|
||||
+ sig_g = inverse_eotf_st2084x4(fmin(sig_g, peak));
|
||||
+ sig_b = inverse_eotf_st2084x4(fmin(sig_b, peak));
|
||||
+ MAP_FOUR_PIXELS(sig_r, src_peak_delin_pq, dst_peak_delin_pq)
|
||||
+ MAP_FOUR_PIXELS(sig_g, src_peak_delin_pq, dst_peak_delin_pq)
|
||||
+ MAP_FOUR_PIXELS(sig_b, src_peak_delin_pq, dst_peak_delin_pq)
|
||||
@@ -691,7 +691,7 @@ Index: FFmpeg/libavfilter/opencl/tonemap.cl
|
||||
+ sig_g = eotf_st2084x4(sig_g);
|
||||
+ sig_b = eotf_st2084x4(sig_b);
|
||||
+ #else
|
||||
+ sig = inverse_eotf_st2084x4(sig);
|
||||
+ sig = inverse_eotf_st2084x4(fmin(sig, peak));
|
||||
+ MAP_FOUR_PIXELS(sig, src_peak_delin_pq, dst_peak_delin_pq)
|
||||
+ sig = eotf_st2084x4(sig);
|
||||
+ #endif
|
||||
@@ -728,6 +728,11 @@ Index: FFmpeg/libavfilter/opencl/tonemap.cl
|
||||
+#ifdef TONE_MODE_ITP
|
||||
+void map_four_pixels_itp(float4 *r4, float4 *g4, float4 *b4, float peak) {
|
||||
+ float4 i4_o, i4, ct4 , cp4;
|
||||
+#ifdef TONE_FUNC_BT2390
|
||||
+ *r4 = fmin(*r4, peak);
|
||||
+ *g4 = fmin(*g4, peak);
|
||||
+ *b4 = fmin(*b4, peak);
|
||||
+#endif
|
||||
+ lrgb2ictcp(*r4, *g4, *b4, &i4, &ct4, &cp4);
|
||||
+ i4 = fmax(i4, FLOAT_EPS);
|
||||
+ i4_o = i4;
|
||||
|
||||
@@ -40,7 +40,7 @@ Index: FFmpeg/libavfilter/metal/vf_tonemap_videotoolbox.metal
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ FFmpeg/libavfilter/metal/vf_tonemap_videotoolbox.metal
|
||||
@@ -0,0 +1,916 @@
|
||||
@@ -0,0 +1,921 @@
|
||||
+/*
|
||||
+ * Copyright (c) 2024 Gnattu OC <gnattuoc@me.com>
|
||||
+ *
|
||||
@@ -628,6 +628,11 @@ Index: FFmpeg/libavfilter/metal/vf_tonemap_videotoolbox.metal
|
||||
+ *b4 *= factor_b;
|
||||
+ } else if (is_tone_mode_itp) {
|
||||
+ float4 i4_o, i4, ct4 , cp4;
|
||||
+ if (is_tone_func_bt2390) {
|
||||
+ *r4 = fmin(*r4, peak);
|
||||
+ *g4 = fmin(*g4, peak);
|
||||
+ *b4 = fmin(*b4, peak);
|
||||
+ }
|
||||
+ lrgb2ictcp(*r4, *g4, *b4, &i4, &ct4, &cp4);
|
||||
+ i4 = fmax(i4, FLOAT_EPS);
|
||||
+ i4_o = i4;
|
||||
|
||||
Reference in New Issue
Block a user