new upstream version 1.4.0 (#1180442)
Signed-off-by: Petr Hracek <phracek@redhat.com>
This commit is contained in:
		
							parent
							
								
									403a5a16e3
								
							
						
					
					
						commit
						dee567c707
					
				
							
								
								
									
										355
									
								
								jdmrg565.c
									
									
									
									
									
								
							
							
						
						
									
										355
									
								
								jdmrg565.c
									
									
									
									
									
								
							| @ -1,355 +0,0 @@ | |||||||
| /*
 |  | ||||||
|  * jdmrg565.c |  | ||||||
|  * |  | ||||||
|  * This file was part of the Independent JPEG Group's software: |  | ||||||
|  * Copyright (C) 1994-1996, Thomas G. Lane. |  | ||||||
|  * libjpeg-turbo Modifications: |  | ||||||
|  * Copyright (C) 2013, Linaro Limited. |  | ||||||
|  * Copyright (C) 2014, D. R. Commander. |  | ||||||
|  * For conditions of distribution and use, see the accompanying README file. |  | ||||||
|  * |  | ||||||
|  * This file contains code for merged upsampling/color conversion. |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| INLINE |  | ||||||
| LOCAL(void) |  | ||||||
| h2v1_merged_upsample_565_internal (j_decompress_ptr cinfo, |  | ||||||
|                                    JSAMPIMAGE input_buf, |  | ||||||
|                                    JDIMENSION in_row_group_ctr, |  | ||||||
|                                    JSAMPARRAY output_buf) |  | ||||||
| { |  | ||||||
|   my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; |  | ||||||
|   register int y, cred, cgreen, cblue; |  | ||||||
|   int cb, cr; |  | ||||||
|   register JSAMPROW outptr; |  | ||||||
|   JSAMPROW inptr0, inptr1, inptr2; |  | ||||||
|   JDIMENSION col; |  | ||||||
|   /* copy these pointers into registers if possible */ |  | ||||||
|   register JSAMPLE * range_limit = cinfo->sample_range_limit; |  | ||||||
|   int * Crrtab = upsample->Cr_r_tab; |  | ||||||
|   int * Cbbtab = upsample->Cb_b_tab; |  | ||||||
|   INT32 * Crgtab = upsample->Cr_g_tab; |  | ||||||
|   INT32 * Cbgtab = upsample->Cb_g_tab; |  | ||||||
|   unsigned int r, g, b; |  | ||||||
|   INT32 rgb; |  | ||||||
|   SHIFT_TEMPS |  | ||||||
| 
 |  | ||||||
|   inptr0 = input_buf[0][in_row_group_ctr]; |  | ||||||
|   inptr1 = input_buf[1][in_row_group_ctr]; |  | ||||||
|   inptr2 = input_buf[2][in_row_group_ctr]; |  | ||||||
|   outptr = output_buf[0]; |  | ||||||
| 
 |  | ||||||
|   /* Loop for each pair of output pixels */ |  | ||||||
|   for (col = cinfo->output_width >> 1; col > 0; col--) { |  | ||||||
|     /* Do the chroma part of the calculation */ |  | ||||||
|     cb = GETJSAMPLE(*inptr1++); |  | ||||||
|     cr = GETJSAMPLE(*inptr2++); |  | ||||||
|     cred = Crrtab[cr]; |  | ||||||
|     cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); |  | ||||||
|     cblue = Cbbtab[cb]; |  | ||||||
| 
 |  | ||||||
|     /* Fetch 2 Y values and emit 2 pixels */ |  | ||||||
|     y  = GETJSAMPLE(*inptr0++); |  | ||||||
|     r = range_limit[y + cred]; |  | ||||||
|     g = range_limit[y + cgreen]; |  | ||||||
|     b = range_limit[y + cblue]; |  | ||||||
|     rgb = PACK_SHORT_565(r, g, b); |  | ||||||
| 
 |  | ||||||
|     y  = GETJSAMPLE(*inptr0++); |  | ||||||
|     r = range_limit[y + cred]; |  | ||||||
|     g = range_limit[y + cgreen]; |  | ||||||
|     b = range_limit[y + cblue]; |  | ||||||
|     rgb = PACK_TWO_PIXELS(rgb, PACK_SHORT_565(r, g, b)); |  | ||||||
| 
 |  | ||||||
|     WRITE_TWO_PIXELS(outptr, rgb); |  | ||||||
|     outptr += 4; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   /* If image width is odd, do the last output column separately */ |  | ||||||
|   if (cinfo->output_width & 1) { |  | ||||||
|     cb = GETJSAMPLE(*inptr1); |  | ||||||
|     cr = GETJSAMPLE(*inptr2); |  | ||||||
|     cred = Crrtab[cr]; |  | ||||||
|     cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); |  | ||||||
|     cblue = Cbbtab[cb]; |  | ||||||
|     y  = GETJSAMPLE(*inptr0); |  | ||||||
|     r = range_limit[y + cred]; |  | ||||||
|     g = range_limit[y + cgreen]; |  | ||||||
|     b = range_limit[y + cblue]; |  | ||||||
|     rgb = PACK_SHORT_565(r, g, b); |  | ||||||
|     *(INT16*)outptr = rgb; |  | ||||||
|    } |  | ||||||
|  } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| INLINE |  | ||||||
| LOCAL(void) |  | ||||||
| h2v1_merged_upsample_565D_internal (j_decompress_ptr cinfo, |  | ||||||
|                                     JSAMPIMAGE input_buf, |  | ||||||
|                                     JDIMENSION in_row_group_ctr, |  | ||||||
|                                     JSAMPARRAY output_buf) |  | ||||||
| { |  | ||||||
|   my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; |  | ||||||
|   register int y, cred, cgreen, cblue; |  | ||||||
|   int cb, cr; |  | ||||||
|   register JSAMPROW outptr; |  | ||||||
|   JSAMPROW inptr0, inptr1, inptr2; |  | ||||||
|   JDIMENSION col; |  | ||||||
|   /* copy these pointers into registers if possible */ |  | ||||||
|   register JSAMPLE * range_limit = cinfo->sample_range_limit; |  | ||||||
|   int * Crrtab = upsample->Cr_r_tab; |  | ||||||
|   int * Cbbtab = upsample->Cb_b_tab; |  | ||||||
|   INT32 * Crgtab = upsample->Cr_g_tab; |  | ||||||
|   INT32 * Cbgtab = upsample->Cb_g_tab; |  | ||||||
|   INT32 d0 = dither_matrix[cinfo->output_scanline & DITHER_MASK]; |  | ||||||
|   unsigned int r, g, b; |  | ||||||
|   INT32 rgb; |  | ||||||
|   SHIFT_TEMPS |  | ||||||
| 
 |  | ||||||
|   inptr0 = input_buf[0][in_row_group_ctr]; |  | ||||||
|   inptr1 = input_buf[1][in_row_group_ctr]; |  | ||||||
|   inptr2 = input_buf[2][in_row_group_ctr]; |  | ||||||
|   outptr = output_buf[0]; |  | ||||||
| 
 |  | ||||||
|   /* Loop for each pair of output pixels */ |  | ||||||
|   for (col = cinfo->output_width >> 1; col > 0; col--) { |  | ||||||
|     /* Do the chroma part of the calculation */ |  | ||||||
|     cb = GETJSAMPLE(*inptr1++); |  | ||||||
|     cr = GETJSAMPLE(*inptr2++); |  | ||||||
|     cred = Crrtab[cr]; |  | ||||||
|     cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); |  | ||||||
|     cblue = Cbbtab[cb]; |  | ||||||
| 
 |  | ||||||
|     /* Fetch 2 Y values and emit 2 pixels */ |  | ||||||
|     y  = GETJSAMPLE(*inptr0++); |  | ||||||
|     r = range_limit[DITHER_565_R(y + cred, d0)]; |  | ||||||
|     g = range_limit[DITHER_565_G(y + cgreen, d0)]; |  | ||||||
|     b = range_limit[DITHER_565_B(y + cblue, d0)]; |  | ||||||
|     d0 = DITHER_ROTATE(d0); |  | ||||||
|     rgb = PACK_SHORT_565(r, g, b); |  | ||||||
| 
 |  | ||||||
|     y  = GETJSAMPLE(*inptr0++); |  | ||||||
|     r = range_limit[DITHER_565_R(y + cred, d0)]; |  | ||||||
|     g = range_limit[DITHER_565_G(y + cgreen, d0)]; |  | ||||||
|     b = range_limit[DITHER_565_B(y + cblue, d0)]; |  | ||||||
|     d0 = DITHER_ROTATE(d0); |  | ||||||
|     rgb = PACK_TWO_PIXELS(rgb, PACK_SHORT_565(r, g, b)); |  | ||||||
| 
 |  | ||||||
|     WRITE_TWO_PIXELS(outptr, rgb); |  | ||||||
|     outptr += 4; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   /* If image width is odd, do the last output column separately */ |  | ||||||
|   if (cinfo->output_width & 1) { |  | ||||||
|     cb = GETJSAMPLE(*inptr1); |  | ||||||
|     cr = GETJSAMPLE(*inptr2); |  | ||||||
|     cred = Crrtab[cr]; |  | ||||||
|     cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); |  | ||||||
|     cblue = Cbbtab[cb]; |  | ||||||
|     y  = GETJSAMPLE(*inptr0); |  | ||||||
|     r = range_limit[DITHER_565_R(y + cred, d0)]; |  | ||||||
|     g = range_limit[DITHER_565_G(y + cgreen, d0)]; |  | ||||||
|     b = range_limit[DITHER_565_B(y + cblue, d0)]; |  | ||||||
|     rgb = PACK_SHORT_565(r, g, b); |  | ||||||
|     *(INT16*)outptr = rgb; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| INLINE |  | ||||||
| LOCAL(void) |  | ||||||
| h2v2_merged_upsample_565_internal (j_decompress_ptr cinfo, |  | ||||||
|                                    JSAMPIMAGE input_buf, |  | ||||||
|                                    JDIMENSION in_row_group_ctr, |  | ||||||
|                                    JSAMPARRAY output_buf) |  | ||||||
| { |  | ||||||
|   my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; |  | ||||||
|   register int y, cred, cgreen, cblue; |  | ||||||
|   int cb, cr; |  | ||||||
|   register JSAMPROW outptr0, outptr1; |  | ||||||
|   JSAMPROW inptr00, inptr01, inptr1, inptr2; |  | ||||||
|   JDIMENSION col; |  | ||||||
|   /* copy these pointers into registers if possible */ |  | ||||||
|   register JSAMPLE * range_limit = cinfo->sample_range_limit; |  | ||||||
|   int * Crrtab = upsample->Cr_r_tab; |  | ||||||
|   int * Cbbtab = upsample->Cb_b_tab; |  | ||||||
|   INT32 * Crgtab = upsample->Cr_g_tab; |  | ||||||
|   INT32 * Cbgtab = upsample->Cb_g_tab; |  | ||||||
|   unsigned int r, g, b; |  | ||||||
|   INT32 rgb; |  | ||||||
|   SHIFT_TEMPS |  | ||||||
| 
 |  | ||||||
|   inptr00 = input_buf[0][in_row_group_ctr * 2]; |  | ||||||
|   inptr01 = input_buf[0][in_row_group_ctr * 2 + 1]; |  | ||||||
|   inptr1 = input_buf[1][in_row_group_ctr]; |  | ||||||
|   inptr2 = input_buf[2][in_row_group_ctr]; |  | ||||||
|   outptr0 = output_buf[0]; |  | ||||||
|   outptr1 = output_buf[1]; |  | ||||||
| 
 |  | ||||||
|   /* Loop for each group of output pixels */ |  | ||||||
|   for (col = cinfo->output_width >> 1; col > 0; col--) { |  | ||||||
|     /* Do the chroma part of the calculation */ |  | ||||||
|     cb = GETJSAMPLE(*inptr1++); |  | ||||||
|     cr = GETJSAMPLE(*inptr2++); |  | ||||||
|     cred = Crrtab[cr]; |  | ||||||
|     cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); |  | ||||||
|     cblue = Cbbtab[cb]; |  | ||||||
| 
 |  | ||||||
|     /* Fetch 4 Y values and emit 4 pixels */ |  | ||||||
|     y  = GETJSAMPLE(*inptr00++); |  | ||||||
|     r = range_limit[y + cred]; |  | ||||||
|     g = range_limit[y + cgreen]; |  | ||||||
|     b = range_limit[y + cblue]; |  | ||||||
|     rgb = PACK_SHORT_565(r, g, b); |  | ||||||
| 
 |  | ||||||
|     y  = GETJSAMPLE(*inptr00++); |  | ||||||
|     r = range_limit[y + cred]; |  | ||||||
|     g = range_limit[y + cgreen]; |  | ||||||
|     b = range_limit[y + cblue]; |  | ||||||
|     rgb = PACK_TWO_PIXELS(rgb, PACK_SHORT_565(r, g, b)); |  | ||||||
| 
 |  | ||||||
|     WRITE_TWO_PIXELS(outptr0, rgb); |  | ||||||
|     outptr0 += 4; |  | ||||||
| 
 |  | ||||||
|     y  = GETJSAMPLE(*inptr01++); |  | ||||||
|     r = range_limit[y + cred]; |  | ||||||
|     g = range_limit[y + cgreen]; |  | ||||||
|     b = range_limit[y + cblue]; |  | ||||||
|     rgb = PACK_SHORT_565(r, g, b); |  | ||||||
| 
 |  | ||||||
|     y  = GETJSAMPLE(*inptr01++); |  | ||||||
|     r = range_limit[y + cred]; |  | ||||||
|     g = range_limit[y + cgreen]; |  | ||||||
|     b = range_limit[y + cblue]; |  | ||||||
|     rgb = PACK_TWO_PIXELS(rgb, PACK_SHORT_565(r, g, b)); |  | ||||||
| 
 |  | ||||||
|     WRITE_TWO_PIXELS(outptr1, rgb); |  | ||||||
|     outptr1 += 4; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   /* If image width is odd, do the last output column separately */ |  | ||||||
|   if (cinfo->output_width & 1) { |  | ||||||
|     cb = GETJSAMPLE(*inptr1); |  | ||||||
|     cr = GETJSAMPLE(*inptr2); |  | ||||||
|     cred = Crrtab[cr]; |  | ||||||
|     cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); |  | ||||||
|     cblue = Cbbtab[cb]; |  | ||||||
| 
 |  | ||||||
|     y  = GETJSAMPLE(*inptr00); |  | ||||||
|     r = range_limit[y + cred]; |  | ||||||
|     g = range_limit[y + cgreen]; |  | ||||||
|     b = range_limit[y + cblue]; |  | ||||||
|     rgb = PACK_SHORT_565(r, g, b); |  | ||||||
|     *(INT16*)outptr0 = rgb; |  | ||||||
| 
 |  | ||||||
|     y  = GETJSAMPLE(*inptr01); |  | ||||||
|     r = range_limit[y + cred]; |  | ||||||
|     g = range_limit[y + cgreen]; |  | ||||||
|     b = range_limit[y + cblue]; |  | ||||||
|     rgb = PACK_SHORT_565(r, g, b); |  | ||||||
|     *(INT16*)outptr1 = rgb; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| INLINE |  | ||||||
| LOCAL(void) |  | ||||||
| h2v2_merged_upsample_565D_internal (j_decompress_ptr cinfo, |  | ||||||
|                                     JSAMPIMAGE input_buf, |  | ||||||
|                                     JDIMENSION in_row_group_ctr, |  | ||||||
|                                     JSAMPARRAY output_buf) |  | ||||||
| { |  | ||||||
|   my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; |  | ||||||
|   register int y, cred, cgreen, cblue; |  | ||||||
|   int cb, cr; |  | ||||||
|   register JSAMPROW outptr0, outptr1; |  | ||||||
|   JSAMPROW inptr00, inptr01, inptr1, inptr2; |  | ||||||
|   JDIMENSION col; |  | ||||||
|   /* copy these pointers into registers if possible */ |  | ||||||
|   register JSAMPLE * range_limit = cinfo->sample_range_limit; |  | ||||||
|   int * Crrtab = upsample->Cr_r_tab; |  | ||||||
|   int * Cbbtab = upsample->Cb_b_tab; |  | ||||||
|   INT32 * Crgtab = upsample->Cr_g_tab; |  | ||||||
|   INT32 * Cbgtab = upsample->Cb_g_tab; |  | ||||||
|   INT32 d0 = dither_matrix[cinfo->output_scanline & DITHER_MASK]; |  | ||||||
|   INT32 d1 = dither_matrix[(cinfo->output_scanline+1) & DITHER_MASK]; |  | ||||||
|   unsigned int r, g, b; |  | ||||||
|   INT32 rgb; |  | ||||||
|   SHIFT_TEMPS |  | ||||||
| 
 |  | ||||||
|   inptr00 = input_buf[0][in_row_group_ctr*2]; |  | ||||||
|   inptr01 = input_buf[0][in_row_group_ctr*2 + 1]; |  | ||||||
|   inptr1 = input_buf[1][in_row_group_ctr]; |  | ||||||
|   inptr2 = input_buf[2][in_row_group_ctr]; |  | ||||||
|   outptr0 = output_buf[0]; |  | ||||||
|   outptr1 = output_buf[1]; |  | ||||||
| 
 |  | ||||||
|   /* Loop for each group of output pixels */ |  | ||||||
|   for (col = cinfo->output_width >> 1; col > 0; col--) { |  | ||||||
|     /* Do the chroma part of the calculation */ |  | ||||||
|     cb = GETJSAMPLE(*inptr1++); |  | ||||||
|     cr = GETJSAMPLE(*inptr2++); |  | ||||||
|     cred = Crrtab[cr]; |  | ||||||
|     cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); |  | ||||||
|     cblue = Cbbtab[cb]; |  | ||||||
| 
 |  | ||||||
|     /* Fetch 4 Y values and emit 4 pixels */ |  | ||||||
|     y  = GETJSAMPLE(*inptr00++); |  | ||||||
|     r = range_limit[DITHER_565_R(y + cred, d0)]; |  | ||||||
|     g = range_limit[DITHER_565_G(y + cgreen, d0)]; |  | ||||||
|     b = range_limit[DITHER_565_B(y + cblue, d0)]; |  | ||||||
|     d0 = DITHER_ROTATE(d0); |  | ||||||
|     rgb = PACK_SHORT_565(r, g, b); |  | ||||||
| 
 |  | ||||||
|     y  = GETJSAMPLE(*inptr00++); |  | ||||||
|     r = range_limit[DITHER_565_R(y + cred, d1)]; |  | ||||||
|     g = range_limit[DITHER_565_G(y + cgreen, d1)]; |  | ||||||
|     b = range_limit[DITHER_565_B(y + cblue, d1)]; |  | ||||||
|     d1 = DITHER_ROTATE(d1); |  | ||||||
|     rgb = PACK_TWO_PIXELS(rgb, PACK_SHORT_565(r, g, b)); |  | ||||||
| 
 |  | ||||||
|     WRITE_TWO_PIXELS(outptr0, rgb); |  | ||||||
|     outptr0 += 4; |  | ||||||
| 
 |  | ||||||
|     y  = GETJSAMPLE(*inptr01++); |  | ||||||
|     r = range_limit[DITHER_565_R(y + cred, d0)]; |  | ||||||
|     g = range_limit[DITHER_565_G(y + cgreen, d0)]; |  | ||||||
|     b = range_limit[DITHER_565_B(y + cblue, d0)]; |  | ||||||
|     d0 = DITHER_ROTATE(d0); |  | ||||||
|     rgb = PACK_SHORT_565(r, g, b); |  | ||||||
| 
 |  | ||||||
|     y  = GETJSAMPLE(*inptr01++); |  | ||||||
|     r = range_limit[DITHER_565_R(y + cred, d1)]; |  | ||||||
|     g = range_limit[DITHER_565_G(y + cgreen, d1)]; |  | ||||||
|     b = range_limit[DITHER_565_B(y + cblue, d1)]; |  | ||||||
|     d1 = DITHER_ROTATE(d1); |  | ||||||
|     rgb = PACK_TWO_PIXELS(rgb, PACK_SHORT_565(r, g, b)); |  | ||||||
| 
 |  | ||||||
|     WRITE_TWO_PIXELS(outptr1, rgb); |  | ||||||
|     outptr1 += 4; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   /* If image width is odd, do the last output column separately */ |  | ||||||
|   if (cinfo->output_width & 1) { |  | ||||||
|     cb = GETJSAMPLE(*inptr1); |  | ||||||
|     cr = GETJSAMPLE(*inptr2); |  | ||||||
|     cred = Crrtab[cr]; |  | ||||||
|     cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS); |  | ||||||
|     cblue = Cbbtab[cb]; |  | ||||||
| 
 |  | ||||||
|     y  = GETJSAMPLE(*inptr00); |  | ||||||
|     r = range_limit[DITHER_565_R(y + cred, d0)]; |  | ||||||
|     g = range_limit[DITHER_565_G(y + cgreen, d0)]; |  | ||||||
|     b = range_limit[DITHER_565_B(y + cblue, d0)]; |  | ||||||
|     rgb = PACK_SHORT_565(r, g, b); |  | ||||||
|     *(INT16*)outptr0 = rgb; |  | ||||||
| 
 |  | ||||||
|     y  = GETJSAMPLE(*inptr01); |  | ||||||
|     r = range_limit[DITHER_565_R(y + cred, d1)]; |  | ||||||
|     g = range_limit[DITHER_565_G(y + cgreen, d1)]; |  | ||||||
|     b = range_limit[DITHER_565_B(y + cblue, d1)]; |  | ||||||
|     rgb = PACK_SHORT_565(r, g, b); |  | ||||||
|     *(INT16*)outptr1 = rgb; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @ -1,46 +0,0 @@ | |||||||
| diff --git a/jmorecfg.h b/jmorecfg.h
 |  | ||||||
| index 36fe971..1cec1e4 100644
 |  | ||||||
| --- a/jmorecfg.h
 |  | ||||||
| +++ b/jmorecfg.h
 |  | ||||||
| @@ -179,6 +179,22 @@ typedef unsigned int JDIMENSION;
 |  | ||||||
|  /* a reference to a GLOBAL function: */ |  | ||||||
|  #define EXTERN(type)            extern type |  | ||||||
|   |  | ||||||
| +/* Originally, this macro was used as a way of defining function prototypes
 |  | ||||||
| + * for both modern compilers as well as older compilers that did not support
 |  | ||||||
| + * prototype parameters.  libjpeg-turbo has never supported these older,
 |  | ||||||
| + * non-ANSI compilers, but the macro is still included because there is some
 |  | ||||||
| + * software out there that uses it.
 |  | ||||||
| + */
 |  | ||||||
| +
 |  | ||||||
| +#define JMETHOD(type,methodname,arglist)  type (*methodname) arglist
 |  | ||||||
| +
 |  | ||||||
| +
 |  | ||||||
| +/* libjpeg-turbo no longer supports platforms that have far symbols (MS-DOS),
 |  | ||||||
| + * but again, some software relies on this macro.
 |  | ||||||
| + */
 |  | ||||||
| +
 |  | ||||||
| +#undef FAR
 |  | ||||||
| +#define FAR
 |  | ||||||
|   |  | ||||||
|  /* |  | ||||||
|   * On a few systems, type boolean and/or its values FALSE, TRUE may appear |  | ||||||
| diff --git a/jpeglib.h b/jpeglib.h
 |  | ||||||
| index 27045a4..e8b8b45 100644
 |  | ||||||
| --- a/jpeglib.h
 |  | ||||||
| +++ b/jpeglib.h
 |  | ||||||
| @@ -874,6 +874,14 @@ struct jpeg_memory_mgr {
 |  | ||||||
|   */ |  | ||||||
|  typedef boolean (*jpeg_marker_parser_method) (j_decompress_ptr cinfo); |  | ||||||
|   |  | ||||||
| +/* Originally, this macro was used as a way of defining function prototypes
 |  | ||||||
| + * for both modern compilers as well as older compilers that did not support
 |  | ||||||
| + * prototype parameters.  libjpeg-turbo has never supported these older,
 |  | ||||||
| + * non-ANSI compilers, but the macro is still included because there is some
 |  | ||||||
| + * software out there that uses it.
 |  | ||||||
| + */
 |  | ||||||
| +
 |  | ||||||
| +#define JPP(arglist)    arglist
 |  | ||||||
|   |  | ||||||
|  /* Default error-management setup */ |  | ||||||
|  EXTERN(struct jpeg_error_mgr *) jpeg_std_error (struct jpeg_error_mgr * err); |  | ||||||
| @ -1,874 +0,0 @@ | |||||||
| diff --git a/jchuff.c b/jchuff.c
 |  | ||||||
| index d8eb1d3..447209a 100644
 |  | ||||||
| --- a/jchuff.c
 |  | ||||||
| +++ b/jchuff.c
 |  | ||||||
| @@ -37,7 +37,7 @@
 |  | ||||||
|   */ |  | ||||||
|   |  | ||||||
|  /* NOTE: Both GCC and Clang define __GNUC__ */ |  | ||||||
| -#if defined __GNUC__ && defined __arm__
 |  | ||||||
| +#if defined __GNUC__ && (defined __arm__ || defined __aarch64__)
 |  | ||||||
|  #if !defined __thumb__ || defined __thumb2__ |  | ||||||
|  #define USE_CLZ_INTRINSIC |  | ||||||
|  #endif |  | ||||||
| diff --git a/jdcol565.c b/jdcol565.c
 |  | ||||||
| index a2c98f3..43d285d 100644
 |  | ||||||
| --- a/jdcol565.c
 |  | ||||||
| +++ b/jdcol565.c
 |  | ||||||
| @@ -13,42 +13,11 @@
 |  | ||||||
|  /* This file is included by jdcolor.c */ |  | ||||||
|   |  | ||||||
|   |  | ||||||
| -#define PACK_SHORT_565(r, g, b)   ((((r) << 8) & 0xf800) |  \
 |  | ||||||
| -                                   (((g) << 3) & 0x7E0) | ((b) >> 3))
 |  | ||||||
| -#define PACK_TWO_PIXELS(l, r)     ((r << 16) | l)
 |  | ||||||
| -#define PACK_NEED_ALIGNMENT(ptr)  (((size_t)(ptr)) & 3)
 |  | ||||||
| -
 |  | ||||||
| -#define WRITE_TWO_PIXELS(addr, pixels) {  \
 |  | ||||||
| -  ((INT16*)(addr))[0] = (pixels);  \
 |  | ||||||
| -  ((INT16*)(addr))[1] = (pixels) >> 16;  \
 |  | ||||||
| -}
 |  | ||||||
| -#define WRITE_TWO_ALIGNED_PIXELS(addr, pixels)  ((*(INT32 *)(addr)) = pixels)
 |  | ||||||
| -
 |  | ||||||
| -#define DITHER_565_R(r, dither)  ((r) + ((dither) & 0xFF))
 |  | ||||||
| -#define DITHER_565_G(g, dither)  ((g) + (((dither) & 0xFF) >> 1))
 |  | ||||||
| -#define DITHER_565_B(b, dither)  ((b) + ((dither) & 0xFF))
 |  | ||||||
| -
 |  | ||||||
| -
 |  | ||||||
| -/* Declarations for ordered dithering
 |  | ||||||
| - *
 |  | ||||||
| - * We use a 4x4 ordered dither array packed into 32 bits.  This array is
 |  | ||||||
| - * sufficent for dithering RGB888 to RGB565.
 |  | ||||||
| - */
 |  | ||||||
| -
 |  | ||||||
| -#define DITHER_MASK       0x3
 |  | ||||||
| -#define DITHER_ROTATE(x)  (((x) << 24) | (((x) >> 8) & 0x00FFFFFF))
 |  | ||||||
| -static const INT32 dither_matrix[4] = {
 |  | ||||||
| -  0x0008020A,
 |  | ||||||
| -  0x0C040E06,
 |  | ||||||
| -  0x030B0109,
 |  | ||||||
| -  0x0F070D05
 |  | ||||||
| -};
 |  | ||||||
| -
 |  | ||||||
| -
 |  | ||||||
| -METHODDEF(void)
 |  | ||||||
| -ycc_rgb565_convert (j_decompress_ptr cinfo,
 |  | ||||||
| -                    JSAMPIMAGE input_buf, JDIMENSION input_row,
 |  | ||||||
| -                    JSAMPARRAY output_buf, int num_rows)
 |  | ||||||
| +INLINE
 |  | ||||||
| +LOCAL(void)
 |  | ||||||
| +ycc_rgb565_convert_internal (j_decompress_ptr cinfo,
 |  | ||||||
| +                             JSAMPIMAGE input_buf, JDIMENSION input_row,
 |  | ||||||
| +                             JSAMPIMAGE output_buf, int num_rows)
 |  | ||||||
|  { |  | ||||||
|    my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; |  | ||||||
|    register int y, cb, cr; |  | ||||||
| @@ -123,10 +92,11 @@ ycc_rgb565_convert (j_decompress_ptr cinfo,
 |  | ||||||
|  } |  | ||||||
|   |  | ||||||
|   |  | ||||||
| -METHODDEF(void)
 |  | ||||||
| -ycc_rgb565D_convert (j_decompress_ptr cinfo,
 |  | ||||||
| -                     JSAMPIMAGE input_buf, JDIMENSION input_row,
 |  | ||||||
| -                     JSAMPARRAY output_buf, int num_rows)
 |  | ||||||
| +INLINE
 |  | ||||||
| +LOCAL(void)
 |  | ||||||
| +ycc_rgb565D_convert_internal (j_decompress_ptr cinfo,
 |  | ||||||
| +                              JSAMPIMAGE input_buf, JDIMENSION input_row,
 |  | ||||||
| +                              JSAMPARRAY output_buf, int num_rows)
 |  | ||||||
|  { |  | ||||||
|    my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; |  | ||||||
|    register int y, cb, cr; |  | ||||||
| @@ -208,10 +178,11 @@ ycc_rgb565D_convert (j_decompress_ptr cinfo,
 |  | ||||||
|  } |  | ||||||
|   |  | ||||||
|   |  | ||||||
| -METHODDEF(void)
 |  | ||||||
| -rgb_rgb565_convert (j_decompress_ptr cinfo,
 |  | ||||||
| -                    JSAMPIMAGE input_buf, JDIMENSION input_row,
 |  | ||||||
| -                    JSAMPARRAY output_buf, int num_rows)
 |  | ||||||
| +INLINE
 |  | ||||||
| +LOCAL(void)
 |  | ||||||
| +rgb_rgb565_convert_internal (j_decompress_ptr cinfo,
 |  | ||||||
| +                             JSAMPIMAGE input_buf, JDIMENSION input_row,
 |  | ||||||
| +                             JSAMPARRAY output_buf, int num_rows)
 |  | ||||||
|  { |  | ||||||
|    register JSAMPROW outptr; |  | ||||||
|    register JSAMPROW inptr0, inptr1, inptr2; |  | ||||||
| @@ -262,10 +233,11 @@ rgb_rgb565_convert (j_decompress_ptr cinfo,
 |  | ||||||
|  } |  | ||||||
|   |  | ||||||
|   |  | ||||||
| -METHODDEF(void)
 |  | ||||||
| -rgb_rgb565D_convert (j_decompress_ptr cinfo,
 |  | ||||||
| -                     JSAMPIMAGE input_buf, JDIMENSION input_row,
 |  | ||||||
| -                     JSAMPARRAY output_buf, int num_rows)
 |  | ||||||
| +INLINE
 |  | ||||||
| +LOCAL(void)
 |  | ||||||
| +rgb_rgb565D_convert_internal (j_decompress_ptr cinfo,
 |  | ||||||
| +                              JSAMPIMAGE input_buf, JDIMENSION input_row,
 |  | ||||||
| +                              JSAMPARRAY output_buf, int num_rows)
 |  | ||||||
|  { |  | ||||||
|    register JSAMPROW outptr; |  | ||||||
|    register JSAMPROW inptr0, inptr1, inptr2; |  | ||||||
| @@ -320,10 +292,11 @@ rgb_rgb565D_convert (j_decompress_ptr cinfo,
 |  | ||||||
|  } |  | ||||||
|   |  | ||||||
|   |  | ||||||
| -METHODDEF(void)
 |  | ||||||
| -gray_rgb565_convert (j_decompress_ptr cinfo,
 |  | ||||||
| -                     JSAMPIMAGE input_buf, JDIMENSION input_row,
 |  | ||||||
| -                     JSAMPARRAY output_buf, int num_rows)
 |  | ||||||
| +INLINE
 |  | ||||||
| +LOCAL(void)
 |  | ||||||
| +gray_rgb565_convert_internal (j_decompress_ptr cinfo,
 |  | ||||||
| +                              JSAMPIMAGE input_buf, JDIMENSION input_row,
 |  | ||||||
| +                              JSAMPARRAY output_buf, int num_rows)
 |  | ||||||
|  { |  | ||||||
|    register JSAMPROW inptr, outptr; |  | ||||||
|    register JDIMENSION col; |  | ||||||
| @@ -359,10 +332,11 @@ gray_rgb565_convert (j_decompress_ptr cinfo,
 |  | ||||||
|  } |  | ||||||
|   |  | ||||||
|   |  | ||||||
| -METHODDEF(void)
 |  | ||||||
| -gray_rgb565D_convert (j_decompress_ptr cinfo,
 |  | ||||||
| -                      JSAMPIMAGE input_buf, JDIMENSION input_row,
 |  | ||||||
| -                      JSAMPARRAY output_buf, int num_rows)
 |  | ||||||
| +INLINE
 |  | ||||||
| +LOCAL(void)
 |  | ||||||
| +gray_rgb565D_convert_internal (j_decompress_ptr cinfo,
 |  | ||||||
| +                               JSAMPIMAGE input_buf, JDIMENSION input_row,
 |  | ||||||
| +                               JSAMPARRAY output_buf, int num_rows)
 |  | ||||||
|  { |  | ||||||
|    register JSAMPROW inptr, outptr; |  | ||||||
|    register JDIMENSION col; |  | ||||||
| diff --git a/jdcolor.c b/jdcolor.c
 |  | ||||||
| index ffedabd..779fa51 100644
 |  | ||||||
| --- a/jdcolor.c
 |  | ||||||
| +++ b/jdcolor.c
 |  | ||||||
| @@ -544,7 +544,162 @@ ycck_cmyk_convert (j_decompress_ptr cinfo,
 |  | ||||||
|  } |  | ||||||
|   |  | ||||||
|   |  | ||||||
| +/*
 |  | ||||||
| + * RGB565 conversion
 |  | ||||||
| + */
 |  | ||||||
| +
 |  | ||||||
| +#define PACK_SHORT_565_LE(r, g, b)   ((((r) << 8) & 0xF800) |  \
 |  | ||||||
| +                                      (((g) << 3) & 0x7E0) | ((b) >> 3))
 |  | ||||||
| +#define PACK_SHORT_565_BE(r, g, b)   (((r) & 0xF8) | ((g) >> 5) |  \
 |  | ||||||
| +                                      (((g) << 11) & 0xE000) |  \
 |  | ||||||
| +                                      (((b) << 5) & 0x1F00))
 |  | ||||||
| +
 |  | ||||||
| +#define PACK_TWO_PIXELS_LE(l, r)     ((r << 16) | l)
 |  | ||||||
| +#define PACK_TWO_PIXELS_BE(l, r)     ((l << 16) | r)
 |  | ||||||
| +
 |  | ||||||
| +#define PACK_NEED_ALIGNMENT(ptr)     (((size_t)(ptr)) & 3)
 |  | ||||||
| +
 |  | ||||||
| +#define WRITE_TWO_ALIGNED_PIXELS(addr, pixels)  ((*(int *)(addr)) = pixels)
 |  | ||||||
| +
 |  | ||||||
| +#define DITHER_565_R(r, dither)  ((r) + ((dither) & 0xFF))
 |  | ||||||
| +#define DITHER_565_G(g, dither)  ((g) + (((dither) & 0xFF) >> 1))
 |  | ||||||
| +#define DITHER_565_B(b, dither)  ((b) + ((dither) & 0xFF))
 |  | ||||||
| +
 |  | ||||||
| +
 |  | ||||||
| +/* Declarations for ordered dithering
 |  | ||||||
| + *
 |  | ||||||
| + * We use a 4x4 ordered dither array packed into 32 bits.  This array is
 |  | ||||||
| + * sufficent for dithering RGB888 to RGB565.
 |  | ||||||
| + */
 |  | ||||||
| +
 |  | ||||||
| +#define DITHER_MASK       0x3
 |  | ||||||
| +#define DITHER_ROTATE(x)  (((x) << 24) | (((x) >> 8) & 0x00FFFFFF))
 |  | ||||||
| +static const INT32 dither_matrix[4] = {
 |  | ||||||
| +  0x0008020A,
 |  | ||||||
| +  0x0C040E06,
 |  | ||||||
| +  0x030B0109,
 |  | ||||||
| +  0x0F070D05
 |  | ||||||
| +};
 |  | ||||||
| +
 |  | ||||||
| +
 |  | ||||||
| +static INLINE boolean is_big_endian(void)
 |  | ||||||
| +{
 |  | ||||||
| +  int test_value = 1;
 |  | ||||||
| +  if(*(char *)&test_value != 1)
 |  | ||||||
| +    return TRUE;
 |  | ||||||
| +  return FALSE;
 |  | ||||||
| +}
 |  | ||||||
| +
 |  | ||||||
| +
 |  | ||||||
| +/* Include inline routines for RGB565 conversion */
 |  | ||||||
| +
 |  | ||||||
| +#define PACK_SHORT_565 PACK_SHORT_565_LE
 |  | ||||||
| +#define PACK_TWO_PIXELS PACK_TWO_PIXELS_LE
 |  | ||||||
| +#define ycc_rgb565_convert_internal ycc_rgb565_convert_le
 |  | ||||||
| +#define ycc_rgb565D_convert_internal ycc_rgb565D_convert_le
 |  | ||||||
| +#define rgb_rgb565_convert_internal rgb_rgb565_convert_le
 |  | ||||||
| +#define rgb_rgb565D_convert_internal rgb_rgb565D_convert_le
 |  | ||||||
| +#define gray_rgb565_convert_internal gray_rgb565_convert_le
 |  | ||||||
| +#define gray_rgb565D_convert_internal gray_rgb565D_convert_le
 |  | ||||||
| +#include "jdcol565.c"
 |  | ||||||
| +#undef PACK_SHORT_565
 |  | ||||||
| +#undef PACK_TWO_PIXELS
 |  | ||||||
| +#undef ycc_rgb565_convert_internal
 |  | ||||||
| +#undef ycc_rgb565D_convert_internal
 |  | ||||||
| +#undef rgb_rgb565_convert_internal
 |  | ||||||
| +#undef rgb_rgb565D_convert_internal
 |  | ||||||
| +#undef gray_rgb565_convert_internal
 |  | ||||||
| +#undef gray_rgb565D_convert_internal
 |  | ||||||
| +
 |  | ||||||
| +#define PACK_SHORT_565 PACK_SHORT_565_BE
 |  | ||||||
| +#define PACK_TWO_PIXELS PACK_TWO_PIXELS_BE
 |  | ||||||
| +#define ycc_rgb565_convert_internal ycc_rgb565_convert_be
 |  | ||||||
| +#define ycc_rgb565D_convert_internal ycc_rgb565D_convert_be
 |  | ||||||
| +#define rgb_rgb565_convert_internal rgb_rgb565_convert_be
 |  | ||||||
| +#define rgb_rgb565D_convert_internal rgb_rgb565D_convert_be
 |  | ||||||
| +#define gray_rgb565_convert_internal gray_rgb565_convert_be
 |  | ||||||
| +#define gray_rgb565D_convert_internal gray_rgb565D_convert_be
 |  | ||||||
|  #include "jdcol565.c" |  | ||||||
| +#undef PACK_SHORT_565
 |  | ||||||
| +#undef PACK_TWO_PIXELS
 |  | ||||||
| +#undef ycc_rgb565_convert_internal
 |  | ||||||
| +#undef ycc_rgb565D_convert_internal
 |  | ||||||
| +#undef rgb_rgb565_convert_internal
 |  | ||||||
| +#undef rgb_rgb565D_convert_internal
 |  | ||||||
| +#undef gray_rgb565_convert_internal
 |  | ||||||
| +#undef gray_rgb565D_convert_internal
 |  | ||||||
| +
 |  | ||||||
| +
 |  | ||||||
| +METHODDEF(void)
 |  | ||||||
| +ycc_rgb565_convert (j_decompress_ptr cinfo,
 |  | ||||||
| +                    JSAMPIMAGE input_buf, JDIMENSION input_row,
 |  | ||||||
| +                    JSAMPARRAY output_buf, int num_rows)
 |  | ||||||
| +{
 |  | ||||||
| +  if (is_big_endian())
 |  | ||||||
| +    ycc_rgb565_convert_be(cinfo, input_buf, input_row, output_buf, num_rows);
 |  | ||||||
| +  else
 |  | ||||||
| +    ycc_rgb565_convert_le(cinfo, input_buf, input_row, output_buf, num_rows);
 |  | ||||||
| +}
 |  | ||||||
| +
 |  | ||||||
| +
 |  | ||||||
| +METHODDEF(void)
 |  | ||||||
| +ycc_rgb565D_convert (j_decompress_ptr cinfo,
 |  | ||||||
| +                     JSAMPIMAGE input_buf, JDIMENSION input_row,
 |  | ||||||
| +                     JSAMPARRAY output_buf, int num_rows)
 |  | ||||||
| +{
 |  | ||||||
| +  if (is_big_endian())
 |  | ||||||
| +    ycc_rgb565D_convert_be(cinfo, input_buf, input_row, output_buf, num_rows);
 |  | ||||||
| +  else
 |  | ||||||
| +    ycc_rgb565D_convert_le(cinfo, input_buf, input_row, output_buf, num_rows);
 |  | ||||||
| +}
 |  | ||||||
| +
 |  | ||||||
| +
 |  | ||||||
| +METHODDEF(void)
 |  | ||||||
| +rgb_rgb565_convert (j_decompress_ptr cinfo,
 |  | ||||||
| +                    JSAMPIMAGE input_buf, JDIMENSION input_row,
 |  | ||||||
| +                    JSAMPARRAY output_buf, int num_rows)
 |  | ||||||
| +{
 |  | ||||||
| +  if (is_big_endian())
 |  | ||||||
| +    rgb_rgb565_convert_be(cinfo, input_buf, input_row, output_buf, num_rows);
 |  | ||||||
| +  else
 |  | ||||||
| +    rgb_rgb565_convert_le(cinfo, input_buf, input_row, output_buf, num_rows);
 |  | ||||||
| +}
 |  | ||||||
| +
 |  | ||||||
| +
 |  | ||||||
| +METHODDEF(void)
 |  | ||||||
| +rgb_rgb565D_convert (j_decompress_ptr cinfo,
 |  | ||||||
| +                     JSAMPIMAGE input_buf, JDIMENSION input_row,
 |  | ||||||
| +                     JSAMPARRAY output_buf, int num_rows)
 |  | ||||||
| +{
 |  | ||||||
| +  if (is_big_endian())
 |  | ||||||
| +    rgb_rgb565D_convert_be(cinfo, input_buf, input_row, output_buf, num_rows);
 |  | ||||||
| +  else
 |  | ||||||
| +    rgb_rgb565D_convert_le(cinfo, input_buf, input_row, output_buf, num_rows);
 |  | ||||||
| +}
 |  | ||||||
| +
 |  | ||||||
| +
 |  | ||||||
| +METHODDEF(void)
 |  | ||||||
| +gray_rgb565_convert (j_decompress_ptr cinfo,
 |  | ||||||
| +                     JSAMPIMAGE input_buf, JDIMENSION input_row,
 |  | ||||||
| +                     JSAMPARRAY output_buf, int num_rows)
 |  | ||||||
| +{
 |  | ||||||
| +  if (is_big_endian())
 |  | ||||||
| +    gray_rgb565_convert_be(cinfo, input_buf, input_row, output_buf, num_rows);
 |  | ||||||
| +  else
 |  | ||||||
| +    gray_rgb565_convert_le(cinfo, input_buf, input_row, output_buf, num_rows);
 |  | ||||||
| +}
 |  | ||||||
| +
 |  | ||||||
| +
 |  | ||||||
| +METHODDEF(void)
 |  | ||||||
| +gray_rgb565D_convert (j_decompress_ptr cinfo,
 |  | ||||||
| +                      JSAMPIMAGE input_buf, JDIMENSION input_row,
 |  | ||||||
| +                      JSAMPARRAY output_buf, int num_rows)
 |  | ||||||
| +{
 |  | ||||||
| +  if (is_big_endian())
 |  | ||||||
| +    gray_rgb565D_convert_be(cinfo, input_buf, input_row, output_buf, num_rows);
 |  | ||||||
| +  else
 |  | ||||||
| +    gray_rgb565D_convert_le(cinfo, input_buf, input_row, output_buf, num_rows);
 |  | ||||||
| +}
 |  | ||||||
|   |  | ||||||
|   |  | ||||||
|  /* |  | ||||||
| diff --git a/jdmerge.c b/jdmerge.c
 |  | ||||||
| index f89d69f..d857183 100644
 |  | ||||||
| --- a/jdmerge.c
 |  | ||||||
| +++ b/jdmerge.c
 |  | ||||||
| @@ -45,38 +45,6 @@
 |  | ||||||
|  #ifdef UPSAMPLE_MERGING_SUPPORTED |  | ||||||
|   |  | ||||||
|   |  | ||||||
| -#define PACK_SHORT_565(r, g, b)   ((((r) << 8) & 0xf800) |  \
 |  | ||||||
| -                                   (((g) << 3) & 0x7E0) | ((b) >> 3))
 |  | ||||||
| -#define PACK_TWO_PIXELS(l, r)     ((r << 16) | l)
 |  | ||||||
| -#define PACK_NEED_ALIGNMENT(ptr)  (((size_t)(ptr)) & 3)
 |  | ||||||
| -
 |  | ||||||
| -#define WRITE_TWO_PIXELS(addr, pixels) {  \
 |  | ||||||
| -  ((INT16*)(addr))[0] = (pixels);  \
 |  | ||||||
| -  ((INT16*)(addr))[1] = (pixels) >> 16;  \
 |  | ||||||
| -}
 |  | ||||||
| -#define WRITE_TWO_ALIGNED_PIXELS(addr, pixels)  ((*(INT32 *)(addr)) = pixels)
 |  | ||||||
| -
 |  | ||||||
| -#define DITHER_565_R(r, dither)  ((r) + ((dither) & 0xFF))
 |  | ||||||
| -#define DITHER_565_G(g, dither)  ((g) + (((dither) & 0xFF) >> 1))
 |  | ||||||
| -#define DITHER_565_B(b, dither)  ((b) + ((dither) & 0xFF))
 |  | ||||||
| -
 |  | ||||||
| -
 |  | ||||||
| -/* Declarations for ordered dithering
 |  | ||||||
| - *
 |  | ||||||
| - * We use a 4x4 ordered dither array packed into 32 bits.  This array is
 |  | ||||||
| - * sufficent for dithering RGB888 to RGB565.
 |  | ||||||
| - */
 |  | ||||||
| -
 |  | ||||||
| -#define DITHER_MASK       0x3
 |  | ||||||
| -#define DITHER_ROTATE(x)  (((x) << 24) | (((x) >> 8) & 0x00FFFFFF))
 |  | ||||||
| -static const INT32 dither_matrix[4] = {
 |  | ||||||
| -  0x0008020A,
 |  | ||||||
| -  0x0C040E06,
 |  | ||||||
| -  0x030B0109,
 |  | ||||||
| -  0x0F070D05
 |  | ||||||
| -};
 |  | ||||||
| -
 |  | ||||||
| -
 |  | ||||||
|  /* Private subobject */ |  | ||||||
|   |  | ||||||
|  typedef struct { |  | ||||||
| @@ -450,74 +418,107 @@ h2v2_merged_upsample (j_decompress_ptr cinfo,
 |  | ||||||
|    } |  | ||||||
|  } |  | ||||||
|   |  | ||||||
| +/*
 |  | ||||||
| + * RGB565 conversion
 |  | ||||||
| + */
 |  | ||||||
| +
 |  | ||||||
| +#define PACK_SHORT_565_LE(r, g, b)   ((((r) << 8) & 0xF800) |  \
 |  | ||||||
| +                                      (((g) << 3) & 0x7E0) | ((b) >> 3))
 |  | ||||||
| +#define PACK_SHORT_565_BE(r, g, b)   (((r) & 0xF8) | ((g) >> 5) |  \
 |  | ||||||
| +                                      (((g) << 11) & 0xE000) |  \
 |  | ||||||
| +                                      (((b) << 5) & 0x1F00))
 |  | ||||||
| +
 |  | ||||||
| +#define PACK_TWO_PIXELS_LE(l, r)     ((r << 16) | l)
 |  | ||||||
| +#define PACK_TWO_PIXELS_BE(l, r)     ((l << 16) | r)
 |  | ||||||
| +
 |  | ||||||
| +#define PACK_NEED_ALIGNMENT(ptr)  (((size_t)(ptr)) & 3)
 |  | ||||||
| +
 |  | ||||||
| +#define WRITE_TWO_PIXELS_LE(addr, pixels) {  \
 |  | ||||||
| +  ((INT16*)(addr))[0] = (pixels);  \
 |  | ||||||
| +  ((INT16*)(addr))[1] = (pixels) >> 16;  \
 |  | ||||||
| +}
 |  | ||||||
| +#define WRITE_TWO_PIXELS_BE(addr, pixels) {  \
 |  | ||||||
| +  ((INT16*)(addr))[1] = (pixels);  \
 |  | ||||||
| +  ((INT16*)(addr))[0] = (pixels) >> 16;  \
 |  | ||||||
| +}
 |  | ||||||
| +
 |  | ||||||
| +#define DITHER_565_R(r, dither)  ((r) + ((dither) & 0xFF))
 |  | ||||||
| +#define DITHER_565_G(g, dither)  ((g) + (((dither) & 0xFF) >> 1))
 |  | ||||||
| +#define DITHER_565_B(b, dither)  ((b) + ((dither) & 0xFF))
 |  | ||||||
| +
 |  | ||||||
| +
 |  | ||||||
| +/* Declarations for ordered dithering
 |  | ||||||
| + *
 |  | ||||||
| + * We use a 4x4 ordered dither array packed into 32 bits.  This array is
 |  | ||||||
| + * sufficent for dithering RGB888 to RGB565.
 |  | ||||||
| + */
 |  | ||||||
| +
 |  | ||||||
| +#define DITHER_MASK       0x3
 |  | ||||||
| +#define DITHER_ROTATE(x)  (((x) << 24) | (((x) >> 8) & 0x00FFFFFF))
 |  | ||||||
| +static const INT32 dither_matrix[4] = {
 |  | ||||||
| +  0x0008020A,
 |  | ||||||
| +  0x0C040E06,
 |  | ||||||
| +  0x030B0109,
 |  | ||||||
| +  0x0F070D05
 |  | ||||||
| +};
 |  | ||||||
| +
 |  | ||||||
| +
 |  | ||||||
| +/* Include inline routines for RGB565 conversion */
 |  | ||||||
| +
 |  | ||||||
| +#define PACK_SHORT_565 PACK_SHORT_565_LE
 |  | ||||||
| +#define PACK_TWO_PIXELS PACK_TWO_PIXELS_LE
 |  | ||||||
| +#define WRITE_TWO_PIXELS WRITE_TWO_PIXELS_LE
 |  | ||||||
| +#define h2v1_merged_upsample_565_internal h2v1_merged_upsample_565_le
 |  | ||||||
| +#define h2v1_merged_upsample_565D_internal h2v1_merged_upsample_565D_le
 |  | ||||||
| +#define h2v2_merged_upsample_565_internal h2v2_merged_upsample_565_le
 |  | ||||||
| +#define h2v2_merged_upsample_565D_internal h2v2_merged_upsample_565D_le
 |  | ||||||
| +#include "jdmrg565.c"
 |  | ||||||
| +#undef PACK_SHORT_565
 |  | ||||||
| +#undef PACK_TWO_PIXELS
 |  | ||||||
| +#undef WRITE_TWO_PIXELS
 |  | ||||||
| +#undef h2v1_merged_upsample_565_internal
 |  | ||||||
| +#undef h2v1_merged_upsample_565D_internal
 |  | ||||||
| +#undef h2v2_merged_upsample_565_internal
 |  | ||||||
| +#undef h2v2_merged_upsample_565D_internal
 |  | ||||||
| +
 |  | ||||||
| +#define PACK_SHORT_565 PACK_SHORT_565_BE
 |  | ||||||
| +#define PACK_TWO_PIXELS PACK_TWO_PIXELS_BE
 |  | ||||||
| +#define WRITE_TWO_PIXELS WRITE_TWO_PIXELS_BE
 |  | ||||||
| +#define h2v1_merged_upsample_565_internal h2v1_merged_upsample_565_be
 |  | ||||||
| +#define h2v1_merged_upsample_565D_internal h2v1_merged_upsample_565D_be
 |  | ||||||
| +#define h2v2_merged_upsample_565_internal h2v2_merged_upsample_565_be
 |  | ||||||
| +#define h2v2_merged_upsample_565D_internal h2v2_merged_upsample_565D_be
 |  | ||||||
| +#include "jdmrg565.c"
 |  | ||||||
| +#undef PACK_SHORT_565
 |  | ||||||
| +#undef PACK_TWO_PIXELS
 |  | ||||||
| +#undef WRITE_TWO_PIXELS
 |  | ||||||
| +#undef h2v1_merged_upsample_565_internal
 |  | ||||||
| +#undef h2v1_merged_upsample_565D_internal
 |  | ||||||
| +#undef h2v2_merged_upsample_565_internal
 |  | ||||||
| +#undef h2v2_merged_upsample_565D_internal
 |  | ||||||
| +
 |  | ||||||
| +
 |  | ||||||
| +static INLINE boolean is_big_endian(void)
 |  | ||||||
| +{
 |  | ||||||
| +  int test_value = 1;
 |  | ||||||
| +  if(*(char *)&test_value != 1)
 |  | ||||||
| +    return TRUE;
 |  | ||||||
| +  return FALSE;
 |  | ||||||
| +}
 |  | ||||||
| +
 |  | ||||||
|   |  | ||||||
|  METHODDEF(void) |  | ||||||
|  h2v1_merged_upsample_565 (j_decompress_ptr cinfo, |  | ||||||
|                            JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr, |  | ||||||
|                            JSAMPARRAY output_buf) |  | ||||||
|  { |  | ||||||
| -  my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample;
 |  | ||||||
| -  register int y, cred, cgreen, cblue;
 |  | ||||||
| -  int cb, cr;
 |  | ||||||
| -  register JSAMPROW outptr;
 |  | ||||||
| -  JSAMPROW inptr0, inptr1, inptr2;
 |  | ||||||
| -  JDIMENSION col;
 |  | ||||||
| -  /* copy these pointers into registers if possible */
 |  | ||||||
| -  register JSAMPLE * range_limit = cinfo->sample_range_limit;
 |  | ||||||
| -  int * Crrtab = upsample->Cr_r_tab;
 |  | ||||||
| -  int * Cbbtab = upsample->Cb_b_tab;
 |  | ||||||
| -  INT32 * Crgtab = upsample->Cr_g_tab;
 |  | ||||||
| -  INT32 * Cbgtab = upsample->Cb_g_tab;
 |  | ||||||
| -  unsigned int r, g, b;
 |  | ||||||
| -  INT32 rgb;
 |  | ||||||
| -  SHIFT_TEMPS
 |  | ||||||
| -
 |  | ||||||
| -  inptr0 = input_buf[0][in_row_group_ctr];
 |  | ||||||
| -  inptr1 = input_buf[1][in_row_group_ctr];
 |  | ||||||
| -  inptr2 = input_buf[2][in_row_group_ctr];
 |  | ||||||
| -  outptr = output_buf[0];
 |  | ||||||
| -
 |  | ||||||
| -  /* Loop for each pair of output pixels */
 |  | ||||||
| -  for (col = cinfo->output_width >> 1; col > 0; col--) {
 |  | ||||||
| -    /* Do the chroma part of the calculation */
 |  | ||||||
| -    cb = GETJSAMPLE(*inptr1++);
 |  | ||||||
| -    cr = GETJSAMPLE(*inptr2++);
 |  | ||||||
| -    cred = Crrtab[cr];
 |  | ||||||
| -    cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS);
 |  | ||||||
| -    cblue = Cbbtab[cb];
 |  | ||||||
| -
 |  | ||||||
| -    /* Fetch 2 Y values and emit 2 pixels */
 |  | ||||||
| -    y  = GETJSAMPLE(*inptr0++);
 |  | ||||||
| -    r = range_limit[y + cred];
 |  | ||||||
| -    g = range_limit[y + cgreen];
 |  | ||||||
| -    b = range_limit[y + cblue];
 |  | ||||||
| -    rgb = PACK_SHORT_565(r, g, b);
 |  | ||||||
| -
 |  | ||||||
| -    y  = GETJSAMPLE(*inptr0++);
 |  | ||||||
| -    r = range_limit[y + cred];
 |  | ||||||
| -    g = range_limit[y + cgreen];
 |  | ||||||
| -    b = range_limit[y + cblue];
 |  | ||||||
| -    rgb = PACK_TWO_PIXELS(rgb, PACK_SHORT_565(r, g, b));
 |  | ||||||
| -
 |  | ||||||
| -    WRITE_TWO_PIXELS(outptr, rgb);
 |  | ||||||
| -    outptr += 4;
 |  | ||||||
| -  }
 |  | ||||||
| -
 |  | ||||||
| -  /* If image width is odd, do the last output column separately */
 |  | ||||||
| -  if (cinfo->output_width & 1) {
 |  | ||||||
| -    cb = GETJSAMPLE(*inptr1);
 |  | ||||||
| -    cr = GETJSAMPLE(*inptr2);
 |  | ||||||
| -    cred = Crrtab[cr];
 |  | ||||||
| -    cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS);
 |  | ||||||
| -    cblue = Cbbtab[cb];
 |  | ||||||
| -    y  = GETJSAMPLE(*inptr0);
 |  | ||||||
| -    r = range_limit[y + cred];
 |  | ||||||
| -    g = range_limit[y + cgreen];
 |  | ||||||
| -    b = range_limit[y + cblue];
 |  | ||||||
| -    rgb = PACK_SHORT_565(r, g, b);
 |  | ||||||
| -    *(INT16*)outptr = rgb;
 |  | ||||||
| -   }
 |  | ||||||
