/** * $Id:$ * ***** BEGIN GPL/BL DUAL LICENSE BLOCK ***** * * The contents of this file may be used under the terms of either the GNU * General Public License Version 2 or later (the "GPL", see * http://www.gnu.org/licenses/gpl.html ), or the Blender License 1.0 or * later (the "BL", see http://www.blender.org/BL/ ) which has to be * bought from the Blender Foundation to become active, in which case the * above mentioned GPL option does not apply. * * The Original Code is Copyright (C) 1997 by Ton Roosendaal, Frank van Beek and Joeri Kassenaar. * All rights reserved. * * The Original Code is: all of this file. * * Contributor(s): none yet. * * ***** END GPL/BL DUAL LICENSE BLOCK ***** */ #include #include #define YB_yrb_start 0 #define YR_yrb_start 105 #define B_yrb_start 210 #define R_yrb_start 218 #define GREY_yrb_start 226 #define Y_yrb_start 243 #define YH_tan_start 0 /* + 15 * 8 */ #define YS_tan_start 120 /* + 15 * 4 */ #define Y_tan_start 180 /* + 32 */ #define H_tan_start 212 /* + 16 */ #define S_tan_start 228 /* + 7 */ #define HS_tan_start 235 /* + 16 ?? */ #define FREE_tan_start 251 /* + 4 ?? */ /* zipfork "cc makeyuvx.c ../util.o -limbuf -lm -o makeyuvx >/dev/console" zipfork "makeyuvx | tee yuvx.h >/dev/null" */ /* volgorde is YBR */ main() { long i, y, b, r, h, s, cy, cb, cr, ch, cs, col; double t; printf("short yuv_and_or[] = {\n"); printf("/* YB */\n"); for (i = YB_yrb_start; i < YR_yrb_start; i++) { printf("0x000F,\n"); } printf("/* YR */\n"); for (i = YR_yrb_start; i < B_yrb_start; i++) { printf("0x00F0,\n"); } printf("/* B */\n"); for (i = B_yrb_start; i < R_yrb_start; i++) { printf("0x0F0F,\n"); } printf("/* R */\n"); for (i = R_yrb_start; i < GREY_yrb_start; i++) { printf("0x0FF0,\n"); } printf("/* GREY */\n"); for (i = GREY_yrb_start; i < Y_yrb_start; i++) { printf("0x0000,\n"); } printf("/* Y */\n"); for (i = Y_yrb_start; i < 256; i++) { printf("0x00FF,\n"); } printf("/* YB */\n"); for (i = YB_yrb_start; i < YR_yrb_start; i++) { col = i - YB_yrb_start; y = (col / 7) + 1; b = 2 * (col % 7) + 2; r = 0; col = (y << 8) + (b << 4) + r; printf("0x%0.4X,\n", col); } printf("/* YR */\n"); for (i = YR_yrb_start; i < B_yrb_start; i++) { col = i - YR_yrb_start; y = (col / 7) + 1; b = 0; r = 2 * (col % 7) + 2; col = (y << 8) + (b << 4) + r; printf("0x%0.4X,\n", col); } printf("/* B */\n"); for (i = B_yrb_start; i < R_yrb_start; i++) { col = i - B_yrb_start; y = 0; b = 2 * col + 1; r = 0; col = (y << 8) + (b << 4) + r; printf("0x%0.4X,\n", col); } printf("/* R */\n"); for (i = R_yrb_start; i < GREY_yrb_start; i++) { col = i - R_yrb_start; y = 0; b = 0; r = 2 * col + 1; col = (y << 8) + (b << 4) + r; printf("0x%0.4X,\n", col); } printf("/* GREY */\n"); for (i = GREY_yrb_start; i < Y_yrb_start; i++) { col = i - GREY_yrb_start; /* uitzonderingen */ if (col == 0) { y = 1; b = 0; r = 8; } else if (col == 16) { y = 15; b = 8; r = 0; } else { y = col; b = 8; r = 8; } col = (y << 8) + (b << 4) + r; printf("0x%0.4X,\n", col); } printf("/* Y */\n"); for (i = Y_yrb_start; i < 256; i++) { col = i - Y_yrb_start; /* uitzonderingen */ y = col + 2; b = 0; r = 0; col = (y << 8) + (b << 4) + r; printf("0x%0.4X,\n", col); } printf("};\n\n"); printf("ulong yuv_cmap[] = {\n"); /* eerste 256 overslaan */ for (i = 0; i < 256; i++) { printf("0x%0.6X,\n", 0); } for (y = 1; y < 16; y++) { for (b = 0; b < 16; b++) { for (r = 0; r < 16; r++) { if (b == 0) { if (y == 1) cy = 0; else cy = y; cb = 7; if (r != 0) cr = r - 1; else cr = 7; } else if (r == 0) { if (y == 15) cy = 16; else cy = y; cb = b - 1; cr = 7; } else { cy = y; cb = b - 1; cr = r - 1; } cy = ((cy * 255.0) / 16.0) + 0.5; /* t = (cr - 7) / 7.0; if (t < 0) t = -t * t; else t = t * t; t = (7.0 * t) + 7.0; t = (t + cr) / 2.0; cr = (t * 255.0 / 14.0) + 0.5; t = (cb - 7) / 7.0; if (t < 0) t = -t * t; else t = t * t; t = (7.0 * t) + 7.0; t = (t + cb) / 2.0; cb = (t * 255.0 / 14.0) + 0.5; */ cr = (cr * 255.0 / 14.0) + 0.5; cb = (cb * 255.0 / 14.0) + 0.5; col = (cb << 16) + (cy << 8) + cr; printf("0x%0.6X,\n", colcspace(col, yuvrgb)); } } } printf("};\n\n"); /* volgorde is: 3 bits S, 5 bits Y, 4 bits H */ printf("short tan_and_or[] = {\n"); printf("/* YH */\n"); for (i = YH_tan_start; i < YS_tan_start; i++) { printf("0x0E00,\n"); } printf("/* YS */\n"); for (i = YS_tan_start; i < Y_tan_start; i++) { printf("0x000F,\n"); } printf("/* Y */\n"); for (i = Y_tan_start; i < H_tan_start; i++) { printf("0x0E0F,\n"); } printf("/* H */\n"); for (i = H_tan_start; i < S_tan_start; i++) { printf("0x0FF0,\n"); } printf("/* S */\n"); for (i = S_tan_start; i < HS_tan_start; i++) { printf("0x01FF,\n"); } printf("/* HS */\n"); for (i = HS_tan_start; i < FREE_tan_start; i++) { printf("0x01F0,\n"); } printf("/* FREE */\n"); for (i = FREE_tan_start; i < 256; i++) { printf("0x0FFF,\n"); } /*********************/ printf("/* YH */\n"); for (i = YH_tan_start; i < YS_tan_start; i++) { col = i - YH_tan_start; y = col >> 3; y = 2 + 2 * y; h = (col & 0x7) << 1; col = (y << 4) + h; printf("0x%0.4X,\n", col); } printf("/* YS */\n"); for (i = YS_tan_start; i < Y_tan_start; i++) { col = i - YS_tan_start; y = col >> 2; y = 2 + 2 * y; s = (col & 0x3) << 1; col = ((s + 1) << 9) + (y << 4); printf("0x%0.4X,\n", col); } printf("/* Y */\n"); for (i = Y_tan_start; i < H_tan_start; i++) { y = i - Y_tan_start; col = (y << 4); printf("0x%0.4X,\n", col); } printf("/* H */\n"); for (i = H_tan_start; i < S_tan_start; i++) { h = i - H_tan_start; col = h; printf("0x%0.4X,\n", col); } printf("/* S */\n"); for (i = S_tan_start; i < HS_tan_start; i++) { s = i - S_tan_start; col = ((s + 1) << 9); printf("0x%0.4X,\n", col); } printf("/* HS */\n"); for (i = HS_tan_start; i < FREE_tan_start; i++) { col = i - HS_tan_start; h = (col & 0x7) << 1; if (col >= 8) s = 4; else s = 2; col = ((s + 1) << 9) + h; printf("0x%0.4X,\n", col); } printf("/* FREE */\n"); for (i = FREE_tan_start; i < 256; i++) { printf("0x0020,\n"); } printf("};\n\n"); printf("ulong tan_cmap[] = {\n"); /* eerste 512 overslaan */ for (i = 0; i < 512; i++) { printf("0x%0.6X,\n", 0); } /* colormap wordt on the fly berekent ivm gamma & distort */ for (s = 0; s < 7; s++) { for (y = 0; y < 32; y++) { for (h = 0; h < 16; h++) { ch = (h * 16.0) + 0.5; cy = ((y * 255.0) / 31.0) + 0.5; cs = (s * 16.0) + 0.5 + 80.0; /*cs = ffloor(((s * s) / 7.0) + 0.5) * 16.0 + 0.5 + 80.0;*/ col = (ch << 16) + (cy << 8) + cs; printf("0x%0.6X,\n", col); } } } printf("};\n\n"); }