2002-10-12 11:37:38 +00:00
/**
*
2008-04-16 22:40:48 +00:00
* * * * * * BEGIN GPL LICENSE BLOCK * * * * *
2002-10-12 11:37:38 +00:00
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version 2
2008-04-16 22:40:48 +00:00
* of the License , or ( at your option ) any later version .
2002-10-12 11:37:38 +00:00
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software Foundation ,
* Inc . , 59 Temple Place - Suite 330 , Boston , MA 02111 - 1307 , USA .
*
* The Original Code is Copyright ( C ) 2001 - 2002 by NaN Holding BV .
* All rights reserved .
*
* The Original Code is : all of this file .
*
* Contributor ( s ) : none yet .
*
2008-04-16 22:40:48 +00:00
* * * * * * END GPL LICENSE BLOCK * * * * *
2002-10-12 11:37:38 +00:00
* hamx . c
*
* $ Id $
*/
# include "BLI_blenlib.h"
2002-11-25 12:02:15 +00:00
2002-10-12 11:37:38 +00:00
# include "imbuf.h"
# include "imbuf_patch.h"
# include "IMB_imbuf_types.h"
# include "IMB_imbuf.h"
# include "IMB_allocimbuf.h"
# include "IMB_filter.h"
# include "IMB_ham.h"
# include "IMB_hamx.h"
2009-09-06 13:20:05 +00:00
# ifdef WIN32
# include <io.h>
# include "BLI_winstuff.h"
# endif
2002-10-12 11:37:38 +00:00
/* actually hard coded endianness */
# define GET_BIG_LONG(x) (((uchar *) (x))[0] << 24 | ((uchar *) (x))[1] << 16 | ((uchar *) (x))[2] << 8 | ((uchar *) (x))[3])
# define GET_LITTLE_LONG(x) (((uchar *) (x))[3] << 24 | ((uchar *) (x))[2] << 16 | ((uchar *) (x))[1] << 8 | ((uchar *) (x))[0])
# define SWAP_L(x) (((x << 24) & 0xff000000) | ((x << 8) & 0xff0000) | ((x >> 8) & 0xff00) | ((x >> 24) & 0xff))
# define SWAP_S(x) (((x << 8) & 0xff00) | ((x >> 8) & 0xff))
/* more endianness... should move to a separate file... */
2008-03-23 12:59:26 +00:00
# if defined(__sgi) || defined (__sparc) || defined (__sparc__) || defined (__PPC__) || defined (__ppc__) || defined (__hppa__) || defined (__BIG_ENDIAN__)
2002-10-12 11:37:38 +00:00
# define GET_ID GET_BIG_LONG
# define LITTLE_LONG SWAP_LONG
# else
# define GET_ID GET_LITTLE_LONG
# define LITTLE_LONG ENDIAN_NOP
# endif
# ifndef ABS
# define ABS(x) ((x) < 0 ? -(x) : (x))
# endif
static uchar hamx_array_char [ ] = {
0x00 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0xFF , 0xFF ,
0x00 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0xFF , 0xFF ,
0x00 , 0xFF , 0x00 , 0xFF , 0x00 , 0xFF , 0x00 , 0xFF , 0x00 , 0xFF , 0x00 , 0xFF , 0x00 , 0xFF , 0x00 , 0xFF , 0x00 , 0xFF , 0x00 , 0xFF , 0x00 , 0xFF , 0x00 , 0xFF , 0x00 , 0xFF , 0x00 , 0xFF , 0x00 , 0xFF , 0x00 , 0xFF ,
0x00 , 0xFF , 0x00 , 0xFF , 0x00 , 0xFF , 0x00 , 0xFF , 0x00 , 0xFF , 0x00 , 0xFF , 0x00 , 0xFF , 0x00 , 0xFF , 0x00 , 0xFF , 0x00 , 0xFF , 0x00 , 0xFF , 0x00 , 0xFF , 0x00 , 0xFF , 0x00 , 0xFF , 0x00 , 0xFF , 0x00 , 0xFF ,
0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0xFF , 0xFF , 0x00 ,
0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0xFF , 0xFF , 0x00 , 0x00 , 0xFF , 0xFF , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x10 , 0x00 , 0x00 , 0x00 , 0x20 , 0x00 , 0x00 , 0x00 , 0x30 , 0x00 , 0x00 , 0x00 , 0x40 , 0x00 , 0x00 , 0x00 , 0x50 , 0x00 , 0x00 , 0x00 , 0x60 , 0x00 , 0x00 , 0x00 , 0x70 , 0x00 , 0x00 ,
0x00 , 0x80 , 0x00 , 0x00 , 0x00 , 0x90 , 0x00 , 0x00 , 0x00 , 0xA0 , 0x00 , 0x00 , 0x00 , 0xB0 , 0x00 , 0x00 , 0x00 , 0xC0 , 0x00 , 0x00 , 0x00 , 0xD0 , 0x00 , 0x00 , 0x00 , 0xE0 , 0x00 , 0x00 , 0x00 , 0xF0 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x10 , 0x00 , 0x00 , 0x00 , 0x20 , 0x00 , 0x00 , 0x00 , 0x30 , 0x00 , 0x00 , 0x00 , 0x40 , 0x00 , 0x00 , 0x00 , 0x50 , 0x00 , 0x00 , 0x00 , 0x60 , 0x00 , 0x00 , 0x00 , 0x70 , 0x00 ,
0x00 , 0x00 , 0x80 , 0x00 , 0x00 , 0x00 , 0x90 , 0x00 , 0x00 , 0x00 , 0xA0 , 0x00 , 0x00 , 0x00 , 0xB0 , 0x00 , 0x00 , 0x00 , 0xC0 , 0x00 , 0x00 , 0x00 , 0xD0 , 0x00 , 0x00 , 0x00 , 0xE0 , 0x00 , 0x00 , 0x00 , 0xF0 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x10 , 0x00 , 0x00 , 0x00 , 0x20 , 0x00 , 0x00 , 0x00 , 0x30 , 0x00 , 0x00 , 0x00 , 0x40 , 0x00 , 0x00 , 0x00 , 0x50 , 0x00 , 0x00 , 0x00 , 0x60 , 0x00 , 0x00 , 0x00 , 0x70 ,
0x00 , 0x00 , 0x00 , 0x80 , 0x00 , 0x00 , 0x00 , 0x90 , 0x00 , 0x00 , 0x00 , 0xA0 , 0x00 , 0x00 , 0x00 , 0xB0 , 0x00 , 0x00 , 0x00 , 0xC0 , 0x00 , 0x00 , 0x00 , 0xD0 , 0x00 , 0x00 , 0x00 , 0xE0 , 0x00 , 0x00 , 0x00 , 0xF0 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x30 , 0x00 , 0x00 , 0x00 , 0x60 , 0x00 , 0x00 , 0x00 , 0x90 , 0x00 , 0x00 , 0x00 , 0xC0 , 0x00 , 0x00 , 0x00 , 0xF0 ,
0x00 , 0x00 , 0x20 , 0x00 , 0x00 , 0x00 , 0x20 , 0x30 , 0x00 , 0x00 , 0x20 , 0x60 , 0x00 , 0x00 , 0x20 , 0x90 , 0x00 , 0x00 , 0x20 , 0xC0 , 0x00 , 0x00 , 0x20 , 0xF0 ,
0x00 , 0x00 , 0x40 , 0x00 , 0x00 , 0x00 , 0x40 , 0x30 , 0x00 , 0x00 , 0x40 , 0x60 , 0x00 , 0x00 , 0x40 , 0x90 , 0x00 , 0x00 , 0x40 , 0xC0 , 0x00 , 0x00 , 0x40 , 0xF0 ,
0x00 , 0x00 , 0x60 , 0x00 , 0x00 , 0x00 , 0x60 , 0x30 , 0x00 , 0x00 , 0x60 , 0x60 , 0x00 , 0x00 , 0x60 , 0x90 , 0x00 , 0x00 , 0x60 , 0xC0 , 0x00 , 0x00 , 0x60 , 0xF0 ,
0x00 , 0x00 , 0x90 , 0x00 , 0x00 , 0x00 , 0x90 , 0x30 , 0x00 , 0x00 , 0x90 , 0x60 , 0x00 , 0x00 , 0x90 , 0x90 , 0x00 , 0x00 , 0x90 , 0xC0 , 0x00 , 0x00 , 0x90 , 0xF0 ,
0x00 , 0x00 , 0xB0 , 0x00 , 0x00 , 0x00 , 0xB0 , 0x30 , 0x00 , 0x00 , 0xB0 , 0x60 , 0x00 , 0x00 , 0xB0 , 0x90 , 0x00 , 0x00 , 0xB0 , 0xC0 , 0x00 , 0x00 , 0xB0 , 0xF0 ,
0x00 , 0x00 , 0xD0 , 0x00 , 0x00 , 0x00 , 0xD0 , 0x30 , 0x00 , 0x00 , 0xD0 , 0x60 , 0x00 , 0x00 , 0xD0 , 0x90 , 0x00 , 0x00 , 0xD0 , 0xC0 , 0x00 , 0x00 , 0xD0 , 0xF0 ,
0x00 , 0x00 , 0xF0 , 0x00 , 0x00 , 0x00 , 0xF0 , 0x30 , 0x00 , 0x00 , 0xF0 , 0x60 , 0x00 , 0x00 , 0xF0 , 0x90 , 0x00 , 0x00 , 0xF0 , 0xC0 , 0x00 , 0x00 , 0xF0 , 0xF0 ,
0x00 , 0x50 , 0x00 , 0x00 , 0x00 , 0x50 , 0x00 , 0x30 , 0x00 , 0x50 , 0x00 , 0x60 , 0x00 , 0x50 , 0x00 , 0x90 , 0x00 , 0x50 , 0x00 , 0xC0 , 0x00 , 0x50 , 0x00 , 0xF0 ,
0x00 , 0x50 , 0x20 , 0x00 , 0x00 , 0x50 , 0x20 , 0x30 , 0x00 , 0x50 , 0x20 , 0x60 , 0x00 , 0x50 , 0x20 , 0x90 , 0x00 , 0x50 , 0x20 , 0xC0 , 0x00 , 0x50 , 0x20 , 0xF0 ,
0x00 , 0x50 , 0x40 , 0x00 , 0x00 , 0x50 , 0x40 , 0x30 , 0x00 , 0x50 , 0x40 , 0x60 , 0x00 , 0x50 , 0x40 , 0x90 , 0x00 , 0x50 , 0x40 , 0xC0 , 0x00 , 0x50 , 0x40 , 0xF0 ,
0x00 , 0x50 , 0x60 , 0x00 , 0x00 , 0x50 , 0x60 , 0x30 , 0x00 , 0x50 , 0x60 , 0x60 , 0x00 , 0x50 , 0x60 , 0x90 , 0x00 , 0x50 , 0x60 , 0xC0 , 0x00 , 0x50 , 0x60 , 0xF0 ,
0x00 , 0x50 , 0x90 , 0x00 , 0x00 , 0x50 , 0x90 , 0x30 , 0x00 , 0x50 , 0x90 , 0x60 , 0x00 , 0x50 , 0x90 , 0x90 , 0x00 , 0x50 , 0x90 , 0xC0 , 0x00 , 0x50 , 0x90 , 0xF0 ,
0x00 , 0x50 , 0xB0 , 0x00 , 0x00 , 0x50 , 0xB0 , 0x30 , 0x00 , 0x50 , 0xB0 , 0x60 , 0x00 , 0x50 , 0xB0 , 0x90 , 0x00 , 0x50 , 0xB0 , 0xC0 , 0x00 , 0x50 , 0xB0 , 0xF0 ,
0x00 , 0x50 , 0xD0 , 0x00 , 0x00 , 0x50 , 0xD0 , 0x30 , 0x00 , 0x50 , 0xD0 , 0x60 , 0x00 , 0x50 , 0xD0 , 0x90 , 0x00 , 0x50 , 0xD0 , 0xC0 , 0x00 , 0x50 , 0xD0 , 0xF0 ,
0x00 , 0x50 , 0xF0 , 0x00 , 0x00 , 0x50 , 0xF0 , 0x30 , 0x00 , 0x50 , 0xF0 , 0x60 , 0x00 , 0x50 , 0xF0 , 0x90 , 0x00 , 0x50 , 0xF0 , 0xC0 , 0x00 , 0x50 , 0xF0 , 0xF0 ,
0x00 , 0xA0 , 0x00 , 0x00 , 0x00 , 0xA0 , 0x00 , 0x30 , 0x00 , 0xA0 , 0x00 , 0x60 , 0x00 , 0xA0 , 0x00 , 0x90 , 0x00 , 0xA0 , 0x00 , 0xC0 , 0x00 , 0xA0 , 0x00 , 0xF0 ,
0x00 , 0xA0 , 0x20 , 0x00 , 0x00 , 0xA0 , 0x20 , 0x30 , 0x00 , 0xA0 , 0x20 , 0x60 , 0x00 , 0xA0 , 0x20 , 0x90 , 0x00 , 0xA0 , 0x20 , 0xC0 , 0x00 , 0xA0 , 0x20 , 0xF0 ,
0x00 , 0xA0 , 0x40 , 0x00 , 0x00 , 0xA0 , 0x40 , 0x30 , 0x00 , 0xA0 , 0x40 , 0x60 , 0x00 , 0xA0 , 0x40 , 0x90 , 0x00 , 0xA0 , 0x40 , 0xC0 , 0x00 , 0xA0 , 0x40 , 0xF0 ,
0x00 , 0xA0 , 0x60 , 0x00 , 0x00 , 0xA0 , 0x60 , 0x30 , 0x00 , 0xA0 , 0x60 , 0x60 , 0x00 , 0xA0 , 0x60 , 0x90 , 0x00 , 0xA0 , 0x60 , 0xC0 , 0x00 , 0xA0 , 0x60 , 0xF0 ,
0x00 , 0xA0 , 0x90 , 0x00 , 0x00 , 0xA0 , 0x90 , 0x30 , 0x00 , 0xA0 , 0x90 , 0x60 , 0x00 , 0xA0 , 0x90 , 0x90 , 0x00 , 0xA0 , 0x90 , 0xC0 , 0x00 , 0xA0 , 0x90 , 0xF0 ,
0x00 , 0xA0 , 0xB0 , 0x00 , 0x00 , 0xA0 , 0xB0 , 0x30 , 0x00 , 0xA0 , 0xB0 , 0x60 , 0x00 , 0xA0 , 0xB0 , 0x90 , 0x00 , 0xA0 , 0xB0 , 0xC0 , 0x00 , 0xA0 , 0xB0 , 0xF0 ,
0x00 , 0xA0 , 0xD0 , 0x00 , 0x00 , 0xA0 , 0xD0 , 0x30 , 0x00 , 0xA0 , 0xD0 , 0x60 , 0x00 , 0xA0 , 0xD0 , 0x90 , 0x00 , 0xA0 , 0xD0 , 0xC0 , 0x00 , 0xA0 , 0xD0 , 0xF0 ,
0x00 , 0xA0 , 0xF0 , 0x00 , 0x00 , 0xA0 , 0xF0 , 0x30 , 0x00 , 0xA0 , 0xF0 , 0x60 , 0x00 , 0xA0 , 0xF0 , 0x90 , 0x00 , 0xA0 , 0xF0 , 0xC0 , 0x00 , 0xA0 , 0xF0 , 0xF0 ,
0x00 , 0xF0 , 0x00 , 0x00 , 0x00 , 0xF0 , 0x00 , 0x30 , 0x00 , 0xF0 , 0x00 , 0x60 , 0x00 , 0xF0 , 0x00 , 0x90 , 0x00 , 0xF0 , 0x00 , 0xC0 , 0x00 , 0xF0 , 0x00 , 0xF0 ,
0x00 , 0xF0 , 0x20 , 0x00 , 0x00 , 0xF0 , 0x20 , 0x30 , 0x00 , 0xF0 , 0x20 , 0x60 , 0x00 , 0xF0 , 0x20 , 0x90 , 0x00 , 0xF0 , 0x20 , 0xC0 , 0x00 , 0xF0 , 0x20 , 0xF0 ,
0x00 , 0xF0 , 0x40 , 0x00 , 0x00 , 0xF0 , 0x40 , 0x30 , 0x00 , 0xF0 , 0x40 , 0x60 , 0x00 , 0xF0 , 0x40 , 0x90 , 0x00 , 0xF0 , 0x40 , 0xC0 , 0x00 , 0xF0 , 0x40 , 0xF0 ,
0x00 , 0xF0 , 0x60 , 0x00 , 0x00 , 0xF0 , 0x60 , 0x30 , 0x00 , 0xF0 , 0x60 , 0x60 , 0x00 , 0xF0 , 0x60 , 0x90 , 0x00 , 0xF0 , 0x60 , 0xC0 , 0x00 , 0xF0 , 0x60 , 0xF0 ,
0x00 , 0xF0 , 0x90 , 0x00 , 0x00 , 0xF0 , 0x90 , 0x30 , 0x00 , 0xF0 , 0x90 , 0x60 , 0x00 , 0xF0 , 0x90 , 0x90 , 0x00 , 0xF0 , 0x90 , 0xC0 , 0x00 , 0xF0 , 0x90 , 0xF0 ,
0x00 , 0xF0 , 0xB0 , 0x00 , 0x00 , 0xF0 , 0xB0 , 0x30 , 0x00 , 0xF0 , 0xB0 , 0x60 , 0x00 , 0xF0 , 0xB0 , 0x90 , 0x00 , 0xF0 , 0xB0 , 0xC0 , 0x00 , 0xF0 , 0xB0 , 0xF0 ,
0x00 , 0xF0 , 0xD0 , 0x00 , 0x00 , 0xF0 , 0xD0 , 0x30 , 0x00 , 0xF0 , 0xD0 , 0x60 , 0x00 , 0xF0 , 0xD0 , 0x90 , 0x00 , 0xF0 , 0xD0 , 0xC0 , 0x00 , 0xF0 , 0xD0 , 0xF0 ,
0x00 , 0xF0 , 0xF0 , 0x00 , 0x00 , 0xF0 , 0xF0 , 0x30 , 0x00 , 0xF0 , 0xF0 , 0x60 , 0x00 , 0xF0 , 0xF0 , 0x90 , 0x00 , 0xF0 , 0xF0 , 0xC0 , 0x00 , 0xF0 , 0xF0 , 0xF0 ,
0x00 , 0x10 , 0x10 , 0x10 , 0x00 , 0x20 , 0x20 , 0x20 , 0x00 , 0x30 , 0x30 , 0x30 , 0x00 , 0x40 , 0x40 , 0x40 ,
0x00 , 0x50 , 0x50 , 0x50 , 0x00 , 0x60 , 0x60 , 0x60 , 0x00 , 0x70 , 0x70 , 0x70 , 0x00 , 0x80 , 0x80 , 0x80 ,
0x00 , 0x90 , 0x90 , 0x90 , 0x00 , 0xA0 , 0xA0 , 0xA0 , 0x00 , 0xB0 , 0xB0 , 0xB0 , 0x00 , 0xC0 , 0xC0 , 0xC0 ,
0x00 , 0xD0 , 0xD0 , 0xD0 , 0x00 , 0xE0 , 0xE0 , 0xE0
} ;
static int * hamx_array = ( int * ) ( hamx_array_char ) ;
static uchar cmap_hamx [ ] = {
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x30 , 0x00 , 0x00 , 0x00 , 0x60 , 0x00 , 0x00 , 0x00 , 0x90 , 0x00 , 0x00 , 0x00 , 0xC0 , 0x00 , 0x00 , 0x00 , 0xF0 ,
0x00 , 0x00 , 0x20 , 0x00 , 0x00 , 0x00 , 0x20 , 0x30 , 0x00 , 0x00 , 0x20 , 0x60 , 0x00 , 0x00 , 0x20 , 0x90 , 0x00 , 0x00 , 0x20 , 0xC0 , 0x00 , 0x00 , 0x20 , 0xF0 ,
0x00 , 0x00 , 0x40 , 0x00 , 0x00 , 0x00 , 0x40 , 0x30 , 0x00 , 0x00 , 0x40 , 0x60 , 0x00 , 0x00 , 0x40 , 0x90 , 0x00 , 0x00 , 0x40 , 0xC0 , 0x00 , 0x00 , 0x40 , 0xF0 ,
0x00 , 0x00 , 0x60 , 0x00 , 0x00 , 0x00 , 0x60 , 0x30 , 0x00 , 0x00 , 0x60 , 0x60 , 0x00 , 0x00 , 0x60 , 0x90 , 0x00 , 0x00 , 0x60 , 0xC0 , 0x00 , 0x00 , 0x60 , 0xF0 ,
0x00 , 0x00 , 0x90 , 0x00 , 0x00 , 0x00 , 0x90 , 0x30 , 0x00 , 0x00 , 0x90 , 0x60 , 0x00 , 0x00 , 0x90 , 0x90 , 0x00 , 0x00 , 0x90 , 0xC0 , 0x00 , 0x00 , 0x90 , 0xF0 ,
0x00 , 0x00 , 0xB0 , 0x00 , 0x00 , 0x00 , 0xB0 , 0x30 , 0x00 , 0x00 , 0xB0 , 0x60 , 0x00 , 0x00 , 0xB0 , 0x90 , 0x00 , 0x00 , 0xB0 , 0xC0 , 0x00 , 0x00 , 0xB0 , 0xF0 ,
0x00 , 0x00 , 0xD0 , 0x00 , 0x00 , 0x00 , 0xD0 , 0x30 , 0x00 , 0x00 , 0xD0 , 0x60 , 0x00 , 0x00 , 0xD0 , 0x90 , 0x00 , 0x00 , 0xD0 , 0xC0 , 0x00 , 0x00 , 0xD0 , 0xF0 ,
0x00 , 0x00 , 0xF0 , 0x00 , 0x00 , 0x00 , 0xF0 , 0x30 , 0x00 , 0x00 , 0xF0 , 0x60 , 0x00 , 0x00 , 0xF0 , 0x90 , 0x00 , 0x00 , 0xF0 , 0xC0 , 0x00 , 0x00 , 0xF0 , 0xF0 ,
0x00 , 0x50 , 0x00 , 0x00 , 0x00 , 0x50 , 0x00 , 0x30 , 0x00 , 0x50 , 0x00 , 0x60 , 0x00 , 0x50 , 0x00 , 0x90 , 0x00 , 0x50 , 0x00 , 0xC0 , 0x00 , 0x50 , 0x00 , 0xF0 ,
0x00 , 0x50 , 0x20 , 0x00 , 0x00 , 0x50 , 0x20 , 0x30 , 0x00 , 0x50 , 0x20 , 0x60 , 0x00 , 0x50 , 0x20 , 0x90 , 0x00 , 0x50 , 0x20 , 0xC0 , 0x00 , 0x50 , 0x20 , 0xF0 ,
0x00 , 0x50 , 0x40 , 0x00 , 0x00 , 0x50 , 0x40 , 0x30 , 0x00 , 0x50 , 0x40 , 0x60 , 0x00 , 0x50 , 0x40 , 0x90 , 0x00 , 0x50 , 0x40 , 0xC0 , 0x00 , 0x50 , 0x40 , 0xF0 ,
0x00 , 0x50 , 0x60 , 0x00 , 0x00 , 0x50 , 0x60 , 0x30 , 0x00 , 0x50 , 0x60 , 0x60 , 0x00 , 0x50 , 0x60 , 0x90 , 0x00 , 0x50 , 0x60 , 0xC0 , 0x00 , 0x50 , 0x60 , 0xF0 ,
0x00 , 0x50 , 0x90 , 0x00 , 0x00 , 0x50 , 0x90 , 0x30 , 0x00 , 0x50 , 0x90 , 0x60 , 0x00 , 0x50 , 0x90 , 0x90 , 0x00 , 0x50 , 0x90 , 0xC0 , 0x00 , 0x50 , 0x90 , 0xF0 ,
0x00 , 0x50 , 0xB0 , 0x00 , 0x00 , 0x50 , 0xB0 , 0x30 , 0x00 , 0x50 , 0xB0 , 0x60 , 0x00 , 0x50 , 0xB0 , 0x90 , 0x00 , 0x50 , 0xB0 , 0xC0 , 0x00 , 0x50 , 0xB0 , 0xF0 ,
0x00 , 0x50 , 0xD0 , 0x00 , 0x00 , 0x50 , 0xD0 , 0x30 , 0x00 , 0x50 , 0xD0 , 0x60 , 0x00 , 0x50 , 0xD0 , 0x90 , 0x00 , 0x50 , 0xD0 , 0xC0 , 0x00 , 0x50 , 0xD0 , 0xF0 ,
0x00 , 0x50 , 0xF0 , 0x00 , 0x00 , 0x50 , 0xF0 , 0x30 , 0x00 , 0x50 , 0xF0 , 0x60 , 0x00 , 0x50 , 0xF0 , 0x90 , 0x00 , 0x50 , 0xF0 , 0xC0 , 0x00 , 0x50 , 0xF0 , 0xF0 ,
0x00 , 0xA0 , 0x00 , 0x00 , 0x00 , 0xA0 , 0x00 , 0x30 , 0x00 , 0xA0 , 0x00 , 0x60 , 0x00 , 0xA0 , 0x00 , 0x90 , 0x00 , 0xA0 , 0x00 , 0xC0 , 0x00 , 0xA0 , 0x00 , 0xF0 ,
0x00 , 0xA0 , 0x20 , 0x00 , 0x00 , 0xA0 , 0x20 , 0x30 , 0x00 , 0xA0 , 0x20 , 0x60 , 0x00 , 0xA0 , 0x20 , 0x90 , 0x00 , 0xA0 , 0x20 , 0xC0 , 0x00 , 0xA0 , 0x20 , 0xF0 ,
0x00 , 0xA0 , 0x40 , 0x00 , 0x00 , 0xA0 , 0x40 , 0x30 , 0x00 , 0xA0 , 0x40 , 0x60 , 0x00 , 0xA0 , 0x40 , 0x90 , 0x00 , 0xA0 , 0x40 , 0xC0 , 0x00 , 0xA0 , 0x40 , 0xF0 ,
0x00 , 0xA0 , 0x60 , 0x00 , 0x00 , 0xA0 , 0x60 , 0x30 , 0x00 , 0xA0 , 0x60 , 0x60 , 0x00 , 0xA0 , 0x60 , 0x90 , 0x00 , 0xA0 , 0x60 , 0xC0 , 0x00 , 0xA0 , 0x60 , 0xF0 ,
0x00 , 0xA0 , 0x90 , 0x00 , 0x00 , 0xA0 , 0x90 , 0x30 , 0x00 , 0xA0 , 0x90 , 0x60 , 0x00 , 0xA0 , 0x90 , 0x90 , 0x00 , 0xA0 , 0x90 , 0xC0 , 0x00 , 0xA0 , 0x90 , 0xF0 ,
0x00 , 0xA0 , 0xB0 , 0x00 , 0x00 , 0xA0 , 0xB0 , 0x30 , 0x00 , 0xA0 , 0xB0 , 0x60 , 0x00 , 0xA0 , 0xB0 , 0x90 , 0x00 , 0xA0 , 0xB0 , 0xC0 , 0x00 , 0xA0 , 0xB0 , 0xF0 ,
0x00 , 0xA0 , 0xD0 , 0x00 , 0x00 , 0xA0 , 0xD0 , 0x30 , 0x00 , 0xA0 , 0xD0 , 0x60 , 0x00 , 0xA0 , 0xD0 , 0x90 , 0x00 , 0xA0 , 0xD0 , 0xC0 , 0x00 , 0xA0 , 0xD0 , 0xF0 ,
0x00 , 0xA0 , 0xF0 , 0x00 , 0x00 , 0xA0 , 0xF0 , 0x30 , 0x00 , 0xA0 , 0xF0 , 0x60 , 0x00 , 0xA0 , 0xF0 , 0x90 , 0x00 , 0xA0 , 0xF0 , 0xC0 , 0x00 , 0xA0 , 0xF0 , 0xF0 ,
0x00 , 0xF0 , 0x00 , 0x00 , 0x00 , 0xF0 , 0x00 , 0x30 , 0x00 , 0xF0 , 0x00 , 0x60 , 0x00 , 0xF0 , 0x00 , 0x90 , 0x00 , 0xF0 , 0x00 , 0xC0 , 0x00 , 0xF0 , 0x00 , 0xF0 ,
0x00 , 0xF0 , 0x20 , 0x00 , 0x00 , 0xF0 , 0x20 , 0x30 , 0x00 , 0xF0 , 0x20 , 0x60 , 0x00 , 0xF0 , 0x20 , 0x90 , 0x00 , 0xF0 , 0x20 , 0xC0 , 0x00 , 0xF0 , 0x20 , 0xF0 ,
0x00 , 0xF0 , 0x40 , 0x00 , 0x00 , 0xF0 , 0x40 , 0x30 , 0x00 , 0xF0 , 0x40 , 0x60 , 0x00 , 0xF0 , 0x40 , 0x90 , 0x00 , 0xF0 , 0x40 , 0xC0 , 0x00 , 0xF0 , 0x40 , 0xF0 ,
0x00 , 0xF0 , 0x60 , 0x00 , 0x00 , 0xF0 , 0x60 , 0x30 , 0x00 , 0xF0 , 0x60 , 0x60 , 0x00 , 0xF0 , 0x60 , 0x90 , 0x00 , 0xF0 , 0x60 , 0xC0 , 0x00 , 0xF0 , 0x60 , 0xF0 ,
0x00 , 0xF0 , 0x90 , 0x00 , 0x00 , 0xF0 , 0x90 , 0x30 , 0x00 , 0xF0 , 0x90 , 0x60 , 0x00 , 0xF0 , 0x90 , 0x90 , 0x00 , 0xF0 , 0x90 , 0xC0 , 0x00 , 0xF0 , 0x90 , 0xF0 ,
0x00 , 0xF0 , 0xB0 , 0x00 , 0x00 , 0xF0 , 0xB0 , 0x30 , 0x00 , 0xF0 , 0xB0 , 0x60 , 0x00 , 0xF0 , 0xB0 , 0x90 , 0x00 , 0xF0 , 0xB0 , 0xC0 , 0x00 , 0xF0 , 0xB0 , 0xF0 ,
0x00 , 0xF0 , 0xD0 , 0x00 , 0x00 , 0xF0 , 0xD0 , 0x30 , 0x00 , 0xF0 , 0xD0 , 0x60 , 0x00 , 0xF0 , 0xD0 , 0x90 , 0x00 , 0xF0 , 0xD0 , 0xC0 , 0x00 , 0xF0 , 0xD0 , 0xF0 ,
0x00 , 0xF0 , 0xF0 , 0x00 , 0x00 , 0xF0 , 0xF0 , 0x30 , 0x00 , 0xF0 , 0xF0 , 0x60 , 0x00 , 0xF0 , 0xF0 , 0x90 , 0x00 , 0xF0 , 0xF0 , 0xC0 , 0x00 , 0xF0 , 0xF0 , 0xF0 ,
0x00 , 0x10 , 0x10 , 0x10 , 0x00 , 0x20 , 0x20 , 0x20 , 0x00 , 0x30 , 0x30 , 0x30 , 0x00 , 0x40 , 0x40 , 0x40 , 0x00 , 0x50 , 0x50 , 0x50 , 0x00 , 0x60 , 0x60 , 0x60 ,
0x00 , 0x70 , 0x70 , 0x70 , 0x00 , 0x80 , 0x80 , 0x80 , 0x00 , 0x90 , 0x90 , 0x90 , 0x00 , 0xA0 , 0xA0 , 0xA0 , 0x00 , 0xB0 , 0xB0 , 0xB0 , 0x00 , 0xC0 , 0xC0 , 0xC0 ,
0x00 , 0xD0 , 0xD0 , 0xD0 , 0x00 , 0xE0 , 0xE0 , 0xE0
} ;
float adat_gamma = 1.0 ;
float adat_distort = 1.0 ;
/*
*
2003-04-27 09:59:36 +00:00
* New version :
2002-10-12 11:37:38 +00:00
*
2003-04-27 09:59:36 +00:00
* 32 brighntesses Y 15 with direct access ( black and white are specials )
* 16 colors H ue
* 7 intensities S aturation
2002-10-12 11:37:38 +00:00
*
2003-04-27 09:59:36 +00:00
* Total 3584 ' different ' colors . First 512 colors free .
2002-10-12 11:37:38 +00:00
*
*
*/
2005-01-10 16:22:40 +00:00
void imb_convhamx ( struct ImBuf * ibuf , unsigned char * coltab , short * deltab )
2002-10-12 11:37:38 +00:00
{
short r , g , b , lr , lg , lb , dr , dg , db , col , fout , type , step ;
int i ;
uchar * rect ;
/*
b = 0000 xxxx
g = 0001 xxxx
r = 0010 xxxx
cmap > = 48
*/
for ( step = 0 ; step < 2 ; step + + ) {
rect = ( uchar * ) ibuf - > rect ;
rect + = 4 * step ;
i = ( ( ibuf - > x * ibuf - > y ) + 2 - step - 1 ) / 2 ;
2005-01-10 16:22:40 +00:00
lb = coltab [ 1 ] ;
lg = coltab [ 2 ] ;
lr = coltab [ 3 ] ;
2002-10-12 11:37:38 +00:00
type = col = 0 ;
for ( ; i > 0 ; i - - ) {
b = rect [ 2 ] > > 4 ;
g = rect [ 1 ] > > 4 ;
r = rect [ 0 ] > > 4 ;
if ( ( b - lb ) | ( g - lg ) | ( r - lr ) ) {
col = ( ( b < < 8 ) + ( g < < 4 ) + r ) < < 1 ;
fout = deltab [ col + 1 ] ;
col = deltab [ col ] ;
type = 0 ;
dr = quadr [ lr - r ] ;
dg = quadr [ lg - g ] ;
db = quadr [ lb - b ] ;
if ( ( dr + dg ) < = fout ) {
fout = dr + dg ;
type = 1 ;
}
if ( ( dg + db ) < = fout ) {
fout = dg + db ;
type = 2 ;
}
if ( ( dr + db ) < = fout ) {
fout = dr + db ;
type = 4 ;
}
switch ( type ) {
case 1 :
lb = b ;
col = b ;
break ;
case 4 :
lg = g ;
col = g + 16 ;
break ;
case 2 :
lr = r ;
col = r + 32 ;
break ;
default :
/*printf("%04x %5d %5d ", (b<<8) + (g<<4) + r, col, fout);*/
2005-01-10 16:22:40 +00:00
lb = coltab [ col * 4 + 1 ] ;
lg = coltab [ col * 4 + 2 ] ;
lr = coltab [ col * 4 + 3 ] ;
2002-10-12 11:37:38 +00:00
/*printf("%01x%01x%01x %01x%01x%01x\n", b, g, r, lb, lg, lr);*/
col + = 48 ;
}
}
rect [ 3 ] = col ;
rect + = 8 ;
}
}
}
static short dec_hamx ( struct ImBuf * ibuf , unsigned char * body , int cmap [ ] )
{
int todo , i ;
int j , step , col ;
unsigned int * rect ;
for ( step = 0 ; step < 2 ; step + + ) {
rect = ibuf - > rect ;
rect + = step ;
todo = ( ibuf - > x * ibuf - > y + 2 - step - 1 ) / 2 ;
col = cmap [ 0 ] ;
while ( todo > 0 ) {
i = * body + + ;
if ( i & 128 ) { /* fill */
i = 257 - i ;
todo - = i ;
j = * ( body + + ) ;
col = ( ( col & hamx_array [ j ] ) | hamx_array [ j + 256 ] ) ;
do {
* rect = col ;
rect + = 2 ;
} while ( - - i ) ;
} else { /* copy */
i + + ;
todo - = i ;
do {
j = * ( body + + ) ;
* rect = col = ( ( col & hamx_array [ j ] ) | hamx_array [ j + 256 ] ) ;
rect + = 2 ;
} while ( - - i ) ;
}
}
if ( todo ) return ( 0 ) ;
}
return ( 1 ) ;
}
struct ImBuf * imb_loadanim ( int * iffmem , int flags )
{
int chunk , totlen , len , * mem , cmaplen = 0 ;
2005-03-09 19:45:59 +00:00
unsigned int * cmap = NULL ;
2002-10-12 11:37:38 +00:00
uchar * body = 0 ;
struct Adat adat ;
struct ImBuf * ibuf = 0 ;
static int is_flipped = FALSE ;
mem = iffmem ;
if ( GET_ID ( mem ) ! = FORM ) return ( 0 ) ;
if ( GET_ID ( mem + 2 ) ! = ANIM ) return ( 0 ) ;
totlen = ( GET_BIG_LONG ( mem + 1 ) + 1 ) & ~ 1 ;
mem + = 3 ;
totlen - = 4 ;
adat . w = 0 ;
adat . xorig = 0 ;
adat . yorig = 0 ;
adat . gamma = adat_gamma ;
adat . distort = adat_distort ;
while ( totlen > 0 ) {
chunk = GET_ID ( mem ) ;
len = ( GET_BIG_LONG ( mem + 1 ) + 1 ) & ~ 1 ;
mem + = 2 ;
totlen - = len + 8 ;
switch ( chunk ) {
case ADAT :
if ( len > sizeof ( struct Adat ) ) {
memcpy ( & adat , mem , sizeof ( struct Adat ) ) ;
} else {
memcpy ( & adat , mem , len ) ;
}
adat . w = BIG_SHORT ( adat . w ) ;
adat . h = BIG_SHORT ( adat . h ) ;
adat . type = BIG_SHORT ( adat . type ) ;
adat . xorig = BIG_SHORT ( adat . xorig ) ;
adat . yorig = BIG_SHORT ( adat . yorig ) ;
break ;
case CMAP :
cmap = ( unsigned int * ) mem ;
cmaplen = len ;
break ;
case BODY :
body = ( uchar * ) mem ;
break ;
}
mem = ( int * ) ( ( uchar * ) mem + len ) ;
}
if ( body = = 0 ) return ( 0 ) ;
if ( adat . w = = 0 ) return ( 0 ) ;
adat_gamma = adat . gamma ;
adat_distort = adat . distort ;
if ( flags & IB_test ) ibuf = IMB_allocImBuf ( adat . w , adat . h , 24 , 0 , 0 ) ;
else ibuf = IMB_allocImBuf ( adat . w , adat . h , 24 , IB_rect , 0 ) ;
if ( ibuf = = 0 ) return ( 0 ) ;
ibuf - > ftype = ( Anim | adat . type ) ;
2010-01-09 00:16:35 +00:00
ibuf - > profile = IB_PROFILE_SRGB ;
2002-10-12 11:37:38 +00:00
ibuf - > xorig = adat . xorig ;
ibuf - > yorig = adat . yorig ;
ibuf - > flags = flags ;
if ( cmaplen ) {
ibuf - > cmap = malloc ( cmaplen ) ;
memcpy ( ibuf - > cmap , cmap , cmaplen ) ;
ibuf - > maxcol = cmaplen > > 2 ;
}
if ( flags & IB_test ) {
if ( flags & IB_freem ) free ( iffmem ) ;
return ( ibuf ) ;
}
switch ( adat . type ) {
case HAMX :
if ( flags & IB_rect ) {
if ( ! is_flipped ) {
int i ;
unsigned int * t ;
t = ( unsigned int * ) hamx_array_char ;
for ( i = 0 ; i < sizeof ( hamx_array_char ) / sizeof ( int ) ; i + + ) {
t [ i ] = SWAP_LONG ( t [ i ] ) ;
}
t = ( unsigned int * ) cmap_hamx ;
for ( i = 0 ; i < sizeof ( cmap_hamx ) / sizeof ( int ) ; i + + ) {
t [ i ] = SWAP_LONG ( t [ i ] ) ;
}
is_flipped = TRUE ;
}
if ( dec_hamx ( ibuf , body , ( int * ) cmap_hamx ) = = 0 ) {
IMB_freeImBuf ( ibuf ) ;
ibuf = 0 ;
}
if ( flags & IB_ttob ) IMB_flipy ( ibuf ) ;
}
break ;
default :
IMB_freeImBuf ( ibuf ) ;
ibuf = 0 ;
}
if ( flags & IB_freem ) free ( iffmem ) ;
return ( ibuf ) ;
}
static unsigned char * makebody_anim ( int bytes ,
unsigned char * buf ,
unsigned char * rect )
{
register uchar last , this ;
register int copy ;
register uchar * rectstart , * temp ;
bytes - - ;
rectstart = rect ;
last = * rect + + ;
this = * rect + + ;
copy = last ^ this ;
while ( bytes > 0 ) {
if ( copy ) {
do {
last = this ;
this = * rect + + ;
if ( last = = this ) {
2003-04-27 09:59:36 +00:00
if ( this = = rect [ - 3 ] ) { /* three the same? */
bytes - - ; /* init bytes */
2002-10-12 11:37:38 +00:00
break ;
}
}
} while ( - - bytes ! = 0 ) ;
copy = rect - rectstart ;
copy - - ;
if ( bytes ) copy - = 2 ;
temp = rect ;
rect = rectstart ;
while ( copy ) {
last = copy ;
if ( copy > MAXDAT ) last = MAXDAT ;
copy - = last ;
* buf + + = last - 1 ;
do {
* buf + + = * rect + + ;
} while ( - - last ! = 0 ) ;
}
rectstart = rect ;
rect = temp ;
last = this ;
copy = FALSE ;
} else {
2003-04-27 09:59:36 +00:00
while ( * rect + + = = this ) { /* seek first different byte */
if ( - - bytes = = 0 ) break ; /* or end of line */
2002-10-12 11:37:38 +00:00
}
rect - - ;
copy = rect - rectstart ;
rectstart = rect ;
bytes - - ;
this = * rect + + ;
while ( copy ) {
if ( copy > MAXRUN ) {
* buf + + = - ( MAXRUN - 1 ) ;
* buf + + = last ;
copy - = MAXRUN ;
} else {
* buf + + = - ( copy - 1 ) ;
* buf + + = last ;
break ;
}
}
copy = TRUE ;
}
}
return ( buf ) ;
}
short imb_enc_anim ( struct ImBuf * ibuf , int file )
{
2002-12-20 01:14:46 +00:00
int step , size , i , skip , steps = 0 ;
2002-10-12 11:37:38 +00:00
uchar * buf1 , * crect , * _buf1 , * _buf2 , * bufend ;
short ok = TRUE ;
if ( ibuf = = 0 ) return ( 0 ) ;
if ( file < 0 ) return ( 0 ) ;
if ( ibuf - > rect = = 0 ) return ( 0 ) ;
2003-04-27 09:59:36 +00:00
/* add dither */
2002-10-12 11:37:38 +00:00
switch ( ibuf - > ftype ) {
case AN_hamx :
ibuf - > cmap = ( unsigned int * ) cmap_hamx ;
ibuf - > mincol = 0 ;
ibuf - > maxcol = sizeof ( cmap_hamx ) / 4 ;
imb_converttoham ( ibuf ) ;
steps = 2 ;
break ;
}
2005-01-03 19:53:04 +00:00
if ( steps = = 0 ) return 0 ;
2002-10-12 11:37:38 +00:00
size = ( ( ibuf - > x + 1 ) * ( ibuf - > y + 1 ) ) / steps + 1024 ;
if ( ( _buf1 = malloc ( size ) ) = = 0 ) return ( 0 ) ;
if ( ( _buf2 = malloc ( size ) ) = = 0 ) {
free ( _buf1 ) ;
return ( 0 ) ;
}
skip = 4 * steps ;
for ( step = 0 ; step < steps ; step + + ) {
crect = ( uchar * ) ibuf - > rect ;
crect + = 4 * step ;
size = ( ibuf - > x * ibuf - > y + steps - step - 1 ) / steps ;
buf1 = _buf1 ;
if ( ( ibuf - > ftype = = AN_hamx ) | | ( ibuf - > ftype = = AN_yuvx ) ) {
crect + = 3 ;
for ( i = size ; i > 0 ; i - - ) {
* ( buf1 + + ) = * crect ;
crect + = skip ;
}
} else {
for ( i = size ; i > 0 ; i - - ) {
* ( buf1 + + ) = crect [ 1 ] + ( crect [ 2 ] > > 2 ) + ( crect [ 3 ] > > 5 ) ;
crect + = skip ;
}
}
bufend = makebody_anim ( size , _buf2 , _buf1 ) ;
if ( bufend = = 0 ) {
ok = FALSE ;
break ;
}
size = bufend - _buf2 ;
if ( write ( file , _buf2 , size ) ! = size ) {
ok = FALSE ;
break ;
}
}
free ( _buf1 ) ;
free ( _buf2 ) ;
return ( ok ) ;
}