| - }
 |  | ||||||
| +  if (is_big_endian())
 |  | ||||||
| +    h2v1_merged_upsample_565_be(cinfo, input_buf, in_row_group_ctr,
 |  | ||||||
| +                                output_buf);
 |  | ||||||
| +  else
 |  | ||||||
| +    h2v1_merged_upsample_565_le(cinfo, input_buf, in_row_group_ctr,
 |  | ||||||
| +                                output_buf);
 |  | ||||||
| +}
 |  | ||||||
|   |  | ||||||
|   |  | ||||||
|  METHODDEF(void) |  | ||||||
| @@ -525,70 +526,12 @@ h2v1_merged_upsample_565D (j_decompress_ptr cinfo,
 |  | ||||||
|                             JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr, |  | ||||||
|                             JSAMPARRAY output_buf) |  | ||||||
|  { |  | ||||||
| -  my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample;
 |  | ||||||
| -  register int y, cred, cgreen, cblue;
 |  | ||||||
| -  int cb, cr;
 |  | ||||||
| -  register JSAMPROW outptr;
 |  | ||||||
| -  JSAMPROW inptr0, inptr1, inptr2;
 |  | ||||||
| -  JDIMENSION col;
 |  | ||||||
| -  /* copy these pointers into registers if possible */
 |  | ||||||
| -  register JSAMPLE * range_limit = cinfo->sample_range_limit;
 |  | ||||||
| -  int * Crrtab = upsample->Cr_r_tab;
 |  | ||||||
| -  int * Cbbtab = upsample->Cb_b_tab;
 |  | ||||||
| -  INT32 * Crgtab = upsample->Cr_g_tab;
 |  | ||||||
| -  INT32 * Cbgtab = upsample->Cb_g_tab;
 |  | ||||||
| -  INT32 d0 = dither_matrix[cinfo->output_scanline & DITHER_MASK];
 |  | ||||||
| -  unsigned int r, g, b;
 |  | ||||||
| -  INT32 rgb;
 |  | ||||||
| -  SHIFT_TEMPS
 |  | ||||||
| -
 |  | ||||||
| -  inptr0 = input_buf[0][in_row_group_ctr];
 |  | ||||||
| -  inptr1 = input_buf[1][in_row_group_ctr];
 |  | ||||||
| -  inptr2 = input_buf[2][in_row_group_ctr];
 |  | ||||||
| -  outptr = output_buf[0];
 |  | ||||||
| -
 |  | ||||||
| -  /* Loop for each pair of output pixels */
 |  | ||||||
| -  for (col = cinfo->output_width >> 1; col > 0; col--) {
 |  | ||||||
| -    /* Do the chroma part of the calculation */
 |  | ||||||
| -    cb = GETJSAMPLE(*inptr1++);
 |  | ||||||
| -    cr = GETJSAMPLE(*inptr2++);
 |  | ||||||
| -    cred = Crrtab[cr];
 |  | ||||||
| -    cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS);
 |  | ||||||
| -    cblue = Cbbtab[cb];
 |  | ||||||
| -
 |  | ||||||
| -    /* Fetch 2 Y values and emit 2 pixels */
 |  | ||||||
| -    y  = GETJSAMPLE(*inptr0++);
 |  | ||||||
| -    r = range_limit[DITHER_565_R(y + cred, d0)];
 |  | ||||||
| -    g = range_limit[DITHER_565_G(y + cgreen, d0)];
 |  | ||||||
| -    b = range_limit[DITHER_565_B(y + cblue, d0)];
 |  | ||||||
| -    d0 = DITHER_ROTATE(d0);
 |  | ||||||
| -    rgb = PACK_SHORT_565(r, g, b);
 |  | ||||||
| -
 |  | ||||||
| -    y  = GETJSAMPLE(*inptr0++);
 |  | ||||||
| -    r = range_limit[DITHER_565_R(y + cred, d0)];
 |  | ||||||
| -    g = range_limit[DITHER_565_G(y + cgreen, d0)];
 |  | ||||||
| -    b = range_limit[DITHER_565_B(y + cblue, d0)];
 |  | ||||||
| -    d0 = DITHER_ROTATE(d0);
 |  | ||||||
| -    rgb = PACK_TWO_PIXELS(rgb, PACK_SHORT_565(r, g, b));
 |  | ||||||
| -
 |  | ||||||
| -    WRITE_TWO_PIXELS(outptr, rgb);
 |  | ||||||
| -    outptr += 4;
 |  | ||||||
| -  }
 |  | ||||||
