LiVES 1.4.9
|
00001 // colourspace.h 00002 // LiVES 00003 // (c) G. Finch 2004 - 2010 <salsaman@xs4all.nl,salsaman@gmail.com> 00004 // Released under the GPL 3 or later 00005 // see file ../COPYING for licensing details 00006 00007 // headers for palette conversions 00008 00009 typedef struct { 00010 guchar u0; 00011 guchar y0; 00012 guchar v0; 00013 guchar y1; 00014 } uyvy_macropixel; 00015 00016 typedef struct { 00017 guchar y0; 00018 guchar u0; 00019 guchar y1; 00020 guchar v0; 00021 } yuyv_macropixel; 00022 00023 00024 typedef struct { 00025 guchar u2; 00026 guchar y0; 00027 guchar y1; 00028 guchar v2; 00029 guchar y2; 00030 guchar y3; 00031 } yuv411_macropixel; 00032 00033 00034 00035 00036 typedef struct { 00037 void *src; 00038 gint hsize; 00039 gint vsize; 00040 gint irowstrides[4]; 00041 gint orowstrides[4]; 00042 void *dest; 00043 gboolean in_alpha; 00044 gboolean out_alpha; 00045 gboolean in_clamped; 00046 gboolean out_clamped; 00047 int in_subspace; 00048 int out_subspace; 00049 int in_sampling; 00050 int out_sampling; 00051 gboolean alpha_first; 00052 int thread_id; 00053 } lives_cc_params; 00054 00055 00056 // internal thread fns - data points to a lives_cc_params struct 00057 void *convert_rgb_to_uyvy_frame_thread(void *data); 00058 void *convert_bgr_to_uyvy_frame_thread(void *data); 00059 void *convert_rgb_to_yuyv_frame_thread(void *data); 00060 void *convert_bgr_to_yuyv_frame_thread(void *data); 00061 00062 void *convert_rgb_to_yuv_frame_thread(void *data); 00063 void *convert_bgr_to_yuv_frame_thread(void *data); 00064 00065 void *convert_uyvy_to_rgb_frame_thread(void *data); 00066 void *convert_uyvy_to_bgr_frame_thread(void *data); 00067 void *convert_yuyv_to_rgb_frame_thread(void *data); 00068 void *convert_yuyv_to_bgr_frame_thread(void *data); 00069 00070 00071 void *convert_swap3_frame_thread(void *data); 00072 void *convert_swap4_frame_thread(void *data); 00073 void *convert_swap3addpost_frame_thread(void *data); 00074 void *convert_swap3addpre_frame_thread(void *data); 00075 void *convert_swap3delpost_frame_thread(void *data); 00076 void *convert_swap3delpre_frame_thread(void *data); 00077 void *convert_addpre_frame_thread(void *data); 00078 void *convert_addpost_frame_thread(void *data); 00079 void *convert_delpre_frame_thread(void *data); 00080 void *convert_delpost_frame_thread(void *data); 00081 void *convert_swap3postalpha_frame_thread(void *data); 00082 void *convert_swapprepost_frame_thread(void *data); 00083 00084 void *convert_swab_frame_thread(void *data); 00085 00086 00087 00089 // these functions should be used in future 00090 gboolean convert_layer_palette(weed_plant_t *layer, int outpl, int op_clamping); 00091 gboolean convert_layer_palette_with_sampling(weed_plant_t *layer, int outpl, int out_sampling); 00092 gboolean convert_layer_palette_full(weed_plant_t *layer, int outpl, int osamtype, gboolean oclamping, int osubspace); 00093 gboolean apply_gamma (weed_plant_t *ilayer, weed_plant_t *olayer, double gamma); 00094 void resize_layer (weed_plant_t *layer, int width, int height, int interp); 00095 void letterbox_layer (weed_plant_t *layer, int width, int height, int nwidth, int nheight); 00096 void compact_rowstrides(weed_plant_t *layer); 00097 void create_empty_pixel_data(weed_plant_t *layer, gboolean black_fill, gboolean may_contig); 00098 void pixel_data_planar_from_membuf(void **pixel_data, void *data, size_t size, int palette); 00099 GdkPixbuf *layer_to_pixbuf (weed_plant_t *layer); 00100 gboolean pixbuf_to_layer(weed_plant_t *layer, GdkPixbuf *); 00101 00102 weed_plant_t *weed_layer_copy (weed_plant_t *dlayer, weed_plant_t *slayer); 00103 void weed_layer_free (weed_plant_t *layer); 00104 weed_plant_t *weed_layer_new(int width, int height, int *rowstrides, int current_palette); 00105 int weed_layer_get_palette(weed_plant_t *layer); 00106 00107 // palette information functions 00108 gboolean weed_palette_is_valid_palette(int pal); 00109 gboolean weed_palette_is_alpha_palette(int pal); 00110 gboolean weed_palette_is_rgb_palette(int pal); 00111 gboolean weed_palette_is_yuv_palette(int pal); 00112 gboolean weed_palette_is_float_palette(int pal); 00113 gboolean weed_palette_has_alpha_channel(int pal); 00114 gint weed_palette_get_bits_per_macropixel(int pal); 00115 gint weed_palette_get_pixels_per_macropixel(int pal); 00116 gint weed_palette_get_numplanes(int pal); 00117 gdouble weed_palette_get_plane_ratio_horizontal(int pal, int plane); 00118 gdouble weed_palette_get_plane_ratio_vertical(int pal, int plane); 00119 gboolean weed_palette_is_lower_quality(int p1, int p2); 00120 gboolean weed_palette_is_resizable(int pal); 00121 gdouble weed_palette_get_compression_ratio (int pal); 00122 00123 int fourccp_to_weedp (unsigned int fourcc, int bpp, lives_interlace_t *interlace, int *sampling, 00124 int *sspace, int *clamping); 00125 00126 #define BLACK_THRESH 20 ///< if R,G and B values are all <= this, we consider it a "black" pixel 00127 gboolean gdk_pixbuf_is_all_black(GdkPixbuf *pixbuf); 00128 00129 00130 void gdk_pixbuf_set_opaque(GdkPixbuf *pixbuf); 00131 00132 const char *weed_palette_get_name(int pal); 00133 const char *weed_yuv_clamping_get_name(int clamping); 00134 const char *weed_yuv_subspace_get_name(int subspace); 00135 gchar *weed_palette_get_name_full(int pal, int clamped, int subspace); 00136 00137 00138 #ifdef USE_SWSCALE 00139 void sws_free_context(void); 00140 #endif