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.
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.
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
23 // Must match colormodels.h in quicktime
24 #ifndef BC_TRANSPARENCY
27 #define BC_TRANSPARENCY 0
28 #define BC_COMPRESSED 1
34 // Working bitmaps are packed to simplify processing
36 #define BC_RGBA8888 10
37 #define BC_ARGB8888 20
38 #define BC_ABGR8888 21
39 #define BC_RGB161616 11
40 #define BC_RGBA16161616 12
42 #define BC_YUVA8888 14
43 #define BC_YUV161616 15
44 #define BC_YUVA16161616 16
50 #define BC_YUV101010 24
52 #define BC_UYVA8888 26
53 #define BC_RGB_FLOAT 29
54 #define BC_RGBA_FLOAT 30
61 #define BC_RGB_FLOATP 32
62 #define BC_RGBA_FLOATP 33
64 // Colormodels purely used by Quicktime are done in Quicktime.
66 // For communication with the X Server
67 #define FOURCC_YV12 0x32315659 /* YV12 YUV420P */
68 #define FOURCC_YUV2 0x32595559 /* YUV2 YUV422 */
69 #define FOURCC_UYVY 0x59565955 /* UYVY UVY422 */
70 #define FOURCC_I420 0x30323449 /* I420 Intel Indeo 4 */
73 #endif // !BC_TRANSPARENCY
77 // Access with BC_WindowBase::cmodels
83 static int calculate_pixelsize(int colormodel);
84 static int calculate_datasize(int w, int h, int bytes_per_line, int color_model);
85 static int calculate_max(int colormodel);
86 static int components(int colormodel);
87 static int is_yuv(int colormodel);
88 static int has_alpha(int colormodel);
89 static int is_float(int colormodel);
91 // Tell when to use plane arguments or row pointer arguments to functions
92 static int is_planar(int color_model);
93 static void to_text(char *string, int cmodel);
94 static int from_text(const char *text);
96 static void transfer(unsigned char **output_rows, /* Leave NULL if non existent */
97 unsigned char **input_rows,
98 unsigned char *out_y_plane, /* Leave NULL if non existent */
99 unsigned char *out_u_plane,
100 unsigned char *out_v_plane,
101 unsigned char *in_y_plane, /* Leave NULL if non existent */
102 unsigned char *in_u_plane,
103 unsigned char *in_v_plane,
104 int in_x, /* Dimensions to capture from input frame */
108 int out_x, /* Dimensions to project on output frame */
114 int bg_color, /* When transfering BC_RGBA8888 to non-alpha this is the background color in 0xRRGGBB hex */
115 int in_rowspan, /* For planar use the luma rowspan */
116 int out_rowspan); /* For planar use the luma rowspan */
118 // ptrs are either row pointers (colormodel flat) or plane pointers (colormodel planar)
119 static void transfer(
120 unsigned char **output_ptrs, int out_colormodel,
121 int out_x, int out_y, int out_w, int out_h, int out_rowspan,
122 unsigned char **input_ptrs, int in_colormodel,
123 int in_x, int in_y, int in_w, int in_h, int in_rowspan,
126 static void init_yuv();
127 static int bc_to_x(int color_model);