<div dir="ltr"><div># HG changeset patch</div><div># User Deepthi Nandakumar <<a href="mailto:deepthi@multicorewareinc.com">deepthi@multicorewareinc.com</a>></div><div># Date 1458630685 -19800</div><div>#      Tue Mar 22 12:41:25 2016 +0530</div><div># Node ID 2860b4d8bd682e8d0fe2a08b1e16198feb696230</div><div># Parent  2de6cb99313a03c3577934ac5e2e116f7ba6cd10</div><div>hdr: maxCLL/maxFALL convert YUV to RGB domain, and then to linear luminance levels</div><div><br></div><div>miscellaneous cleanup, move PIXEL_MAX to common</div><div><br></div><div>diff -r 2de6cb99313a -r 2860b4d8bd68 source/common/common.h</div><div>--- a/source/common/common.h<span class="" style="white-space:pre">     </span>Mon Mar 21 13:50:14 2016 +0530</div><div>+++ b/source/common/common.h<span class="" style="white-space:pre"> </span>Tue Mar 22 12:41:25 2016 +0530</div><div>@@ -322,6 +322,8 @@</div><div> #define MAX_NUM_TR_COEFFS           MAX_TR_SIZE * MAX_TR_SIZE // Maximum number of transform coefficients, for a 32x32 transform</div><div> #define MAX_NUM_TR_CATEGORIES       16                        // 32, 16, 8, 4 transform categories each for luma and chroma</div><div> </div><div>+#define PIXEL_MAX ((1 << X265_DEPTH) - 1)</div><div>+</div><div> namespace X265_NS {</div><div> </div><div> enum { SAO_NUM_OFFSET = 4 };</div><div>diff -r 2de6cb99313a -r 2860b4d8bd68 source/common/constants.cpp</div><div>--- a/source/common/constants.cpp<span class="" style="white-space:pre">        </span>Mon Mar 21 13:50:14 2016 +0530</div><div>+++ b/source/common/constants.cpp<span class="" style="white-space:pre">    </span>Tue Mar 22 12:41:25 2016 +0530</div><div>@@ -568,6 +568,7 @@</div><div>     {  42,  43,  46,  47,  58,  59,  62,  63,  }</div><div> };</div><div> </div><div>+/* Rec.2020 YUV to RGB Non-constant luminance */</div><div> const double g_YUVtoRGB_BT2020[3][3] = </div><div> {</div><div>     {   1.00,   0.00,      1.47460,   },</div><div>@@ -575,4 +576,228 @@</div><div>     {   1.00,   1.88140,   0.00,      }</div><div> };</div><div> </div><div>+const double g_ST2084_PQTable[MAX_HDR_LEGAL_RANGE - MIN_HDR_LEGAL_RANGE + 1] = </div><div>+{</div><div>+    0,</div><div>+    5.25912035416561E-05, 0.000170826479250824, 0.000342874260206259, 0.000565730978088069,</div><div>+    0.000838361593599196, 0.0011605708550711, 0.00153261170332205, 0.00195500928122658,</div><div>+    0.00242846920816411, 0.00295382484798614, 0.00353200479131171, 0.00416401171798929,</div><div>+    0.00485090808272845, 0.00559380610060962, 0.00639386055422149, 0.00725226351560689,</div><div>+    0.0081702404049783, 0.00914904700558975, 0.010189967177051, 0.0112943110883226,</div><div>+    0.0124634138437419, 0.0136986344106386, 0.0150013547814312, 0.0163729793201926,</div><div>+    0.0178149342559234, 0.0193286672936668, 0.0209156473211494, 0.022577364193536,</div><div>+    0.0243153285825585, 0.0261310718791221, 0.0280261461406398, 0.0300021240760516,</div><div>+    0.0320605990628007, 0.0342031851910785, 0.036431517331512, 0.0387472512230819,</div><div>+    0.0411520635786705, 0.0436476522060052, 0.046235736142162, 0.0489180558000865,</div><div>+    0.0516963731258075, 0.0545724717652363, 0.0575481572396137, 0.0606252571287911,</div><div>+    0.0638056212616694, 0.0670911219131892, 0.0704836540073949, 0.0739851353261047,</div><div>+    0.0775975067228409, 0.0813227323416811, 0.0851627998407477, 0.0891197206201265,</div><div>+    0.0931955300539647, 0.0973922877266004, 0.101712077672541, 0.106157008620188,</div><div>+    0.110729214239187, 0.115430853391267, 0.120264110384523, 0.125231195231086,</div><div>+    0.130334343908053, 0.135575818621706, 0.140957908074883, 0.146482927737596,</div><div>+    0.152153220120717, 0.157971155052834, 0.163939129960184, 0.170059570149691,</div><div>+    0.176334929095073, 0.182767688726043, 0.189360359720598, 0.196115481800328,</div><div>+    0.203035624028883, 0.210123385113499, 0.21738139370961, 0.224812308728624,</div><div>+    0.232418819648774, 0.240203646829142, 0.248169541826838, 0.256319287717358,</div><div>+    0.264655699418179, 0.273181624015456, 0.281899941094164, 0.29081356307129,</div><div>+    0.299925435532481, 0.309238537571936, 0.318755882135647, 0.32848051636804,</div><div>+    0.338415521962, 0.34856401551231, 0.358929148872555, 0.369514109515577,</div><div>+    0.380322120897342, 0.391356442824469, 0.402620371825233, 0.414117241524302,</div><div>+    0.425850423021013, 0.437823325271459, 0.450039395474131, 0.4625021194595,</div><div>+    0.475215022083238, 0.488181667623337, 0.501405660181076, 0.514890644085913,</div><div>+    0.528640304304275, 0.542658366852319, 0.556948599212766, 0.571514810755682,</div><div>+    0.58636085316357, 0.601490620860234, 0.616908051444177, 0.632617126126042,</div><div>+    0.648621870170268, 0.664926353341107, 0.681534690353104, 0.6984510413256,</div><div>+    0.715679612242097, 0.733224655413817, 0.751090469947712, 0.769281402219399,</div><div>+    0.78780184635024, 0.806656244689427, 0.82584908830055, 0.84538491745295,</div><div>+    0.865268322117971, 0.885503942469945, 0.906096469391926, 0.927050644986733,</div><div>+    0.948371263092526, 0.970063169803824, 0.99213126399724, 1.01458049786256,</div><div>+    1.03741587743901, 1.06064246315667, 1.08426537038311, 1.10828976997558,</div><div>+    1.13272088883845, 1.1575640104859, 1.18282447561067, 1.20850768265765,</div><div>+    1.23461908840365, 1.26116420854251, 1.28814861827608, 1.31557795291099,</div><div>+    1.34345790846097, 1.37179424225547, 1.40059277355414, 1.42985938416685,</div><div>+    1.45960001908056, 1.48982068709166, 1.52052746144494, 1.55172648047831,</div><div>+    1.58342394827458, 1.61562613531883, 1.6483393791628, 1.68157008509547,</div><div>+    1.71532472682031, 1.74960984713914, 1.78443205864284, 1.81979804440872,</div><div>+    1.85571455870433, 1.8921884276992, 1.92922655018235, 1.9668358982877,</div><div>+    2.0050235182263, 2.04379653102551, 2.0831621332761, 2.12312759788576,</div><div>+    2.16370027484092, 2.20488759197549, 2.2466970557472, 2.28913625202187,</div><div>+    2.33221284686502, 2.37593458734142, 2.42030930232274, 2.46534490330251,</div><div>+    2.51104938521982, 2.55743082729067, 2.60449739384781, 2.65225733518805,</div><div>+    2.70071898842928, 2.74989077837451, 2.79978121838576, 2.85039891126499,</div><div>+    2.90175255014517, 2.95385091938954, 3.00670289549934, 3.06031744803115,</div><div>+    3.11470364052283, 3.16987063142876, 3.22582767506471, 3.2825841225609,</div><div>+    3.3401494228253, 3.39853312351689, 3.45774487202715, 3.51779441647257,</div><div>+    3.57869160669604, 3.64044639527875, 3.7030688385618, 3.76656909767725,</div><div>+    3.83095743959148, 3.89624423815599, 3.96243997517042, 4.02955524145598,</div><div>+    4.09760073793895, 4.16658727674518, 4.2365257823051, 4.30742729247016,</div><div>+    4.37930295964014, 4.45216405190141, 4.52602195417663, 4.60088816938553,</div><div>+    4.67677431961831, 4.75369214731843, 4.83165351647993, 4.91067041385396,</div><div>+    4.99075495016979, 5.07191936136577, 5.15417600983301, 5.23753738567282,</div><div>+    5.32201610796449, 5.40762492604782, 5.49437672081637, 5.58228450602463,</div><div>+    5.67136142960816, 5.76162077501684, 5.85307596256082, 5.94574055077076,</div><div>+    6.03962823777015, 6.13475286266291, 6.2311284069342, 6.32876899586396,</div><div>+    6.42768889995753, 6.5279025363866, 6.62942447044656, 6.73226941703026,</div><div>+    6.83645224211186, 6.94198796425035, 7.04889175610325, 7.15717894596024,</div><div>+    7.2668650192892, 7.37796562029657, 7.49049655350635, 7.60447378535363,</div><div>+    7.71991344579293, 7.83683182992318, 7.95524539963073, 8.07517078524564,</div><div>+    8.19662478721649, 8.31962437780235, 8.44418670277909, 8.57032908316786,</div><div>+    8.69806901697162, 8.82742418094208, 8.95841243235119, 9.09105181078918,</div><div>+    9.22536053997842, 9.36135702960081, 9.4990598771529, 9.63848786980913,</div><div>+    9.77965998631185, 9.92259539887546, 10.0673134751131, 10.2138337799773,</div><div>+    10.3621760777285, 10.5123603339148, 10.6644067173761, 10.8183356022682,</div><div>+    10.9741675701064, 11.1319234118292, 11.2916241298841, 11.4532909403319,</div><div>+    11.6169452749761, 11.782608783511, 11.9503033356888, 12.120051023515,</div><div>+    12.2918741634627, 12.4657952987048, 12.6418372013776, 12.8200228748588,</div><div>+    13.0003755560757, 13.1829187178276, 13.367676071144, 13.5546715676512,</div><div>+    13.7439294019804, 13.9354740141834, 14.1293300921851, 14.3255225742508,</div><div>+    14.5240766514895, 14.7250177703705, 14.9283716352778, 15.1341642110757,</div><div>+    15.3424217257167, 15.5531706728631, 15.7664378145379, 15.9822501838117,</div><div>+    16.2006350874992, 16.4216201089027, 16.6452331105667, 16.8715022370722,</div><div>+    17.1004559178516, 17.3321228700381, 17.5665321013393, 17.8037129129401,</div><div>+    18.0436949024415, 18.2865079668192, 18.5321823054235, 18.7807484229967,</div><div>+    19.0322371327346, 19.2866795593684, 19.5441071422852, 19.8045516386728,</div><div>+    20.068045126707, 20.3346200087623, 20.6043090146575, 20.8771452049349,</div><div>+    21.1531619741772, 21.4323930543496, 21.7148725181833, 22.0006347825899,</div><div>+    22.2897146121093, 22.5821471224015, 22.8779677837589, 23.1772124246723,</div><div>+    23.4799172354157, 23.7861187716811, 24.0958539582449, 24.4091600926726,</div><div>+    24.7260748490581, 25.0466362818137, 25.3708828294739, 25.6988533185695,</div><div>+    26.0305869675189, 26.3661233905639, 26.7055026017538, 27.0487650189598,</div><div>+    27.3959514679386, 27.7471031864343, 28.1022618283194, 28.4614694677879,</div><div>+    28.8247686035749, 29.1922021632471, 29.5638135074984, 29.9396464345297,</div><div>+    30.3197451844465, 30.7041544437129, 31.0929193496474, 31.4860854949729,</div><div>+    31.8836989324014, 32.2858061792735, 32.6924542222466, 33.1036905220286,</div><div>+    33.5195630181606, 33.9401201338504, 34.3654107808513, 34.7954843644001,</div><div>+    35.2303907882032, 35.6701804594619, 36.1149042939698, 36.5646137212482,</div><div>+    37.0193606897411, 37.4791976720634, 37.944177670299, 38.4143542213633,</div><div>+    38.8897814024065, 39.3705138362898, 39.8566066971106, 40.3481157157767,</div><div>+    40.8450971856484, 41.3476079682522, 41.8557054990105, 42.369447793091,</div><div>+    42.8888934512647, 43.4141016658423, 43.9451322266965, 44.4820455273072,</div><div>+    45.0249025708978, 45.57376497661, 46.128694985791, 46.6897554682848,</div><div>+    47.257009928828, 47.8305225135037, 48.4103580162663, 48.9965818855272,</div><div>+    49.589260230802, 50.1884598294566, 50.794248133489, 51.4066932764077,</div><div>+    52.0258640801652, 52.6518300621766, 53.2846614424041, 53.9244291505136,</div><div>+    54.5712048331156, 55.2250608610794, 55.8860703369173, 56.5543071022513,</div><div>+    57.2298457453516, 57.9127616087739, 58.6031307970611, 59.3010301845114,</div><div>+    60.0065374230609, 60.7197309502355, 61.4406899971675, 62.1694945967356,</div><div>+    62.9062255917496, 63.6509646432403, 64.4037942388625, 65.1647977013236,</div><div>+    65.9340591969731, 66.7116637444152, 67.4976972232724, 68.2922463830112,</div><div>+    69.0953988518382, 69.9072431457598, 70.7278686776501, 71.5573657664994,</div><div>+    72.3958256466906, 73.2433404774142, 74.1000033521872, 74.9659083084248,</div><div>+    75.8411503371909, 76.7258253929696, 77.6200304036002, 78.5238632802992,</div><div>+    79.4374229277768, 80.3608092544678, 81.2941231828966, 82.2374666600933,</div><div>+    83.1909426682048, 84.154655235138, 85.1287094453491, 86.1132114507694,</div><div>+    87.108268481825, 88.1139888585565, 89.1304820019001, 90.1578584450571,</div><div>+    91.1962298449948, 92.2457089940652, 93.3064098317639, 94.3784474565997,</div><div>+    95.4619381380949, 96.5569993289116, 97.6637496771184, 98.7823090385655,</div><div>+    99.9127984894415, 101.055340338899, 102.210058141845, 103.377076711919,</div><div>+    104.556522134513, 105.748521780005, 106.953204317117, 108.170699726403,</div><div>+    109.401139313892, 110.644655724874, 111.901382957862, 113.171456378648,</div><div>+    114.455012734562, 115.752190168864, 117.063128235285, 118.387967912751,</div><div>+    119.726851620228, 121.079923231788, 122.447328091724, 123.829213029981,</div><div>+    125.225726377642, 126.637017982633, 128.063239225529, 129.504543035659,</div><div>+    130.961083907258, 132.43301791588, 133.920502734926, 135.423697652396,</div><div>+    136.942763587828, 138.477863109372, 140.029160451099, 141.596821530472,</div><div>+    143.181013966024, 144.781907095212, 146.399671992475, 148.034481487503,</div><div>+    149.686510183665, 151.355934476676, 153.042932573466, 154.747684511235,</div><div>+    156.470372176717, 158.211179325695, 159.970291602654, 161.747896560765,</div><div>+    163.544183681914, 165.359344397174, 167.193572107279, 169.047062203492,</div><div>+    170.920012088617, 172.812621198221, 174.725091022243, 176.657625126586,</div><div>+    178.610429175187, 180.583710952171, 182.577680384379, 184.59254956399,</div><div>+    186.628532771569, 188.685846499193, 190.764709473972, 192.865342681753,</div><div>+    194.987969391112, 197.13281517763, 199.300107948348, 201.490077966701,</div><div>+    203.702957877374, 205.938982731875, 208.198390014006, 210.481419665809,</div><div>+    212.788314113849, 215.119318295558, 217.474679686168, 219.854648325694,</div><div>+    222.259476846381, 224.689420500319, 227.144737187562, 229.625687484264,</div><div>+    232.132534671514, 234.665544764103, 237.224986539876, 239.811131569336,</div><div>+    242.424254245529, 245.064631814346, 247.73254440507, 250.428275061399,</div><div>+    253.152109772633, 255.904337505438, 258.685250235678, 261.49514298094,</div><div>+    264.334313833161, 267.203063991664, 270.101697796781, 273.03052276345,</div><div>+    275.989849615675, 278.979992320954, 282.001268125309, 285.053997588697,</div><div>+    288.138504620796, 291.255116517118, 294.404163995707, 297.585981234071,</div><div>+    300.800905906628, 304.049279222569, 307.331445964095, 310.647754525259,</div><div>+    313.998556950887, 317.384208976364, 320.805070067649, 324.26150346164,</div><div>+    327.753876207298, 331.28255920701, 334.84792725845, 338.450359096983,</div><div>+    342.090237438443, 345.767949022632, 349.483884657022, 353.238439261111,</div><div>+    357.032011911288, 360.865005886229, 364.73782871259, 368.650892211681,</div><div>+    372.604612546163, 376.59941026756, 380.635710364328, 384.713942310386,</div><div>+    388.83454011424, 392.997942368521, 397.20459230049, 401.454937822634,</div><div>+    405.749431584178, 410.088531023082, 414.47269841859, 418.902400944533,</div><div>+    423.378110722949, 427.900304878816, 432.469465594816, 437.086080167171,</div><div>+    441.750641062068, 446.463645972511, 451.225597876033, 456.037005092914,</div><div>+    460.89838134554, 465.81024581748, 470.773123214509, 475.787543825096,</div><div>+    480.854043582649, 485.973164127686, 491.14545287122, 496.371463058725,</div><div>+    501.651753834779, 506.986890308486, 512.377443619739, 517.823991006384,</div><div>+    523.32711587159, 528.887407852831, 534.505462890955, 540.181883300517,</div><div>+    545.917277840779, 551.712261787277, 557.567457004939, 563.48349202123,</div><div>+    569.461002100643, 575.500629320033, 581.603022644652, 587.76883800521,</div><div>+    593.998738375827, 600.29339385279, 606.653481734616, 613.07968660232,</div><div>+    619.572700401503, 626.133222524762, 632.761959895347, 639.459627051767,</div><div>+    646.226946233466, 653.064647467273, 659.973468655012, 666.954155662449,</div><div>+    674.007462408703, 681.134150957274, 688.334991607664, 695.610762988527,</div><div>+    702.962252151562, 710.390254666907, 717.895574719168, 725.479025205175,</div><div>+    733.141427832198, 740.883613218127, 748.706420992262, 756.610699897378,</div><div>+    764.597307893424, 772.667112261926, 780.820989711908, 789.059826487117,</div><div>+    797.384518474445, 805.79597131351, 814.295100508111, 822.882831538009,</div><div>+    831.560099973222, 840.327851588798, 849.187042481472, 858.138639187298,</div><div>+    867.183618801265, 876.322969097945, 885.557688653527, 894.88878696958,</div><div>+    904.317284598324, 913.844213269149, 923.470616016881, 933.197547311661,</div><div>+    943.02607318998, 952.957271387842, 962.99223147528, 973.13205499233,</div><div>+    983.377855587028, 993.730759155025, 1004.19190398011, 1014.7624408779,</div><div>+    1025.44353334027, 1036.23635768138, 1047.14210318612, 1058.16197226031,</div><div>+    1069.29718058216, 1080.54895725615, 1091.91854496832, 1103.40720014439,</div><div>+    1115.01619310819, 1126.74680824381, 1138.60034415848, 1150.57811384819,</div><div>+    1162.68144486462, 1174.91167948465, 1187.27017488269, 1199.75830330268,</div><div>+    1212.37745223534, 1225.12902459516, 1238.01443890053, 1251.03512945689,</div><div>+    1264.19254654015, 1277.48815658428, 1290.92344237023, 1304.49990321753,</div><div>+    1318.21905517769, 1332.0824312314, 1346.09158148618, 1360.24807337821,</div><div>+    1374.55349187613, 1389.00943968636, 1403.61753746281, 1418.37942401772,</div><div>+    1433.29675653564, 1448.37121079053, 1463.60448136459, 1478.99828187054,</div><div>+    1494.55434517686, 1510.27442363459, 1526.16028930875, 1542.21373421151,</div><div>+    1558.43657053802, 1574.8306309066, 1591.39776860023, 1608.13985781215,</div><div>+    1625.05879389502, 1642.15649361107, 1659.43489538767, 1676.89595957601,</div><div>+    1694.54166871017, 1712.37402777397, 1730.39506446684, 1748.60682947636,</div><div>+    1767.01139675239, 1785.61086378491, 1804.40735188573, 1823.40300647457,</div><div>+    1842.59999736598, 1862.00051906422, 1881.60679105712, 1901.42105811765,</div><div>+    1921.44559060702, 1941.68268478254, 1962.13466310849, 1982.80387457295,</div><div>+    2003.69269500608, 2024.80352740423, 2046.13880225813, 2067.70097788409,</div><div>+    2089.4925407609, 2111.51600586931, 2133.77391703832, 2156.2688472933,</div><div>+    2179.00339921048, 2201.98020527506, 2225.20192824396, 2248.67126151315,</div><div>+    2272.39092949114, 2296.36368797505, 2320.59232453288, 2345.07965889086,</div><div>+    2369.82854332463, 2394.84186305701, 2420.1225366596, 2445.67351646045,</div><div>+    2471.4977889564, 2497.5983752314, 2523.97833137945, 2550.64074893434,</div><div>+    2577.58875530317, 2604.8255142071, 2632.35422612708, 2660.17812875505,</div><div>+    2688.30049745283, 2716.72464571406, 2745.45392563483, 2774.49172838938,</div><div>+    2803.84148471127, 2833.50666538283, 2863.49078172885, 2893.79738611828,</div><div>+    2924.43007247227, 2955.39247677789, 2986.68827760926, 3018.32119665627,</div><div>+    3050.29499925996, 3082.61349495315, 3115.28053801072, 3148.30002800544,</div><div>+    3181.67591037289, 3215.41217698172, 3249.51286671181, 3283.98206604386,</div><div>+    3318.8239096497, 3354.04258099714, 3389.64231295962, 3425.62738843341,</div><div>+    3462.00214096588, 3498.770955389, 3535.93826846362, 3573.50856952949,</div><div>+    3611.48640116911, 3649.87635987397, 3688.68309672536, 3727.91131807909,</div><div>+    3767.56578626554, 3807.6513202933, 3848.17279656462, 3889.13514960257,</div><div>+    3930.54337278366, 3972.40251908377, 4014.71770183098, 4057.49409547529,</div><div>+    4100.73693635754, 4144.45152349895, 4188.64321939905, 4233.31745083673,</div><div>+    4278.47970969433, 4324.13555378427, 4370.2906076885, 4416.9505636112,</div><div>+    4464.12118224336, 4511.80829363585, 4560.01779808583, 4608.75566703869,</div><div>+    4658.02794399743, 4707.84074544526, 4758.20026178446, 4809.11275828399,</div><div>+    4860.58457604072, 4912.6221329584, 4965.23192473005, 5018.42052584652,</div><div>+    5072.19459060902, 5126.56085415876, 5181.52613352201, 5237.09732866887,</div><div>+    5293.28142358609, 5350.08548736398, 5407.51667529896, 5465.58223001341,</div><div>+    5524.28948258769, 5583.64585370912, 5643.65885483892, 5704.33608939131,</div><div>+    5765.68525393099, 5827.71413938938, 5890.43063229428, 5953.84271601949,</div><div>+    6017.95847204743, 6082.78608125617, 6148.33382521752, 6214.610087517,</div><div>+    6281.62335509419, 6349.38221959681, 6417.89537875378, 6487.17163777577,</div><div>+    6557.21991076552, 6628.04922215295, 6699.66870814791, 6772.08761821761,</div><div>+    6845.31531658155, 6919.36128372573, 6994.23511794429, 7069.94653689413,</div><div>+    7146.5053791833, 7223.92160596987, 7302.20530258909, 7381.36668020537,</div><div>+    7461.41607748598, 7542.36396229371, 7624.22093341411, 7706.99772229679,</div><div>+    7790.70519482415, 7875.35435311374, 7960.95633733285, 8047.52242755054,</div><div>+    8135.06404560776, 8223.5927570193, 8313.12027290238, 8403.65845193137,</div><div>+    8495.21930231871, 8587.81498382941, 8681.45780982398, 8776.16024932246,</div><div>+    8871.93492910726, 8968.79463585546, 9066.75231829962, 9165.82108941207,</div><div>+    9266.0142286397, 9367.34518415456, 9469.8275751412, 9573.47519411942,</div><div>+    9678.30200930089, 9784.32216698275, 9891.54999396144, 10000</div><div>+};</div><div>+</div><div> }</div><div>diff -r 2de6cb99313a -r 2860b4d8bd68 source/common/constants.h</div><div>--- a/source/common/constants.h<span class="" style="white-space:pre">       </span>Mon Mar 21 13:50:14 2016 +0530</div><div>+++ b/source/common/constants.h<span class="" style="white-space:pre">      </span>Tue Mar 22 12:41:25 2016 +0530</div><div>@@ -100,6 +100,11 @@</div><div> </div><div> extern const double g_YUVtoRGB_BT2020[3][3];</div><div> </div><div>+#define MIN_HDR_LEGAL_RANGE 64</div><div>+#define MAX_HDR_LEGAL_RANGE 940</div><div>+#define CBCR_OFFSET 512</div><div>+extern const double g_ST2084_PQTable[MAX_HDR_LEGAL_RANGE - MIN_HDR_LEGAL_RANGE + 1];</div><div>+</div><div> }</div><div> </div><div> #endif</div><div>diff -r 2de6cb99313a -r 2860b4d8bd68 source/common/loopfilter.cpp</div><div>--- a/source/common/loopfilter.cpp<span class="" style="white-space:pre">       </span>Mon Mar 21 13:50:14 2016 +0530</div><div>+++ b/source/common/loopfilter.cpp<span class="" style="white-space:pre">   </span>Tue Mar 22 12:41:25 2016 +0530</div><div>@@ -27,7 +27,6 @@</div><div> #include "primitives.h"</div><div> </div><div> #define PIXEL_MIN 0</div><div>-#define PIXEL_MAX ((1 << X265_DEPTH) - 1)</div><div> </div><div> namespace {</div><div> </div><div>diff -r 2de6cb99313a -r 2860b4d8bd68 source/common/param.cpp</div><div>--- a/source/common/param.cpp<span class="" style="white-space:pre"> </span>Mon Mar 21 13:50:14 2016 +0530</div><div>+++ b/source/common/param.cpp<span class="" style="white-space:pre">        </span>Tue Mar 22 12:41:25 2016 +0530</div><div>@@ -247,7 +247,7 @@</div><div>     param->maxCLL = 0;</div><div>     param->maxFALL = 0;</div><div>     param->minLuma = 0;</div><div>-    param->maxLuma = 0;</div><div>+    param->maxLuma = PIXEL_MAX;</div><div> }</div><div> </div><div> int x265_param_default_preset(x265_param* param, const char* preset, const char* tune)</div><div>diff -r 2de6cb99313a -r 2860b4d8bd68 source/common/picyuv.cpp</div><div>--- a/source/common/picyuv.cpp<span class="" style="white-space:pre"> </span>Mon Mar 21 13:50:14 2016 +0530</div><div>+++ b/source/common/picyuv.cpp<span class="" style="white-space:pre">       </span>Tue Mar 22 12:41:25 2016 +0530</div><div>@@ -287,15 +287,17 @@</div><div>     pixel *U = m_picOrg[1];</div><div>     pixel *V = m_picOrg[2];</div><div> </div><div>-    bool calcHDRParams = !!param.maxLuma || !!param.minLuma || !!param.maxCLL;</div><div>+#if HIGH_BIT_DEPTH</div><div>+    bool calcHDRParams = !!param.minLuma || !!param.maxCLL || (param.maxLuma != PIXEL_MAX);</div><div>     /* Apply min/max luma bounds and calculate max and avg luma levels for HDR SEI messages */</div><div>     if (calcHDRParams)</div><div>     {</div><div>         X265_CHECK(pic.bitDepth == 10, "HDR stats can be applied/calculated only for 10bpp content");</div><div>-        uint64_t sumLuma;</div><div>-        primitives.calcHDRStats(Y, U, V, m_stride, m_strideC, width, height, &sumLuma, &m_maxLumaLevel, (pixel)param.minLuma, (pixel)param.maxLuma, m_hChromaShift, m_vChromaShift);</div><div>-        m_avgLumaLevel = (double)(sumLuma) / (m_picHeight * m_picWidth);</div><div>+        primitives.calcHDRStats(Y, U, V, m_stride, m_strideC, width, height, &m_avgLumaLevel, &m_maxLumaLevel, (pixel)param.minLuma, (pixel)param.maxLuma, m_hChromaShift, m_vChromaShift);</div><div>     }</div><div>+#else</div><div>+    (void) param;</div><div>+#endif</div><div> </div><div>     /* extend the right edge if width was not multiple of the minimum CU size */</div><div>     for (int r = 0; r < height; r++)</div><div>diff -r 2de6cb99313a -r 2860b4d8bd68 source/common/pixel.cpp</div><div>--- a/source/common/pixel.cpp<span class="" style="white-space:pre">   </span>Mon Mar 21 13:50:14 2016 +0530</div><div>+++ b/source/common/pixel.cpp<span class="" style="white-space:pre">        </span>Tue Mar 22 12:41:25 2016 +0530</div><div>@@ -607,7 +607,6 @@</div><div>  * s1*s1, s2*s2, and s1*s2 also obtain this value for edge cases: ((2^10-1)*16*4)^2 = 4286582784.</div><div>  * Maximum value for 9-bit is: ss*64 = (2^9-1)^2*16*4*64 = 1069551616, which will not overflow. */</div><div> </div><div>-#define PIXEL_MAX ((1 << X265_DEPTH) - 1)</div><div> #if HIGH_BIT_DEPTH</div><div>     X265_CHECK((X265_DEPTH == 10) || (X265_DEPTH == 12), "ssim invalid depth\n");</div><div> #define type float</div><div>@@ -873,51 +872,58 @@</div><div>     }</div><div> }</div><div> </div><div>-static void calcHDRStats_c(pixel *srcY, pixel* srcU, pixel* srcV, intptr_t stride, intptr_t strideC, int width, int height, uint64_t *outsum, </div><div>+#if HIGH_BIT_DEPTH</div><div>+static void calcHDRStats_c(pixel *srcY, pixel* srcU, pixel* srcV, intptr_t stride, intptr_t strideC, int width, int height, double *outsum, </div><div>                            pixel *outMax, const pixel minPix, const pixel maxPix, const int hShift, const int vShift)</div><div> {</div><div>-    pixel maxLumaLevel = 0;</div><div>-    uint64_t sumLuma = 0;</div><div>     pixel rgb[3];</div><div>+    uint16_t maxRGB = 0, maxLumaLevel = 0;</div><div>+    uint64_t rowsumLuma = 0;</div><div>+    double rowavgLuma = 0;</div><div>+</div><div>+    uint16_t minLegal = (uint16_t)MIN_HDR_LEGAL_RANGE, maxLegal = (uint16_t)MAX_HDR_LEGAL_RANGE;</div><div> </div><div>     for (int r = 0; r < height >> vShift; r++)</div><div>     {</div><div>+        rowsumLuma = 0;</div><div>         for (int c = 0; c < width >> hShift; c++)</div><div>         {</div><div>             pixel y = 0, cb = 0, cr = 0;</div><div>             /* Clip luma of source picture to max and min, only if they are specified. Average luma values for RGB conversions */</div><div>             if (!hShift && !vShift) /* YUV444 */</div><div>             {</div><div>-                y = srcY[c] = maxPix ? x265_clip3((pixel)minPix, (pixel)maxPix, srcY[c]) : X265_MAX(minPix, srcY[c]);</div><div>+                y = srcY[c] = x265_clip3((pixel)minPix, (pixel)maxPix, srcY[c]);</div><div>                 cb = srcU[c]; cr = srcV[c];</div><div>             }</div><div>             else if (hShift && !vShift) /* YUV422 */</div><div>             {</div><div>-                srcY[2*c] = maxPix ? x265_clip3((pixel)minPix, (pixel)maxPix, srcY[2*c]) : X265_MAX(minPix, srcY[2*c]);</div><div>-                srcY[2*c + 1] = maxPix ? x265_clip3((pixel)minPix, (pixel)maxPix, srcY[2*c + 1]) : X265_MAX(minPix, srcY[2*c + 1]);</div><div>+                srcY[2*c] = x265_clip3((pixel)minPix, (pixel)maxPix, srcY[2*c]);</div><div>+                srcY[2*c + 1] = x265_clip3((pixel)minPix, (pixel)maxPix, srcY[2*c + 1]);</div><div>                 y = (srcY[2*c] + srcY[2*c + 1]) >> 1;</div><div>                 cb = srcU[c]; cr = srcV[c];</div><div>             }</div><div>             else if (hShift && vShift) /* YUV420 */</div><div>             {</div><div>-                srcY[2*c] = maxPix ? x265_clip3((pixel)minPix, (pixel)maxPix, srcY[2*c]) : X265_MAX(minPix, srcY[2*c]);</div><div>-                srcY[2*c + 1] = maxPix ? x265_clip3((pixel)minPix, (pixel)maxPix, srcY[2*c + 1]) : X265_MAX(minPix, srcY[2*c + 1]);</div><div>-                srcY[stride + 2*c] = maxPix ? x265_clip3((pixel)minPix, (pixel)maxPix, srcY[stride + 2*c]) : X265_MAX(minPix, srcY[stride + 2*c]);</div><div>-                srcY[stride + 2*c + 1] = maxPix ? x265_clip3((pixel)minPix, (pixel)maxPix, srcY[stride + 2*c + 1]) : X265_MAX(minPix, srcY[stride + 2*c + 1]);</div><div>+                srcY[2*c] = x265_clip3((pixel)minPix, (pixel)maxPix, srcY[2*c]);</div><div>+                srcY[2*c + 1] = x265_clip3((pixel)minPix, (pixel)maxPix, srcY[2*c + 1]);</div><div>+                srcY[stride + 2*c] = x265_clip3((pixel)minPix, (pixel)maxPix, srcY[stride + 2*c]);</div><div>+                srcY[stride + 2*c + 1] = x265_clip3((pixel)minPix, (pixel)maxPix, srcY[stride + 2*c + 1]);</div><div>                 y = (srcY[2*c] + srcY[2*c + 1] + srcY[stride + 2*c] + srcY[stride + 2*c + 1]) >> 2;</div><div>                 cb = srcU[c]; cr = srcV[c];</div><div>             }</div><div>             else if (!strideC) /* YUV400 */</div><div>             {</div><div>-                y = srcY[c] = maxPix ? x265_clip3((pixel)minPix, (pixel)maxPix, srcY[c]) : X265_MAX(minPix, srcY[c]);</div><div>+                y = srcY[c] = x265_clip3((pixel)minPix, (pixel)maxPix, srcY[c]);</div><div>                 cb = cr = 0;</div><div>             }</div><div>             /* Rec 2020 Yuv to RGB */</div><div>             for (int i = 0; i < 3; i++)</div><div>-                rgb[i] = (pixel) (y * g_YUVtoRGB_BT2020[i][0] + cb * g_YUVtoRGB_BT2020[i][1] + cr * g_YUVtoRGB_BT2020[i][2]);</div><div>+                rgb[i] = (pixel) (y * g_YUVtoRGB_BT2020[i][0] + (cb - CBCR_OFFSET) * g_YUVtoRGB_BT2020[i][1] + (cr - CBCR_OFFSET) * g_YUVtoRGB_BT2020[i][2]);</div><div>             /* maxCLL and maxFALL */</div><div>-            maxLumaLevel = X265_MAX(maxLumaLevel, X265_MAX(rgb[0], X265_MAX(rgb[1], rgb[2])));</div><div>-            sumLuma += maxLumaLevel;</div><div>+            maxRGB = X265_MAX(maxRGB, X265_MAX(rgb[0], X265_MAX(rgb[1], rgb[2])));</div><div>+            maxRGB = X265_MIN(X265_MAX(maxRGB, minLegal), maxLegal);</div><div>+            maxLumaLevel = (uint16_t) g_ST2084_PQTable[maxRGB - minLegal];</div><div>+            rowsumLuma += maxLumaLevel;</div><div>         }</div><div>         srcY += stride << vShift; </div><div>         if (strideC)</div><div>@@ -925,11 +931,12 @@</div><div>             srcU += strideC;</div><div>             srcV += strideC;</div><div>         }</div><div>+        rowavgLuma += ((double)rowsumLuma / width);</div><div>     }</div><div>-    *outsum = sumLuma;</div><div>+    *outsum = rowavgLuma / height;</div><div>     *outMax = maxLumaLevel;</div><div> }</div><div>-</div><div>+#endif</div><div> }  // end anonymous namespace</div><div> </div><div> namespace X265_NS {</div><div>@@ -1214,7 +1221,9 @@</div><div>     p.planecopy_cp = planecopy_cp_c;</div><div>     p.planecopy_sp = planecopy_sp_c;</div><div>     p.planecopy_sp_shl = planecopy_sp_shl_c;</div><div>+#if HIGH_BIT_DEPTH</div><div>     p.calcHDRStats = calcHDRStats_c;</div><div>+#endif</div><div>     p.propagateCost = estimateCUPropagateCost;</div><div> }</div><div> }</div><div>diff -r 2de6cb99313a -r 2860b4d8bd68 source/common/primitives.h</div><div>--- a/source/common/primitives.h<span class="" style="white-space:pre">       </span>Mon Mar 21 13:50:14 2016 +0530</div><div>+++ b/source/common/primitives.h<span class="" style="white-space:pre">     </span>Tue Mar 22 12:41:25 2016 +0530</div><div>@@ -185,7 +185,7 @@</div><div> typedef void (*sign_t)(int8_t *dst, const pixel *src1, const pixel *src2, const int endX);</div><div> typedef void (*planecopy_cp_t) (const uint8_t* src, intptr_t srcStride, pixel* dst, intptr_t dstStride, int width, int height, int shift);</div><div> typedef void (*planecopy_sp_t) (const uint16_t* src, intptr_t srcStride, pixel* dst, intptr_t dstStride, int width, int height, int shift, uint16_t mask);</div><div>-typedef void (*calcHDRStats_t)(pixel *srcY, pixel* srcU, pixel* srcV, intptr_t stride, intptr_t strideC, int width, int height, uint64_t *outsum, pixel *outMax, const pixel minPix, const pixel maxPix, const int hShift, const int vShift);</div><div>+typedef void (*calcHDRStats_t)(pixel *srcY, pixel* srcU, pixel* srcV, intptr_t stride, intptr_t strideC, int width, int height, double *outsum, pixel *outMax, const pixel minPix, const pixel maxPix, const int hShift, const int vShift);</div><div> </div><div> typedef void (*cutree_propagate_cost) (int* dst, const uint16_t* propagateIn, const int32_t* intraCosts, const uint16_t* interCosts, const int32_t* invQscales, const double* fpsFactor, int len);</div><div> </div><div>diff -r 2de6cb99313a -r 2860b4d8bd68 source/test/testharness.h</div><div>--- a/source/test/testharness.h<span class="" style="white-space:pre"> </span>Mon Mar 21 13:50:14 2016 +0530</div><div>+++ b/source/test/testharness.h<span class="" style="white-space:pre">      </span>Tue Mar 22 12:41:25 2016 +0530</div><div>@@ -32,7 +32,6 @@</div><div> #pragma warning(disable: 4324) // structure was padded due to __declspec(align())</div><div> #endif</div><div> </div><div>-#define PIXEL_MAX ((1 << X265_DEPTH) - 1)</div><div> #define PIXEL_MIN 0</div><div> #define SHORT_MAX  32767</div><div> #define SHORT_MIN -32767</div><div><br></div><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div><div>Deepthi Nandakumar<br></div>Engineering Manager, x265<br></div>Multicoreware, Inc<br></div></div>
</div>