M4VIFI_Clip.c revision 7c9d8018755adf1857571125ba1b3598c96ea506
1/*
2 * Copyright (C) 2004-2011 NXP Software
3 * Copyright (C) 2011 The Android Open Source Project
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 *      http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17/**
18 ******************************************************************************
19 * @file     M4VIFI_Clip.c
20 * @brief    Management of the RGB Clipping matrix inclusion and Division Table
21 * @note     -# Clipping Matrix is used in order to properly manage the inclusion of
22 *           the external RGB Clipping matrix used for color conversion.
23 *           This file HAS TO BE compiled with all color conversion filters project
24 *           -# Division table is used in RGB to HLS color conversion
25 *           Important: This file must be compiled during the assembly library building
26 ******************************************************************************
27*/
28
29/* Prototypes of functions, and type definitions */
30#include    "M4VIFI_FiltersAPI.h"
31
32CNST M4VIFI_UInt8   M4VIFI_ClipTable[1256]
33= {
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, 0x00, 0x00, 0x00,
960x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03,
970x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
980x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13,
990x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b,
1000x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23,
1010x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b,
1020x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33,
1030x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b,
1040x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43,
1050x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b,
1060x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53,
1070x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b,
1080x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63,
1090x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b,
1100x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73,
1110x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b,
1120x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83,
1130x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b,
1140x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93,
1150x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b,
1160x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3,
1170xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab,
1180xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3,
1190xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb,
1200xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3,
1210xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb,
1220xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3,
1230xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb,
1240xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3,
1250xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb,
1260xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3,
1270xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb,
1280xfc, 0xfd, 0xfe, 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,
1900xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
191};
192
193/* Division table for ( 65535/x ); x = 0 to 512 */
194CNST M4VIFI_UInt16  M4VIFI_DivTable[512]
195= {
1960, 65535, 32768, 21845, 16384, 13107, 10922, 9362,
1978192, 7281, 6553, 5957, 5461, 5041, 4681, 4369,
1984096, 3855, 3640, 3449, 3276, 3120, 2978, 2849,
1992730, 2621, 2520, 2427, 2340, 2259, 2184, 2114,
2002048, 1985, 1927, 1872, 1820, 1771, 1724, 1680,
2011638, 1598, 1560, 1524, 1489, 1456, 1424, 1394,
2021365, 1337, 1310, 1285, 1260, 1236, 1213, 1191,
2031170, 1149, 1129, 1110, 1092, 1074, 1057, 1040,
2041024, 1008, 992, 978, 963, 949, 936, 923,
205910, 897, 885, 873, 862, 851, 840, 829,
206819, 809, 799, 789, 780, 771, 762, 753,
207744, 736, 728, 720, 712, 704, 697, 689,
208682, 675, 668, 661, 655, 648, 642, 636,
209630, 624, 618, 612, 606, 601, 595, 590,
210585, 579, 574, 569, 564, 560, 555, 550,
211546, 541, 537, 532, 528, 524, 520, 516,
212512, 508, 504, 500, 496, 492, 489, 485,
213481, 478, 474, 471, 468, 464, 461, 458,
214455, 451, 448, 445, 442, 439, 436, 434,
215431, 428, 425, 422, 420, 417, 414, 412,
216409, 407, 404, 402, 399, 397, 394, 392,
217390, 387, 385, 383, 381, 378, 376, 374,
218372, 370, 368, 366, 364, 362, 360, 358,
219356, 354, 352, 350, 348, 346, 344, 343,
220341, 339, 337, 336, 334, 332, 330, 329,
221327, 326, 324, 322, 321, 319, 318, 316,
222315, 313, 312, 310, 309, 307, 306, 304,
223303, 302, 300, 299, 297, 296, 295, 293,
224292, 291, 289, 288, 287, 286, 284, 283,
225282, 281, 280, 278, 277, 276, 275, 274,
226273, 271, 270, 269, 268, 267, 266, 265,
227264, 263, 262, 261, 260, 259, 258, 257,
228256, 255, 254, 253, 252, 251, 250, 249,
229248, 247, 246, 245, 244, 243, 242, 241,
230240, 240, 239, 238, 237, 236, 235, 234,
231234, 233, 232, 231, 230, 229, 229, 228,
232227, 226, 225, 225, 224, 223, 222, 222,
233221, 220, 219, 219, 218, 217, 217, 216,
234215, 214, 214, 213, 212, 212, 211, 210,
235210, 209, 208, 208, 207, 206, 206, 205,
236204, 204, 203, 202, 202, 201, 201, 200,
237199, 199, 198, 197, 197, 196, 196, 195,
238195, 194, 193, 193, 192, 192, 191, 191,
239190, 189, 189, 188, 188, 187, 187, 186,
240186, 185, 185, 184, 184, 183, 183, 182,
241182, 181, 181, 180, 180, 179, 179, 178,
242178, 177, 177, 176, 176, 175, 175, 174,
243174, 173, 173, 172, 172, 172, 171, 171,
244170, 170, 169, 169, 168, 168, 168, 167,
245167, 166, 166, 165, 165, 165, 164, 164,
246163, 163, 163, 162, 162, 161, 161, 161,
247160, 160, 159, 159, 159, 158, 158, 157,
248157, 157, 156, 156, 156, 155, 155, 154,
249154, 154, 153, 153, 153, 152, 152, 152,
250151, 151, 151, 150, 150, 149, 149, 149,
251148, 148, 148, 147, 147, 147, 146, 146,
252146, 145, 145, 145, 144, 144, 144, 144,
253143, 143, 143, 142, 142, 142, 141, 141,
254141, 140, 140, 140, 140, 139, 139, 139,
255138, 138, 138, 137, 137, 137, 137, 136,
256136, 136, 135, 135, 135, 135, 134, 134,
257134, 134, 133, 133, 133, 132, 132, 132,
258132, 131, 131, 131, 131, 130, 130, 130,
259130, 129, 129, 129, 129, 128, 128, 128
260};
261
262CNST M4VIFI_Int32  const_storage1[8]
263= {
2640x00002568, 0x00003343,0x00000649,0x00000d0f, 0x0000D86C, 0x0000D83B, 0x00010000, 0x00010000
265};
266
267CNST M4VIFI_Int32  const_storage[8]
268= {
2690x00002568, 0x00003343, 0x1BF800, 0x00000649, 0x00000d0f, 0x110180, 0x40cf, 0x22BE00
270};
271
272
273CNST M4VIFI_UInt16  *M4VIFI_DivTable_zero
274 = &M4VIFI_DivTable[0];
275
276CNST M4VIFI_UInt8   *M4VIFI_ClipTable_zero
277 = &M4VIFI_ClipTable[500];
278
279
280/* End of file M4VIFI_Clip.c */
281
282