bunch of small fixes, add msg.txt to about prefs
[goodguy/history.git] / cinelerra-5.0 / quicktime / colormodels.h
1 /*
2  * This library is free software; you can redistribute it and/or modify it
3  * under the terms of the GNU Lesser General Public License as published
4  * by the Free Software Foundation; either version 2 of the License, or
5  * (at your option) any later version.
6  * 
7  * This library is distributed in the hope that it will be useful, but
8  * WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
10  * Lesser General Public License for more details.
11  * 
12  * You should have received a copy of the GNU Lesser General Public
13  * License along with this library; if not, write to the Free Software
14  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 
15  * USA
16  */
17  
18  
19 #ifndef COLORMODELS_H
20 #define COLORMODELS_H
21
22 // Colormodels
23 #define BC_TRANSPARENCY 0
24 #define BC_COMPRESSED   1
25 #define BC_RGB8         2
26 #define BC_RGB565       3
27 #define BC_BGR565       4
28 #define BC_BGR888       5
29 #define BC_BGR8888      6
30 // Working bitmaps are packed to simplify processing
31 #define BC_RGB888       9
32 #define BC_RGBA8888     10
33 #define BC_ARGB8888     20
34 #define BC_ABGR8888     21
35 #define BC_RGB161616    11
36 #define BC_RGBA16161616 12
37 #define BC_YUV888       13
38 #define BC_YUVA8888     14
39 #define BC_YUV161616    15
40 #define BC_YUVA16161616 16
41 #define BC_UVY422       18
42 #define BC_YUV422       19
43 #define BC_A8           22
44 #define BC_A16          23
45 #define BC_A_FLOAT      31
46 #define BC_YUV101010    24
47 #define BC_VYU888       25
48 #define BC_UYVA8888     26
49 #define BC_RGB_FLOAT    29
50 #define BC_RGBA_FLOAT   30
51 // Planar
52 #define BC_YUV420P      7
53 #define BC_YUV422P      8
54 //#define BC_YUV411P      17    // broken
55 #define BC_YUV444P      27
56 #define BC_YUV9P        28     // Disasterous cmodel from Sorenson
57
58 // Colormodels purely used by Quicktime are done in Quicktime.
59
60 // For communication with the X Server
61 #define FOURCC_YV12 0x32315659  /* YV12   YUV420P */
62 #define FOURCC_YUV2 0x32595559  /* YUV2   YUV422 */
63 #define FOURCC_UYVY 0x59565955  /* UYVY   UVY422 */
64 #define FOURCC_I420 0x30323449  /* I420   Intel Indeo 4 */
65
66 #undef CLAMP
67 #define CLAMP(x, y, z) ((x) = ((x) < (y) ? (y) : ((x) > (z) ? (z) : (x))))
68
69 #undef CLIP
70 #define CLIP(x, y, z) ((x) < (y) ? (y) : ((x) > (z) ? (z) : (x)))
71
72
73 #ifdef __cplusplus
74 extern "C" {
75 #endif
76
77 typedef struct
78 {
79         int rtoy_tab[0x100], gtoy_tab[0x100], btoy_tab[0x100];
80         int rtou_tab[0x100], gtou_tab[0x100], btou_tab[0x100];
81         int rtov_tab[0x100], gtov_tab[0x100], btov_tab[0x100];
82
83         int vtor_tab[0x100], vtog_tab[0x100];
84         int utog_tab[0x100], utob_tab[0x100];
85 // Used by init_yuv only
86         int *vtor, *vtog, *utog, *utob;
87
88         short int vtor_tab8[0x100], vtog_tab8[0x100];
89         short int utog_tab8[0x100], utob_tab8[0x100];
90         short int *vtor8, *vtog8, *utog8, *utob8;
91
92         float vtor_float_tab[0x100], vtog_float_tab[0x100];
93         float utog_float_tab[0x100], utob_float_tab[0x100];
94         float *vtor_float, *vtog_float, *utog_float, *utob_float;
95
96         int rtoy_tab16[0x10000], gtoy_tab16[0x10000], btoy_tab16[0x10000];
97         int rtou_tab16[0x10000], gtou_tab16[0x10000], btou_tab16[0x10000];
98         int rtov_tab16[0x10000], gtov_tab16[0x10000], btov_tab16[0x10000];
99
100         int vtor_tab16[0x10000], vtog_tab16[0x10000];
101         int utog_tab16[0x10000], utob_tab16[0x10000];
102         int *vtor16, *vtog16, *utog16, *utob16;
103
104         float v16tor_float_tab[0x10000], v16tog_float_tab[0x10000];
105         float u16tog_float_tab[0x10000], u16tob_float_tab[0x10000];
106         float *v16tor_float, *v16tog_float, *u16tog_float, *u16tob_float;
107 } cmodel_yuv_t;
108
109 extern cmodel_yuv_t *yuv_table;
110
111 int cmodel_calculate_pixelsize(int colormodel);
112 int cmodel_calculate_datasize(int w, int h, int bytes_per_line, int color_model);
113 int cmodel_calculate_max(int colormodel);
114 int cmodel_components(int colormodel);
115 int cmodel_is_yuv(int colormodel);
116 int cmodel_has_alpha(int colormodel);
117 int cmodel_is_float(int colormodel);
118
119 // Tell when to use plane arguments or row pointer arguments to functions
120 int cmodel_is_planar(int color_model);
121 void cmodel_to_text(char *string, int cmodel);
122 int cmodel_from_text(const char *text);
123
124
125
126 void cmodel_transfer(unsigned char **output_rows, /* Leave NULL if non existent */
127         unsigned char **input_rows,
128         unsigned char *out_y_plane, /* Leave NULL if non existent */
129         unsigned char *out_u_plane,
130         unsigned char *out_v_plane,
131         unsigned char *in_y_plane, /* Leave NULL if non existent */
132         unsigned char *in_u_plane,
133         unsigned char *in_v_plane,
134         int in_x,        /* Dimensions to capture from input frame */
135         int in_y, 
136         int in_w, 
137         int in_h,
138         int out_x,       /* Dimensions to project on output frame */
139         int out_y, 
140         int out_w, 
141         int out_h,
142         int in_colormodel, 
143         int out_colormodel,
144         int bg_color,         /* When transfering BC_RGBA8888 to non-alpha this is the background color in 0xRRGGBB hex */
145         int in_rowspan,       /* For planar use the luma rowspan */
146         int out_rowspan);     /* For planar use the luma rowspan */
147
148 void cmodel_init_yuv(cmodel_yuv_t *yuv_table);
149 void cmodel_delete_yuv(cmodel_yuv_t *yuv_table);
150 int cmodel_bc_to_x(int color_model);
151
152 #ifdef __cplusplus
153 }
154 #endif
155
156 #endif