| -
 |  | ||||||
| -  /* If image width is odd, do the last output column separately */
 |  | ||||||
| -  if (cinfo->output_width & 1) {
 |  | ||||||
| -    cb = GETJSAMPLE(*inptr1);
 |  | ||||||
| -    cr = GETJSAMPLE(*inptr2);
 |  | ||||||
| -    cred = Crrtab[cr];
 |  | ||||||
| -    cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS);
 |  | ||||||
| -    cblue = Cbbtab[cb];
 |  | ||||||
| -    y  = GETJSAMPLE(*inptr0);
 |  | ||||||
| -    r = range_limit[DITHER_565_R(y + cred, d0)];
 |  | ||||||
| -    g = range_limit[DITHER_565_G(y + cgreen, d0)];
 |  | ||||||
| -    b = range_limit[DITHER_565_B(y + cblue, d0)];
 |  | ||||||
| -    rgb = PACK_SHORT_565(r, g, b);
 |  | ||||||
| -    *(INT16*)outptr = rgb;
 |  | ||||||
| -  }
 |  | ||||||
| +  if (is_big_endian())
 |  | ||||||
| +    h2v1_merged_upsample_565D_be(cinfo, input_buf, in_row_group_ctr,
 |  | ||||||
| +                                 output_buf);
 |  | ||||||
