/////////////////////////////////////////////////////////////
// CINEMA 4D SDK                                           //
/////////////////////////////////////////////////////////////
// (c) MAXON Computer GmbH, all rights reserved            //
/////////////////////////////////////////////////////////////

#ifndef __X4D_SCALE_LINE__
#define __X4D_SCALE_LINE__

#include	"x4d_filter.h"

//----------------------------------------------------------------------------------------
// functions for growing a line
//----------------------------------------------------------------------------------------
extern void	grow_line_px1_8(Int32 e, Int32 sw, Int32 dw, Int32 cnt,
														Int32 bits, Int32 src_bit_offset, Int32 dst_bit_offset,
														UInt32* src, UInt32* dst);

extern void	grow_line_px16(Int32 e, Int32 sw, Int32 dw, Int32 cnt,
													 Int32 bits, Int32 src_bit_offset, Int32 dst_bit_offset,
													 UInt16* src, UInt16* dst);

extern void	grow_line_px24(Int32 e, Int32 sw, Int32 dw, Int32 cnt,
													 Int32 bits, Int32 src_bit_offset, Int32 dst_bit_offset,
													 UChar* src, UChar* dst);

extern void	grow_line_px32(Int32 e, Int32 sw, Int32 dw, Int32 cnt,
													 Int32 bits, Int32 src_bit_offset, Int32 dst_bit_offset,
													 UInt32* src, UInt32* dst);

extern void	grow_line_px48(Int32 e, Int32 sw, Int32 dw, Int32 cnt,
													 Int32 bits, Int32 src_bit_offset, Int32 dst_bit_offset,
													 PIX_W* src, PIX_W* dst);

extern void	grow_line_px64(Int32 e, Int32 sw, Int32 dw, Int32 cnt,
													 Int32 bits, Int32 src_bit_offset, Int32 dst_bit_offset,
													 UInt32* src, UInt32* dst);

extern void	grow_line_px96(Int32 e, Int32 sw, Int32 dw, Int32 cnt,
													 Int32 bits, Int32 src_bit_offset, Int32 dst_bit_offset,
													 PIX_F* src, PIX_F* dst);

extern void	grow_line_px128(Int32 e, Int32 sw, Int32 dw, Int32 cnt,
														Int32 bits, Int32 src_bit_offset, Int32 dst_bit_offset,
														PIX_F* src, PIX_F* dst);

//----------------------------------------------------------------------------------------
// additional name definitions
//----------------------------------------------------------------------------------------
#define	grow_line_xRGB15 grow_line_px16
#define	grow_line_RGB24	 grow_line_px24
#define	grow_line_xRGB24 grow_line_px32

#define	grow_line_G8	 grow_line_px1_8
#define	grow_line_G16	 grow_line_px16
#define	grow_line_AG16 grow_line_px16
#define	grow_line_AG32 grow_line_px32

#define	grow_line_Lab24	 grow_line_px24
#define	grow_line_xLab24 grow_line_px32


//----------------------------------------------------------------------------------------
// functions for shrinking a line
//----------------------------------------------------------------------------------------
extern void	shrink_line_px1_8(Int32 e, Int32 sw, Int32 dw, Int32 cnt,
															Int32 bits, Int32 src_bit_offset, Int32 dst_bit_offset,
															UInt32* src, UInt32* dst);

extern void	shrink_line_A8(Int32 e, Int32 sw, Int32 dw, Int32 cnt,
													 Int32 bits, Int32 src_bit_offset, Int32 dst_bit_offset,
													 UChar* src, UChar* dst);

extern void	shrink_line_xABC15(Int32 e, Int32 sw, Int32 dw, Int32 cnt,
															 Int32 bits, Int32 src_bit_offset, Int32 dst_bit_offset,
															 UInt16* src, UInt16* dst);

extern void	shrink_line_AB16(Int32 e, Int32 sw, Int32 dw, Int32 cnt,
														 Int32 bits, Int32 src_bit_offset, Int32 dst_bit_offset,
														 UInt16* src, UInt16* dst);

extern void	shrink_line_AB32(Int32 e, Int32 sw, Int32 dw, Int32 cnt,
														 Int32 bits, Int32 src_bit_offset, Int32 dst_bit_offset,
														 UInt32* src, UInt32* dst);

extern void	shrink_line_AB64(Int32 e, Int32 sw, Int32 dw, Int32 cnt,
														 Int32 bits, Int32 src_bit_offset, Int32 dst_bit_offset,
														 PIX_F* src, PIX_F* dst);

