Lines Matching +full:- +full:workspace
5 * Copyright (C) 1994-1996, Thomas G. Lane.
6 * libjpeg-turbo Modifications:
7 * Copyright (C) 1999-2006, MIYASAKA Masaru.
9 * Copyright (C) 2011, 2014-2015, D. R. Commander.
13 * This file contains the forward-DCT management logic.
33 DCTELEM *workspace);
36 FAST_FLOAT *workspace);
39 DCTELEM *workspace);
42 FAST_FLOAT *workspace);
54 /* The actual post-DCT divisors --- not identical to the quant table
61 DCTELEM *workspace; member
64 /* Same as above for the floating-point case. */
93 bit -= 8; in flss()
97 bit -= 4; in flss()
101 bit -= 2; in flss()
105 bit -= 1; in flss()
122 * The basic idea is to replace x/d by x * d^-1. In order to store
123 * d^-1 with enough precision we shift it left a few places. It turns
127 * b = (the number of significant bits in divisor) - 1
157 * dctbl[2] = 1 << ((word size) * 2 - r)
158 * dctbl[3] = r - (word size)
188 dtbl[DCTSIZE2 * 3] = -(DCTELEM)(sizeof(DCTELEM) * 8); /* shift */ in compute_reciprocal()
192 b = flss(divisor) - 1; in compute_reciprocal()
203 r--; in compute_reciprocal()
213 dtbl[DCTSIZE2 * 2] = (DCTELEM)(1 << (sizeof(DCTELEM) * 8 * 2 - r)); /* scale */ in compute_reciprocal()
217 dtbl[DCTSIZE2 * 3] = (DCTELEM)r - sizeof(DCTELEM) * 8; /* shift */ in compute_reciprocal()
228 * Verify that all referenced Q-tables are present, and set up
238 my_fdct_ptr fdct = (my_fdct_ptr)cinfo->fdct; in start_pass_fdctmgr()
244 for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; in start_pass_fdctmgr()
246 qtblno = compptr->quant_tbl_no; in start_pass_fdctmgr()
249 cinfo->quant_tbl_ptrs[qtblno] == NULL) in start_pass_fdctmgr()
251 qtbl = cinfo->quant_tbl_ptrs[qtblno]; in start_pass_fdctmgr()
254 switch (cinfo->dct_method) { in start_pass_fdctmgr()
260 if (fdct->divisors[qtblno] == NULL) { in start_pass_fdctmgr()
261 fdct->divisors[qtblno] = (DCTELEM *) in start_pass_fdctmgr()
262 (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE, in start_pass_fdctmgr()
265 dtbl = fdct->divisors[qtblno]; in start_pass_fdctmgr()
268 if (!compute_reciprocal(qtbl->quantval[i] << 3, &dtbl[i]) && in start_pass_fdctmgr()
269 fdct->quantize == jsimd_quantize) in start_pass_fdctmgr()
270 fdct->quantize = quantize; in start_pass_fdctmgr()
272 dtbl[i] = ((DCTELEM)qtbl->quantval[i]) << 3; in start_pass_fdctmgr()
300 if (fdct->divisors[qtblno] == NULL) { in start_pass_fdctmgr()
301 fdct->divisors[qtblno] = (DCTELEM *) in start_pass_fdctmgr()
302 (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE, in start_pass_fdctmgr()
305 dtbl = fdct->divisors[qtblno]; in start_pass_fdctmgr()
309 DESCALE(MULTIPLY16V16((JLONG)qtbl->quantval[i], in start_pass_fdctmgr()
311 CONST_BITS - 3), &dtbl[i]) && in start_pass_fdctmgr()
312 fdct->quantize == jsimd_quantize) in start_pass_fdctmgr()
313 fdct->quantize = quantize; in start_pass_fdctmgr()
316 DESCALE(MULTIPLY16V16((JLONG)qtbl->quantval[i], in start_pass_fdctmgr()
318 CONST_BITS - 3); in start_pass_fdctmgr()
342 if (fdct->float_divisors[qtblno] == NULL) { in start_pass_fdctmgr()
343 fdct->float_divisors[qtblno] = (FAST_FLOAT *) in start_pass_fdctmgr()
344 (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE, in start_pass_fdctmgr()
347 fdtbl = fdct->float_divisors[qtblno]; in start_pass_fdctmgr()
352 (1.0 / (((double)qtbl->quantval[i] * in start_pass_fdctmgr()
369 * Load data into workspace, applying unsigned->signed conversion.
373 convsamp(JSAMPARRAY sample_data, JDIMENSION start_col, DCTELEM *workspace) in convsamp() argument
379 workspaceptr = workspace; in convsamp()
384 *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; in convsamp()
385 *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; in convsamp()
386 *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; in convsamp()
387 *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; in convsamp()
388 *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; in convsamp()
389 *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; in convsamp()
390 *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; in convsamp()
391 *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; in convsamp()
395 for (elemc = DCTSIZE; elemc > 0; elemc--) in convsamp()
396 *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; in convsamp()
408 quantize(JCOEFPTR coef_block, DCTELEM *divisors, DCTELEM *workspace) in quantize() argument
421 temp = workspace[i]; in quantize()
427 temp = -temp; in quantize()
431 temp = -temp; in quantize()
446 temp = workspace[i]; in quantize()
452 * (at default quantization settings, more like three-quarters...) in quantize()
465 temp = -temp; in quantize()
468 temp = -temp; in quantize()
496 my_fdct_ptr fdct = (my_fdct_ptr)cinfo->fdct; in forward_DCT()
497 DCTELEM *divisors = fdct->divisors[compptr->quant_tbl_no]; in forward_DCT()
498 DCTELEM *workspace; in forward_DCT() local
502 forward_DCT_method_ptr do_dct = fdct->dct; in forward_DCT()
503 convsamp_method_ptr do_convsamp = fdct->convsamp; in forward_DCT()
504 quantize_method_ptr do_quantize = fdct->quantize; in forward_DCT()
505 workspace = fdct->workspace; in forward_DCT()
510 /* Load data into workspace, applying unsigned->signed conversion */ in forward_DCT()
511 (*do_convsamp) (sample_data, start_col, workspace); in forward_DCT()
514 (*do_dct) (workspace); in forward_DCT()
517 (*do_quantize) (coef_blocks[bi], divisors, workspace); in forward_DCT()
526 FAST_FLOAT *workspace) in convsamp_float() argument
532 workspaceptr = workspace; in convsamp_float()
536 *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); in convsamp_float()
537 *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); in convsamp_float()
538 *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); in convsamp_float()
539 *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); in convsamp_float()
540 *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); in convsamp_float()
541 *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); in convsamp_float()
542 *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); in convsamp_float()
543 *workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); in convsamp_float()
547 for (elemc = DCTSIZE; elemc > 0; elemc--) in convsamp_float()
549 (GETJSAMPLE(*elemptr++) - CENTERJSAMPLE); in convsamp_float()
558 FAST_FLOAT *workspace) in quantize_float() argument
566 temp = workspace[i] * divisors[i]; in quantize_float()
571 * The maximum coefficient size is +-16K (for 12-bit data), so this in quantize_float()
572 * code should work for either 16-bit or 32-bit ints. in quantize_float()
574 output_ptr[i] = (JCOEF)((int)(temp + (FAST_FLOAT)16384.5) - 16384); in quantize_float()
584 /* This version is used for floating-point DCT implementations. */ in forward_DCT_float()
587 my_fdct_ptr fdct = (my_fdct_ptr)cinfo->fdct; in forward_DCT_float()
588 FAST_FLOAT *divisors = fdct->float_divisors[compptr->quant_tbl_no]; in forward_DCT_float()
589 FAST_FLOAT *workspace; in forward_DCT_float() local
594 float_DCT_method_ptr do_dct = fdct->float_dct; in forward_DCT_float()
595 float_convsamp_method_ptr do_convsamp = fdct->float_convsamp; in forward_DCT_float()
596 float_quantize_method_ptr do_quantize = fdct->float_quantize; in forward_DCT_float()
597 workspace = fdct->float_workspace; in forward_DCT_float()
602 /* Load data into workspace, applying unsigned->signed conversion */ in forward_DCT_float()
603 (*do_convsamp) (sample_data, start_col, workspace); in forward_DCT_float()
606 (*do_dct) (workspace); in forward_DCT_float()
609 (*do_quantize) (coef_blocks[bi], divisors, workspace); in forward_DCT_float()
627 (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE, in jinit_forward_dct()
629 cinfo->fdct = (struct jpeg_forward_dct *)fdct; in jinit_forward_dct()
630 fdct->pub.start_pass = start_pass_fdctmgr; in jinit_forward_dct()
633 switch (cinfo->dct_method) { in jinit_forward_dct()
636 fdct->pub.forward_DCT = forward_DCT; in jinit_forward_dct()
638 fdct->dct = jsimd_fdct_islow; in jinit_forward_dct()
640 fdct->dct = jpeg_fdct_islow; in jinit_forward_dct()
645 fdct->pub.forward_DCT = forward_DCT; in jinit_forward_dct()
647 fdct->dct = jsimd_fdct_ifast; in jinit_forward_dct()
649 fdct->dct = jpeg_fdct_ifast; in jinit_forward_dct()
654 fdct->pub.forward_DCT = forward_DCT_float; in jinit_forward_dct()
656 fdct->float_dct = jsimd_fdct_float; in jinit_forward_dct()
658 fdct->float_dct = jpeg_fdct_float; in jinit_forward_dct()
667 switch (cinfo->dct_method) { in jinit_forward_dct()
676 fdct->convsamp = jsimd_convsamp; in jinit_forward_dct()
678 fdct->convsamp = convsamp; in jinit_forward_dct()
680 fdct->quantize = jsimd_quantize; in jinit_forward_dct()
682 fdct->quantize = quantize; in jinit_forward_dct()
688 fdct->float_convsamp = jsimd_convsamp_float; in jinit_forward_dct()
690 fdct->float_convsamp = convsamp_float; in jinit_forward_dct()
692 fdct->float_quantize = jsimd_quantize_float; in jinit_forward_dct()
694 fdct->float_quantize = quantize_float; in jinit_forward_dct()
702 /* Allocate workspace memory */ in jinit_forward_dct()
704 if (cinfo->dct_method == JDCT_FLOAT) in jinit_forward_dct()
705 fdct->float_workspace = (FAST_FLOAT *) in jinit_forward_dct()
706 (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE, in jinit_forward_dct()
710 fdct->workspace = (DCTELEM *) in jinit_forward_dct()
711 (*cinfo->mem->alloc_small) ((j_common_ptr)cinfo, JPOOL_IMAGE, in jinit_forward_dct()
716 fdct->divisors[i] = NULL; in jinit_forward_dct()
718 fdct->float_divisors[i] = NULL; in jinit_forward_dct()