LiVES  3.2.0
colourspace.h
Go to the documentation of this file.
1 // colourspace.h
2 // LiVES
3 // (c) G. Finch 2004 - 2020 <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 #ifdef USE_16BIT_PCONV
13 #define USE_EXTEND
14 #endif
15 
16 //#define WEED_ADVANCED_PALETTES
17 
18 #define WEED_LEAF_CLIP "clip"
19 #define WEED_LEAF_FRAME "frame"
20 #define WEED_LEAF_HOST_PIXEL_DATA_CONTIGUOUS "host_contiguous"
21 #define WEED_LEAF_HOST_PIXBUF_SRC "host_pixbuf_src"
22 #define WEED_LEAF_HOST_SURFACE_SRC "host_surface_src"
23 #define WEED_LEAF_PIXEL_BITS "pixel_bits"
24 #define WEED_LEAF_HOST_FLAGS "host_flags"
25 #define WEED_LEAF_RESIZE_THREAD "res_thread"
26 #define WEED_LEAF_PROGSCAN "progscan"
27 
28 #define DEF_SCREEN_GAMMA 1.4 // extra gammm boost
29 
31 #define ALIGN_MIN 4
32 #define ALIGN_DEF 16
33 
34 // rgb / yuv conversion factors ////////////
35 #define FP_BITS 16
36 
37 #ifdef USE_EXTEND
38 #define SCALE_FACTOR 65793.
39 #else
40 #define SCALE_FACTOR (1 << FP_BITS)
41 #endif
42 
43 #define KR_YCBCR 0.2989
44 #define KB_YCBCR 0.114
45 
46 #define KR_I240 0.212
47 #define KB_I240 0.087
48 
49 #define KR_BT709 0.2126
50 #define KB_BT709 0.0722
51 
52 #define KR_BT2020 0.2627
53 #define KB_BT2020 0.0593
54 
55 #define YUV_CLAMP_MIN 16.
56 #define YUV_CLAMP_MINI 16
57 
58 #define Y_CLAMP_MAX 235.
59 #define Y_CLAMP_MAXI 235
60 
61 #define UV_CLAMP_MAX 240.
62 #define UV_CLAMP_MAXI 240
63 
64 #define CLAMP_FACTOR_Y ((Y_CLAMP_MAX-YUV_CLAMP_MIN)/255.) // unclamped -> clamped
65 #define CLAMP_FACTOR_UV ((UV_CLAMP_MAX-YUV_CLAMP_MIN)/255.) // unclamped -> clamped
66 
67 #define UV_BIAS 128.
68 
69 #define MAX_THREADS 65536
70 
71 typedef weed_plant_t weed_layer_t;
72 
74 
75 typedef struct {
76  float offs, lin, thresh, pf;
78 
79 typedef struct {
80  uint8_t u0;
81  uint8_t y0;
82  uint8_t v0;
83  uint8_t y1;
85 
86 typedef struct {
87  uint8_t y0;
88  uint8_t u0;
89  uint8_t y1;
90  uint8_t v0;
92 
93 typedef struct {
94  uint8_t u2;
95  uint8_t y0;
96  uint8_t y1;
97  uint8_t v2;
98  uint8_t y2;
99  uint8_t y3;
101 
102 typedef struct {
103  void *src;
104  void *srcp[4];
105  size_t hsize;
106  size_t vsize;
107  boolean is_bottom;
108  size_t psize;
109  size_t xoffset;
110  int irowstrides[4];
111  int orowstrides[4];
112  void *dest;
113  void *destp[4];
114  boolean in_alpha;
115  boolean out_alpha;
116  boolean in_clamping;
117  boolean out_clamping;
122  boolean alpha_first;
123  boolean is_422;
124  void *lut;
127 
128 #ifdef USE_SWSCALE
129 #include <libswscale/swscale.h>
130 
131 typedef struct {
132  weed_layer_t *layer;
133  int thread_id;
134  int iheight;
135  int width;
136  double file_gamma;
137  struct SwsContext *swscale;
138  const uint8_t *ipd[4];
139  const uint8_t *opd[4];
140  const int *irw;
141  const int *orw;
142  int ret;
143 } lives_sw_params;
144 
145 #endif
146 
147 void rgb2hsv(uint8_t r, uint8_t g, uint8_t b, double *h, double *s, double *v);
148 void hsv2rgb(double h, double s, double v, uint8_t *r, uint8_t *g, uint8_t *b);
149 boolean pick_nice_colour(uint8_t r0, uint8_t g0, uint8_t b0, uint8_t *r1, uint8_t *g1, uint8_t *b1,
150  double max, double lmin, double lmax);
151 
152 double cdist94(uint8_t r0, uint8_t g0, uint8_t b0, uint8_t r1, uint8_t g1, uint8_t b1);
153 
154 #ifdef WEED_ADVANCED_PALETTES
155 #define LIVES_VCHAN_grey 2048
156 #define LIVES_VCHAN_mono_b 2049
157 #define LIVES_VCHAN_mono_w 2050
158 
159 #define LIVES_VCHAN_cc 3000
160 #define LIVES_VCHAN_mm 3001
161 #define LIVES_VCHAN_yy 3002
162 #define LIVES_VCHAN_kk 3003
163 
164 #define LIVES_VCHAN_xxx 4000
165 #define LIVES_VCHAN_yyy 4001
166 #define LIVES_VCHAN_zzz 4002
167 
168 #define LIVES_VCHAN_hh 4000
169 #define LIVES_VCHAN_ss 4001
170 #define LIVES_VCHAN_vv 4002
171 
173 #define LIVES_PALETTE_ABGR32 6
174 #define LIVES_PALETTE_YUV121010 8211
175 #define LIVES_PALETTE_RGB48 9001
176 #define LIVES_PALETTE_RGBA64 9003
177 #define LIVES_PALETTE_YUVA420P 9512
178 #define LIVES_PALETTE_YVU422P 9522
179 #define LIVES_PALETTE_AYUV8888 9545
180 #define LIVES_PALETTE_YUVFLOAT 9564
181 #define LIVES_PALETTE_YUVAFLOAT 9565
182 
183 const weed_macropixel_t *get_advanced_palette(int weed_palette);
184 boolean weed_palette_is_valid(int pal);
185 int get_simple_palette(weed_macropixel_t *mpx);
186 size_t pixel_size(int pal);
189 int weed_palette_get_nplanes(int pal);
190 boolean weed_palette_is_rgb(int pal);
191 boolean weed_palette_is_yuv(int pal);
192 boolean weed_palette_is_alpha(int pal);
193 boolean weed_palette_has_alpha(int pal);
194 boolean weed_palette_is_float(int pal);
195 double weed_palette_get_plane_ratio_horizontal(int pal, int plane);
196 double weed_palette_get_plane_ratio_vertical(int pal, int plane);
197 
198 int weed_palette_get_alpha_plane(int pal);
199 int weed_palette_get_alpha_offset(int pal);
200 boolean weed_palette_red_first(int pal);
201 boolean weed_palettes_rbswapped(int pal0, int pal1);
202 boolean weed_palette_has_alpha_first(int pal);
203 boolean weed_palette_has_alpha_last(int pal);
204 #endif
205 
206 int32_t round_special(int32_t val);
207 
208 void init_conversions(int intent);
209 
210 void init_colour_engine(void);
211 
212 double get_luma8(uint8_t r, uint8_t g, uint8_t b);
213 double get_luma16(uint16_t r, uint16_t g, uint16_t b);
214 
216 
217 #define WEED_PLANT_LAYER 128
218 
219 #define WEED_LEAF_LAYER_TYPE "layer_type"
220 #define WEED_LAYER_TYPE_NONE 0
221 #define WEED_LAYER_TYPE_VIDEO 1
222 #define WEED_LAYER_TYPE_AUDIO 2
223 
224 #define WEED_IS_LAYER(plant) (weed_plant_get_type(plant) == WEED_PLANT_LAYER)
225 
226 // create / destroy / copy layers
227 weed_layer_t *weed_layer_new(int layer_type);
228 weed_layer_t *create_blank_layer(weed_layer_t *, const char *image_ext, int width, int height, int target_palette);
229 weed_layer_t *weed_layer_create(int width, int height, int *rowstrides, int current_palette);
230 weed_layer_t *weed_layer_create_full(int width, int height, int *rowstrides, int current_palette,
231  int YUV_clamping, int YUV_sampling, int YUV_subspace, int gamma_type);
236 
237 // lives specific
239 
240 void lives_layer_set_clip(weed_layer_t *, int clip);
242 
245 
246 // pixel_data
249 boolean create_empty_pixel_data(weed_layer_t *, boolean black_fill, boolean may_contig);
250 void pixel_data_planar_from_membuf(void **pixel_data, void *data, size_t size, int palette, boolean dest_contig);
252 
253 #define WEED_GAMMA_MONITOR 1024
254 #define WEED_GAMMA_FILE 1025
255 #define WEED_GAMMA_VARIANT 2048
256 #define WEED_LAYER_ALPHA_PREMULT 1
257 
259 #define LIVES_LAYER_LOAD_IF_NEEDS_RESIZE 1
260 #define LIVES_LAYER_GET_SIZE_ONLY 2
261 
262 // private flags bitfield
263 #define LIVES_LAYER_HAS_SIZE_NOW (1 << 16)
264 
265 // layer transformation functions
266 void alpha_unpremult(weed_layer_t *, boolean un);
267 boolean copy_pixel_data(weed_layer_t *dst, weed_layer_t *src_or_null, size_t alignment);
268 boolean gamma_convert_layer(int gamma_type, weed_layer_t *);
269 boolean gamma_convert_layer_variant(double file_gamma, int tgamma, weed_layer_t *);
270 boolean gamma_convert_sub_layer(int gamma_type, double fileg, weed_layer_t *, int x, int y,
271  int width, int height, boolean may_thread);
272 boolean convert_layer_palette(weed_layer_t *, int outpl, int op_clamping);
273 boolean convert_layer_palette_with_sampling(weed_layer_t *, int outpl, int out_sampling);
274 boolean convert_layer_palette_full(weed_layer_t *, int outpl, int oclamping, int osampling, int osubspace, int tgamma);
276 boolean consider_swapping(int *inpal, int *outpal);
277 
279 boolean resize_layer(weed_layer_t *, int width, int height, LiVESInterpType interp, int opal_hint, int oclamp_hint);
280 boolean letterbox_layer(weed_layer_t *, int nwidth, int nheight, int width, int height, LiVESInterpType interp, int tpal,
281  int tclamp);
283 
284 void gamma_conv_params(int gamma_type, weed_layer_t *inst, boolean is_in);
285 
286 // palette information functions
287 boolean weed_palette_is_lower_quality(int p1, int p2);
288 boolean rowstrides_differ(int n1, int *n1_array, int n2, int *n2_array);
289 
290 // lives_painter (cairo) functions
291 boolean weed_palette_is_painter_palette(int pal);
292 lives_painter_t *layer_to_lives_painter(weed_layer_t *);
293 boolean lives_painter_to_layer(lives_painter_t *cairo, weed_layer_t *);
294 
295 // pixbuf functions
296 #define weed_palette_is_pixbuf_palette(pal) ((pal == WEED_PALETTE_RGB24 || pal == WEED_PALETTE_RGBA32) ? TRUE : FALSE)
297 boolean lives_pixbuf_is_all_black(LiVESPixbuf *pixbuf);
298 void lives_pixbuf_set_opaque(LiVESPixbuf *pixbuf);
299 
300 LiVESPixbuf *layer_to_pixbuf(weed_layer_t *, boolean realpalette, boolean fordisp);
301 boolean pixbuf_to_layer(weed_layer_t *, LiVESPixbuf *) WARN_UNUSED;
302 
303 // layer info
307 int weed_layer_get_palette_yuv(weed_layer_t *, int *clamping, int *sampling, int *subspace);
312 void **weed_layer_get_pixel_data(weed_layer_t *, int *nplanes);
313 float **weed_layer_get_audio_data(weed_layer_t *, int *naudchans);
317 int *weed_layer_get_rowstrides(weed_layer_t *, int *nplanes);
325 
326 // weed_layer_get_rowstride
327 
331 weed_layer_t *weed_layer_set_palette_yuv(weed_layer_t *, int palette, int clamping, int sampling, int subspace);
336 
340 weed_layer_t *weed_layer_set_size(weed_layer_t *, int width, int height);
341 weed_layer_t *weed_layer_set_rowstrides(weed_layer_t *, int *rowstrides, int nplanes);
343 
345 
346 weed_layer_t *weed_layer_set_pixel_data(weed_layer_t *, void **pixel_data, int nplanes);
349 weed_layer_t *weed_layer_set_audio_data(weed_layer_t *, float **data, int arate, int naudchans, weed_size_t nsamps);
350 
352 int resize_all(int fileno, int width, int height, lives_img_type_t imgtype, boolean do_back, int *nbad, int *nmiss);
353 
354 #endif
init_conversions
void init_conversions(int intent)
Definition: colourspace.c:1804
pick_nice_colour
boolean pick_nice_colour(uint8_t r0, uint8_t g0, uint8_t b0, uint8_t *r1, uint8_t *g1, uint8_t *b1, double max, double lmin, double lmax)
Definition: colourspace.c:1142
weed_layer_get_gamma
int weed_layer_get_gamma(weed_layer_t *)
Definition: colourspace.c:12002
uyvy_macropixel::u0
uint8_t u0
Definition: colourspace.h:80
yuyv_macropixel
Definition: colourspace.h:86
lives_img_type_t
lives_img_type_t
Definition: main.h:774
weed_layer_is_audio
int weed_layer_is_audio(weed_layer_t *)
Definition: colourspace.c:9675
uyvy_macropixel::v0
uint8_t v0
Definition: colourspace.h:82
weed_layer_set_palette
weed_layer_t * weed_layer_set_palette(weed_layer_t *, int palette)
functions all return the input layer for convenience; no checking for valid values is done if layer i...
Definition: colourspace.c:9777
gamma_convert_layer
boolean gamma_convert_layer(int gamma_type, weed_layer_t *)
Definition: colourspace.c:12195
weed_layer_get_audio_rate
int weed_layer_get_audio_rate(weed_layer_t *layer)
Definition: colourspace.c:13992
gamma_convert_layer_variant
boolean gamma_convert_layer_variant(double file_gamma, int tgamma, weed_layer_t *)
Definition: colourspace.c:12202
weed_layer_set_pixel_data
weed_layer_t * weed_layer_set_pixel_data(weed_layer_t *, void **pixel_data, int nplanes)
Definition: colourspace.c:9739
layer_to_lives_painter
lives_painter_t * layer_to_lives_painter(weed_layer_t *)
convert a weed layer to lives_painter (a.k.a cairo)
Definition: colourspace.c:13473
lives_pixbuf_is_all_black
boolean lives_pixbuf_is_all_black(LiVESPixbuf *pixbuf)
Definition: colourspace.c:2193
get_simple_palette
LIVES_GLOBAL_INLINE int get_simple_palette(weed_macropixel_t *mpx)
Definition: colourspace.c:1378
weed_layer_set_rowstride
weed_layer_t * weed_layer_set_rowstride(weed_layer_t *, int rowstride)
Definition: colourspace.c:9770
lives_cc_params::out_subspace
int out_subspace
Definition: colourspace.h:119
lives_cc_params::out_clamping
boolean out_clamping
Definition: colourspace.h:117
weed_layer_get_flags
int weed_layer_get_flags(weed_layer_t *)
Definition: colourspace.c:9699
yuv411_macropixel::y1
uint8_t y1
Definition: colourspace.h:96
lives_layer_get_frame
frames_t lives_layer_get_frame(weed_layer_t *)
Definition: colourspace.c:9711
lives_layer_new_for_frame
weed_layer_t * lives_layer_new_for_frame(int clip, frames_t frame)
Definition: colourspace.c:9833
cdist94
double cdist94(uint8_t r0, uint8_t g0, uint8_t b0, uint8_t r1, uint8_t g1, uint8_t b1)
Definition: colourspace.c:1075
weed_layer_get_rowstrides
int * weed_layer_get_rowstrides(weed_layer_t *, int *nplanes)
Definition: colourspace.c:13928
create_blank_layer
weed_layer_t * create_blank_layer(weed_layer_t *, const char *image_ext, int width, int height, int target_palette)
fills layer with default values.
Definition: colourspace.c:9611
weed_palette_get_nplanes
LIVES_GLOBAL_INLINE int weed_palette_get_nplanes(int pal)
Definition: colourspace.c:1417
weed_palette_get_alpha_offset
LIVES_GLOBAL_INLINE int weed_palette_get_alpha_offset(int pal)
Definition: colourspace.c:1510
lives_cc_params::dest
void * dest
Definition: colourspace.h:112
weed_layer_get_palette_yuv
int weed_layer_get_palette_yuv(weed_layer_t *, int *clamping, int *sampling, int *subspace)
Definition: colourspace.c:13983
weed_layer_get_pixel_data
void ** weed_layer_get_pixel_data(weed_layer_t *, int *nplanes)
Definition: colourspace.c:13908
pixel_size
LIVES_GLOBAL_INLINE size_t pixel_size(int pal)
Definition: colourspace.c:1391
yuv411_macropixel::y3
uint8_t y3
Definition: colourspace.h:99
weed_layer_set_pixel_data_packed
weed_layer_t * weed_layer_set_pixel_data_packed(weed_layer_t *, void *pixel_data)
Definition: colourspace.c:9746
weed_layer_set_size
weed_layer_t * weed_layer_set_size(weed_layer_t *, int width, int height)
Definition: colourspace.c:9731
weed_layer_is_video
int weed_layer_is_video(weed_layer_t *)
Definition: colourspace.c:9669
weed_palette_is_alpha
LIVES_GLOBAL_INLINE boolean weed_palette_is_alpha(int pal)
Definition: colourspace.c:1427
weed_layer_create
weed_layer_t * weed_layer_create(int width, int height, int *rowstrides, int current_palette)
create a layer, setting the most important properties
Definition: colourspace.c:13708
lives_cc_params::is_bottom
boolean is_bottom
Definition: colourspace.h:107
uyvy_macropixel
Definition: colourspace.h:79
uyvy_macropixel::y1
uint8_t y1
Definition: colourspace.h:83
weed_layer_set_audio_data
weed_layer_t * weed_layer_set_audio_data(weed_layer_t *, float **data, int arate, int naudchans, weed_size_t nsamps)
Definition: colourspace.c:9681
weed_layer_set_yuv_sampling
weed_layer_t * weed_layer_set_yuv_sampling(weed_layer_t *, int sampling)
Definition: colourspace.c:9798
lives_cc_params::alpha_first
boolean alpha_first
Definition: colourspace.h:122
lives_painter_to_layer
boolean lives_painter_to_layer(lives_painter_t *cairo, weed_layer_t *)
convert a lives_painter_t (a.k.a) cairo_t to a weed layer
Definition: colourspace.c:13549
layer_to_pixbuf
LiVESPixbuf * layer_to_pixbuf(weed_layer_t *, boolean realpalette, boolean fordisp)
Definition: colourspace.c:12210
lives_layer_set_frame
void lives_layer_set_frame(weed_layer_t *, frames_t frame)
Definition: colourspace.c:9822
weed_palette_get_alpha_plane
LIVES_GLOBAL_INLINE int weed_palette_get_alpha_plane(int pal)
Definition: colourspace.c:1505
weed_palette_red_first
LIVES_GLOBAL_INLINE boolean weed_palette_red_first(int pal)
Definition: colourspace.c:1433
gamma_convert_sub_layer
boolean gamma_convert_sub_layer(int gamma_type, double fileg, weed_layer_t *, int x, int y, int width, int height, boolean may_thread)
alter the transfer function of a Weed layer, from current value to gamma_type
Definition: colourspace.c:12124
weed_layer_free
weed_layer_t * weed_layer_free(weed_layer_t *)
frees pixel_data for a layer, then the layer itself
Definition: colourspace.c:13883
convert_layer_palette_with_sampling
boolean convert_layer_palette_with_sampling(weed_layer_t *, int outpl, int out_sampling)
lives_cc_params::in_subspace
int in_subspace
Definition: colourspace.h:118
yuv411_macropixel::v2
uint8_t v2
Definition: colourspace.h:97
lives_cc_params::vsize
size_t vsize
Definition: colourspace.h:106
gamma_const_t::thresh
float thresh
Definition: colourspace.h:76
lives_cc_params::is_422
boolean is_422
Definition: colourspace.h:123
weed_layer_set_yuv_subspace
weed_layer_t * weed_layer_set_yuv_subspace(weed_layer_t *, int subspace)
Definition: colourspace.c:9805
lives_pixbuf_set_opaque
void lives_pixbuf_set_opaque(LiVESPixbuf *pixbuf)
Definition: colourspace.c:12362
yuv411_macropixel::y0
uint8_t y0
Definition: colourspace.h:95
weed_palette_is_yuv
LIVES_GLOBAL_INLINE boolean weed_palette_is_yuv(int pal)
Definition: colourspace.c:1457
weed_layer_set_width
weed_layer_t * weed_layer_set_width(weed_layer_t *, int width)
width in macropixels of the layer palette
Definition: colourspace.c:9717
weed_palette_is_lower_quality
boolean weed_palette_is_lower_quality(int p1, int p2)
Definition: colourspace.c:2143
yuyv_macropixel::y0
uint8_t y0
Definition: colourspace.h:87
lives_cc_params::lut
void * lut
Definition: colourspace.h:124
init_colour_engine
void init_colour_engine(void)
Definition: colourspace.c:1661
weed_palette_is_valid
LIVES_GLOBAL_INLINE boolean weed_palette_is_valid(int pal)
Definition: colourspace.c:1374
lives_cc_params::thread_id
int thread_id
Definition: colourspace.h:125
weed_palette_is_rgb
LIVES_GLOBAL_INLINE boolean weed_palette_is_rgb(int pal)
Definition: colourspace.c:1448
gamma_const_t
Definition: colourspace.h:75
get_advanced_palette
LIVES_GLOBAL_INLINE const weed_macropixel_t * get_advanced_palette(int weed_palette)
Definition: colourspace.c:1368
weed_palette_is_float
LIVES_GLOBAL_INLINE boolean weed_palette_is_float(int pal)
Definition: colourspace.c:1475
lives_cc_params::in_sampling
int in_sampling
Definition: colourspace.h:120
weed_layer_get_width_pixels
int weed_layer_get_width_pixels(weed_layer_t *)
Definition: colourspace.c:13947
resize_all
int resize_all(int fileno, int width, int height, lives_img_type_t imgtype, boolean do_back, int *nbad, int *nmiss)
utility funcs for GUI
Definition: colourspace.c:13622
weed_layer_copy
weed_layer_t * weed_layer_copy(weed_layer_t *dlayer, weed_layer_t *slayer)
copy source layer slayer to dest layer dlayer
Definition: colourspace.c:13739
yuv411_macropixel::u2
uint8_t u2
Definition: colourspace.h:94
lives_cc_params::out_sampling
int out_sampling
Definition: colourspace.h:121
weed_layer_set_rowstrides
weed_layer_t * weed_layer_set_rowstrides(weed_layer_t *, int *rowstrides, int nplanes)
Definition: colourspace.c:9763
get_luma8
double get_luma8(uint8_t r, uint8_t g, uint8_t b)
Definition: colourspace.c:549
weed_layer_get_naudchans
int weed_layer_get_naudchans(weed_layer_t *layer)
Definition: colourspace.c:13998
weed_layer_set_height
weed_layer_t * weed_layer_set_height(weed_layer_t *, int height)
Definition: colourspace.c:9724
weed_palettes_rbswapped
LIVES_GLOBAL_INLINE boolean weed_palettes_rbswapped(int pal0, int pal1)
Definition: colourspace.c:1444
weed_layer_get_yuv_sampling
int weed_layer_get_yuv_sampling(weed_layer_t *)
Definition: colourspace.c:13965
weed_layer_new
weed_layer_t * weed_layer_new(int layer_type)
Definition: colourspace.c:9655
lives_cc_params::out_alpha
boolean out_alpha
Definition: colourspace.h:115
resize_layer
boolean resize_layer(weed_layer_t *, int width, int height, LiVESInterpType interp, int opal_hint, int oclamp_hint)
widths in PIXELS
Definition: colourspace.c:12537
weed_palette_has_alpha
LIVES_GLOBAL_INLINE boolean weed_palette_has_alpha(int pal)
Definition: colourspace.c:1466
lives_cc_params::src
void * src
Definition: colourspace.h:103
create_empty_pixel_data
boolean create_empty_pixel_data(weed_layer_t *, boolean black_fill, boolean may_contig)
layer should be pre-set with palette, width in MACROPIXELS, and height gamma_type will be set WEED_GA...
Definition: colourspace.c:9058
palette
_palette * palette
interface colour settings
Definition: main.c:101
weed_layer_ref
int weed_layer_ref(weed_layer_t *)
Definition: colourspace.c:13899
weed_layer_get_yuv_subspace
int weed_layer_get_yuv_subspace(weed_layer_t *)
Definition: colourspace.c:13971
convert_layer_palette_full
boolean convert_layer_palette_full(weed_layer_t *, int outpl, int oclamping, int osampling, int osubspace, int tgamma)
convert the palette of a layer
Definition: colourspace.c:10160
weed_layer_pixel_data_free
void weed_layer_pixel_data_free(weed_layer_t *)
free pixel_data from layer
Definition: colourspace.c:13819
weed_layer_set_palette_yuv
weed_layer_t * weed_layer_set_palette_yuv(weed_layer_t *, int palette, int clamping, int sampling, int subspace)
Definition: colourspace.c:9812
hsv2rgb
void hsv2rgb(double h, double s, double v, uint8_t *r, uint8_t *g, uint8_t *b)
Definition: colourspace.c:1113
weed_palette_get_plane_ratio_vertical
LIVES_GLOBAL_INLINE double weed_palette_get_plane_ratio_vertical(int pal, int plane)
Definition: colourspace.c:1488
lives_cc_params::xoffset
size_t xoffset
Definition: colourspace.h:109
weed_palette_has_alpha_last
LIVES_GLOBAL_INLINE boolean weed_palette_has_alpha_last(int pal)
Definition: colourspace.c:1519
lives_cc_params::in_clamping
boolean in_clamping
Definition: colourspace.h:116
weed_layer_t
weed_plant_t weed_layer_t
Definition: colourspace.h:71
lives_layer_set_opaque
void lives_layer_set_opaque(weed_layer_t *)
Definition: colourspace.c:12385
pixbuf_to_layer
boolean pixbuf_to_layer(weed_layer_t *, LiVESPixbuf *) WARN_UNUSED
turn a (Gdk)Pixbuf into a Weed layer
Definition: colourspace.c:13347
copy_pixel_data
boolean copy_pixel_data(weed_layer_t *dst, weed_layer_t *src_or_null, size_t alignment)
Definition: colourspace.c:9843
alpha_unpremult
void alpha_unpremult(weed_layer_t *, boolean un)
(un)premultply alpha using a lookup table
Definition: colourspace.c:9923
weed_layer_get_audio_data
float ** weed_layer_get_audio_data(weed_layer_t *, int *naudchans)
Definition: colourspace.c:13921
lives_cc_params::hsize
size_t hsize
Definition: colourspace.h:105
WARN_UNUSED
#define WARN_UNUSED
Definition: main.h:77
weed_palette_has_alpha_first
LIVES_GLOBAL_INLINE boolean weed_palette_has_alpha_first(int pal)
Definition: colourspace.c:1515
letterbox_layer
boolean letterbox_layer(weed_layer_t *, int nwidth, int nheight, int width, int height, LiVESInterpType interp, int tpal, int tclamp)
Definition: colourspace.c:13015
convert_layer_palette
boolean convert_layer_palette(weed_layer_t *, int outpl, int op_clamping)
Definition: colourspace.c:11945
rowstrides_differ
boolean rowstrides_differ(int n1, int *n1_array, int n2, int *n2_array)
Definition: colourspace.c:9647
compact_rowstrides
boolean compact_rowstrides(weed_layer_t *)
Definition: colourspace.c:12422
lives_layer_set_clip
void lives_layer_set_clip(weed_layer_t *, int clip)
Definition: colourspace.c:9828
gamma_conv_params
void gamma_conv_params(int gamma_type, weed_layer_t *inst, boolean is_in)
Definition: colourspace.c:12019
weed_palette_is_painter_palette
boolean weed_palette_is_painter_palette(int pal)
Definition: colourspace.c:2130
weed_layer_get_yuv_clamping
int weed_layer_get_yuv_clamping(weed_layer_t *)
Definition: colourspace.c:13959
weed_layer_get_height
int weed_layer_get_height(weed_layer_t *)
Definition: colourspace.c:13953
frames_t
int frames_t
Definition: main.h:99
weed_layer_unref
int weed_layer_unref(weed_layer_t *)
Definition: colourspace.c:13888
weed_layer_nullify_pixel_data
weed_layer_t * weed_layer_nullify_pixel_data(weed_layer_t *)
Definition: colourspace.c:9753
weed_palette_get_plane_ratio_horizontal
LIVES_GLOBAL_INLINE double weed_palette_get_plane_ratio_horizontal(int pal, int plane)
Definition: colourspace.c:1480
get_luma16
double get_luma16(uint16_t r, uint16_t g, uint16_t b)
Definition: colourspace.c:557
yuv411_macropixel::y2
uint8_t y2
Definition: colourspace.h:98
consider_swapping
boolean consider_swapping(int *inpal, int *outpal)
look for shortcuts in palette conversions instead of converting e.g RGB -> BGRA, we may be able to pr...
Definition: colourspace.c:13427
weed_layer_set_yuv_clamping
weed_layer_t * weed_layer_set_yuv_clamping(weed_layer_t *, int clamping)
Definition: colourspace.c:9791
uyvy_macropixel::y0
uint8_t y0
Definition: colourspace.h:81
weed_layer_get_palette
int weed_layer_get_palette(weed_layer_t *)
Definition: colourspace.c:13977
weed_layer_get_audio_length
int weed_layer_get_audio_length(weed_layer_t *layer)
Definition: colourspace.c:14004
pixel_data_planar_from_membuf
void pixel_data_planar_from_membuf(void **pixel_data, void *data, size_t size, int palette, boolean dest_contig)
Definition: colourspace.c:2236
round_special
int32_t round_special(int32_t val)
Definition: colourspace.c:544
lives_cc_params::psize
size_t psize
Definition: colourspace.h:108
weed_layer_get_width
int weed_layer_get_width(weed_layer_t *)
Definition: colourspace.c:13941
weed_layer_get_rowstride
int weed_layer_get_rowstride(weed_layer_t *)
for packed palettes
Definition: colourspace.c:13935
lives_cc_params::in_alpha
boolean in_alpha
Definition: colourspace.h:114
yuyv_macropixel::u0
uint8_t u0
Definition: colourspace.h:88
yuyv_macropixel::y1
uint8_t y1
Definition: colourspace.h:89
weed_layer_get_pixel_data_packed
uint8_t * weed_layer_get_pixel_data_packed(weed_layer_t *)
Definition: colourspace.c:13915
weed_palette_get_pixels_per_macropixel
LIVES_GLOBAL_INLINE int weed_palette_get_pixels_per_macropixel(int pal)
Definition: colourspace.c:1403
yuyv_macropixel::v0
uint8_t v0
Definition: colourspace.h:90
weed_palette_get_bits_per_macropixel
LIVES_GLOBAL_INLINE int weed_palette_get_bits_per_macropixel(int pal)
Definition: colourspace.c:1411
rgb2hsv
void rgb2hsv(uint8_t r, uint8_t g, uint8_t b, double *h, double *s, double *v)
Definition: colourspace.c:1090
lives_layer_get_clip
int lives_layer_get_clip(weed_layer_t *)
Definition: colourspace.c:9705
weed_layer_create_full
weed_layer_t * weed_layer_create_full(int width, int height, int *rowstrides, int current_palette, int YUV_clamping, int YUV_sampling, int YUV_subspace, int gamma_type)
Definition: colourspace.c:13722
weed_layer_set_gamma
weed_layer_t * weed_layer_set_gamma(weed_layer_t *, int gamma_type)
Definition: colourspace.c:9784
lives_cc_params
Definition: colourspace.h:102
weed_layer_set_flags
weed_layer_t * weed_layer_set_flags(weed_layer_t *, int flags)
Definition: colourspace.c:9692
yuv411_macropixel
Definition: colourspace.h:93