extern void	shrink_line_A16(Int32 e, Int32 sw, Int32 dw, Int32 cnt,
														Int32 bits, Int32 src_bit_offset, Int32 dst_bit_offset,
														PIX_W* src, PIX_W* dst);

extern void	shrink_line_A32(Int32 e, Int32 sw, Int32 dw, Int32 cnt,
														Int32 bits, Int32 src_bit_offset, Int32 dst_bit_offset,
														PIX_F* src, PIX_F* dst);

extern void	shrink_line_AG16(Int32 e, Int32 sw, Int32 dw, Int32 cnt,
														 Int32 bits, Int32 src_bit_offset, Int32 dst_bit_offset,
														 UInt16* src, UInt16* dst);

extern void	shrink_line_AG32(Int32 e, Int32 sw, Int32 dw, Int32 cnt,
														 Int32 bits, Int32 src_bit_offset, Int32 dst_bit_offset,
														 UInt32* src, UInt32* dst);

extern void	shrink_line_AG64(Int32 e, Int32 sw, Int32 dw, Int32 cnt,
														 Int32 bits, Int32 src_bit_offset, Int32 dst_bit_offset,
														 PIX_F* src, PIX_F* dst);

extern void	shrink_line_ABC24(Int32 e, Int32 sw, Int32 dw, Int32 cnt,
															Int32 bits, Int32 src_bit_offset, Int32 dst_bit_offset,
															UChar* src, UChar* dst);

extern void	shrink_line_xABC24(Int32 e, Int32 sw, Int32 dw, Int32 cnt,
															 Int32 bits, Int32 src_bit_offset, Int32 dst_bit_offset,
															 UInt32* src, UInt32* dst);

extern void	shrink_line_ABC48(Int32 e, Int32 sw, Int32 dw, Int32 cnt,
															Int32 bits, Int32 src_bit_offset, Int32 dst_bit_offset,
															PIX_W* src, PIX_W* dst);

extern void	shrink_line_xABC48(Int32 e, Int32 sw, Int32 dw, Int32 cnt,
															 Int32 bits, Int32 src_bit_offset, Int32 dst_bit_offset,
															 UInt32* src, UInt32* dst);

extern void	shrink_line_ABC96(Int32 e, Int32 sw, Int32 dw, Int32 cnt,
															Int32 bits, Int32 src_bit_offset, Int32 dst_bit_offset,
															PIX_F* src, PIX_F* dst);

extern void	shrink_line_xABC96(Int32 e, Int32 sw, Int32 dw, Int32 cnt,
															 Int32 bits, Int32 src_bit_offset, Int32 dst_bit_offset,
															 PIX_F* src, PIX_F* dst);

extern void	shrink_line_ABCD32(Int32 e, Int32 sw, Int32 dw, Int32 cnt,
															 Int32 bits, Int32 src_bit_offset, Int32 dst_bit_offset,
															 UInt32* src, UInt32* dst);

extern void	shrink_line_ABCD64(Int32 e, Int32 sw, Int32 dw, Int32 cnt,
															 Int32 bits, Int32 src_bit_offset, Int32 dst_bit_offset,
															 UInt32* src, UInt32* dst);

extern void	shrink_line_ABCD128(Int32 e, Int32 sw, Int32 dw, Int32 cnt,
																Int32 bits, Int32 src_bit_offset, Int32 dst_bit_offset,
																PIX_F* src, PIX_F* dst);

extern void	shrink_line_ARGB32(Int32 e, Int32 sw, Int32 dw, Int32 cnt,
															 Int32 bits, Int32 src_bit_offset, Int32 dst_bit_offset,
															 UInt32* src, UInt32* dst);

extern void	shrink_line_ARGB64(Int32 e, Int32 sw, Int32 dw, Int32 cnt,
															 Int32 bits, Int32 src_bit_offset, Int32 dst_bit_offset,
															 UInt32* src, UInt32* dst);

extern void	shrink_line_ARGB128(Int32 e, Int32 sw, Int32 dw, Int32 cnt,
																Int32 bits, Int32 src_bit_offset, Int32 dst_bit_offset,
																PIX_F* src, PIX_F* dst);

//----------------------------------------------------------------------------------------
// additional name definitions
//----------------------------------------------------------------------------------------
#define	shrink_line_xRGB15 shrink_line_xABC15
#define	shrink_line_RGB24	 shrink_line_ABC24
#define	shrink_line_xRGB24 shrink_line_xABC24

#define	shrink_line_G8	shrink_line_A8
#define	shrink_line_G16	shrink_line_A16

#define	shrink_line_Lab24	 shrink_line_ABC24
#define	shrink_line_xLab24 shrink_line_xABC24

#endif