| +  else
 |  | ||||||
| +    h2v1_merged_upsample_565D_le(cinfo, input_buf, in_row_group_ctr,
 |  | ||||||
| +                                 output_buf);
 |  | ||||||
|  } |  | ||||||
|   |  | ||||||
|   |  | ||||||
| @@ -597,92 +540,12 @@ h2v2_merged_upsample_565 (j_decompress_ptr cinfo,
 |  | ||||||
|                            JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr, |  | ||||||
|                            JSAMPARRAY output_buf) |  | ||||||
|  { |  | ||||||
| -  my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample;
 |  | ||||||
| -  register int y, cred, cgreen, cblue;
 |  | ||||||
| -  int cb, cr;
 |  | ||||||
| -  register JSAMPROW outptr0, outptr1;
 |  | ||||||
| -  JSAMPROW inptr00, inptr01, inptr1, inptr2;
 |  | ||||||
| -  JDIMENSION col;
 |  | ||||||
| -  /* copy these pointers into registers if possible */
 |  | ||||||
| -  register JSAMPLE * range_limit = cinfo->sample_range_limit;
 |  | ||||||
| -  int * Crrtab = upsample->Cr_r_tab;
 |  | ||||||
| -  int * Cbbtab = upsample->Cb_b_tab;
 |  | ||||||
| -  INT32 * Crgtab = upsample->Cr_g_tab;
 |  | ||||||
| -  INT32 * Cbgtab = upsample->Cb_g_tab;
 |  | ||||||
| -  unsigned int r, g, b;
 |  | ||||||
| -  INT32 rgb;
 |  | ||||||
| -  SHIFT_TEMPS
 |  | ||||||
| -
 |  | ||||||
| -  inptr00 = input_buf[0][in_row_group_ctr * 2];
 |  | ||||||
| -  inptr01 = input_buf[0][in_row_group_ctr * 2 + 1];
 |  | ||||||
| -  inptr1 = input_buf[1][in_row_group_ctr];
 |  | ||||||
| -  inptr2 = input_buf[2][in_row_group_ctr];
 |  | ||||||
| -  outptr0 = output_buf[0];
 |  | ||||||
| -  outptr1 = output_buf[1];
 |  | ||||||
| -
 |  | ||||||
| -  /* Loop for each group of output pixels */
 |  | ||||||
| -  for (col = cinfo->output_width >> 1; col > 0; col--) {
 |  | ||||||
| -    /* Do the chroma part of the calculation */
 |  | ||||||
| -    cb = GETJSAMPLE(*inptr1++);
 |  | ||||||
| -    cr = GETJSAMPLE(*inptr2++);
 |  | ||||||
| -    cred = Crrtab[cr];
 |  | ||||||
| -    cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS);
 |  | ||||||
| -    cblue = Cbbtab[cb];
 |  | ||||||
| -
 |  | ||||||
| -    /* Fetch 4 Y values and emit 4 pixels */
 |  | ||||||
| -    y  = GETJSAMPLE(*inptr00++);
 |  | ||||||
| -    r = range_limit[y + cred];
 |  | ||||||
| -    g = range_limit[y + cgreen];
 |  | ||||||
| -    b = range_limit[y + cblue];
 |  | ||||||
| -    rgb = PACK_SHORT_565(r, g, b);
 |  | ||||||
| -
 |  | ||||||
| -    y  = GETJSAMPLE(*inptr00++);
 |  | ||||||
| -    r = range_limit[y + cred];
 |  | ||||||
| -    g = range_limit[y + cgreen];
 |  | ||||||
| -    b = range_limit[y + cblue];
 |  | ||||||
| -    rgb = PACK_TWO_PIXELS(rgb, PACK_SHORT_565(r, g, b));
 |  | ||||||
| -
 |  | ||||||
| -    WRITE_TWO_PIXELS(outptr0, rgb);
 |  | ||||||
| -    outptr0 += 4;
 |  | ||||||
| -
 |  | ||||||
| -    y  = GETJSAMPLE(*inptr01++);
 |  | ||||||
| -    r = range_limit[y + cred];
 |  | ||||||
| -    g = range_limit[y + cgreen];
 |  | ||||||
| -    b = range_limit[y + cblue];
 |  | ||||||
| -    rgb = PACK_SHORT_565(r, g, b);
 |  | ||||||
| -
 |  | ||||||
| -    y  = GETJSAMPLE(*inptr01++);
 |  | ||||||
| -    r = range_limit[y + cred];
 |  | ||||||
| -    g = range_limit[y + cgreen];
 |  | ||||||
| -    b = range_limit[y + cblue];
 |  | ||||||
| -    rgb = PACK_TWO_PIXELS(rgb, PACK_SHORT_565(r, g, b));
 |  | ||||||
| -
 |  | ||||||
| -    WRITE_TWO_PIXELS(outptr1, rgb);
 |  | ||||||
| -    outptr1 += 4;
 |  | ||||||
| -  }
 |  | ||||||
