LiVES  3.0.2
colourspace.h
Go to the documentation of this file.
1 // colourspace.h
2 // LiVES
3 // (c) G. Finch 2004 - 2017 <salsaman+lives@gmail.com>
4 // Released under the GPL 3 or later
5 // see file ../COPYING for licensing details
6 
7 // headers for palette conversions
8 
9 #ifndef HAS_LIVES_COLOURSPACE_H
10 #define HAS_LIVES_COLOURSPACE_H
11 
12 #define WEED_LEAF_HOST_PIXEL_DATA_CONTIGUOUS "host_pixel_data_contiguous"
13 #define WEED_LEAF_HOST_PIXBUF_SRC "host_pixbuf_src"
14 
15 #define DEF_SCREEN_GAMMA 2.2
16 
17 // rgb / yuv conversion factors ////////////
18 #define FP_BITS 16
19 #define SCALE_FACTOR (1 << FP_BITS)
20 
21 #define KR_YCBCR 0.299
22 #define KB_YCBCR 0.114
23 
24 #define KR_BT701 0.2126
25 #define KB_BT701 0.0722
26 
27 #define KR_BT2020 0.2627
28 #define KB_BT2020 0.0593
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 typedef struct {
46  uint8_t u0;
47  uint8_t y0;
48  uint8_t v0;
49  uint8_t y1;
51 
52 typedef struct {
53  uint8_t y0;
54  uint8_t u0;
55  uint8_t y1;
56  uint8_t v0;
58 
59 typedef struct {
60  uint8_t u2;
61  uint8_t y0;
62  uint8_t y1;
63  uint8_t v2;
64  uint8_t y2;
65  uint8_t y3;
67 
68 typedef struct {
69  void *src;
70  void *srcp[4];
71  int hsize;
72  int vsize;
73  int irowstrides[4];
74  int orowstrides[4];
75  void *dest;
76  void *destp[4];
77  boolean in_alpha;
78  boolean out_alpha;
79  boolean in_clamped;
80  boolean out_clamped;
85  boolean alpha_first;
86  int thread_id;
88 
89 // internal thread fns
90 void *convert_rgb_to_uyvy_frame_thread(void *cc_params);
91 void *convert_bgr_to_uyvy_frame_thread(void *cc_params);
92 void *convert_rgb_to_yuyv_frame_thread(void *cc_params);
93 void *convert_bgr_to_yuyv_frame_thread(void *cc_params);
94 void *convert_argb_to_uyvy_frame_thread(void *cc_params);
95 void *convert_argb_to_yuyv_frame_thread(void *cc_params);
96 
97 void *convert_rgb_to_yuv_frame_thread(void *cc_params);
98 void *convert_bgr_to_yuv_frame_thread(void *cc_params);
99 void *convert_argb_to_yuv_frame_thread(void *cc_params);
100 void *convert_rgb_to_yuvp_frame_thread(void *cc_params);
101 void *convert_bgr_to_yuvp_frame_thread(void *cc_params);
102 void *convert_argb_to_yuvp_frame_thread(void *cc_params);
103 
104 void *convert_uyvy_to_rgb_frame_thread(void *cc_params);
105 void *convert_uyvy_to_bgr_frame_thread(void *cc_params);
106 void *convert_uyvy_to_argb_frame_thread(void *cc_params);
107 void *convert_yuyv_to_rgb_frame_thread(void *cc_params);
108 void *convert_yuyv_to_bgr_frame_thread(void *cc_params);
109 void *convert_yuyv_to_argb_frame_thread(void *cc_params);
110 
111 void *convert_yuv_planar_to_rgb_frame_thread(void *cc_params);
112 void *convert_yuv_planar_to_bgr_frame_thread(void *cc_params);
113 void *convert_yuv_planar_to_argb_frame_thread(void *cc_params);
114 
115 void *convert_yuv888_to_rgb_frame_thread(void *cc_params);
116 void *convert_yuv888_to_bgr_frame_thread(void *cc_params);
117 void *convert_yuv888_to_argb_frame_thread(void *cc_params);
118 void *convert_yuva8888_to_rgba_frame_thread(void *cc_params);
119 void *convert_yuva8888_to_bgra_frame_thread(void *cc_params);
120 void *convert_yuva8888_to_argb_frame_thread(void *cc_params);
121 
122 void *convert_swap3_frame_thread(void *cc_params);
123 void *convert_swap4_frame_thread(void *cc_params);
124 void *convert_swap3addpost_frame_thread(void *cc_params);
125 void *convert_swap3addpre_frame_thread(void *cc_params);
126 void *convert_swap3delpost_frame_thread(void *cc_params);
127 void *convert_swap3delpre_frame_thread(void *cc_params);
128 void *convert_addpre_frame_thread(void *cc_params);
129 void *convert_addpost_frame_thread(void *cc_params);
130 void *convert_delpre_frame_thread(void *cc_params);
131 void *convert_delpost_frame_thread(void *cc_params);
132 void *convert_swap3postalpha_frame_thread(void *cc_params);
133 void *convert_swapprepost_frame_thread(void *cc_params);
134 
135 void *convert_swab_frame_thread(void *cc_params);
136 
138 // these functions should be used in future
139 boolean convert_layer_palette(weed_plant_t *layer, int outpl, int op_clamping);
140 boolean convert_layer_palette_with_sampling(weed_plant_t *layer, int outpl, int out_sampling);
141 boolean convert_layer_palette_full(weed_plant_t *layer, int outpl, int osamtype, boolean oclamping, int osubspace);
142 //boolean apply_gamma (weed_plant_t *ilayer, weed_plant_t *olayer, double gamma); ///< not used
143 boolean resize_layer(weed_plant_t *layer, int width, int height, LiVESInterpType interp, int opal_hint, int oclamp_hint);
144 void letterbox_layer(weed_plant_t *layer, int width, int height, int nwidth, int nheight);
145 void compact_rowstrides(weed_plant_t *layer);
146 void weed_layer_pixel_data_free(weed_plant_t *layer);
147 void create_empty_pixel_data(weed_plant_t *layer, boolean black_fill, boolean may_contig);
148 void insert_blank_frames(int sfileno, int nframes, int after);
149 void pixel_data_planar_from_membuf(void **pixel_data, void *data, size_t size, int palette);
150 LiVESPixbuf *layer_to_pixbuf(weed_plant_t *layer);
151 boolean pixbuf_to_layer(weed_plant_t *layer, LiVESPixbuf *) WARN_UNUSED;
152 
153 weed_plant_t *weed_layer_copy(weed_plant_t *dlayer, weed_plant_t *slayer);
154 void weed_layer_free(weed_plant_t *layer);
155 weed_plant_t *weed_layer_create(int width, int height, int *rowstrides, int current_palette);
156 int weed_layer_get_palette(weed_plant_t *layer);
157 
158 lives_painter_t *layer_to_lives_painter(weed_plant_t *layer);
159 boolean lives_painter_to_layer(lives_painter_t *cairo, weed_plant_t *layer);
160 
161 void alpha_unpremult(weed_plant_t *layer, boolean un);
162 
163 // palette information functions
164 boolean weed_palette_is_valid_palette(int pal);
165 boolean weed_palette_is_alpha_palette(int pal);
166 boolean weed_palette_is_rgb_palette(int pal);
167 boolean weed_palette_is_yuv_palette(int pal);
168 boolean weed_palette_is_float_palette(int pal);
169 boolean weed_palette_has_alpha_channel(int pal);
172 int weed_palette_get_numplanes(int pal);
173 double weed_palette_get_plane_ratio_horizontal(int pal, int plane);
174 double weed_palette_get_plane_ratio_vertical(int pal, int plane);
175 boolean weed_palette_is_lower_quality(int p1, int p2);
176 double weed_palette_get_compression_ratio(int pal);
177 
178 #define BLACK_THRESH 20
179 boolean lives_pixbuf_is_all_black(LiVESPixbuf *pixbuf);
180 
181 void lives_pixbuf_set_opaque(LiVESPixbuf *pixbuf);
182 
183 const char *weed_palette_get_name(int pal);
184 const char *weed_yuv_clamping_get_name(int clamping);
185 const char *weed_yuv_subspace_get_name(int subspace);
186 char *weed_palette_get_name_full(int pal, int clamped, int subspace);
187 
188 #ifdef USE_SWSCALE
189 void sws_free_context(void);
190 #endif
191 
192 #endif
void * convert_bgr_to_yuyv_frame_thread(void *cc_params)
Definition: colourspace.c:2314
int hsize
Definition: colourspace.h:71
boolean weed_palette_is_lower_quality(int p1, int p2)
return TRUE if p1 is lower quality than p2
Definition: colourspace.c:1063
uint8_t v0
Definition: colourspace.h:56
const char * weed_yuv_clamping_get_name(int clamping)
Definition: colourspace.c:1158
int weed_layer_get_palette(weed_plant_t *layer)
Definition: colourspace.c:11284
uint8_t u0
Definition: colourspace.h:46
uint8_t y0
Definition: colourspace.h:61
boolean in_alpha
Definition: colourspace.h:77
void alpha_unpremult(weed_plant_t *layer, boolean un)
Definition: colourspace.c:7903
int out_sampling
Definition: colourspace.h:84
void * convert_swab_frame_thread(void *cc_params)
Definition: colourspace.c:6743
uint8_t v0
Definition: colourspace.h:48
uint8_t y1
Definition: colourspace.h:49
void compact_rowstrides(weed_plant_t *layer)
Definition: colourspace.c:10132
void * convert_uyvy_to_argb_frame_thread(void *cc_params)
Definition: colourspace.c:3551
boolean weed_palette_is_rgb_palette(int pal)
Definition: colourspace.c:973
weed_plant_t * weed_layer_create(int width, int height, int *rowstrides, int current_palette)
Definition: colourspace.c:11119
int weed_palette_get_numplanes(int pal)
Definition: colourspace.c:983
void * convert_delpost_frame_thread(void *cc_params)
Definition: colourspace.c:6441
boolean pixbuf_to_layer(weed_plant_t *layer, LiVESPixbuf *) WARN_UNUSED
Definition: colourspace.c:10847
int thread_id
Definition: colourspace.h:86
int out_subspace
Definition: colourspace.h:82
void insert_blank_frames(int sfileno, int nframes, int after)
Definition: colourspace.c:11292
void * convert_bgr_to_yuvp_frame_thread(void *cc_params)
Definition: colourspace.c:2817
void * dest
Definition: colourspace.h:75
boolean convert_layer_palette_full(weed_plant_t *layer, int outpl, int osamtype, boolean oclamping, int osubspace)
Definition: colourspace.c:8072
void * convert_uyvy_to_bgr_frame_thread(void *cc_params)
Definition: colourspace.c:3480
void * convert_addpost_frame_thread(void *cc_params)
Definition: colourspace.c:6222
void * convert_rgb_to_yuv_frame_thread(void *cc_params)
Definition: colourspace.c:2546
void * convert_yuyv_to_bgr_frame_thread(void *cc_params)
Definition: colourspace.c:3710
void * convert_yuv_planar_to_argb_frame_thread(void *cc_params)
Definition: colourspace.c:4137
int weed_palette_get_bits_per_macropixel(int pal)
Definition: colourspace.c:1000
void * convert_argb_to_yuv_frame_thread(void *cc_params)
Definition: colourspace.c:2896
void weed_layer_free(weed_plant_t *layer)
Definition: colourspace.c:11277
void * convert_argb_to_uyvy_frame_thread(void *cc_params)
Definition: colourspace.c:2389
double weed_palette_get_compression_ratio(int pal)
Definition: colourspace.c:1189
void * convert_yuyv_to_argb_frame_thread(void *cc_params)
Definition: colourspace.c:3781
void * convert_bgr_to_yuv_frame_thread(void *cc_params)
Definition: colourspace.c:2722
boolean out_clamped
Definition: colourspace.h:80
_palette * palette
Definition: main.c:108
uint8_t y3
Definition: colourspace.h:65
boolean alpha_first
Definition: colourspace.h:85
uint8_t y0
Definition: colourspace.h:53
uint8_t y2
Definition: colourspace.h:64
weed_plant_t * weed_layer_copy(weed_plant_t *dlayer, weed_plant_t *slayer)
Definition: colourspace.c:11133
uint8_t u2
Definition: colourspace.h:60
boolean in_clamped
Definition: colourspace.h:79
boolean weed_palette_has_alpha_channel(int pal)
Definition: colourspace.c:1028
void * convert_argb_to_yuyv_frame_thread(void *cc_params)
Definition: colourspace.c:2464
Definition: colourspace.h:59
void * convert_delpre_frame_thread(void *cc_params)
Definition: colourspace.c:6514
void * convert_rgb_to_uyvy_frame_thread(void *cc_params)
Definition: colourspace.c:2067
void * convert_swapprepost_frame_thread(void *cc_params)
Definition: colourspace.c:6683
void * convert_swap3postalpha_frame_thread(void *cc_params)
Definition: colourspace.c:6143
boolean weed_palette_is_valid_palette(int pal)
Definition: colourspace.c:994
uint8_t y1
Definition: colourspace.h:62
double weed_palette_get_plane_ratio_horizontal(int pal, int plane)
Definition: colourspace.c:1035
boolean weed_palette_is_alpha_palette(int pal)
Definition: colourspace.c:968
void * convert_swap4_frame_thread(void *cc_params)
Definition: colourspace.c:5918
void * convert_swap3delpre_frame_thread(void *cc_params)
Definition: colourspace.c:6587
void * convert_addpre_frame_thread(void *cc_params)
Definition: colourspace.c:6297
void * convert_swap3addpre_frame_thread(void *cc_params)
Definition: colourspace.c:6068
void * convert_rgb_to_yuyv_frame_thread(void *cc_params)
Definition: colourspace.c:2149
void * convert_yuv888_to_argb_frame_thread(void *cc_params)
Definition: colourspace.c:1658
int in_subspace
Definition: colourspace.h:81
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:3630
void * convert_argb_to_yuvp_frame_thread(void *cc_params)
Definition: colourspace.c:2984
boolean weed_palette_is_float_palette(int pal)
Definition: colourspace.c:1023
int weed_palette_get_pixels_per_macropixel(int pal)
Definition: colourspace.c:1016
void * convert_uyvy_to_rgb_frame_thread(void *cc_params)
Definition: colourspace.c:3399
void * convert_yuv888_to_bgr_frame_thread(void *cc_params)
Definition: colourspace.c:1501
void create_empty_pixel_data(weed_plant_t *layer, boolean black_fill, boolean may_contig)
Definition: colourspace.c:7230
void * convert_swap3delpost_frame_thread(void *cc_params)
Definition: colourspace.c:6370
void * src
Definition: colourspace.h:69
void lives_pixbuf_set_opaque(LiVESPixbuf *pixbuf)
Definition: colourspace.c:10109
boolean convert_layer_palette(weed_plant_t *layer, int outpl, int op_clamping)
Definition: colourspace.c:9823
boolean weed_palette_is_yuv_palette(int pal)
Definition: colourspace.c:978
boolean lives_painter_to_layer(lives_painter_t *cairo, weed_plant_t *layer)
Definition: colourspace.c:11045
lives_painter_t * layer_to_lives_painter(weed_plant_t *layer)
Definition: colourspace.c:10959
int in_sampling
Definition: colourspace.h:83
void * convert_yuv888_to_rgb_frame_thread(void *cc_params)
Definition: colourspace.c:1341
boolean out_alpha
Definition: colourspace.h:78
void * convert_bgr_to_uyvy_frame_thread(void *cc_params)
Definition: colourspace.c:2231
void * convert_yuva8888_to_argb_frame_thread(void *cc_params)
Definition: colourspace.c:1736
void * convert_yuva8888_to_bgra_frame_thread(void *cc_params)
Definition: colourspace.c:1581
void * convert_yuv_planar_to_bgr_frame_thread(void *cc_params)
Definition: colourspace.c:4054
void weed_layer_pixel_data_free(weed_plant_t *layer)
Definition: colourspace.c:11223
void * convert_yuv_planar_to_rgb_frame_thread(void *cc_params)
Definition: colourspace.c:3962
void * convert_rgb_to_yuvp_frame_thread(void *cc_params)
Definition: colourspace.c:2639
uint8_t y0
Definition: colourspace.h:47
uint8_t y1
Definition: colourspace.h:55
void pixel_data_planar_from_membuf(void **pixel_data, void *data, size_t size, int palette)
Definition: colourspace.c:1236
double weed_palette_get_plane_ratio_vertical(int pal, int plane)
Definition: colourspace.c:1049
Definition: colourspace.h:52
void * convert_swap3_frame_thread(void *cc_params)
Definition: colourspace.c:5845
LiVESPixbuf * layer_to_pixbuf(weed_plant_t *layer)
Definition: colourspace.c:9977
Definition: colourspace.h:45
uint8_t u0
Definition: colourspace.h:54
char * weed_palette_get_name_full(int pal, int clamped, int subspace)
Definition: colourspace.c:1174
int vsize
Definition: colourspace.h:72
void letterbox_layer(weed_plant_t *layer, int width, int height, int nwidth, int nheight)
Definition: colourspace.c:10561
boolean resize_layer(weed_plant_t *layer, int width, int height, LiVESInterpType interp, int opal_hint, int oclamp_hint)
Definition: colourspace.c:10299
uint8_t v2
Definition: colourspace.h:63
Definition: colourspace.h:68
const char * weed_yuv_subspace_get_name(int subspace)
Definition: colourspace.c:1166
#define WARN_UNUSED
Definition: main.h:262
void * convert_yuva8888_to_rgba_frame_thread(void *cc_params)
Definition: colourspace.c:1422
void * convert_swap3addpost_frame_thread(void *cc_params)
Definition: colourspace.c:5993
const char * weed_palette_get_name(int pal)
Definition: colourspace.c:1109