1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#!/usr/bin/env python 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CopyRight = ''' 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************** 5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright 2010 VMware, Inc. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * All Rights Reserved. 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Permission is hereby granted, free of charge, to any person obtaining a 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * copy of this software and associated documentation files (the 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * "Software"), to deal in the Software without restriction, including 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * without limitation the rights to use, copy, modify, merge, publish, 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * distribute, sub license, and/or sell copies of the Software, and to 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * permit persons to whom the Software is furnished to do so, subject to 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the following conditions: 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * 17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * The above copyright notice and this permission notice (including the 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * next paragraph) shall be included in all copies or substantial portions 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * of the Software. 20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch **************************************************************************/ 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/** 3203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) * @file 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * SRGB translation. 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @author Brian Paul <brianp@vmware.com> 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @author Michal Krol <michal@vmware.com> 3703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) * @author Jose Fonseca <jfonseca@vmware.com> 3803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) */ 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)''' 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import math 43bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 44bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 45bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochdef srgb_to_linear(x): 46bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch if x <= 0.04045: 47bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch return x / 12.92 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else: 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return math.pow((x + 0.055) / 1.055, 2.4) 50bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def linear_to_srgb(x): 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if x >= 0.0031308: 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1.055 * math.pow(x, 0.41666) - 0.055 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else: 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 12.92 * x 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def generate_srgb_tables(): 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print 'const float' 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print 'util_format_srgb_8unorm_to_linear_float_table[256] = {' 613240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch for j in range(0, 256, 4): 623240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch print ' ', 633240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch for i in range(j, j + 4): 643240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch print '%.7e,' % (srgb_to_linear(i / 255.0),), 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print '};' 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print 6803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) print 'const uint8_t' 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print 'util_format_srgb_to_linear_8unorm_table[256] = {' 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for j in range(0, 256, 16): 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print ' ', 7203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) for i in range(j, j + 16): 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print '%3u,' % (int(srgb_to_linear(i / 255.0) * 255.0 + 0.5),), 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print '};' 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print 'const uint8_t' 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print 'util_format_linear_to_srgb_8unorm_table[256] = {' 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for j in range(0, 256, 16): 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print ' ', 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for i in range(j, j + 16): 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print '%3u,' % (int(linear_to_srgb(i / 255.0) * 255.0 + 0.5),), 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) print '};' 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) print 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)def main(): 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print '/* This file is autogenerated by u_format_srgb.py. Do not edit directly. */' 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # This will print the copyright message on the top of this file 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print CopyRight.strip() 933240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch print 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print '#include "u_format_srgb.h"' 95bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch print 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) generate_srgb_tables() 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 983240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if __name__ == '__main__': 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) main() 101bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch