6
6
#include "jpegli/encode.h"
7
7
8
8
#define ALIGN_SIZE 16
9
- #define ALIGNM (x ) ((((x) + (( ALIGN_SIZE) - 1)) / ( ALIGN_SIZE)) * (ALIGN_SIZE ))
9
+ #define ALIGNM (x ) ((x + ALIGN_SIZE - 1) & (~( ALIGN_SIZE - 1) ))
10
10
11
11
int decode (uint8_t * jpeg_in , int jpeg_in_size , int config_only , uint32_t * width , uint32_t * height , uint32_t * colorspace , uint32_t * chroma , uint8_t * out ,
12
12
int fancy_upsampling , int block_smoothing , int arith_code , int dct_method , int tw , int th );
@@ -301,17 +301,22 @@ uint8_t* encode(uint8_t *in, int width, int height, int colorspace, int chroma,
301
301
case JCS_GRAYSCALE :
302
302
cinfo .input_components = 1 ;
303
303
cinfo .in_color_space = JCS_GRAYSCALE ;
304
+
304
305
jpegli_set_defaults (& cinfo );
306
+ jpegli_set_colorspace (& cinfo , JCS_GRAYSCALE );
305
307
306
308
cinfo .raw_data_in = 1 ;
307
309
cinfo .comp_info [0 ].h_samp_factor = 1 , cinfo .comp_info [0 ].v_samp_factor = 1 ;
308
310
break ;
309
311
case JCS_YCbCr :
310
312
cinfo .input_components = 3 ;
311
313
cinfo .in_color_space = JCS_YCbCr ;
314
+
312
315
jpegli_set_defaults (& cinfo );
313
-
316
+ jpegli_set_colorspace (& cinfo , JCS_YCbCr );
317
+
314
318
cinfo .raw_data_in = 1 ;
319
+
315
320
switch (chroma ) {
316
321
case YCbCr444 :
317
322
cinfo .comp_info [Y ].h_samp_factor = 1 , cinfo .comp_info [Y ].v_samp_factor = 1 ;
@@ -338,7 +343,9 @@ uint8_t* encode(uint8_t *in, int width, int height, int colorspace, int chroma,
338
343
case JCS_RGB :
339
344
cinfo .input_components = 4 ;
340
345
cinfo .in_color_space = JCS_EXT_RGBA ;
346
+
341
347
jpegli_set_defaults (& cinfo );
348
+ jpegli_set_colorspace (& cinfo , JCS_YCbCr );
342
349
343
350
switch (chroma ) {
344
351
case YCbCr444 :
@@ -366,7 +373,9 @@ uint8_t* encode(uint8_t *in, int width, int height, int colorspace, int chroma,
366
373
case JCS_CMYK :
367
374
cinfo .input_components = 4 ;
368
375
cinfo .in_color_space = JCS_CMYK ;
376
+
369
377
jpegli_set_defaults (& cinfo );
378
+ jpegli_set_colorspace (& cinfo , JCS_CMYK );
370
379
break ;
371
380
default :
372
381
jpegli_destroy_compress (& cinfo );
@@ -402,28 +411,23 @@ uint8_t* encode(uint8_t *in, int width, int height, int colorspace, int chroma,
402
411
cb_rows = malloc (sizeof (JSAMPROW ) * c_h );
403
412
cr_rows = malloc (sizeof (JSAMPROW ) * c_h );
404
413
414
+ w = ALIGNM (width );
415
+ h = ALIGNM (height );
416
+
405
417
switch (chroma ) {
406
418
case YCbCr444 :
407
- w = ALIGNM (cinfo .comp_info [Y ].downsampled_width );
408
- h = ALIGNM (cinfo .comp_info [Y ].downsampled_height );
409
419
cw = w ;
410
420
ch = h ;
411
421
break ;
412
422
case YCbCr440 :
413
- w = ALIGNM (cinfo .comp_info [Y ].downsampled_width );
414
- h = ALIGNM (cinfo .comp_info [Y ].downsampled_height );
415
423
cw = w ;
416
424
ch = (h + 1 )/2 ;
417
425
break ;
418
426
case YCbCr422 :
419
- w = ALIGNM (cinfo .comp_info [Y ].downsampled_width );
420
- h = ALIGNM (cinfo .comp_info [Y ].downsampled_height );
421
427
cw = (w + 1 )/2 ;
422
428
ch = h ;
423
429
break ;
424
430
case YCbCr420 :
425
- w = ALIGNM (cinfo .comp_info [Y ].downsampled_width );
426
- h = ALIGNM (cinfo .comp_info [Y ].downsampled_height );
427
431
cw = (w + 1 )/2 ;
428
432
ch = (h + 1 )/2 ;
429
433
break ;
0 commit comments