1/* 2 * Copyright (C) 2011 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16/** 17 ****************************************************************************** 18 * @file M4VIFI_Clip.c 19 * @brief Management of the RGB Clipping matrix inclusion and Division Table 20 * @note -# Clipping Matrix is used in order to properly manage the inclusion of 21 * the external RGB Clipping matrix used for color conversion. 22 * This file HAS TO BE compiled with all color conversion filters project 23 * -# Division table is used in RGB to HLS color conversion 24 * Important: This file must be compiled during the assembly library building 25 ****************************************************************************** 26*/ 27 28/* Prototypes of functions, and type definitions */ 29#include "M4VIFI_FiltersAPI.h" 30 31CNST M4VIFI_UInt8 M4VIFI_ClipTable[1256] 32= { 330x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 340x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 350x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 360x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 370x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 380x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 390x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 400x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 410x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 420x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 430x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 440x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 450x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 460x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 470x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 480x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 490x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 500x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 510x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 520x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 530x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 540x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 550x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 560x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 570x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 580x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 590x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 600x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 610x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 620x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 630x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 640x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 650x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 660x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 670x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 680x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 690x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 700x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 710x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 720x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 730x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 740x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 750x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 760x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 770x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 780x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 790x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 800x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 810x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 820x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 830x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 840x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 850x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 860x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 870x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 880x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 890x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 900x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 910x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 920x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 930x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 940x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 950x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 960x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 970x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 980x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 990x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 1000x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 1010x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 1020x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 1030x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 1040x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 1050x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 1060x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 1070x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 1080x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 1090x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 1100x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 1110x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 1120x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 1130x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 1140x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 1150x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 1160xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 1170xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 1180xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 1190xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 1200xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 1210xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 1220xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 1230xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 1240xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 1250xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 1260xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 1270xfc, 0xfd, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 1280xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1290xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1300xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1310xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1320xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1330xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1340xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1350xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1360xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1370xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1380xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1390xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1400xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1410xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1420xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1430xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1440xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1450xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1460xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1470xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1480xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1490xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1500xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1510xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1520xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1530xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1540xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1550xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1560xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1570xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1580xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1590xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1600xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1610xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1620xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1630xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1640xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1650xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1660xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1670xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1680xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1690xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1700xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1710xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1720xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1730xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1740xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1750xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1760xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1770xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1780xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1790xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1800xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1810xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1820xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1830xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1840xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1850xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1860xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1870xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1880xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 1890xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 190}; 191 192/* Division table for ( 65535/x ); x = 0 to 512 */ 193CNST M4VIFI_UInt16 M4VIFI_DivTable[512] 194= { 1950, 65535, 32768, 21845, 16384, 13107, 10922, 9362, 1968192, 7281, 6553, 5957, 5461, 5041, 4681, 4369, 1974096, 3855, 3640, 3449, 3276, 3120, 2978, 2849, 1982730, 2621, 2520, 2427, 2340, 2259, 2184, 2114, 1992048, 1985, 1927, 1872, 1820, 1771, 1724, 1680, 2001638, 1598, 1560, 1524, 1489, 1456, 1424, 1394, 2011365, 1337, 1310, 1285, 1260, 1236, 1213, 1191, 2021170, 1149, 1129, 1110, 1092, 1074, 1057, 1040, 2031024, 1008, 992, 978, 963, 949, 936, 923, 204910, 897, 885, 873, 862, 851, 840, 829, 205819, 809, 799, 789, 780, 771, 762, 753, 206744, 736, 728, 720, 712, 704, 697, 689, 207682, 675, 668, 661, 655, 648, 642, 636, 208630, 624, 618, 612, 606, 601, 595, 590, 209585, 579, 574, 569, 564, 560, 555, 550, 210546, 541, 537, 532, 528, 524, 520, 516, 211512, 508, 504, 500, 496, 492, 489, 485, 212481, 478, 474, 471, 468, 464, 461, 458, 213455, 451, 448, 445, 442, 439, 436, 434, 214431, 428, 425, 422, 420, 417, 414, 412, 215409, 407, 404, 402, 399, 397, 394, 392, 216390, 387, 385, 383, 381, 378, 376, 374, 217372, 370, 368, 366, 364, 362, 360, 358, 218356, 354, 352, 350, 348, 346, 344, 343, 219341, 339, 337, 336, 334, 332, 330, 329, 220327, 326, 324, 322, 321, 319, 318, 316, 221315, 313, 312, 310, 309, 307, 306, 304, 222303, 302, 300, 299, 297, 296, 295, 293, 223292, 291, 289, 288, 287, 286, 284, 283, 224282, 281, 280, 278, 277, 276, 275, 274, 225273, 271, 270, 269, 268, 267, 266, 265, 226264, 263, 262, 261, 260, 259, 258, 257, 227256, 255, 254, 253, 252, 251, 250, 249, 228248, 247, 246, 245, 244, 243, 242, 241, 229240, 240, 239, 238, 237, 236, 235, 234, 230234, 233, 232, 231, 230, 229, 229, 228, 231227, 226, 225, 225, 224, 223, 222, 222, 232221, 220, 219, 219, 218, 217, 217, 216, 233215, 214, 214, 213, 212, 212, 211, 210, 234210, 209, 208, 208, 207, 206, 206, 205, 235204, 204, 203, 202, 202, 201, 201, 200, 236199, 199, 198, 197, 197, 196, 196, 195, 237195, 194, 193, 193, 192, 192, 191, 191, 238190, 189, 189, 188, 188, 187, 187, 186, 239186, 185, 185, 184, 184, 183, 183, 182, 240182, 181, 181, 180, 180, 179, 179, 178, 241178, 177, 177, 176, 176, 175, 175, 174, 242174, 173, 173, 172, 172, 172, 171, 171, 243170, 170, 169, 169, 168, 168, 168, 167, 244167, 166, 166, 165, 165, 165, 164, 164, 245163, 163, 163, 162, 162, 161, 161, 161, 246160, 160, 159, 159, 159, 158, 158, 157, 247157, 157, 156, 156, 156, 155, 155, 154, 248154, 154, 153, 153, 153, 152, 152, 152, 249151, 151, 151, 150, 150, 149, 149, 149, 250148, 148, 148, 147, 147, 147, 146, 146, 251146, 145, 145, 145, 144, 144, 144, 144, 252143, 143, 143, 142, 142, 142, 141, 141, 253141, 140, 140, 140, 140, 139, 139, 139, 254138, 138, 138, 137, 137, 137, 137, 136, 255136, 136, 135, 135, 135, 135, 134, 134, 256134, 134, 133, 133, 133, 132, 132, 132, 257132, 131, 131, 131, 131, 130, 130, 130, 258130, 129, 129, 129, 129, 128, 128, 128 259}; 260 261CNST M4VIFI_Int32 const_storage1[8] 262= { 2630x00002568, 0x00003343,0x00000649,0x00000d0f, 0x0000D86C, 0x0000D83B, 0x00010000, 0x00010000 264}; 265 266CNST M4VIFI_Int32 const_storage[8] 267= { 2680x00002568, 0x00003343, 0x1BF800, 0x00000649, 0x00000d0f, 0x110180, 0x40cf, 0x22BE00 269}; 270 271 272CNST M4VIFI_UInt16 *M4VIFI_DivTable_zero 273 = &M4VIFI_DivTable[0]; 274 275CNST M4VIFI_UInt8 *M4VIFI_ClipTable_zero 276 = &M4VIFI_ClipTable[500]; 277 278 279/* End of file M4VIFI_Clip.c */ 280 281