| -
 |  | ||||||
| -  /* If image width is odd, do the last output column separately */
 |  | ||||||
| -  if (cinfo->output_width & 1) {
 |  | ||||||
| -    cb = GETJSAMPLE(*inptr1);
 |  | ||||||
| -    cr = GETJSAMPLE(*inptr2);
 |  | ||||||
| -    cred = Crrtab[cr];
 |  | ||||||
| -    cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS);
 |  | ||||||
| -    cblue = Cbbtab[cb];
 |  | ||||||
| -
 |  | ||||||
| -    y  = GETJSAMPLE(*inptr00);
 |  | ||||||
| -    r = range_limit[y + cred];
 |  | ||||||
| -    g = range_limit[y + cgreen];
 |  | ||||||
| -    b = range_limit[y + cblue];
 |  | ||||||
| -    rgb = PACK_SHORT_565(r, g, b);
 |  | ||||||
| -    *(INT16*)outptr0 = rgb;
 |  | ||||||
| -
 |  | ||||||
| -    y  = GETJSAMPLE(*inptr01);
 |  | ||||||
| -    r = range_limit[y + cred];
 |  | ||||||
| -    g = range_limit[y + cgreen];
 |  | ||||||
| -    b = range_limit[y + cblue];
 |  | ||||||
| -    rgb = PACK_SHORT_565(r, g, b);
 |  | ||||||
