Skip to content

Commit aca1596

Browse files
committed
Disable YCbCr raw data encoding
1 parent d5a3ccd commit aca1596

File tree

3 files changed

+29
-27
lines changed

3 files changed

+29
-27
lines changed

jpegli_wazero.go

+15-17
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import (
1111
"io"
1212
"os"
1313
"sync"
14-
"unsafe"
1514

1615
"github.com/tetratelabs/wazero"
1716
"github.com/tetratelabs/wazero/imports/wasi_snapshot_preview1"
@@ -134,7 +133,7 @@ func decode(r io.Reader, configOnly, fancyUpsampling, blockSmoothing, arithCode
134133
cfg.Width = int(width)
135134
cfg.Height = int(height)
136135

137-
var w, cw int
136+
var w, h, cw, ch int
138137
var size, i0, i1, i2 int
139138

140139
switch colorspace {
@@ -146,11 +145,10 @@ func decode(r io.Reader, configOnly, fancyUpsampling, blockSmoothing, arithCode
146145
size = cfg.Width * cfg.Height * 4
147146
case jcsYCbCr:
148147
cfg.ColorModel = color.YCbCrModel
149-
w, _, cw, _ = yCbCrSize(image.Rect(0, 0, cfg.Width, cfg.Height), image.YCbCrSubsampleRatio(chroma))
150-
aw, ah, acw, ach := yCbCrSize(image.Rect(0, 0, alignm(cfg.Width), alignm(cfg.Height)), image.YCbCrSubsampleRatio(chroma))
151-
i0 = aw*ah + 0*acw*ach
152-
i1 = aw*ah + 1*acw*ach
153-
i2 = aw*ah + 2*acw*ach
148+
w, h, cw, ch = yCbCrSize(image.Rect(0, 0, alignm(cfg.Width), alignm(cfg.Height)), image.YCbCrSubsampleRatio(chroma))
149+
i0 = w*h + 0*cw*ch
150+
i1 = w*h + 1*cw*ch
151+
i2 = w*h + 2*cw*ch
154152
size = i2
155153
case jcsCMYK, jcsYCCK:
156154
cfg.ColorModel = color.CMYKModel
@@ -253,16 +251,16 @@ func encode(w io.Writer, m image.Image, quality, chromaSubsampling, progressiveL
253251
case *image.CMYK:
254252
data = img.Pix
255253
colorspace = jcsCMYK
256-
case *image.YCbCr:
257-
length := len(img.Y) + len(img.Cb) + len(img.Cr)
258-
var b = struct {
259-
addr *uint8
260-
len int
261-
cap int
262-
}{&img.Y[0], length, length}
263-
data = *(*[]byte)(unsafe.Pointer(&b))
264-
colorspace = jcsYCbCr
265-
chroma = int(img.SubsampleRatio)
254+
//case *image.YCbCr:
255+
// length := len(img.Y) + len(img.Cb) + len(img.Cr)
256+
// var b = struct {
257+
// addr *uint8
258+
// len int
259+
// cap int
260+
// }{&img.Y[0], length, length}
261+
// data = *(*[]byte)(unsafe.Pointer(&b))
262+
// colorspace = jcsYCbCr
263+
// chroma = int(img.SubsampleRatio)
266264
default:
267265
i := imageToRGBA(img)
268266
data = i.Pix

lib/jpegli.c

+14-10
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
#include "jpegli/encode.h"
77

88
#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)))
1010

1111
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,
1212
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,
301301
case JCS_GRAYSCALE:
302302
cinfo.input_components = 1;
303303
cinfo.in_color_space = JCS_GRAYSCALE;
304+
304305
jpegli_set_defaults(&cinfo);
306+
jpegli_set_colorspace(&cinfo, JCS_GRAYSCALE);
305307

306308
cinfo.raw_data_in = 1;
307309
cinfo.comp_info[0].h_samp_factor = 1, cinfo.comp_info[0].v_samp_factor = 1;
308310
break;
309311
case JCS_YCbCr:
310312
cinfo.input_components = 3;
311313
cinfo.in_color_space = JCS_YCbCr;
314+
312315
jpegli_set_defaults(&cinfo);
313-
316+
jpegli_set_colorspace(&cinfo, JCS_YCbCr);
317+
314318
cinfo.raw_data_in = 1;
319+
315320
switch(chroma) {
316321
case YCbCr444:
317322
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,
338343
case JCS_RGB:
339344
cinfo.input_components = 4;
340345
cinfo.in_color_space = JCS_EXT_RGBA;
346+
341347
jpegli_set_defaults(&cinfo);
348+
jpegli_set_colorspace(&cinfo, JCS_YCbCr);
342349

343350
switch(chroma) {
344351
case YCbCr444:
@@ -366,7 +373,9 @@ uint8_t* encode(uint8_t *in, int width, int height, int colorspace, int chroma,
366373
case JCS_CMYK:
367374
cinfo.input_components = 4;
368375
cinfo.in_color_space = JCS_CMYK;
376+
369377
jpegli_set_defaults(&cinfo);
378+
jpegli_set_colorspace(&cinfo, JCS_CMYK);
370379
break;
371380
default:
372381
jpegli_destroy_compress(&cinfo);
@@ -402,28 +411,23 @@ uint8_t* encode(uint8_t *in, int width, int height, int colorspace, int chroma,
402411
cb_rows = malloc(sizeof(JSAMPROW) * c_h);
403412
cr_rows = malloc(sizeof(JSAMPROW) * c_h);
404413

414+
w = ALIGNM(width);
415+
h = ALIGNM(height);
416+
405417
switch(chroma) {
406418
case YCbCr444:
407-
w = ALIGNM(cinfo.comp_info[Y].downsampled_width);
408-
h = ALIGNM(cinfo.comp_info[Y].downsampled_height);
409419
cw = w;
410420
ch = h;
411421
break;
412422
case YCbCr440:
413-
w = ALIGNM(cinfo.comp_info[Y].downsampled_width);
414-
h = ALIGNM(cinfo.comp_info[Y].downsampled_height);
415423
cw = w;
416424
ch = (h+1)/2;
417425
break;
418426
case YCbCr422:
419-
w = ALIGNM(cinfo.comp_info[Y].downsampled_width);
420-
h = ALIGNM(cinfo.comp_info[Y].downsampled_height);
421427
cw = (w+1)/2;
422428
ch = h;
423429
break;
424430
case YCbCr420:
425-
w = ALIGNM(cinfo.comp_info[Y].downsampled_width);
426-
h = ALIGNM(cinfo.comp_info[Y].downsampled_height);
427431
cw = (w+1)/2;
428432
ch = (h+1)/2;
429433
break;

lib/jpegli.wasm.gz

-18.6 KB
Binary file not shown.

0 commit comments

Comments
 (0)