diff options
author | Thomas G. Lane <tgl@netcom.com> | 1991-10-07 00:00:00 +0000 |
---|---|---|
committer | DRC <information@libjpeg-turbo.org> | 2015-07-29 15:18:11 -0500 |
commit | 2cbeb8abd92d5ad8a1bd415b51b3816213b15f31 (patch) | |
tree | 1d154fe137ed58037b3004b593dec05063896dd6 /jutils.c |
The Independent JPEG Group's JPEG software v1
Diffstat (limited to 'jutils.c')
-rw-r--r-- | jutils.c | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/jutils.c b/jutils.c new file mode 100644 index 0000000..aebcaa9 --- /dev/null +++ b/jutils.c @@ -0,0 +1,106 @@ +/* + * jutils.c + * + * Copyright (C) 1991, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file contains miscellaneous utility routines needed for both + * compression and decompression. + * Note we prefix all global names with "j" to minimize conflicts with + * a surrounding application. + */ + +#include "jinclude.h" + + +GLOBAL long +jround_up (long a, long b) +/* Compute a rounded up to next multiple of b; a >= 0, b > 0 */ +{ + a += b-1; + return a - (a % b); +} + + +GLOBAL void +jcopy_sample_rows (JSAMPARRAY input_array, int source_row, + JSAMPARRAY output_array, int dest_row, + int num_rows, long num_cols) +/* Copy some rows of samples from one place to another. + * num_rows rows are copied from input_array[source_row++] + * to output_array[dest_row++]; these areas should not overlap. + * The source and destination arrays must be at least as wide as num_cols. + */ +{ + /* On normal machines we can use memcpy(). This won't work on 80x86 because + * the sample arrays are FAR and we're assuming a small-pointer memory model. + */ + register JSAMPROW inptr, outptr; +#ifdef NEED_FAR_POINTERS + register long count; +#else + register size_t count = num_cols * SIZEOF(JSAMPLE); +#endif + register int row; + + input_array += source_row; + output_array += dest_row; + + for (row = num_rows; row > 0; row--) { + inptr = *input_array++; + outptr = *output_array++; +#ifdef NEED_FAR_POINTERS + for (count = num_cols; count > 0; count--) + *outptr++ = *inptr++; /* needn't bother with GETJSAMPLE() here */ +#else + memcpy((void *) outptr, (void *) inptr, count); +#endif + } +} + + +GLOBAL void +jcopy_block_row (JBLOCKROW input_row, JBLOCKROW output_row, long num_blocks) +/* Copy a row of coefficient blocks from one place to another. */ +{ + /* On normal machines we can use memcpy(). This won't work on 80x86 because + * the block arrays are FAR and we're assuming a small-pointer memory model. + */ +#ifdef NEED_FAR_POINTERS + register JCOEFPTR inptr, outptr; + register int i; + register long count; + + for (count = num_blocks; count > 0; count--) { + inptr = *input_row++; + outptr = *output_row++; + for (i = DCTSIZE2; i > 0; i--) + *outptr++ = *inptr++; + } +#else + memcpy((void *) output_row, (void *) input_row, + (size_t) (num_blocks * (DCTSIZE2 * SIZEOF(JCOEF)))); +#endif +} + + +GLOBAL void +jzero_far (void FAR * target, size_t bytestozero) +/* Zero out a chunk of FAR memory. */ +/* This might be sample-array data, block-array data, or alloc_medium data. */ +{ + /* On normal machines we can use MEMZERO(). This won't work on 80x86 + * because we're assuming a small-pointer memory model. + */ +#ifdef NEED_FAR_POINTERS + register char FAR * ptr = (char FAR *) target; + register size_t count; + + for (count = bytestozero; count > 0; count--) { + *ptr++ = 0; + } +#else + MEMZERO((void *) target, bytestozero); +#endif +} |