| -    *(INT16*)outptr1 = rgb;
 |  | ||||||
| -  }
 |  | ||||||
| +  if (is_big_endian())
 |  | ||||||
| +    h2v2_merged_upsample_565_be(cinfo, input_buf, in_row_group_ctr,
 |  | ||||||
| +                                output_buf);
 |  | ||||||
| +  else
 |  | ||||||
| +    h2v2_merged_upsample_565_le(cinfo, input_buf, in_row_group_ctr,
 |  | ||||||
| +                                output_buf);
 |  | ||||||
|  } |  | ||||||
|   |  | ||||||
|   |  | ||||||
| @@ -691,98 +554,12 @@ h2v2_merged_upsample_565D (j_decompress_ptr cinfo,
 |  | ||||||
|                             JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr, |  | ||||||
|                             JSAMPARRAY output_buf) |  | ||||||
|  { |  | ||||||
| -  my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample;
 |  | ||||||
| -  register int y, cred, cgreen, cblue;
 |  | ||||||
| -  int cb, cr;
 |  | ||||||
| -  register JSAMPROW outptr0, outptr1;
 |  | ||||||
| -  JSAMPROW inptr00, inptr01, inptr1, inptr2;
 |  | ||||||
| -  JDIMENSION col;
 |  | ||||||
| -  /* copy these pointers into registers if possible */
 |  | ||||||
| -  register JSAMPLE * range_limit = cinfo->sample_range_limit;
 |  | ||||||
| -  int * Crrtab = upsample->Cr_r_tab;
 |  | ||||||
| -  int * Cbbtab = upsample->Cb_b_tab;
 |  | ||||||
| -  INT32 * Crgtab = upsample->Cr_g_tab;
 |  | ||||||
| -  INT32 * Cbgtab = upsample->Cb_g_tab;
 |  | ||||||
| -  INT32 d0 = dither_matrix[cinfo->output_scanline & DITHER_MASK];
 |  | ||||||
| -  INT32 d1 = dither_matrix[(cinfo->output_scanline+1) & DITHER_MASK];
 |  | ||||||
| -  unsigned int r, g, b;
 |  | ||||||
| -  INT32 rgb;
 |  | ||||||
| -  SHIFT_TEMPS
 |  | ||||||
| -
 |  | ||||||
| -  inptr00 = input_buf[0][in_row_group_ctr*2];
 |  | ||||||
| -  inptr01 = input_buf[0][in_row_group_ctr*2 + 1];
 |  | ||||||
| -  inptr1 = input_buf[1][in_row_group_ctr];
 |  | ||||||
| -  inptr2 = input_buf[2][in_row_group_ctr];
 |  | ||||||
| -  outptr0 = output_buf[0];
 |  | ||||||
| -  outptr1 = output_buf[1];
 |  | ||||||
| -
 |  | ||||||
| -  /* Loop for each group of output pixels */
 |  | ||||||
| -  for (col = cinfo->output_width >> 1; col > 0; col--) {
 |  | ||||||
| -    /* Do the chroma part of the calculation */
 |  | ||||||
| -    cb = GETJSAMPLE(*inptr1++);
 |  | ||||||
| -    cr = GETJSAMPLE(*inptr2++);
 |  | ||||||
| -    cred = Crrtab[cr];
 |  | ||||||
| -    cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS);
 |  | ||||||
| -    cblue = Cbbtab[cb];
 |  | ||||||
| -
 |  | ||||||
| -    /* Fetch 4 Y values and emit 4 pixels */
 |  | ||||||
| -    y  = GETJSAMPLE(*inptr00++);
 |  | ||||||
| -    r = range_limit[DITHER_565_R(y + cred, d0)];
 |  | ||||||
| -    g = range_limit[DITHER_565_G(y + cgreen, d0)];
 |  | ||||||
| -    b = range_limit[DITHER_565_B(y + cblue, d0)];
 |  | ||||||
| -    d0 = DITHER_ROTATE(d0);
 |  | ||||||
| -    rgb = PACK_SHORT_565(r, g, b);
 |  | ||||||
| -
 |  | ||||||
| -    y  = GETJSAMPLE(*inptr00++);
 |  | ||||||
| -    r = range_limit[DITHER_565_R(y + cred, d1)];
 |  | ||||||
| -    g = range_limit[DITHER_565_G(y + cgreen, d1)];
 |  | ||||||
| -    b = range_limit[DITHER_565_B(y + cblue, d1)];
 |  | ||||||
| -    d1 = DITHER_ROTATE(d1);
 |  | ||||||
| -    rgb = PACK_TWO_PIXELS(rgb, PACK_SHORT_565(r, g, b));
 |  | ||||||
| -
 |  | ||||||
| -    WRITE_TWO_PIXELS(outptr0, rgb);
 |  | ||||||
| -    outptr0 += 4;
 |  | ||||||
| -
 |  | ||||||
| -    y  = GETJSAMPLE(*inptr01++);
 |  | ||||||
| -    r = range_limit[DITHER_565_R(y + cred, d0)];
 |  | ||||||
| -    g = range_limit[DITHER_565_G(y + cgreen, d0)];
 |  | ||||||
| -    b = range_limit[DITHER_565_B(y + cblue, d0)];
 |  | ||||||
| -    d0 = DITHER_ROTATE(d0);
 |  | ||||||
| -    rgb = PACK_SHORT_565(r, g, b);
 |  | ||||||
| -
 |  | ||||||
| -    y  = GETJSAMPLE(*inptr01++);
 |  | ||||||
| -    r = range_limit[DITHER_565_R(y + cred, d1)];
 |  | ||||||
| -    g = range_limit[DITHER_565_G(y + cgreen, d1)];
 |  | ||||||
| -    b = range_limit[DITHER_565_B(y + cblue, d1)];
 |  | ||||||
| -    d1 = DITHER_ROTATE(d1);
 |  | ||||||
| -    rgb = PACK_TWO_PIXELS(rgb, PACK_SHORT_565(r, g, b));
 |  | ||||||
| -
 |  | ||||||
| -    WRITE_TWO_PIXELS(outptr1, rgb);
 |  | ||||||
| -    outptr1 += 4;
 |  | ||||||
| -  }
 |  | ||||||
