Merge CV, ver=5.1; ops/methods from HV, and interface from CV where possible
[goodguy/history.git] / cinelerra-5.1 / guicast / bccmodels.h
diff --git a/cinelerra-5.1/guicast/bccmodels.h b/cinelerra-5.1/guicast/bccmodels.h
new file mode 100644 (file)
index 0000000..b6c397b
--- /dev/null
@@ -0,0 +1,130 @@
+/*
+ * This library is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This library is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 
+ * USA
+ */
+#ifndef BCCMODELS_H
+#define BCCMODELS_H
+
+// Colormodels
+// Must match colormodels.h in quicktime
+#ifndef BC_TRANSPARENCY
+
+
+#define BC_TRANSPARENCY 0
+#define BC_COMPRESSED   1
+#define BC_RGB8         2
+#define BC_RGB565       3
+#define BC_BGR565       4
+#define BC_BGR888       5
+#define BC_BGR8888      6
+// Working bitmaps are packed to simplify processing
+#define BC_RGB888       9
+#define BC_RGBA8888     10
+#define BC_ARGB8888     20
+#define BC_ABGR8888     21
+#define BC_RGB161616    11
+#define BC_RGBA16161616 12
+#define BC_YUV888       13
+#define BC_YUVA8888     14
+#define BC_YUV161616    15
+#define BC_YUVA16161616 16
+#define BC_UVY422       18
+#define BC_YUV422       19
+#define BC_A8           22
+#define BC_A16          23
+#define BC_A_FLOAT      31
+#define BC_YUV101010    24
+#define BC_VYU888       25
+#define BC_UYVA8888     26
+#define BC_RGB_FLOAT    29
+#define BC_RGBA_FLOAT   30
+// Planar
+#define BC_YUV420P      7
+#define BC_YUV422P      8
+#define BC_YUV444P      27
+#define BC_YUV411P      17
+#define BC_YUV410P      28
+#define BC_RGB_FLOATP   32
+#define BC_RGBA_FLOATP  33
+
+// Colormodels purely used by Quicktime are done in Quicktime.
+
+// For communication with the X Server
+#define FOURCC_YV12 0x32315659  /* YV12   YUV420P */
+#define FOURCC_YUV2 0x32595559  /* YUV2   YUV422 */
+#define FOURCC_UYVY 0x59565955  /* UYVY   UVY422 */
+#define FOURCC_I420 0x30323449  /* I420   Intel Indeo 4 */
+
+
+#endif // !BC_TRANSPARENCY
+
+
+// Access with BC_WindowBase::cmodels
+class BC_CModels
+{
+public:
+       BC_CModels();
+
+       static int calculate_pixelsize(int colormodel);
+       static int calculate_datasize(int w, int h, int bytes_per_line, int color_model);
+       static int calculate_max(int colormodel);
+       static int components(int colormodel);
+       static int is_yuv(int colormodel);
+       static int has_alpha(int colormodel);
+       static int is_float(int colormodel);
+
+       // Tell when to use plane arguments or row pointer arguments to functions
+       static int is_planar(int color_model);
+       static void to_text(char *string, int cmodel);
+       static int from_text(const char *text);
+
+       static void transfer(unsigned char **output_rows, /* Leave NULL if non existent */
+               unsigned char **input_rows,
+               unsigned char *out_y_plane, /* Leave NULL if non existent */
+               unsigned char *out_u_plane,
+               unsigned char *out_v_plane,
+               unsigned char *in_y_plane, /* Leave NULL if non existent */
+               unsigned char *in_u_plane,
+               unsigned char *in_v_plane,
+               int in_x,        /* Dimensions to capture from input frame */
+               int in_y, 
+               int in_w, 
+               int in_h,
+               int out_x,       /* Dimensions to project on output frame */
+               int out_y, 
+               int out_w, 
+               int out_h,
+               int in_colormodel, 
+               int out_colormodel,
+               int bg_color,         /* When transfering BC_RGBA8888 to non-alpha this is the background color in 0xRRGGBB hex */
+               int in_rowspan,       /* For planar use the luma rowspan */
+               int out_rowspan);     /* For planar use the luma rowspan */
+
+// ptrs are either row pointers (colormodel flat) or plane pointers (colormodel planar)
+       static void transfer(
+               unsigned char **output_ptrs, int out_colormodel,
+                       int out_x, int out_y, int out_w, int out_h, int out_rowspan,
+               unsigned char **input_ptrs, int in_colormodel,
+                       int in_x, int in_y, int in_w, int in_h, int in_rowspan,
+               int bg_color);
+
+       static void init_yuv();
+       static int bc_to_x(int color_model);
+};
+
+
+#endif