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