| -
 |  | ||||||
| -  /* If image width is odd, do the last output column separately */
 |  | ||||||
| -  if (cinfo->output_width & 1) {
 |  | ||||||
| -    cb = GETJSAMPLE(*inptr1);
 |  | ||||||
| -    cr = GETJSAMPLE(*inptr2);
 |  | ||||||
| -    cred = Crrtab[cr];
 |  | ||||||
| -    cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS);
 |  | ||||||
| -    cblue = Cbbtab[cb];
 |  | ||||||
| -
 |  | ||||||
| -    y  = GETJSAMPLE(*inptr00);
 |  | ||||||
| -    r = range_limit[DITHER_565_R(y + cred, d0)];
 |  | ||||||
| -    g = range_limit[DITHER_565_G(y + cgreen, d0)];
 |  | ||||||
| -    b = range_limit[DITHER_565_B(y + cblue, d0)];
 |  | ||||||
| -    rgb = PACK_SHORT_565(r, g, b);
 |  | ||||||
| -    *(INT16*)outptr0 = rgb;
 |  | ||||||
| -
 |  | ||||||
| -    y  = GETJSAMPLE(*inptr01);
 |  | ||||||
| -    r = range_limit[DITHER_565_R(y + cred, d1)];
 |  | ||||||
| -    g = range_limit[DITHER_565_G(y + cgreen, d1)];
 |  | ||||||
