<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://avisynth.nl/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://avisynth.nl/index.php?action=history&amp;feed=atom&amp;title=HDRTools</id>
		<title>HDRTools - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://avisynth.nl/index.php?action=history&amp;feed=atom&amp;title=HDRTools"/>
		<link rel="alternate" type="text/html" href="http://avisynth.nl/index.php?title=HDRTools&amp;action=history"/>
		<updated>2026-06-01T23:51:40Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.19.24</generator>

	<entry>
		<id>http://avisynth.nl/index.php?title=HDRTools&amp;diff=11864&amp;oldid=prev</id>
		<title>Reel.Deal: add Deep_color_tools category</title>
		<link rel="alternate" type="text/html" href="http://avisynth.nl/index.php?title=HDRTools&amp;diff=11864&amp;oldid=prev"/>
				<updated>2020-06-25T17:58:35Z</updated>
		
		<summary type="html">&lt;p&gt;add Deep_color_tools category&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 17:58, 25 June 2020&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;FilterCat5&lt;/del&gt;|External_filters|Plugins|Plugins_x64|Adjustment_filters|Levels_and_Chroma_filters}}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;FilterCat6&lt;/ins&gt;|External_filters|Plugins|Plugins_x64|Adjustment_filters|Levels_and_Chroma_filters&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;|Deep_color_tools&lt;/ins&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Filter3&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Filter3&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|1=[https://github.com/jpsdr jpsdr]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|1=[https://github.com/jpsdr jpsdr]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Reel.Deal</name></author>	</entry>

	<entry>
		<id>http://avisynth.nl/index.php?title=HDRTools&amp;diff=11741&amp;oldid=prev</id>
		<title>Reel.Deal: HDRTools: add documentation (mostly done)</title>
		<link rel="alternate" type="text/html" href="http://avisynth.nl/index.php?title=HDRTools&amp;diff=11741&amp;oldid=prev"/>
				<updated>2020-06-12T03:33:20Z</updated>
		
		<summary type="html">&lt;p&gt;HDRTools: add documentation (mostly done)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{FilterCat5|External_filters|Plugins|Plugins_x64|Adjustment_filters|Levels_and_Chroma_filters}}&lt;br /&gt;
{{Filter3&lt;br /&gt;
|1=[https://github.com/jpsdr jpsdr]&lt;br /&gt;
|2=v0.6.1&lt;br /&gt;
|3=[https://github.com/jpsdr/HDRTools/releases HDRTools_v0_6_1.7z]&lt;br /&gt;
|4=Color conversion&lt;br /&gt;
|5=[http://www.gnu.org/licenses/gpl-2.0.txt GPLv2]&lt;br /&gt;
|6=[https://forum.doom9.org/showthread.php?t=175488 Doom9 Thread]}}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
HDR color conversion plugin.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Requirements ==&lt;br /&gt;
* [x86]: [[AviSynth+]] or [https://sourceforge.net/projects/avisynth2/ AviSynth 2.6]&lt;br /&gt;
* [x64]: [[AviSynth+]]&lt;br /&gt;
* Supported color formats: [[Y8]], [[YV12]], [[YV16]], [[YV24]], [[YV411]]&lt;br /&gt;
**AviSynth+: TODO&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== [[Script variables|Syntax and Parameters]] ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Some general information first.&lt;br /&gt;
&lt;br /&gt;
The recording process is the following:&lt;br /&gt;
SDR :&lt;br /&gt;
[Camera sensor] -&amp;gt; Linear R,G,B -&amp;gt; OETF -&amp;gt; Non linear R',G',B' -&amp;gt; Color Matrix -&amp;gt; Y',C'r,C'b&lt;br /&gt;
Y',C'r,C'b -&amp;gt; Inv Color Matrix -&amp;gt; Non linear R',G',B' -&amp;gt; OETF-1 -&amp;gt; Linear R,G,B&lt;br /&gt;
HDR :&lt;br /&gt;
[Camera sensor] -&amp;gt; Linear R,G,B -&amp;gt; OOTF (PQ/HLG) -&amp;gt; EOTF-1 (PQ/HLG) -&amp;gt; Non linear R',G',B' -&amp;gt; Color Matrix -&amp;gt; Y',C'r,C'b&lt;br /&gt;
Y',C'r,C'b -&amp;gt; Inv Color Matrix -&amp;gt; Non linear R',G',B' -&amp;gt; EOTF (PQ/HLG) -&amp;gt; Inv OOTF (PQ/HLG) -&amp;gt; Linear R,G,B&lt;br /&gt;
&lt;br /&gt;
We can thought that at the level of Linear R,G,B, we have directly the &amp;quot;original&amp;quot; light information.&lt;br /&gt;
Unfortunately not. The R,G,B provided by the Camera sensor are linked to chromaticity parameters&lt;br /&gt;
(things like white color T°, etc...). So, the more appropriate color space closest to the &amp;quot;original&amp;quot;&lt;br /&gt;
light information seems the XYZ color space.&lt;br /&gt;
&lt;br /&gt;
In the Document directory i've put a pdf file describing how things work,&lt;br /&gt;
with detailled explainations and formula.&lt;br /&gt;
&lt;br /&gt;
Note about HDR HLG:&lt;br /&gt;
For speed-up:&lt;br /&gt;
8 bits input use 3D lookup (startup is slow).&lt;br /&gt;
10 and 12 bits use 2D lookup (startup is slow),&lt;br /&gt;
but there is a resolution loss noticeable effect on low values.&lt;br /&gt;
&lt;br /&gt;
Note about YV12/YV16/YV24 input/ouput:&lt;br /&gt;
For ConvertYUVtoxxx functions, convertion to YV24 if input is not YV24 is &amp;quot;quick&amp;quot;.&lt;br /&gt;
If you want a true correct precise/perfect convertion, i would avise you to use&lt;br /&gt;
a resampler and feed directly to YV24.&lt;br /&gt;
For ConvertxxxtoYUV functions, if you choose an ouput different from YV24, same&lt;br /&gt;
remark, convertion is &amp;quot;quick&amp;quot;.&lt;br /&gt;
If you want a true correct precise/perfect convertion, i would avise you&lt;br /&gt;
to ouput to YV24, and use a resampler to achieve the real output format you want.&lt;br /&gt;
&lt;br /&gt;
Functions inside this plugin:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ConvertYUVtoLinearRGB ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ConvertYUVtoLinearRGB(int Color,int OutputMode,int HDRMode,float HLGLb,float HLGLw,int HLGColor,&lt;br /&gt;
     bool OOTF,bool EOTF,bool fullrange,bool mpeg2c,int threads,bool logicalCores,bool MaxPhysCore,&lt;br /&gt;
     bool SetAffinity,bool sleep,int prefetch,int ThreadLevel)&lt;br /&gt;
&lt;br /&gt;
Accepted input: Planar YUV 8 to 16 bits.&lt;br /&gt;
&lt;br /&gt;
   Color -&lt;br /&gt;
      Set the color mode of the data.&lt;br /&gt;
         0: BT2100&lt;br /&gt;
         1: BT2020&lt;br /&gt;
         2: BT709&lt;br /&gt;
         3: BT601_525&lt;br /&gt;
         4: BT601_625&lt;br /&gt;
&lt;br /&gt;
       Default: 2 (int)&lt;br /&gt;
&lt;br /&gt;
   OutputMode -&lt;br /&gt;
      Set the output data mode.&lt;br /&gt;
         0: No change : Input 8 Bits -&amp;gt; Output : RGB32, Input &amp;gt; 8 Bits -&amp;gt; Output : RGB64&lt;br /&gt;
	 1: The ouput will be RGB64&lt;br /&gt;
	 2: The ouput will be RGBPS (Planar RGB float)&lt;br /&gt;
&lt;br /&gt;
       Default: 0 (int)&lt;br /&gt;
&lt;br /&gt;
   HDRMode -&lt;br /&gt;
      Has effect only if Color=0.&lt;br /&gt;
         0: PQ mode.&lt;br /&gt;
         1: HLG normalized 10000 cd/m² mode.&lt;br /&gt;
         2: HLG not normalized.&lt;br /&gt;
&lt;br /&gt;
       Default: 0 (int)&lt;br /&gt;
&lt;br /&gt;
   HLGLb -&lt;br /&gt;
      Set the black level in cd/m² for HLG mastering linear display value (Fd).&lt;br /&gt;
      Has effect only if HDRMode is set to 1 or 2.&lt;br /&gt;
&lt;br /&gt;
       Default: 0.05 (float)&lt;br /&gt;
&lt;br /&gt;
   HLGLw -&lt;br /&gt;
      Set the white level in cd/m² for HLG mastering linear display value (Fd).&lt;br /&gt;
      Has effect only if HDRMode is set to 1 or 2.&lt;br /&gt;
&lt;br /&gt;
       Default: 1000.0 (float)&lt;br /&gt;
&lt;br /&gt;
   HLGColor -&lt;br /&gt;
      Set the color space to use for the OOTF HLG function. Values are the same than Color&lt;br /&gt;
&lt;br /&gt;
       Default: 1 (int)&lt;br /&gt;
&lt;br /&gt;
   OOTF -&lt;br /&gt;
      Color = 0:&lt;br /&gt;
&lt;br /&gt;
        HDRMode = 0, 1, 2:&lt;br /&gt;
      If set to false, the OOTF-1 step will be skipped during the linear convertion.&lt;br /&gt;
      The output will be the linear displayed data (Fd) instead of the linear scene data.&lt;br /&gt;
&lt;br /&gt;
      If both EOTF and OOTF are false output will be standard RGB.&lt;br /&gt;
&lt;br /&gt;
      =================&lt;br /&gt;
      Color &amp;lt;&amp;gt; 0:&lt;br /&gt;
      If EOTF is false, nothing is done whatever OOTF =&amp;gt; Output will be standard RGB.&lt;br /&gt;
      If OOTF is false and EOTF is true, the output will be the linear displayed data (Fd).&lt;br /&gt;
&lt;br /&gt;
       Default: true (bool)&lt;br /&gt;
&lt;br /&gt;
   EOTF -&lt;br /&gt;
      Color = 0:&lt;br /&gt;
&lt;br /&gt;
        HDRMode = 0:&lt;br /&gt;
      If set to false, the EOTF step will be skipped during the linear convertion.&lt;br /&gt;
      The output will not be consistant with anything standard.&lt;br /&gt;
&lt;br /&gt;
        HDRMode = 1 or 2: No effect.&lt;br /&gt;
&lt;br /&gt;
      If both EOTF and OOTF are false output will be standard RGB.&lt;br /&gt;
&lt;br /&gt;
      =================&lt;br /&gt;
      Color &amp;lt;&amp;gt; 0:&lt;br /&gt;
      If EOTF is false, nothing is done whatever OOTF =&amp;gt; Output will be standard RGB.&lt;br /&gt;
      If OOTF is false, and EOTF is true, the output will be the linear displayed data (Fd).&lt;br /&gt;
&lt;br /&gt;
       Default: true (bool)&lt;br /&gt;
&lt;br /&gt;
   fullrange -&lt;br /&gt;
      If set to true, the YUV input data will be considered full range value.&lt;br /&gt;
&lt;br /&gt;
       Default: false (bool)&lt;br /&gt;
&lt;br /&gt;
   mpeg2c -&lt;br /&gt;
      Has effect only if input is YV12. If set to false, chroma placement will be&lt;br /&gt;
      considered mpeg-1, otherwise mpeg-2.&lt;br /&gt;
      Not implemented yet.&lt;br /&gt;
&lt;br /&gt;
       Default: true (bool)&lt;br /&gt;
&lt;br /&gt;
   threads -&lt;br /&gt;
      Controls how many threads will be used for processing. If set to 0, threads will&lt;br /&gt;
      be set equal to the number of detected logical or physical cores,according logicalCores parameter.&lt;br /&gt;
&lt;br /&gt;
      Default: 0  (int)&lt;br /&gt;
&lt;br /&gt;
   logicalCores -&lt;br /&gt;
      If threads is set to 0, it will specify if the number of threads will be the number&lt;br /&gt;
      of logical CPU (true) or the number of physical cores (false). If your processor doesn't&lt;br /&gt;
      have hyper-threading or threads&amp;lt;&amp;gt;0, this parameter has no effect.&lt;br /&gt;
&lt;br /&gt;
      Default: true (bool)&lt;br /&gt;
&lt;br /&gt;
   MaxPhysCore -&lt;br /&gt;
      If true, the threads repartition will use the maximum of physical cores possible. If your&lt;br /&gt;
      processor doesn't have hyper-threading or the SetAffinity parameter is set to false,&lt;br /&gt;
      this parameter has no effect.&lt;br /&gt;
&lt;br /&gt;
      Default: true (bool)&lt;br /&gt;
&lt;br /&gt;
   SetAffinity -&lt;br /&gt;
      If this parameter is set to true, the pool of threads will set each thread to a specific core,&lt;br /&gt;
      according MaxPhysCore parameter. If set to false, it's leaved to the OS.&lt;br /&gt;
      If prefecth&amp;gt;number of physical cores, it's automaticaly set to false.&lt;br /&gt;
&lt;br /&gt;
      Default: false (bool)&lt;br /&gt;
&lt;br /&gt;
  sleep -&lt;br /&gt;
      If this parameter is set to true, once the filter has finished one frame, the threads of the&lt;br /&gt;
      threadpool will be suspended (instead of still running but waiting an event), and resume when&lt;br /&gt;
      the next frame will be processed. If set to false, the threads of the threadpool are always&lt;br /&gt;
      running and waiting for a start event even between frames.&lt;br /&gt;
&lt;br /&gt;
      Default: false (bool)&lt;br /&gt;
&lt;br /&gt;
  prefetch -&lt;br /&gt;
      This parameter will allow to create more than one threadpool, to avoid mutual resources acces&lt;br /&gt;
      if &amp;quot;prefetch&amp;quot; is used in the avs script.&lt;br /&gt;
      0 : Will set automaticaly to the prefetch value use in the script. Well... that's what i wanted&lt;br /&gt;
          to do, but for now it's not possible for me to get this information when i need it, so, for&lt;br /&gt;
          now, 0 will result in 1. For now, if you're using &amp;quot;prefetch&amp;quot; in your script, put the same&lt;br /&gt;
          value on this parameter.&lt;br /&gt;
&lt;br /&gt;
      Default: 0&lt;br /&gt;
&lt;br /&gt;
  ThreadLevel -&lt;br /&gt;
      This parameter will set the priority level of the threads created for the processing (internal&lt;br /&gt;
      multithreading). No effect if threads=1.&lt;br /&gt;
      1 : Idle level.&lt;br /&gt;
      2 : Lowest level.&lt;br /&gt;
      3 : Below level.&lt;br /&gt;
      4 : Normal level.&lt;br /&gt;
      5 : Above level.&lt;br /&gt;
      6 : Highest level.&lt;br /&gt;
      7 : Time critical level (WARNING !!! use this level at your own risk)&lt;br /&gt;
&lt;br /&gt;
      Default : 6&lt;br /&gt;
&lt;br /&gt;
The logicalCores, MaxPhysCore, SetAffinity and sleep are parameters to specify how the pool of thread&lt;br /&gt;
will be created and handled, allowing if necessary each people to tune according his configuration.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ConvertLinearRGBtoYUV ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ConvertLinearRGBtoYUV(int Color,int OutputMode,int HDRMode,float HLGLb, float HLGLw,int HLGColor,&lt;br /&gt;
     bool OOTF,bool EOTF,bool fullrange,bool mpeg2c,bool fastmode,int threads,bool logicalCores,&lt;br /&gt;
     bool MaxPhysCore,bool SetAffinity,bool sleep,int prefetch,int ThreadLevel)&lt;br /&gt;
&lt;br /&gt;
Accepted input: RGB32, RGB64 and Planar float RGB.&lt;br /&gt;
&lt;br /&gt;
   Color -&lt;br /&gt;
      Set the color mode of the data.&lt;br /&gt;
         0: BT2100&lt;br /&gt;
         1: BT2020&lt;br /&gt;
         2: BT709&lt;br /&gt;
         3: BT601_525&lt;br /&gt;
         4: BT601_625&lt;br /&gt;
&lt;br /&gt;
       Default: 2 (int)&lt;br /&gt;
&lt;br /&gt;
   OutputMode -&lt;br /&gt;
      Set the output data mode. IF input is 8 bits output is 8 bits, 16 bits otherwise.&lt;br /&gt;
         0: YV24&lt;br /&gt;
	 1: YV16&lt;br /&gt;
	 2: YV12&lt;br /&gt;
       Default: 0 (int)&lt;br /&gt;
&lt;br /&gt;
   OOTF -&lt;br /&gt;
      Color = 0:&lt;br /&gt;
&lt;br /&gt;
        HDRMode = 0, 1, 2:&lt;br /&gt;
      If set to false, the OOTF step will be skipped during the linear convertion.&lt;br /&gt;
      Use this setting if the input is linear displayed data (Fd) instead of linear scene data.&lt;br /&gt;
&lt;br /&gt;
      If both EOTF and OOTF are false, correct ouput if input is standard RGB.&lt;br /&gt;
&lt;br /&gt;
      =================&lt;br /&gt;
      Color &amp;lt;&amp;gt; 0:&lt;br /&gt;
      If EOTF is false, nothing is done whatever OOTF, correct ouput if input is standard RGB.&lt;br /&gt;
      OOTF is false and EOTF is true :&lt;br /&gt;
      Use this setting if the input is linear displayed data (Fd) instead of linear scene data.&lt;br /&gt;
&lt;br /&gt;
       Default: true (bool)&lt;br /&gt;
&lt;br /&gt;
   EOTF -&lt;br /&gt;
      Color = 0:&lt;br /&gt;
&lt;br /&gt;
        HDRMode = 0:&lt;br /&gt;
      If set to false, the EOTF-1 step will be skipped during the linear convertion.&lt;br /&gt;
      The output will not be consistant with anything standard.&lt;br /&gt;
&lt;br /&gt;
        HDRMode = 1 or 2: no effect.&lt;br /&gt;
&lt;br /&gt;
      If both EOTF and OOTF are false, correct ouput if input is standard RGB.&lt;br /&gt;
&lt;br /&gt;
      =================&lt;br /&gt;
      Color &amp;lt;&amp;gt; 0 :&lt;br /&gt;
      If EOTF is false, nothing is done whatever OOTF, correct ouput if input is standard RGB.&lt;br /&gt;
      OOTF is false and EOTF is true :&lt;br /&gt;
      Use this setting if the input is linear displayed data (Fd) instead of linear scene data.&lt;br /&gt;
&lt;br /&gt;
       Default: true (bool)&lt;br /&gt;
&lt;br /&gt;
   fullrange -&lt;br /&gt;
      If set to true, the YUV output data will be set full range.&lt;br /&gt;
&lt;br /&gt;
       Default: false (bool)&lt;br /&gt;
&lt;br /&gt;
   mpeg2c -&lt;br /&gt;
      Has effect only if output is YV12. If set to false, chroma convertion will be mpeg-1, otherwise mpeg-2.&lt;br /&gt;
      Not implemented yet.&lt;br /&gt;
&lt;br /&gt;
       Default: true (bool)&lt;br /&gt;
&lt;br /&gt;
   fastmode -&lt;br /&gt;
      Has effect only if input is float. If set to true, the de-linear convertion will be done using&lt;br /&gt;
      a lookup table of 20 bits input (mantisse size of float is 24 bits). Otherwise, the function will&lt;br /&gt;
      be calculated each time, this will create a huge slowdown.&lt;br /&gt;
&lt;br /&gt;
       Default: true (bool)&lt;br /&gt;
&lt;br /&gt;
The others parameters are identical to ConvertYUVtoLinearRGB.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ConvertYUVtoXYZ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ConvertYUVtoXYZ(int Color,int OutputMode,int HDRMode,float HLGLb,float HLGLw,float Crosstalk,&lt;br /&gt;
     int HLGColor,bool OOTF,bool EOTF,bool fullrange,bool mpeg2c,&lt;br /&gt;
     float Rx,float Ry,float Gx,float Gy,float Bx,float By,float Wx,float Wy,&lt;br /&gt;
     int threads,bool logicalCores,bool MaxPhysCore,bool SetAffinity,bool sleep,&lt;br /&gt;
     int prefetch,int ThreadLevel)&lt;br /&gt;
&lt;br /&gt;
Accepted input: Planar YUV 8 to 16 bits.&lt;br /&gt;
The output will be tagged RGB even if data is XYZ.&lt;br /&gt;
&lt;br /&gt;
   Crosstalk -&lt;br /&gt;
      Coeff for the crosstalk R,G,B matrix (for Method C of BT2446). Value 0.0 to 0.33.&lt;br /&gt;
      Will apply a crosstalk matrix on RGB before XYZ matrix convertion.&lt;br /&gt;
      Avoid value over 0.3 in 8 bits mode. 0.0 means no crosstalk between R,G,B.&lt;br /&gt;
&lt;br /&gt;
       Default: 0.0 (float)&lt;br /&gt;
&lt;br /&gt;
   Rx,Ry,Gx,Gy,Bx,By,Wx,Wy -&lt;br /&gt;
      These parameters allow to configure the chromaticity coordinates Red point, Green point, Blue point&lt;br /&gt;
      and White point. If not set, the values defined in the BT.xxxx of the Color parameter are used.&lt;br /&gt;
&lt;br /&gt;
       Default: According Color parameter (float)&lt;br /&gt;
&lt;br /&gt;
The others parameters are identical to ConvertYUVtoLinearRGB.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ConvertXYZtoYUV ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ConvertXYZtoYUV(int Color,int OutputMode,int HDRMode,float HLGLb,float HLGLw,float Crosstalk,&lt;br /&gt;
     int HLGColor,bool OOTF,bool EOTF,bool fullrange,bool mpeg2c,bool fastmode,&lt;br /&gt;
     float Rx,float Ry,float Gx,float Gy,float Bx,float By,float Wx,float Wy,&lt;br /&gt;
     int pColor,float pRx,float pRy,float pGx,float pGy,float pBx,float pBy,float pWx,float pWy,&lt;br /&gt;
     int threads,bool logicalCores,bool MaxPhysCore,bool SetAffinity,bool sleep,&lt;br /&gt;
     int prefetch,int ThreadLevel)&lt;br /&gt;
&lt;br /&gt;
Accepted input: RGB32, RGB64 and Planar float RGB.&lt;br /&gt;
&lt;br /&gt;
   Crosstalk -&lt;br /&gt;
      Coeff for the crosstalk R,G,B matrix (for Method C of BT2446). Value 0.0 to 0.33.&lt;br /&gt;
      Will apply a reverse crosstalk matrix on RGB after XYZ matrix convertion.&lt;br /&gt;
      The value must be the same than used on YUVtoXYZ.&lt;br /&gt;
      Avoid value over 0.3 in 8 bits mode. 0.0 means no crosstalk between R,G,B.&lt;br /&gt;
&lt;br /&gt;
       Default: 0.0 (float)&lt;br /&gt;
&lt;br /&gt;
   pColor -&lt;br /&gt;
      Color mode used in YUV/RGBtoXYZ.&lt;br /&gt;
         0 : BT2100&lt;br /&gt;
         1 : BT2020&lt;br /&gt;
         2 : BT709&lt;br /&gt;
         3 : BT601_525&lt;br /&gt;
         4 : BT601_625&lt;br /&gt;
&lt;br /&gt;
       Default: 2 if Color=0, 0 otherwise.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   pRx,pRy,pGx,pGy,pBx,pBy,pWx,pWy -&lt;br /&gt;
      Chromaticity datas used in previous YUV/RGBtoXYZ.&lt;br /&gt;
&lt;br /&gt;
       Default: According pColor parameter (float)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The others parameters are identical to ConvertLinearRGBtoYUV.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ConvertRGBtoXYZ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ConvertRGBtoXYZ(int Color,int OutputMode,int HDRMode,float HLGLb, float HLGLw,float Crosstalk,&lt;br /&gt;
     int HLGColor,bool OOTF,bool EOTF,bool fastmode,&lt;br /&gt;
     float Rx,float Ry,float Gx,float Gy,float Bx,float By,float Wx,float Wy,&lt;br /&gt;
     int threads,bool logicalCores,bool MaxPhysCore,bool SetAffinity,bool sleep,&lt;br /&gt;
     int prefetch,int ThreadLevel)&lt;br /&gt;
&lt;br /&gt;
Accepted input: RGB32, RGB64 and Planar float RGB.&lt;br /&gt;
The output will be tagged RGB even if data is XYZ.&lt;br /&gt;
&lt;br /&gt;
The parameters are identical to ConvertYUVtoXYZ.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===   ConvertXYZtoRGB === &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ConvertXYZtoRGB(int Color,int OutputMode,int HDRMode,float HLGLb, float HLGLw,float Crosstalk,&lt;br /&gt;
     int HLGColor,bool OOTF,bool EOTF,bool fastmode,&lt;br /&gt;
     float Rx,float Ry,float Gx,float Gy,float Bx,float By,float Wx,float Wy,&lt;br /&gt;
     int pColor,float pRx,float pRy,float pGx,float pGy,float pBx,float pBy,float pWx,float pWy,&lt;br /&gt;
     int threads,bool logicalCores,bool MaxPhysCore,bool SetAffinity,bool sleep,&lt;br /&gt;
     int prefetch,int ThreadLevel)&lt;br /&gt;
&lt;br /&gt;
Accepted input: RGB32, RGB64 and Planar float RGB.&lt;br /&gt;
&lt;br /&gt;
   OutputMode -&lt;br /&gt;
      Set the output data mode.&lt;br /&gt;
         0: No change&lt;br /&gt;
	 1: Input 8 to 16 bits : no change, Input Planar float RGB -&amp;gt; Outpout RGB64.&lt;br /&gt;
       Default: 0 (int)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The others parameters are identical to ConvertXYZtoYUV.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===  ConvertXYZ_Scale_HDRtoSDR ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ConvertXYZ_Scale_HDRtoSDR(float Coeff_X, float Coeff_Y, float Coeff_Z,&lt;br /&gt;
     int threads,bool logicalCores,bool MaxPhysCore,bool SetAffinity,bool sleep,&lt;br /&gt;
     int prefetch,int ThreadLevel)&lt;br /&gt;
     &lt;br /&gt;
Accepted input: RGB64 and Planar float RGB.&lt;br /&gt;
&lt;br /&gt;
For now, it's just a linear scalling, just for testing. Formula is just Out_X=Coeff_X*In_X (etc...).&lt;br /&gt;
&lt;br /&gt;
   Coeff_X -&lt;br /&gt;
      Linear scalar value used on X plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: 100.0 (float)&lt;br /&gt;
&lt;br /&gt;
   Coeff_Y -&lt;br /&gt;
      Linear scalar value used on Y plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: Coeff_X (float)&lt;br /&gt;
&lt;br /&gt;
   Coeff_Z -&lt;br /&gt;
      Linear scalar value used on Z plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: Coeff_X (float)&lt;br /&gt;
&lt;br /&gt;
The others parameters are identical to ConvertYUVtoLinearRGB.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ConvertXYZ_Scale_SDRtoHDR ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ConvertXYZ_Scale_SDRtoHDR(float Coeff_X, float Coeff_Y, float Coeff_Z,&lt;br /&gt;
     int threads,bool logicalCores,bool MaxPhysCore,bool SetAffinity,bool sleep,&lt;br /&gt;
     int prefetch,int ThreadLevel)&lt;br /&gt;
     &lt;br /&gt;
Accepted input: RGB64 and Planar float RGB.&lt;br /&gt;
&lt;br /&gt;
Produce linear scalling. Formula is just Out_X=In_X/Coeff_X (etc...).&lt;br /&gt;
&lt;br /&gt;
   Coeff_X -&lt;br /&gt;
      Linear scalar value used on X plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: 100.0 (float)&lt;br /&gt;
&lt;br /&gt;
   Coeff_Y -&lt;br /&gt;
      Linear scalar value used on Y plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: Coeff_X (float)&lt;br /&gt;
&lt;br /&gt;
   Coeff_Z -&lt;br /&gt;
      Linear scalar value used on Z plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: Coeff_X (float)&lt;br /&gt;
&lt;br /&gt;
The others parameters are identical to ConvertYUVtoLinearRGB.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ConvertXYZ_Hable_HDRtoSDR ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ConvertXYZ_Hable_HDRtoSDR(float exposure_X,float whitescale_X,float a_x,float b_x,float c_x,&lt;br /&gt;
     float d_X,float e_x,float f_x,float exposure_Y,float whitescale_Y,float a_Y,float b_Y,float c_Y,&lt;br /&gt;
     float d_Y,float e_Y,float f_Y,float exposure_Z,float whitescale_Z,float a_Z,float b_Z,float c_Z,&lt;br /&gt;
     float d_Z,float e_Z,float f_Z,int pColor,float pRx,float pRy,float pGx,float pGy,&lt;br /&gt;
     float pBx,float pBy,bool fastmode,&lt;br /&gt;
     int threads,bool logicalCores,bool MaxPhysCore,bool SetAffinity,bool sleep,&lt;br /&gt;
     int prefetch,int ThreadLevel)&lt;br /&gt;
     &lt;br /&gt;
Accepted input: RGB64 and Planar float RGB.&lt;br /&gt;
&lt;br /&gt;
Hable tonemap, you can have different parameters for each plane, if you want.&lt;br /&gt;
&lt;br /&gt;
   exposure_X -&lt;br /&gt;
      Exposure value used on X plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: 2.0 (float)&lt;br /&gt;
&lt;br /&gt;
   whitescale_X -&lt;br /&gt;
      White scale value used on X plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: 11.2 (float)&lt;br /&gt;
&lt;br /&gt;
   a_X -&lt;br /&gt;
      a value used on X plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: 0.15 (float)&lt;br /&gt;
&lt;br /&gt;
   b_X -&lt;br /&gt;
      b value used on X plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: 0.5 (float)&lt;br /&gt;
&lt;br /&gt;
   c_X -&lt;br /&gt;
      c value used on X plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: 0.1 (float)&lt;br /&gt;
&lt;br /&gt;
   d_X -&lt;br /&gt;
      d value used on X plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: 0.2 (float)&lt;br /&gt;
&lt;br /&gt;
   e_X -&lt;br /&gt;
      e value used on X plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: 0.02 (float)&lt;br /&gt;
&lt;br /&gt;
   f_X -&lt;br /&gt;
      f value used on X plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: 0.3 (float)&lt;br /&gt;
&lt;br /&gt;
   exposure_Y,whitescale_Y,a_Y,b_Y,c_Y,d_Y,e_Y,f_Y&lt;br /&gt;
      Values used on Y plane.&lt;br /&gt;
&lt;br /&gt;
       Default: exposure_X,whitescale_X,a_X,b_X,c_X,d_X,e_X,f_X (float)&lt;br /&gt;
&lt;br /&gt;
   exposure_Z,whitescale_Z,a_Z,b_Z,c_Z,d_Z,e_Z,f_Z&lt;br /&gt;
      Values used on Z plane.&lt;br /&gt;
&lt;br /&gt;
       Default: exposure_X,whitescale_X,a_X,b_X,c_X,d_X,e_X,f_X (float)&lt;br /&gt;
&lt;br /&gt;
The others parameters are identical to ConvertXYZtoRGB.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ConvertRGB_Hable_HDRtoSDR ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ConvertRGB_Hable_HDRtoSDR(float exposure_R,float whitescale_R,float a_R,float b_R,float c_R,&lt;br /&gt;
     float d_R,float e_R,float f_R,float exposure_G,float whitescale_G,float a_G,float b_G,float c_G,&lt;br /&gt;
     float d_G,float e_G,float f_G,float exposure_B,float whitescale_B,float a_B,float b_B,float c_B,&lt;br /&gt;
     float d_B,float e_B,float f_B,bool fastmode,&lt;br /&gt;
     int threads,bool logicalCores,bool MaxPhysCore,bool SetAffinity,bool sleep,&lt;br /&gt;
     int prefetch,int ThreadLevel)&lt;br /&gt;
     &lt;br /&gt;
Accepted input: RGB64 and Planar float RGB.&lt;br /&gt;
&lt;br /&gt;
Hable tonemap, you can have different parameters for each plane, if you want.&lt;br /&gt;
&lt;br /&gt;
   exposure_R -&lt;br /&gt;
      Exposure value used on R plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: 2.0 (float)&lt;br /&gt;
&lt;br /&gt;
   whitescale_R -&lt;br /&gt;
      White scale value used on R plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: 11.2 (float)&lt;br /&gt;
&lt;br /&gt;
   a_R -&lt;br /&gt;
      a value used on R plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: 0.15 (float)&lt;br /&gt;
&lt;br /&gt;
   b_R -&lt;br /&gt;
      b value used on R plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: 0.5 (float)&lt;br /&gt;
&lt;br /&gt;
   c_R -&lt;br /&gt;
      c value used on R plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: 0.1 (float)&lt;br /&gt;
&lt;br /&gt;
   d_R -&lt;br /&gt;
      d value used on R plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: 0.2 (float)&lt;br /&gt;
&lt;br /&gt;
   e_R -&lt;br /&gt;
      e value used on R plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: 0.02 (float)&lt;br /&gt;
&lt;br /&gt;
   f_R -&lt;br /&gt;
      f value used on R plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: 0.3 (float)&lt;br /&gt;
&lt;br /&gt;
   exposure_G,whitescale_G,a_G,b_G,c_G,d_G,e_G,f_G&lt;br /&gt;
      Values used on G plane.&lt;br /&gt;
&lt;br /&gt;
       Default: exposure_R,whitescale_R,a_R,b_R,c_R,d_R,e_R,f_R (float)&lt;br /&gt;
&lt;br /&gt;
   exposure_B,whitescale_B,a_B,b_B,c_B,d_B,e_B,f_B&lt;br /&gt;
      Values used on B plane.&lt;br /&gt;
&lt;br /&gt;
       Default: exposure_R,whitescale_R,a_R,b_R,c_R,d_R,e_R,f_R (float)&lt;br /&gt;
&lt;br /&gt;
The others parameters are identical to ConvertLinearRGBtoYUV.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ConvertXYZ_Mobius_HDRtoSDR ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ConvertXYZ_Mobius_HDRtoSDR(float exposure_X,float transition_X,float peak_X,&lt;br /&gt;
     float exposure_Y,float transition_Y,float peak_Y,float exposure_Z,float transition_Z,float peak_Z,&lt;br /&gt;
     int pColor,float pRx,float pRy,float pGx,float pGy,float pBx,float pBy,bool fastmode,&lt;br /&gt;
     int threads,bool logicalCores,bool MaxPhysCore,bool SetAffinity,bool sleep,&lt;br /&gt;
     int prefetch,int ThreadLevel)&lt;br /&gt;
     &lt;br /&gt;
Accepted input: RGB64 and Planar float RGB.&lt;br /&gt;
&lt;br /&gt;
Mobius tonemap, you can have different parameters for each plane, if you want.&lt;br /&gt;
&lt;br /&gt;
   exposure_X -&lt;br /&gt;
      Exposure value used on X plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: 2.0 (float)&lt;br /&gt;
&lt;br /&gt;
   transition_X -&lt;br /&gt;
      Transition value used on X plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: 0.3 (float)&lt;br /&gt;
&lt;br /&gt;
   peak_X -&lt;br /&gt;
      Peak value used on X plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: 1.0 (float)&lt;br /&gt;
&lt;br /&gt;
   exposure_Y,transition_Y,peak_Y&lt;br /&gt;
      Values used on Y plane.&lt;br /&gt;
&lt;br /&gt;
       Default: exposure_X,transition_X,peak_X (float)&lt;br /&gt;
&lt;br /&gt;
   exposure_Z,transition_Z,peak_Z&lt;br /&gt;
      Values used on Z plane.&lt;br /&gt;
&lt;br /&gt;
       Default: exposure_X,transition_X,peak_X (float)&lt;br /&gt;
&lt;br /&gt;
The others parameters are identical to ConvertXYZtoRGB.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ConvertRGB_Mobius_HDRtoSDR  ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ConvertRGB_Mobius_HDRtoSDR(float exposure_R,float transition_R,float peak_R,&lt;br /&gt;
     float exposure_G,float transition_G,float peak_G,float exposure_B,float transition_B,&lt;br /&gt;
     float peak_B,bool fastmode,&lt;br /&gt;
     int threads,bool logicalCores,bool MaxPhysCore,bool SetAffinity,bool sleep,&lt;br /&gt;
     int prefetch,int ThreadLevel)&lt;br /&gt;
     &lt;br /&gt;
Accepted input: RGB64 and Planar float RGB.&lt;br /&gt;
&lt;br /&gt;
Mobius tonemap, you can have different parameters for each plane, if you want.&lt;br /&gt;
&lt;br /&gt;
   exposure_R -&lt;br /&gt;
      Exposure value used on R plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: 2.0 (float)&lt;br /&gt;
&lt;br /&gt;
   transition_R -&lt;br /&gt;
      Transition value used on R plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: 0.3 (float)&lt;br /&gt;
&lt;br /&gt;
   peak_R -&lt;br /&gt;
      Peak value used on R plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: 1.0 (float)&lt;br /&gt;
&lt;br /&gt;
   exposure_G,transition_G,peak_G&lt;br /&gt;
      Values used on G plane.&lt;br /&gt;
&lt;br /&gt;
       Default: exposure_R,transition_R,peak_R (float)&lt;br /&gt;
&lt;br /&gt;
   exposure_B,transition_B,peak_B&lt;br /&gt;
      Values used on B plane.&lt;br /&gt;
&lt;br /&gt;
       Default: exposure_R,transition_R,peak_R (float)&lt;br /&gt;
&lt;br /&gt;
The others parameters are identical to ConvertLinearRGBtoYUV.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ConvertXYZ_Reinhard_HDRtoSDR ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ConvertXYZ_Reinhard_HDRtoSDR(float exposure_X,float contrast_X,float peak_X,&lt;br /&gt;
     float exposure_Y,float contrast_Y,float peak_Y,float exposure_Z,float contrast_Z,float peak_Z,&lt;br /&gt;
     int pColor,float pRx,float pRy,float pGx,float pGy,float pBx,float pBy,bool fastmode,&lt;br /&gt;
     int threads,bool logicalCores,bool MaxPhysCore,bool SetAffinity,bool sleep,&lt;br /&gt;
     int prefetch,int ThreadLevel)&lt;br /&gt;
     &lt;br /&gt;
Accepted input: RGB64 and Planar float RGB.&lt;br /&gt;
&lt;br /&gt;
Reinhard tonemap, you can have different parameters for each plane, if you want.&lt;br /&gt;
&lt;br /&gt;
   exposure_X -&lt;br /&gt;
      Exposure value used on X plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: 2.0 (float)&lt;br /&gt;
&lt;br /&gt;
   contrast_X -&lt;br /&gt;
      Contrast value used on X plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: 0.5 (float)&lt;br /&gt;
&lt;br /&gt;
   peak_X -&lt;br /&gt;
      Peak value used on X plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: 1.0 (float)&lt;br /&gt;
&lt;br /&gt;
   exposure_Y,contrast_Y,peak_Y&lt;br /&gt;
      Values used on Y plane.&lt;br /&gt;
&lt;br /&gt;
       Default: exposure_X,contrast_X,peak_X (float)&lt;br /&gt;
&lt;br /&gt;
   exposure_Z,contrast_Z,peak_Z&lt;br /&gt;
      Values used on Z plane.&lt;br /&gt;
&lt;br /&gt;
       Default: exposure_X,contrast_X,peak_X (float)&lt;br /&gt;
&lt;br /&gt;
The others parameters are identical to ConvertXYZtoRGB.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ConvertRGB_Reinhard_HDRtoSDR ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ConvertRGB_Reinhard_HDRtoSDR(float exposure_R,float contrast_R,float peak_R,&lt;br /&gt;
     float exposure_G,float contrast_G,float peak_G,float exposure_B,float contrast_B,&lt;br /&gt;
     float peak_B,bool fastmode,&lt;br /&gt;
     int threads,bool logicalCores,bool MaxPhysCore,bool SetAffinity,bool sleep,&lt;br /&gt;
     int prefetch,int ThreadLevel)&lt;br /&gt;
     &lt;br /&gt;
Accepted input: RGB64 and Planar float RGB.&lt;br /&gt;
&lt;br /&gt;
Reinhard tonemap, you can have different parameters for each plane, if you want.&lt;br /&gt;
&lt;br /&gt;
   exposure_R -&lt;br /&gt;
      Exposure value used on R plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: 2.0 (float)&lt;br /&gt;
&lt;br /&gt;
   contrast_R -&lt;br /&gt;
      Contrast value used on R plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: 0.5 (float)&lt;br /&gt;
&lt;br /&gt;
   peak_R -&lt;br /&gt;
      Peak value used on R plane.&lt;br /&gt;
      &lt;br /&gt;
       Default: 1.0 (float)&lt;br /&gt;
&lt;br /&gt;
   exposure_G,contrast_G,peak_G&lt;br /&gt;
      Values used on G plane.&lt;br /&gt;
&lt;br /&gt;
       Default: exposure_R,contrast_R,peak_R (float)&lt;br /&gt;
&lt;br /&gt;
   exposure_B,contrast_B,peak_B&lt;br /&gt;
      Values used on B plane.&lt;br /&gt;
&lt;br /&gt;
       Default: exposure_R,contrast_R,peak_R (float)&lt;br /&gt;
&lt;br /&gt;
The others parameters are identical to ConvertLinearRGBtoYUV.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ConvertLinearRGBtoYUV_BT2446_A_HDRtoSDR ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ConvertLinearRGBtoYUV_BT2446_A_HDRtoSDR(float Lhdr,float Lsdr,float CoeffAdj,bool fastmode,&lt;br /&gt;
     int threads,bool logicalCores,bool MaxPhysCore,bool SetAffinity,bool sleep,&lt;br /&gt;
     int prefetch,int ThreadLevel)&lt;br /&gt;
     &lt;br /&gt;
Accepted input: RGB64 and Planar float RGB.&lt;br /&gt;
WARNING : Input must be linear DISPLAYED data, so produced by&lt;br /&gt;
ConvertYUVtoLinearRGB with OOTF=false.&lt;br /&gt;
Output : YV24 16 bits.&lt;br /&gt;
&lt;br /&gt;
HDR to SDR convertion, using the REC-BT.2446 method A tonemap.&lt;br /&gt;
&lt;br /&gt;
   Lhdr -&lt;br /&gt;
      HDR max mastering level cd/m².&lt;br /&gt;
      &lt;br /&gt;
       Default: 1000.0 (float)&lt;br /&gt;
&lt;br /&gt;
   Lsdr -&lt;br /&gt;
      SDR white targeting level cd/m².&lt;br /&gt;
      &lt;br /&gt;
       Default: 100.0 (float)&lt;br /&gt;
   &lt;br /&gt;
   CoeffAdj -&lt;br /&gt;
      This is not part of BT2446 A method, added, multiply the data by the value.&lt;br /&gt;
&lt;br /&gt;
       Default: 1.0&lt;br /&gt;
&lt;br /&gt;
The others parameters are identical to ConvertLinearRGBtoYUV.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ConverXYZ_BT2446_C_HDRtoSDR ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ConverXYZ_BT2446_C_HDRtoSDR(bool ChromaC,bool PQMode,float Lhdr,float Lsdr,float pct_ref,&lt;br /&gt;
     float pct_ip,float pct_wp,float pct_sdr_skin,float pct_hdr_skin,float WhiteShift,&lt;br /&gt;
     int pColor,float pRx,float pRy,float pGx,float pGy,float pBx,float pBy,bool fastmode,&lt;br /&gt;
     int threads,bool logicalCores,bool MaxPhysCore,bool SetAffinity,bool sleep,&lt;br /&gt;
     int prefetch,int ThreadLevel)&lt;br /&gt;
&lt;br /&gt;
Accepted input: RGB64 and Planar float RGB.&lt;br /&gt;
WARNING : Input must be linear DISPLAYED data, so produced by&lt;br /&gt;
ConvertYUVtoLinearRGB with OOTF=false.&lt;br /&gt;
&lt;br /&gt;
You have to read the BT2446 C method to understand properly the purpose of the parameters.&lt;br /&gt;
&lt;br /&gt;
   ChromaC -&lt;br /&gt;
      Allow the &amp;quot;Optional processing of chroma correction above HDR Reference White&amp;quot;.&lt;br /&gt;
      Warning: Will create a slowdown.&lt;br /&gt;
      &lt;br /&gt;
       Default: false (bool)&lt;br /&gt;
&lt;br /&gt;
   PQMode -&lt;br /&gt;
      Adjust some parameters to allow processing of PQ video.&lt;br /&gt;
      &lt;br /&gt;
       Default: false (bool)&lt;br /&gt;
&lt;br /&gt;
   Lhdr -&lt;br /&gt;
      HDR max mastering level cd/m².&lt;br /&gt;
      &lt;br /&gt;
       Default: 10000.0 (float) if PQMode=true, else 1000.0 (float)&lt;br /&gt;
&lt;br /&gt;
   Lsdr -&lt;br /&gt;
      SDR white targeting level cd/m².&lt;br /&gt;
      &lt;br /&gt;
       Default: 100.0 (float)&lt;br /&gt;
&lt;br /&gt;
   pct_ref -&lt;br /&gt;
      Used to compute the Y HDR Reference White.&lt;br /&gt;
      &lt;br /&gt;
       Default: 0.58 (float) if PQMode=true, else 0.75 (float).&lt;br /&gt;
&lt;br /&gt;
   pct_ip -&lt;br /&gt;
      Used to compute the SDR inflection point.&lt;br /&gt;
      &lt;br /&gt;
       Default: 0.80 (float).&lt;br /&gt;
&lt;br /&gt;
   pct_wp -&lt;br /&gt;
      Used to compute the SDR white level corresponding to the HDR Reference White.&lt;br /&gt;
      &lt;br /&gt;
       Default: 0.96 (float).&lt;br /&gt;
&lt;br /&gt;
   pct_sdr_skin -&lt;br /&gt;
      Value for SDR skin tones described in Annex 4 of Report ITU-R BT.2408.&lt;br /&gt;
      &lt;br /&gt;
       Default: 0.70 (float).&lt;br /&gt;
&lt;br /&gt;
   pct_hdr_skin -&lt;br /&gt;
      Value for HDR skin tones described in Annex 4 of Report ITU-R BT.2408.&lt;br /&gt;
      &lt;br /&gt;
       Default: 0.44 (float) if PQMode=true, else 0.50 (float).&lt;br /&gt;
&lt;br /&gt;
   WhiteShift -&lt;br /&gt;
      Value used for white shift in formula (26).&lt;br /&gt;
      &lt;br /&gt;
       Default: 0.00 (float).&lt;br /&gt;
&lt;br /&gt;
The filter will automaticaly compute k1 to k4 according the input parameters.&lt;br /&gt;
There is no real check (and there will not be) for sanity values of the parameters,&lt;br /&gt;
so, if you put nonsense values, it's not impossible that you'll create a crash or garbage output.&lt;br /&gt;
&lt;br /&gt;
The others parameters are identical to ConvertXYZtoRGB.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Notes ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
*************************************************************&lt;br /&gt;
&lt;br /&gt;
Note :&lt;br /&gt;
======&lt;br /&gt;
ConvertXYZ_Scalar_HDRtoSDR is a simple scalar function, i've made just to see what result it produces.&lt;br /&gt;
Don't have expectations on this plugin, but if by luck it works for you...&lt;br /&gt;
&lt;br /&gt;
*************************************************************&lt;br /&gt;
&lt;br /&gt;
Note about pColor (and pRx,...)  parameters :&lt;br /&gt;
=============================================&lt;br /&gt;
These parameters are here just to know the input range value in 8-16 bits mode, because contrary&lt;br /&gt;
to RGB where range value is always [0.0,1.0], for XYZ the range value can vary according&lt;br /&gt;
the chromaticity parameters and white point value.&lt;br /&gt;
They have no other effect than setting, for example, in 8 bits, for X 0=0.0, 255=0.96.&lt;br /&gt;
These parameters have no effect in float mode.&lt;br /&gt;
&lt;br /&gt;
*************************************************************&lt;br /&gt;
&lt;br /&gt;
Note about linear values :&lt;br /&gt;
==========================&lt;br /&gt;
&lt;br /&gt;
For ConvertYUVtoxxx functions, the output is:&lt;br /&gt;
&lt;br /&gt;
For HDR data (Color=0), HDRMode=(0 or 1),&lt;br /&gt;
the output (R,G,B stage) is normalized for 1.0=10000 cd/m² (or 255 or 65535).&lt;br /&gt;
&lt;br /&gt;
For SDR data (Color&amp;lt;&amp;gt;0),&lt;br /&gt;
the output (R,G,B stage) is normalized for 1.0=100 cd/m² (or 255 or 65535).&lt;br /&gt;
&lt;br /&gt;
For ConvertxxxtoYUV functions, the input is:&lt;br /&gt;
&lt;br /&gt;
For HDR data (Color=0), HDRMode=(0 or 1),&lt;br /&gt;
the input (R,G,B stage) is normalized for 1.0=10000 cd/m² (or 255 or 65535).&lt;br /&gt;
&lt;br /&gt;
For SDR data (Color&amp;lt;&amp;gt;0),&lt;br /&gt;
the input (R,G,B stage) is normalized for 1.0=100 cd/m² (or 255 or 65535).&lt;br /&gt;
&lt;br /&gt;
*************************************************************&lt;br /&gt;
&lt;br /&gt;
Note about Chromaticity parameters&lt;br /&gt;
==================================&lt;br /&gt;
On HDR stream, SEI mastering parameters provide the chromaticity parameters used.&lt;br /&gt;
Even if BT2100 has default value, i think it will produce optimal result in RGB/YUV&lt;br /&gt;
to XYZ convertion if SEI mastering parameters are used instead of default BT2100 values.&lt;br /&gt;
All the BTxxxx use D65 white point, if the SEI parameters are allready set to it, no use to&lt;br /&gt;
specify them.&lt;br /&gt;
These parameters can be get using mediainfo on the HDR stream.&lt;br /&gt;
Another way to get them, it's if you're using DGIndexNV, on HEVC HDR stream.&lt;br /&gt;
In that case, you'll have in the DGI file this line (for exemple) :&lt;br /&gt;
&lt;br /&gt;
MASTERING 13250 34500 7500 3000 34000 16000 15635 16450 40000000 50&lt;br /&gt;
&lt;br /&gt;
The values are the following:&lt;br /&gt;
&lt;br /&gt;
MASTERING GreenX GreenY BlueX BlueY RedX RedY WhiteX WhiteY MaxMasteringLevel MinMasteringLevel&lt;br /&gt;
&lt;br /&gt;
The GreenX GreenY BlueX BlueY RedX RedY WhiteX WhiteY are by 0.00002 steps.&lt;br /&gt;
The MaxMasteringLevel MinMasteringLevel are by 0.0001 steps.&lt;br /&gt;
&lt;br /&gt;
In our exemple, it will result :&lt;br /&gt;
Gx: 0.265&lt;br /&gt;
Gy: 0.690&lt;br /&gt;
Bx: 0.150&lt;br /&gt;
By: 0.060&lt;br /&gt;
Rx: 0.680&lt;br /&gt;
Ry: 0.320&lt;br /&gt;
Wx: 0.3127&lt;br /&gt;
Wy: 0.3290&lt;br /&gt;
Max: 4000&lt;br /&gt;
Min: 0.05&lt;br /&gt;
&lt;br /&gt;
Remark :&lt;br /&gt;
15635 16450 are the standard D65 white point value, no need in these case to put them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*************************************************************&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Some example use&lt;br /&gt;
================&lt;br /&gt;
&lt;br /&gt;
BT.2020 to BT.709 convertion, do the following:&lt;br /&gt;
ConvertYUVtoXYZ(Color=1)&lt;br /&gt;
ConvertXYZtoYUV(pColor=1)&lt;br /&gt;
&lt;br /&gt;
----------------------------------&lt;br /&gt;
&lt;br /&gt;
BT.709 to BT.2020 convertion, do the following:&lt;br /&gt;
ConvertYUVtoXYZ()&lt;br /&gt;
ConvertXYZtoYUV(Color=1,pColor=2)&lt;br /&gt;
&lt;br /&gt;
----------------------------------&lt;br /&gt;
&lt;br /&gt;
HDR HLG (with mastering Lw at 1500 and HLG mastering display colorspace BT.2020) to HDR PQ convertion:&lt;br /&gt;
ConvertYUVtoLinearRGB(Color=0,HDRMode=1,HLGLw=1500,OOTF=false)&lt;br /&gt;
ConvertLinearRGBtoYUV(Color=0,OOTF=false)&lt;br /&gt;
&lt;br /&gt;
----------------------------------&lt;br /&gt;
&lt;br /&gt;
HDR PQ to HDR HLG (with mastering Lw at 1200 and HLG mastering display colorspace BT.709) convertion:&lt;br /&gt;
ConvertYUVtoLinearRGB(Color=0,OOTF=false)&lt;br /&gt;
ConvertLinearRGBtoYUV(Color=0,HDRMode=1,HLGLw=1200,HLGColor=2,OOTF=false)&lt;br /&gt;
&lt;br /&gt;
Note: In this case, there is no speed-up for lowering input from 16 to 10 or 12 bits.&lt;br /&gt;
&lt;br /&gt;
----------------------------------&lt;br /&gt;
&lt;br /&gt;
BT2446 methods exemples.&lt;br /&gt;
Supposed to work with linear display, not linear sensor, so, OOTF=false.&lt;br /&gt;
&lt;br /&gt;
Method A&lt;br /&gt;
&lt;br /&gt;
ConvertYUVtoLinearRGB(Color=0,HDRMode=2,OOTF=false)&lt;br /&gt;
ConvertLinearRGBtoYUV_BT2446_A_HDRtoSDR(Lhdr=1000.0,CoeffAdj=1.0)&lt;br /&gt;
&lt;br /&gt;
Method C&lt;br /&gt;
&lt;br /&gt;
#For PQ at 4000 for exemple :&lt;br /&gt;
&lt;br /&gt;
ConvertYUVtoXYZ(Color=0,HDRMode=0,OOTF=false,Crosstalk=0.0)&lt;br /&gt;
ConverXYZ_BT2446_C_HDRtoSDR(PQMode=true,Lhdr=4000.0,Lsdr=100.0,pColor=0)&lt;br /&gt;
ConvertXYZtoYUV(Color=2,pColor=0,OOTF=false,Crosstalk=0.0)&lt;br /&gt;
&lt;br /&gt;
#For HLG at 1000 for exemple (HLG must not be normalized to 10000.0) :&lt;br /&gt;
&lt;br /&gt;
ConvertYUVtoXYZ(Color=0,HDRMode=2,OOTF=false,Crosstalk=0.0)&lt;br /&gt;
ConverXYZ_BT2446_C_HDRtoSDR(PQMode=false,Lhdr=1000.0,Lsdr=100.0,pColor=0)&lt;br /&gt;
ConvertXYZtoYUV(Color=2,pColor=0,OOTF=false,Crosstalk=0.0)&lt;br /&gt;
&lt;br /&gt;
#If you play with Crosstalk, put the same value on both sides.&lt;br /&gt;
&lt;br /&gt;
ConvertYUVtoXYZ(Color=0,HDRMode=2,OOTF=false,Crosstalk=0.1)&lt;br /&gt;
ConverXYZ_BT2446_C_HDRtoSDR(PQMode=false,Lhdr=1000.0,Lsdr=100.0,pColor=0)&lt;br /&gt;
ConvertXYZtoYUV(Color=2,pColor=0,OOTF=false,Crosstalk=0.1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== External Links ==&lt;br /&gt;
*[https://github.com/jpsdr/HDRTools GitHub] - Source code repository.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-----------------------------------------------&lt;br /&gt;
'''Back to [[External_filters#Levels_and_Chroma|External Filters]] &amp;amp;larr;'''&lt;/div&gt;</summary>
		<author><name>Reel.Deal</name></author>	</entry>

	</feed>