LiVES  2.8.1
colourspace.h
Go to the documentation of this file.
1 // colourspace.h
2 // LiVES
3 // (c) G. Finch 2004 - 2016 <salsaman@gmail.com>
4 // Released under the GPL 3 or later
5 // see file ../COPYING for licensing details
6 
7 
8 // headers for palette conversions
9 
10 #ifndef HAS_LIVES_COLOURSPACE_H
11 #define HAS_LIVES_COLOURSPACE_H
12 
13 #define WEED_LEAF_HOST_PIXEL_DATA_CONTIGUOUS "host_pixel_data_contiguous"
14 #define WEED_LEAF_HOST_PIXBUF_SRC "host_pixbuf_src"
15 
16 #define SCREEN_GAMMA 2.2
17 
18 
19 
20 // rgb / yuv conversion factors ////////////
21 #define FP_BITS 16
22 #define SCALE_FACTOR (1<<FP_BITS)
23 
24 #define KR_YCBCR 0.299
25 #define KB_YCBCR 0.114
26 
27 #define KR_BT701 0.2126
28 #define KB_BT701 0.0722
29 
30 #define YUV_CLAMP_MIN 16.
31 #define YUV_CLAMP_MINI 16
32 
33 #define Y_CLAMP_MAX 235.
34 
35 #define UV_CLAMP_MAX 240.
36 #define UV_CLAMP_MAXI 240
37 
38 #define CLAMP_FACTOR_Y ((Y_CLAMP_MAX-YUV_CLAMP_MIN)/255.) // unclamped -> clamped
39 #define CLAMP_FACTOR_UV ((UV_CLAMP_MAX-YUV_CLAMP_MIN)/255.) // unclamped -> clamped
40 
41 #define UV_BIAS 128.
42 
44 
45 
46 
47 typedef struct {
48  uint8_t u0;
49  uint8_t y0;
50  uint8_t v0;
51  uint8_t y1;
53 
54 typedef struct {
55  uint8_t y0;
56  uint8_t u0;
57  uint8_t y1;
58  uint8_t v0;
60 
61 
62 typedef struct {
63  uint8_t u2;
64  uint8_t y0;
65  uint8_t y1;
66  uint8_t v2;
67  uint8_t y2;
68  uint8_t y3;
70 
71 
72 
73 
74 typedef struct {
75  void *src;
76  void *srcp[4];
77  int hsize;
78  int vsize;
79  int irowstrides[4];
80  int orowstrides[4];
81  void *dest;
82  void *destp[4];
83  boolean in_alpha;
84  boolean out_alpha;
85  boolean in_clamped;
86  boolean out_clamped;
91  boolean alpha_first;
92  int thread_id;
94 
95 
96 // internal thread fns
97 void *convert_rgb_to_uyvy_frame_thread(void *cc_params);
98 void *convert_bgr_to_uyvy_frame_thread(void *cc_params);
99 void *convert_rgb_to_yuyv_frame_thread(void *cc_params);
100 void *convert_bgr_to_yuyv_frame_thread(void *cc_params);
101 void *convert_argb_to_uyvy_frame_thread(void *cc_params);
102 void *convert_argb_to_yuyv_frame_thread(void *cc_params);
103 
104 
105 void *convert_rgb_to_yuv_frame_thread(void *cc_params);
106 void *convert_bgr_to_yuv_frame_thread(void *cc_params);
107 void *convert_argb_to_yuv_frame_thread(void *cc_params);
108 void *convert_rgb_to_yuvp_frame_thread(void *cc_params);
109 void *convert_bgr_to_yuvp_frame_thread(void *cc_params);
110 void *convert_argb_to_yuvp_frame_thread(void *cc_params);
111 
112 
113 void *convert_uyvy_to_rgb_frame_thread(void *cc_params);
114 void *convert_uyvy_to_bgr_frame_thread(void *cc_params);
115 void *convert_uyvy_to_argb_frame_thread(void *cc_params);
116 void *convert_yuyv_to_rgb_frame_thread(void *cc_params);
117 void *convert_yuyv_to_bgr_frame_thread(void *cc_params);
118 void *convert_yuyv_to_argb_frame_thread(void *cc_params);
119 
120 
121 void *convert_yuv_planar_to_rgb_frame_thread(void *cc_params);
122 void *convert_yuv_planar_to_bgr_frame_thread(void *cc_params);
123 void *convert_yuv_planar_to_argb_frame_thread(void *cc_params);
124 
125 void *convert_yuv888_to_rgb_frame_thread(void *cc_params);
126 void *convert_yuv888_to_bgr_frame_thread(void *cc_params);
127 void *convert_yuv888_to_argb_frame_thread(void *cc_params);
128 void *convert_yuva8888_to_rgba_frame_thread(void *cc_params);
129 void *convert_yuva8888_to_bgra_frame_thread(void *cc_params);
130 void *convert_yuva8888_to_argb_frame_thread(void *cc_params);
131 
132 
133 void *convert_swap3_frame_thread(void *cc_params);
134 void *convert_swap4_frame_thread(void *cc_params);
135 void *convert_swap3addpost_frame_thread(void *cc_params);
136 void *convert_swap3addpre_frame_thread(void *cc_params);
137 void *convert_swap3delpost_frame_thread(void *cc_params);
138 void *convert_swap3delpre_frame_thread(void *cc_params);
139 void *convert_addpre_frame_thread(void *cc_params);
140 void *convert_addpost_frame_thread(void *cc_params);
141 void *convert_delpre_frame_thread(void *cc_params);
142 void *convert_delpost_frame_thread(void *cc_params);
143 void *convert_swap3postalpha_frame_thread(void *cc_params);
144 void *convert_swapprepost_frame_thread(void *cc_params);
145 
146 void *convert_swab_frame_thread(void *cc_params);
147 
148 
149 
151 // these functions should be used in future
152 boolean convert_layer_palette(weed_plant_t *layer, int outpl, int op_clamping);
153 boolean convert_layer_palette_with_sampling(weed_plant_t *layer, int outpl, int out_sampling);
154 boolean convert_layer_palette_full(weed_plant_t *layer, int outpl, int osamtype, boolean oclamping, int osubspace);
155 //boolean apply_gamma (weed_plant_t *ilayer, weed_plant_t *olayer, double gamma); ///< not used
156 boolean resize_layer(weed_plant_t *layer, int width, int height, LiVESInterpType interp, int opal_hint, int oclamp_hint);
157 void letterbox_layer(weed_plant_t *layer, int width, int height, int nwidth, int nheight);
158 void compact_rowstrides(weed_plant_t *layer);
159 void weed_layer_pixel_data_free(weed_plant_t *layer);
160 void create_empty_pixel_data(weed_plant_t *layer, boolean black_fill, boolean may_contig);
161 void insert_blank_frames(int sfileno, int nframes, int after);
162 void pixel_data_planar_from_membuf(void **pixel_data, void *data, size_t size, int palette);
163 LiVESPixbuf *layer_to_pixbuf(weed_plant_t *layer);
164 boolean pixbuf_to_layer(weed_plant_t *layer, LiVESPixbuf *) WARN_UNUSED;
165 
166 weed_plant_t *weed_layer_copy(weed_plant_t *dlayer, weed_plant_t *slayer);
167 void weed_layer_free(weed_plant_t *layer);
168 weed_plant_t *weed_layer_new(int width, int height, int *rowstrides, int current_palette);
169 int weed_layer_get_palette(weed_plant_t *layer);
170 
171 lives_painter_t *layer_to_lives_painter(weed_plant_t *layer);
172 boolean lives_painter_to_layer(lives_painter_t *cairo, weed_plant_t *layer);
173 
174 void alpha_unpremult(weed_plant_t *layer, boolean un);
175 
176 
177 // palette information functions
178 boolean weed_palette_is_valid_palette(int pal);
179 boolean weed_palette_is_alpha_palette(int pal);
180 boolean weed_palette_is_rgb_palette(int pal);
181 boolean weed_palette_is_yuv_palette(int pal);
182 boolean weed_palette_is_float_palette(int pal);
183 boolean weed_palette_has_alpha_channel(int pal);
186 int weed_palette_get_numplanes(int pal);
187 double weed_palette_get_plane_ratio_horizontal(int pal, int plane);
188 double weed_palette_get_plane_ratio_vertical(int pal, int plane);
189 boolean weed_palette_is_lower_quality(int p1, int p2);
190 boolean weed_palette_is_resizable(int pal, int clamped, boolean in_out);
191 double weed_palette_get_compression_ratio(int pal);
192 
194 
195 #define BLACK_THRESH 20
196 boolean lives_pixbuf_is_all_black(LiVESPixbuf *pixbuf);
197 
198 
199 void lives_pixbuf_set_opaque(LiVESPixbuf *pixbuf);
200 
201 const char *weed_palette_get_name(int pal);
202 const char *weed_yuv_clamping_get_name(int clamping);
203 const char *weed_yuv_subspace_get_name(int subspace);
204 char *weed_palette_get_name_full(int pal, int clamped, int subspace);
205 
206 
207 #ifdef USE_SWSCALE
208 void sws_free_context(void);
209 #endif
210 
211 
212 #endif
void * convert_bgr_to_yuyv_frame_thread(void *cc_params)
Definition: colourspace.c:2382
int hsize
Definition: colourspace.h:77
boolean weed_palette_is_lower_quality(int p1, int p2)
return TRUE if p1 is lower quality than p2
Definition: colourspace.c:1089
uint8_t v0
Definition: colourspace.h:58
const char * weed_yuv_clamping_get_name(int clamping)
Definition: colourspace.c:1184
int weed_layer_get_palette(weed_plant_t *layer)
Definition: colourspace.c:11415
uint8_t u0
Definition: colourspace.h:48
uint8_t y0
Definition: colourspace.h:64
boolean in_alpha
Definition: colourspace.h:83
void alpha_unpremult(weed_plant_t *layer, boolean un)
Definition: colourspace.c:8103
int out_sampling
Definition: colourspace.h:90
void * convert_swab_frame_thread(void *cc_params)
Definition: colourspace.c:6917
uint8_t v0
Definition: colourspace.h:50
uint8_t y1
Definition: colourspace.h:51
void compact_rowstrides(weed_plant_t *layer)
Definition: colourspace.c:10276
void * convert_uyvy_to_argb_frame_thread(void *cc_params)
Definition: colourspace.c:3656
boolean weed_palette_is_rgb_palette(int pal)
Definition: colourspace.c:1008
int get_weed_palette_for_lives_painter(void)
Definition: colourspace.c:11073
int weed_palette_get_numplanes(int pal)
Definition: colourspace.c:1016
void * convert_delpost_frame_thread(void *cc_params)
Definition: colourspace.c:6604
boolean pixbuf_to_layer(weed_plant_t *layer, LiVESPixbuf *) WARN_UNUSED
Definition: colourspace.c:10960
int thread_id
Definition: colourspace.h:92
int out_subspace
Definition: colourspace.h:88
void insert_blank_frames(int sfileno, int nframes, int after)
Definition: colourspace.c:11424
void * convert_bgr_to_yuvp_frame_thread(void *cc_params)
Definition: colourspace.c:2907
void * dest
Definition: colourspace.h:81
boolean convert_layer_palette_full(weed_plant_t *layer, int outpl, int osamtype, boolean oclamping, int osubspace)
Definition: colourspace.c:8275
void * convert_uyvy_to_bgr_frame_thread(void *cc_params)
Definition: colourspace.c:3582
void * convert_addpost_frame_thread(void *cc_params)
Definition: colourspace.c:6378
void * convert_rgb_to_yuv_frame_thread(void *cc_params)
Definition: colourspace.c:2628
void * convert_yuyv_to_bgr_frame_thread(void *cc_params)
Definition: colourspace.c:3821
void * convert_yuv_planar_to_argb_frame_thread(void *cc_params)
Definition: colourspace.c:4257
int weed_palette_get_bits_per_macropixel(int pal)
Definition: colourspace.c:1031
void * convert_argb_to_yuv_frame_thread(void *cc_params)
Definition: colourspace.c:2989
void weed_layer_free(weed_plant_t *layer)
Definition: colourspace.c:11408
void * convert_argb_to_uyvy_frame_thread(void *cc_params)
Definition: colourspace.c:2462
double weed_palette_get_compression_ratio(int pal)
Definition: colourspace.c:1217
void * convert_yuyv_to_argb_frame_thread(void *cc_params)
Definition: colourspace.c:3895
void * convert_bgr_to_yuv_frame_thread(void *cc_params)
Definition: colourspace.c:2808
boolean out_clamped
Definition: colourspace.h:86
boolean weed_palette_is_resizable(int pal, int clamped, boolean in_out)
Definition: colourspace.c:10233
_palette * palette
Definition: main.c:89
uint8_t y3
Definition: colourspace.h:68
boolean alpha_first
Definition: colourspace.h:91
uint8_t y0
Definition: colourspace.h:55
uint8_t y2
Definition: colourspace.h:67
weed_plant_t * weed_layer_copy(weed_plant_t *dlayer, weed_plant_t *slayer)
Definition: colourspace.c:11259
uint8_t u2
Definition: colourspace.h:63
boolean in_clamped
Definition: colourspace.h:85
boolean weed_palette_has_alpha_channel(int pal)
Definition: colourspace.c:1057
void * convert_argb_to_yuyv_frame_thread(void *cc_params)
Definition: colourspace.c:2542
Definition: colourspace.h:62
void * convert_delpre_frame_thread(void *cc_params)
Definition: colourspace.c:6681
void * convert_rgb_to_uyvy_frame_thread(void *cc_params)
Definition: colourspace.c:2127
void * convert_swapprepost_frame_thread(void *cc_params)
Definition: colourspace.c:6855
void * convert_swap3postalpha_frame_thread(void *cc_params)
Definition: colourspace.c:6296
boolean weed_palette_is_valid_palette(int pal)
Definition: colourspace.c:1026
uint8_t y1
Definition: colourspace.h:65
double weed_palette_get_plane_ratio_horizontal(int pal, int plane)
Definition: colourspace.c:1063
boolean weed_palette_is_alpha_palette(int pal)
Definition: colourspace.c:1004
void * convert_swap4_frame_thread(void *cc_params)
Definition: colourspace.c:6062
void * convert_swap3delpre_frame_thread(void *cc_params)
Definition: colourspace.c:6756
void * convert_addpre_frame_thread(void *cc_params)
Definition: colourspace.c:6456
void * convert_swap3addpre_frame_thread(void *cc_params)
Definition: colourspace.c:6218
void * convert_rgb_to_yuyv_frame_thread(void *cc_params)
Definition: colourspace.c:2210
void * convert_yuv888_to_argb_frame_thread(void *cc_params)
Definition: colourspace.c:1708
int in_subspace
Definition: colourspace.h:87
boolean convert_layer_palette_with_sampling(weed_plant_t *layer, int outpl, int out_sampling)
void * convert_yuyv_to_rgb_frame_thread(void *cc_params)
Definition: colourspace.c:3737
void * convert_argb_to_yuvp_frame_thread(void *cc_params)
Definition: colourspace.c:3079
boolean weed_palette_is_float_palette(int pal)
Definition: colourspace.c:1053
int weed_palette_get_pixels_per_macropixel(int pal)
Definition: colourspace.c:1047
void * convert_uyvy_to_rgb_frame_thread(void *cc_params)
Definition: colourspace.c:3498
void * convert_yuv888_to_bgr_frame_thread(void *cc_params)
Definition: colourspace.c:1543
void create_empty_pixel_data(weed_plant_t *layer, boolean black_fill, boolean may_contig)
Definition: colourspace.c:7411
void * convert_swap3delpost_frame_thread(void *cc_params)
Definition: colourspace.c:6530
void * src
Definition: colourspace.h:75
void lives_pixbuf_set_opaque(LiVESPixbuf *pixbuf)
Definition: colourspace.c:10252
boolean convert_layer_palette(weed_plant_t *layer, int outpl, int op_clamping)
Definition: colourspace.c:10032
boolean weed_palette_is_yuv_palette(int pal)
Definition: colourspace.c:1012
boolean lives_painter_to_layer(lives_painter_t *cairo, weed_plant_t *layer)
Definition: colourspace.c:11167
lives_painter_t * layer_to_lives_painter(weed_plant_t *layer)
Definition: colourspace.c:11079
int in_sampling
Definition: colourspace.h:89
void * convert_yuv888_to_rgb_frame_thread(void *cc_params)
Definition: colourspace.c:1372
boolean out_alpha
Definition: colourspace.h:84
void * convert_bgr_to_uyvy_frame_thread(void *cc_params)
Definition: colourspace.c:2294
void * convert_yuva8888_to_argb_frame_thread(void *cc_params)
Definition: colourspace.c:1791
void * convert_yuva8888_to_bgra_frame_thread(void *cc_params)
Definition: colourspace.c:1628
void * convert_yuv_planar_to_bgr_frame_thread(void *cc_params)
Definition: colourspace.c:4171
void weed_layer_pixel_data_free(weed_plant_t *layer)
Definition: colourspace.c:11352
void * convert_yuv_planar_to_rgb_frame_thread(void *cc_params)
Definition: colourspace.c:4077
void * convert_rgb_to_yuvp_frame_thread(void *cc_params)
Definition: colourspace.c:2723
weed_plant_t * weed_layer_new(int width, int height, int *rowstrides, int current_palette)
Definition: colourspace.c:11245
uint8_t y0
Definition: colourspace.h:49
uint8_t y1
Definition: colourspace.h:57
void pixel_data_planar_from_membuf(void **pixel_data, void *data, size_t size, int palette)
Definition: colourspace.c:1265
double weed_palette_get_plane_ratio_vertical(int pal, int plane)
Definition: colourspace.c:1076
Definition: colourspace.h:54
void * convert_swap3_frame_thread(void *cc_params)
Definition: colourspace.c:5985
LiVESPixbuf * layer_to_pixbuf(weed_plant_t *layer)
Definition: colourspace.c:10091
Definition: colourspace.h:47
uint8_t u0
Definition: colourspace.h:56
char * weed_palette_get_name_full(int pal, int clamped, int subspace)
Definition: colourspace.c:1200
int vsize
Definition: colourspace.h:78
void letterbox_layer(weed_plant_t *layer, int width, int height, int nwidth, int nheight)
Definition: colourspace.c:10673
boolean resize_layer(weed_plant_t *layer, int width, int height, LiVESInterpType interp, int opal_hint, int oclamp_hint)
Definition: colourspace.c:10445
uint8_t v2
Definition: colourspace.h:66
Definition: colourspace.h:74
const char * weed_yuv_subspace_get_name(int subspace)
Definition: colourspace.c:1192
#define WARN_UNUSED
Definition: main.h:298
void * convert_yuva8888_to_rgba_frame_thread(void *cc_params)
Definition: colourspace.c:1457
void * convert_swap3addpost_frame_thread(void *cc_params)
Definition: colourspace.c:6140
const char * weed_palette_get_name(int pal)
Definition: colourspace.c:1135