| -    b = range_limit[DITHER_565_B(y + cblue, d1)];
 |  | ||||||
| -    rgb = PACK_SHORT_565(r, g, b);
 |  | ||||||
| -    *(INT16*)outptr1 = rgb;
 |  | ||||||
| -  }
 |  | ||||||
| +  if (is_big_endian())
 |  | ||||||
| +    h2v2_merged_upsample_565D_be(cinfo, input_buf, in_row_group_ctr,
 |  | ||||||
| +                                 output_buf);
 |  | ||||||
| +  else
 |  | ||||||
| +    h2v2_merged_upsample_565D_le(cinfo, input_buf, in_row_group_ctr,
 |  | ||||||
| +                                 output_buf);
 |  | ||||||
|  } |  | ||||||
|   |  | ||||||
|   |  | ||||||
| diff --git a/md5/md5.c b/md5/md5.c
 |  | ||||||
| index 7193e95..1e09880 100644
 |  | ||||||
| --- a/md5/md5.c
 |  | ||||||
| +++ b/md5/md5.c
 |  | ||||||
| @@ -39,6 +39,14 @@ static void MD5Transform(unsigned int [4], const unsigned char [64]);
 |  | ||||||
|  #else  |  | ||||||
|   |  | ||||||
|  /* |  | ||||||
| + * OS X doesn't have le32toh() or htole32()
 |  | ||||||
| + */
 |  | ||||||
| +#ifdef __APPLE__
 |  | ||||||
| +#include <libkern/OSByteOrder.h>
 |  | ||||||
| +#define le32toh(x) OSSwapLittleToHostInt32(x)
 |  | ||||||
| +#define htole32(x) OSSwapHostToLittleInt32(x)
 |  | ||||||
| +#endif
 |  | ||||||
| +/*
 |  | ||||||
|   * Encodes input (unsigned int) into output (unsigned char). Assumes len is |  | ||||||
|   * a multiple of 4. |  | ||||||
|   */ |  | ||||||
| diff --git a/wrbmp.c b/wrbmp.c
 |  | ||||||
| index 3a85441..5bcf23d 100644
 |  | ||||||
| --- a/wrbmp.c
 |  | ||||||
| +++ b/wrbmp.c
 |  | ||||||
| @@ -64,6 +64,15 @@ LOCAL(void) write_colormap
 |  | ||||||
|           int map_entry_size); |  | ||||||
|   |  | ||||||
|   |  | ||||||
| +static inline boolean is_big_endian(void)
 |  | ||||||
| +{
 |  | ||||||
| +  int test_value = 1;
 |  | ||||||
| +  if(*(char *)&test_value != 1)
 |  | ||||||
| +    return TRUE;
 |  | ||||||
| +  return FALSE;
 |  | ||||||
| +}
 |  | ||||||
| +
 |  | ||||||
| +
 |  | ||||||
|  /* |  | ||||||
|   * Write some pixel data. |  | ||||||
|   * In this module rows_supplied will always be 1. |  | ||||||
| @@ -93,18 +102,18 @@ put_pixel_rows (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo,
 |  | ||||||
|    outptr = image_ptr[0]; |  | ||||||
|   |  | ||||||
|    if(cinfo->out_color_space == JCS_RGB565) { |  | ||||||
| -    #define red_mask    0xF800
 |  | ||||||
| -    #define green_mask  0x7E0
 |  | ||||||
| -    #define blue_mask   0x1F
 |  | ||||||
| -    unsigned char  r, g, b;
 |  | ||||||
| +    boolean big_endian = is_big_endian();
 |  | ||||||
|      unsigned short *inptr2 = (unsigned short *)inptr; |  | ||||||
|      for (col = cinfo->output_width; col > 0; col--) { |  | ||||||
| -      r = (*inptr2 & red_mask) >> 11;
 |  | ||||||
| -      g = (*inptr2 & green_mask) >> 5;
 |  | ||||||
| -      b = (*inptr2 & blue_mask);
 |  | ||||||
| -      outptr[0] = b << 3;
 |  | ||||||
| -      outptr[1] = g << 2;
 |  | ||||||
| -      outptr[2] = r << 3;
 |  | ||||||
| +      if (big_endian) {
 |  | ||||||
| +        outptr[0] = (*inptr2 >> 5) & 0xF8;
 |  | ||||||
| +        outptr[1] = ((*inptr2 << 5) & 0xE0) | ((*inptr2 >> 11) & 0x1C);
 |  | ||||||
| +        outptr[2] = *inptr2 & 0xF8;
 |  | ||||||
| +      } else {
 |  | ||||||
| +        outptr[0] = (*inptr2 << 3) & 0xF8;
 |  | ||||||
| +        outptr[1] = (*inptr2 >> 3) & 0xFC;
 |  | ||||||
| +        outptr[2] = (*inptr2 >> 8) & 0xF8;
 |  | ||||||
| +      }
 |  | ||||||
|        outptr += 3; |  | ||||||
|        inptr2++; |  | ||||||
|      } |  | ||||||
| @ -1,17 +1,14 @@ | |||||||
| Name:           libjpeg-turbo | Name:           libjpeg-turbo | ||||||
| Version:        1.3.90 | Version:        1.4.0 | ||||||
| Release:        3%{?dist} | Release:        1%{?dist} | ||||||
| Summary:        A MMX/SSE2 accelerated library for manipulating JPEG image files | Summary:        A MMX/SSE2 accelerated library for manipulating JPEG image files | ||||||
| License:        IJG | License:        IJG | ||||||
| URL:            http://sourceforge.net/projects/libjpeg-turbo | URL:            http://sourceforge.net/projects/libjpeg-turbo | ||||||
| 
 | 
 | ||||||
| Source0:        http://downloads.sourceforge.net/%{name}/%{name}-%{version}.tar.gz | Source0:        http://downloads.sourceforge.net/%{name}/%{name}-%{version}.tar.gz | ||||||
| Source1:        jdmrg565.c | Patch0:		libjpeg-turbo12-noinst.patch | ||||||
| Patch0:         libjpeg-turbo12-noinst.patch | Patch1:		libjpeg-turbo-header-files.patch | ||||||
| Patch1:         libjpeg-turbo-header-files.patch | Patch2:		libjpeg-turbo-remove-test.patch | ||||||
| Patch2:         libjpeg-turbo-second-arch.patch |  | ||||||
| Patch3:         libjpeg-turbo-remove-test.patch |  | ||||||
| Patch4:         libjpeg-turbo-JPP-FAR-macros.patch |  | ||||||
| 
 | 
 | ||||||
| BuildRequires:  autoconf | BuildRequires:  autoconf | ||||||
| BuildRequires:  automake | BuildRequires:  automake | ||||||
| @ -78,11 +75,7 @@ manipulate JPEG files using the TurboJPEG library. | |||||||
| %setup -q | %setup -q | ||||||
| %patch0 -p1 -b .noinst | %patch0 -p1 -b .noinst | ||||||
| %patch1 -p1 -b .header-files | %patch1 -p1 -b .header-files | ||||||
| %patch2 -p1 -b .second-arch | %patch2 -p1 -b .remove-test | ||||||
| %patch3 -p1 -b .remove-test |  | ||||||
| %patch4 -p1 -b .JPP-FAR-macros |  | ||||||
| 
 |  | ||||||
| cp %SOURCE1 . |  | ||||||
| 
 | 
 | ||||||
| %build | %build | ||||||
| autoreconf -fiv | autoreconf -fiv | ||||||
| @ -139,6 +132,9 @@ make test | |||||||
| %{_libdir}/libturbojpeg.so | %{_libdir}/libturbojpeg.so | ||||||
| 
 | 
 | ||||||
| %changelog | %changelog | ||||||
|  | * Tue Jan 20 2015 Petr Hracek <phracek@redhat.com> - 1.4.0-1 | ||||||
|  | - new upstream version 1.4.0 (#1180442) | ||||||
|  | 
 | ||||||
| * Wed Nov 26 2014 Petr Hracek <phracek@redhat.com> - 1.3.90-3 | * Wed Nov 26 2014 Petr Hracek <phracek@redhat.com> - 1.3.90-3 | ||||||
| - libjpeg-turbo no longer defined macros like JPP (#1164815) | - libjpeg-turbo no longer defined macros like JPP (#1164815) | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| diff --git a/Makefile.am b/Makefile.am
 | diff --git a/Makefile.am b/Makefile.am
 | ||||||
| index 1aeb5dd..d767e4f 100644
 | index b32a41b..1758e5f 100644
 | ||||||
| --- a/Makefile.am
 | --- a/Makefile.am
 | ||||||
| +++ b/Makefile.am
 | +++ b/Makefile.am
 | ||||||
| @@ -90,9 +90,7 @@ noinst_PROGRAMS = jcstest
 | @@ -90,9 +90,7 @@ noinst_PROGRAMS = jcstest
 | ||||||
| @ -27,4 +27,4 @@ index 1aeb5dd..d767e4f 100644 | |||||||
| -
 | -
 | ||||||
|  EXTRA_DIST = win release $(DOCS) testimages CMakeLists.txt \ |  EXTRA_DIST = win release $(DOCS) testimages CMakeLists.txt \ | ||||||
|  	sharedlib/CMakeLists.txt cmakescripts libjpeg.map.in doc doxygen.config \ |  	sharedlib/CMakeLists.txt cmakescripts libjpeg.map.in doc doxygen.config \ | ||||||
|  	doxygen-extra.css jccolext.c jdcolext.c jdcol565.c jdmrgext.c jstdhuff.c |  	doxygen-extra.css jccolext.c jdcolext.c jdcol565.c jdmrgext.c jdmrg565.c \ | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user