17f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*
27f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
37f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *
47f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
57f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * you may not use this file except in compliance with the License.
67f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * You may obtain a copy of the License at
77f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *
87f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
97f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *
107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * See the License for the specific language governing permissions and
147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * limitations under the License.
157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project */
167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- includes ----------------------------------------------------------- */
187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BasicEm/Math.h"
207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BasicEm/Functions.h"
217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_ImageEm/UInt8Image.h"
227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ auxiliary functions } ---------------------------------------- */
287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ constructor / destructor } ----------------------------------- */
367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bim_UInt8Image_init( struct bbs_Context* cpA,
427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						  struct bim_UInt8Image* ptrA )
437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	bbs_UInt8Arr_init( cpA, &ptrA->arrE );
457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	ptrA->widthE = 0;
467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	ptrA->heightE = 0;
477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bim_UInt8Image_create( struct bbs_Context* cpA,
527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						    struct bim_UInt8Image* ptrA,
537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						    uint32 widthA,
547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							uint32 heightA,
557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 					        struct bbs_MemSeg* mspA )
567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( bbs_Context_error( cpA ) ) return;
587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( ptrA->arrE.arrPtrE != 0 )
597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		bim_UInt8Image_size( cpA, ptrA, widthA, heightA );
617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	else
637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		bbs_UInt8Arr_create( cpA, &ptrA->arrE, widthA * heightA, mspA );
657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		ptrA->widthE  = widthA;
667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		ptrA->heightE = heightA;
677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bim_UInt8Image_exit( struct bbs_Context* cpA,
727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						  struct bim_UInt8Image* ptrA )
737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	bbs_UInt8Arr_exit( cpA, &ptrA->arrE );
757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	ptrA->widthE = 0;
767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	ptrA->heightE = 0;
777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ operators } -------------------------------------------------- */
847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bim_UInt8Image_copy( struct bbs_Context* cpA,
907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						  struct bim_UInt8Image* ptrA,
917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						  const struct bim_UInt8Image* srcPtrA )
927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#ifdef DEBUG1
947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( ptrA->arrE.sizeE < srcPtrA->arrE.sizeE )
957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		bbs_ERROR0( "void bim_UInt8Image_copy( struct bim_UInt8Image*, const struct bim_UInt8Image* ):\n"
977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				   "Unsufficient allocated memory in destination image" );
987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		return;
997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
1007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#endif
1017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	ptrA->widthE = srcPtrA->widthE;
1027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	ptrA->heightE = srcPtrA->heightE;
1037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	bbs_UInt8Arr_copy( cpA, &ptrA->arrE, &srcPtrA->arrE );
1047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
1057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
1077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectflag bim_UInt8Image_equal( struct bbs_Context* cpA,
1097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						   const struct bim_UInt8Image* ptrA,
1107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						   const struct bim_UInt8Image* srcPtrA )
1117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
1127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( ptrA->widthE != srcPtrA->widthE ) return FALSE;
1137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( ptrA->heightE != srcPtrA->heightE ) return FALSE;
1147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	return bbs_UInt8Arr_equal( cpA, &ptrA->arrE, &srcPtrA->arrE );
1157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
1167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
1187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
1207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
1217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ query functions } -------------------------------------------- */
1227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
1237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
1247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
1267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bim_UInt8Image_checkSum( struct bbs_Context* cpA,
1287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							    const struct bim_UInt8Image* ptrA )
1297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
1307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 sumL =0 ;
1317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 iL;
1327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 sizeL = ptrA->arrE.sizeE;
1337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	const uint8* ptrL = ptrA->arrE.arrPtrE;
1347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	for( iL =0; iL < sizeL; iL++ )
1357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
1367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		sumL += *ptrL++;
1377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
1387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	return sumL;
1397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
1407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
1427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
1447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
1457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ modify functions } ------------------------------------------- */
1467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
1477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
1487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
1507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bim_UInt8Image_assignExternalImage( struct bbs_Context* cpA,
1527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project										 struct bim_UInt8Image* ptrA,
1537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project										 struct bim_UInt8Image* srcPtrA )
1547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
1557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	struct bbs_MemSeg sharedSegL = bbs_MemSeg_createShared( cpA, srcPtrA->arrE.arrPtrE, ( srcPtrA->widthE * srcPtrA->heightE ) / 2 );
1567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( ptrA->arrE.arrPtrE != 0 )
1587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
1597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		bbs_ERROR0( "void bim_UInt8Image_assignExternalImage( ... ): image was already created once" );
1607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		return;
1617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
1627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	bim_UInt8Image_create( cpA, ptrA,
1647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					       srcPtrA->widthE,
1657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						   srcPtrA->heightE,
1667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						   &sharedSegL );
1677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
1687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
1707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bim_UInt8Image_size( struct bbs_Context* cpA,
1727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						  struct bim_UInt8Image* ptrA,
1737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						  uint32 widthA,
1747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						  uint32 heightA )
1757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
1767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( ptrA->arrE.allocatedSizeE < widthA * heightA )
1777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
1787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		bbs_ERROR0( "void bim_UInt8Image_size( struct bim_UInt8Image*, uint32 sizeA ):\n"
1797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				   "Unsufficient allocated memory" );
1807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		return;
1817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
1827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	bbs_UInt8Arr_size( cpA, &ptrA->arrE, widthA * heightA );
1837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	ptrA->widthE  = widthA;
1847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	ptrA->heightE = heightA;
1857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
1867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
1887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
1907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
1917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ I/O } -------------------------------------------------------- */
1927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
1937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
1947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
1967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bim_UInt8Image_memSize( struct bbs_Context* cpA,
1987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							   const struct bim_UInt8Image* ptrA )
1997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
2007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	return  bbs_SIZEOF16( uint32 )
2017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		  + bbs_SIZEOF16( uint32 ) /* version */
2027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		  + bbs_SIZEOF16( ptrA->widthE )
2037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		  + bbs_SIZEOF16( ptrA->heightE )
2047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		  + bbs_UInt8Arr_memSize( cpA, &ptrA->arrE );
2057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
2067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
2087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bim_UInt8Image_memWrite( struct bbs_Context* cpA,
2107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							    const struct bim_UInt8Image* ptrA,
2117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project								uint16* memPtrA )
2127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
2137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 memSizeL = bim_UInt8Image_memSize( cpA, ptrA );
2147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	memPtrA += bbs_memWrite32( &memSizeL, memPtrA );
2157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	memPtrA += bbs_memWriteUInt32( bim_UINT8_IMAGE_VERSION, memPtrA );
2167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	memPtrA += bbs_memWrite32( &ptrA->widthE, memPtrA );
2177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	memPtrA += bbs_memWrite32( &ptrA->heightE, memPtrA );
2187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	bbs_UInt8Arr_memWrite( cpA, &ptrA->arrE, memPtrA );
2197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	return memSizeL;
2207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
2217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
2237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bim_UInt8Image_memRead( struct bbs_Context* cpA,
2257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							   struct bim_UInt8Image* ptrA,
2267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							   const uint16* memPtrA,
2277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 					           struct bbs_MemSeg* mspA )
2287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
2297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 memSizeL, versionL, widthL, heightL;
2307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( bbs_Context_error( cpA ) ) return 0;
2317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	memPtrA += bbs_memRead32( &memSizeL, memPtrA );
2327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	memPtrA += bbs_memReadVersion32( cpA, &versionL, bim_UINT8_IMAGE_VERSION, memPtrA );
2337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	memPtrA += bbs_memRead32( &widthL, memPtrA );
2347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	memPtrA += bbs_memRead32( &heightL, memPtrA );
2357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	ptrA->widthE  = widthL;
2377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	ptrA->heightE = heightL;
2387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	bbs_UInt8Arr_memRead( cpA, &ptrA->arrE, memPtrA, mspA );
2397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( memSizeL != bim_UInt8Image_memSize( cpA, ptrA ) )
2417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
2427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bim_UInt8Image_memRead( const struct bim_UInt8Image* ptrA, const void* memPtrA ):\n"
2437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project                   "size mismatch" );
2447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		return 0;
2457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
2467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	return memSizeL;
2477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
2487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
2507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
2527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
2537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ exec functions } --------------------------------------------- */
2547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/*                                                                           */
2557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
2567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
2587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bim_UInt8Image_setAllPixels( struct bbs_Context* cpA,
2607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project								  struct bim_UInt8Image* ptrA,
2617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project								  uint8 valueA )
2627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
2637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	long iL;
2647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint8* ptrL = ptrA->arrE.arrPtrE;
2657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	for( iL = ptrA->widthE * ptrA->heightE; iL > 0; iL-- )
2667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
2677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		*ptrL++ = valueA;
2687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
2697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
2707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
2727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
2737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/**
2747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			|				|				|				|
2757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			|	(loop x1)	|	(loop x2)	|	(loop x3)	|
2767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			o------------->-o------------>--o------------->-o
2777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			|				|				|				|
2787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			|				|				|				|
2797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			|				|				|				|
2807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			|				|				|				|
2817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	( sectionL->x1E, sectionL->y1E )		|				|
2827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project---------o-	R-------------------------------|----------------
2837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		 |	|				|				|				|
2847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		 |	|				|				|				|
2857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		 |	|				|				|				|
2867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		 |	|				|				|				|
2877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project   (loop y1)|				|				|				|
2887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		 |	|				|				|				|
2897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		 V	|				|				|				|
2907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		 |	|				|( 0, 0 )		|				|		X
2917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project---------o------------------I------------------------------------------------->
2927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		 |	|				|				|				|
2937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		 |	|				|				|				|
2947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		 |	|				|				|				|
2957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		 |	|				|				|				|
2967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		 |	|				|				|				|
2977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project   (loop y2)|				|				|				|
2987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		 |	|				|				|				|
2997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		 |	|				|				|				|
3007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		 |	|				|				|				|
3017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		 V	|				|				|				|
3027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		 |	|				|				|				|
3037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project---------o------------------|---------------I				|
3047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		 |	|				|		( srcPtrA->widthE, srcPtrA->heightE )
3057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		 |	|				|								|
3067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		 |	|				|								|
3077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		 |	|				|								|
3087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		 |	|				|								|
3097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		 |	|				|								|
3107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project   (loop y3)|				|								|
3117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		 |	|				|								|
3127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		 |	|				|								|
3137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		 V	|				|								|
3147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		 |	|				|								|
3157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project---------o--------------------------------------------------R
3167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							|				( sectionL->x2E, sectionL->y2E )
3177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							|
3187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						  Y	|
3197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							|
3207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							|
3217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							V
3227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
3237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project  To understand how the algorithm work refer to the diagram above.
3247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project  The image boundaries are indicated by letter "I" ( 0, 0 ) to ( srcPtrA->widthE, srcPtrA->heightE )
3257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project  The rectangle boundaries are indicated by letter "R" ( sectionPtrA->x1E, sectionPtrA->y1E ) to ( sectionPtrA->x2E, sectionPtrA->y2E )
3267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
3277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project  In the above example the intersection of the image and the rectange is
3287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project  ( 0, 0 ), ( srcPtrA->widthE, srcPtrA->heightE )
3297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
3307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project  The size of the destination image is always ( ( sectionL->x2E, sectionL->y2E ) - ( sectionL->x1E, sectionL->y1E ) )
3317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
3327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project  All coordinates are assumed to be relative to the original image.
3337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
3347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project  1. parse all pixels in "loop y1"
3357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	1.a. parse all pixels in "loop x1"
3367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	1.b. parse all pixels in "loop x2"
3377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	1.c. parse all pixels in "loop x3"
3387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project  2. parse all pixels in "loop y2"
3397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	2.a. parse all pixels in "loop x1"
3407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	2.b. parse all pixels in "loop x2"
3417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	2.c. parse all pixels in "loop x3"
3427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project  3. parse all pixels in "loop y3"
3437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	3.a. parse all pixels in "loop x1"
3447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	3.b. parse all pixels in "loop x2"
3457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	3.c. parse all pixels in "loop x3"
3467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
3477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project*/
3487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
3497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** copies a section of given image */
3507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bim_UInt8Image_copySection( struct bbs_Context* cpA,
3517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project								 struct bim_UInt8Image* ptrA,
3527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project								 const struct bim_UInt8Image* srcPtrA,
3537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project								 const struct bts_Int16Rect* sectionPtrA )
3547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
3557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
3567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint8* srcPixelPtrL;
3577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint8* dstPixelPtrL;
3587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	int32 yIndexL;
3597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	int32 xIndexL;
3607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
3617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	struct bts_Int16Rect srcImageSubSectionL;
3627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	struct bts_Int16Rect sectionL;
3637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
3647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/* make sure that the rectangle passed is correct, in case the x2 < x1 or y2 < y1, swap them */
3657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	sectionL.x1E = bbs_min( sectionPtrA->x1E, sectionPtrA->x2E );
3667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	sectionL.x2E = bbs_max( sectionPtrA->x1E, sectionPtrA->x2E );
3677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	sectionL.y1E = bbs_min( sectionPtrA->y1E, sectionPtrA->y2E );
3687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	sectionL.y2E = bbs_max( sectionPtrA->y1E, sectionPtrA->y2E );
3697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
3707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/* find the intersection betweem the rectangle and the image, the image always starts at 0,0 */
3717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	srcImageSubSectionL.x1E = bbs_max( 0, sectionL.x1E );
3727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	srcImageSubSectionL.y1E = bbs_max( 0, sectionL.y1E );
3737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	srcImageSubSectionL.x2E = bbs_min( ( int32 ) srcPtrA->widthE, sectionL.x2E );
3747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	srcImageSubSectionL.y2E = bbs_min( ( int32 ) srcPtrA->heightE, sectionL.y2E );
3757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
3767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/* If the image and the rectangle do not intersect in X direction, set the intersecting rectangle to the image coordinates */
3777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( srcImageSubSectionL.x2E < srcImageSubSectionL.x1E )
3787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
3797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		srcImageSubSectionL.x1E = 0;
3807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		srcImageSubSectionL.x2E = srcPtrA->widthE;
3817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
3827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/* do the same as above in the Y direction */
3837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( srcImageSubSectionL.y2E < srcImageSubSectionL.y1E )
3847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
3857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		srcImageSubSectionL.y1E = 0;
3867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		srcImageSubSectionL.y2E = srcPtrA->heightE;
3877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
3887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
3897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/* set size, and allocate required memory for the destination image if required */
3907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	bim_UInt8Image_size( cpA, ptrA, sectionL.x2E - sectionL.x1E, sectionL.y2E - sectionL.y1E );
3917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
3927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/* get the pointer to the destination image */
3937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	dstPixelPtrL = ptrA->arrE.arrPtrE;
3947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
3957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/* 1. parse all pixels in "loop y1" */
3967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	for( yIndexL = sectionL.y1E; yIndexL < srcImageSubSectionL.y1E && yIndexL < sectionL.y2E; yIndexL++ )
3977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
3987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		/* move to the first pixel that needs to be copied. */
3997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		srcPixelPtrL = srcPtrA->arrE.arrPtrE;
4007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
4017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		/* 1.a. parse all pixels in "loop x1" */
4027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		for( xIndexL = sectionL.x1E; xIndexL < srcImageSubSectionL.x1E && xIndexL < sectionL.x2E; xIndexL++ )
4037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
4047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			*dstPixelPtrL++ = *srcPixelPtrL;
4057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
4067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		/* 1.b. parse all pixels in "loop x2" */
4077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		for( ; xIndexL < srcImageSubSectionL.x2E && xIndexL < sectionL.x2E; xIndexL++ )
4087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
4097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			*dstPixelPtrL++ = *srcPixelPtrL++;
4107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
4117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		srcPixelPtrL--;
4127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		/* 1.c. parse all pixels in "loop x3" */
4137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		for( ; xIndexL < sectionL.x2E; xIndexL++ )
4147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
4157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			*dstPixelPtrL++ = *srcPixelPtrL;
4167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
4177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
4187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/* 2. parse all pixels in "loop y2" */
4197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	for( ; yIndexL < srcImageSubSectionL.y2E && yIndexL < sectionL.y2E; yIndexL++ )
4207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
4217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		/* move to the first pixel that needs to be copied. */
4227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		srcPixelPtrL = srcPtrA->arrE.arrPtrE + yIndexL * srcPtrA->widthE + srcImageSubSectionL.x1E;
4237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
4247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		/* 2.a. parse all pixels in "loop x1" */
4257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		for( xIndexL = sectionL.x1E; xIndexL < srcImageSubSectionL.x1E && xIndexL < sectionL.x2E; xIndexL++ )
4267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
4277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			*dstPixelPtrL++ = *srcPixelPtrL;
4287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
4297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		/* 2.b. parse all pixels in "loop x2" */
4307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		for( ; xIndexL < srcImageSubSectionL.x2E && xIndexL < sectionL.x2E; xIndexL++ )
4317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
4327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			*dstPixelPtrL++ = *srcPixelPtrL++;
4337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
4347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		srcPixelPtrL--;
4357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		/* 2.c. parse all pixels in "loop x3" */
4367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		for( ; xIndexL < sectionL.x2E; xIndexL++ )
4377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
4387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			*dstPixelPtrL++ = *srcPixelPtrL;
4397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
4407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
4417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/* 3. parse all pixels in "loop y3" */
4427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	for( ; yIndexL < sectionL.y2E; yIndexL++ )
4437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
4447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		srcPixelPtrL = srcPtrA->arrE.arrPtrE + ( srcImageSubSectionL.y2E - 1 ) * srcPtrA->widthE + srcImageSubSectionL.x1E;
4457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
4467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		/* 3.a. parse all pixels in "loop x1" */
4477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		for( xIndexL = sectionL.x1E; xIndexL < srcImageSubSectionL.x1E && xIndexL < sectionL.x2E; xIndexL++ )
4487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
4497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			*dstPixelPtrL++ = *srcPixelPtrL;
4507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
4517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		/* 3.b. parse all pixels in "loop x3" */
4527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		for( ; xIndexL < srcImageSubSectionL.x2E && xIndexL < sectionL.x2E; xIndexL++ )
4537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
4547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			*dstPixelPtrL++ = *srcPixelPtrL++;
4557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
4567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		srcPixelPtrL--;
4577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		/* 3.c. parse all pixels in "loop x3" */
4587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		for( ; xIndexL < sectionL.x2E; xIndexL++ )
4597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
4607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			*dstPixelPtrL++ = *srcPixelPtrL;
4617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
4627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
4637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
4647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
4657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
4667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
4677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
4687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/**
4697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
4707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
4717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		M-------------------------------------------------------M
4727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		|				|						|				|
4737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		|				|						|				|
4747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		|				|						|				|
4757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		|				|						|				|
4767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		|	region x0y0	|		region x1y0		|	region x2y0	|
4777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		|				|						|				|
4787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		|				|						|				|
4797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		|				|						|				|
4807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		|---------------I-----------------------I---------------|
4817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		|				|						|				|
4827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		|				|						|				|
4837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		|				|						|				|
4847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		|				|						|				|
4857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		|				|						|				|
4867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		|				|						|				|
4877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		|	region x0y1	|		region x1y1		|	region x2y1	|
4887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		|				|						|				|
4897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		|				|						|				|
4907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		|				|						|				|
4917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		|				|						|				|
4927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		|				|						|				|
4937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		|				|						|				|
4947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		|				|						|				|
4957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		|---------------I-----------------------I---------------|
4967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		|				|						|				|
4977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		|				|						|				|
4987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		|				|						|				|
4997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		|				|						|				|
5007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		|	region x0y2	|		region x1y2		|	region x2y2	|
5017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		|				|						|				|
5027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		|				|						|				|
5037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		|				|						|				|
5047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		M-------------------------------------------------------M
5057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
5067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
5077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project  To see how the code is organized. Refer to the diagram above.
5087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project  Assume the original image after applying the tranzformations(translation, rotation and scaling) is "O"
5097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	(boundaries of the image are shown above bounded by the letter 'O').
5107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project  This image is being Warped to the area "M" (boundaries of this area are bounded by the letter 'M').
5117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
5127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	Refer to the source code below to point to the loop that maps pixels in the particular region.
5137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
5147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project */
5157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
5167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** applies affine linear warping to pixels positions of imageA before copying the into *ptrA */
5177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bim_UInt8Image_warpOffs( struct bbs_Context* cpA,
5187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						  struct bim_UInt8Image* ptrA,
5197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						  const struct bim_UInt8Image* srcPtrA,
5207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						  int32 xOffsA,
5217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						  int32 yOffsA,
5227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						  const struct bts_Flt16Alt2D* altPtrA,
5237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			              int32 resultWidthA,
5247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			              int32 resultHeightA )
5257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
5267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	long srcWidthL = srcPtrA->widthE;
5277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	long srcHeightL = srcPtrA->heightE;
5287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
5297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	struct bts_Flt16Alt2D invAlt2DL;
5307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
5317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint8* dstPtrL;
5327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	const uint8* ulPtrL = srcPtrA->arrE.arrPtrE;
5337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	const uint8* urPtrL = ulPtrL + srcWidthL - 1;
5347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	const uint8* llPtrL = ulPtrL + ( srcHeightL - 1 ) * srcWidthL;
5357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	const uint8* lrPtrL = llPtrL + srcWidthL - 1;
5367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
5377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	uint32 iL, jL;
5387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	int32 shiftL;
5397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
5407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	const uint16 bbpL = 16;
5417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	int32 maxInt32Value8bbpL  = 0x7FFFFFFF;
5427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
5437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/* The bbp for all these variables is the same as bbpL */
5447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	int32 mxxL;
5457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	int32 mxyL;
5467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	int32 myxL;
5477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	int32 myyL;
5487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
5497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	int32 txL;
5507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	int32 tyL;
5517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
5527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	int32 xL;
5537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	int32 yL;
5547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
5557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	bim_UInt8Image_size( cpA, ptrA, resultWidthA, resultHeightA );
5567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	dstPtrL = ptrA->arrE.arrPtrE;
5577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
5587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/* compute inverse */
5597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	invAlt2DL = bts_Flt16Alt2D_inverted( altPtrA );
5607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
5617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( srcWidthL == 0 || srcHeightL == 0 )
5627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
5637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		bim_UInt8Image_size( cpA, ptrA, srcWidthL, srcHeightL );
5647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		bbs_ERROR2( "Size of output image is %d/%d", srcWidthL, srcHeightL );
5657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		return;
5667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
5677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
5687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/* align Matrix and Vector to 8 bits bbp */
5697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	shiftL = invAlt2DL.matE.bbpE - bbpL;
5707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( shiftL >= 0 )
5717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
5727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		mxxL = invAlt2DL.matE.xxE >> shiftL;
5737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		mxyL = invAlt2DL.matE.xyE >> shiftL;
5747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		myxL = invAlt2DL.matE.yxE >> shiftL;
5757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		myyL = invAlt2DL.matE.yyE >> shiftL;
5767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
5777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	else
5787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
5797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		/* Check for overflow since we are left shifting. */
5807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		maxInt32Value8bbpL >>= -shiftL;
5817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		if( invAlt2DL.matE.xxE > maxInt32Value8bbpL ||
5827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			invAlt2DL.matE.xyE > maxInt32Value8bbpL ||
5837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			invAlt2DL.matE.yxE > maxInt32Value8bbpL ||
5847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			invAlt2DL.matE.yyE > maxInt32Value8bbpL )
5857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
5867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			/* Overflow error */
5877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			bbs_ERROR5( "The values in the transformation matrix cause overflow during bitshift\n%d, %d,\n%d, %d\n"
5887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						"The maximum allowed value is %d",
5897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						invAlt2DL.matE.xxE >> invAlt2DL.matE.bbpE,
5907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						invAlt2DL.matE.xyE >> invAlt2DL.matE.bbpE,
5917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						invAlt2DL.matE.yxE >> invAlt2DL.matE.bbpE,
5927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						invAlt2DL.matE.yyE >> invAlt2DL.matE.bbpE,
5937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						maxInt32Value8bbpL >> ( bbpL - ( -shiftL ) ) );
5947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			return;
5957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
5967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
5977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		mxxL = invAlt2DL.matE.xxE << -shiftL;
5987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		mxyL = invAlt2DL.matE.xyE << -shiftL;
5997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		myxL = invAlt2DL.matE.yxE << -shiftL;
6007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		myyL = invAlt2DL.matE.yyE << -shiftL;
6017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		maxInt32Value8bbpL <<= -shiftL;
6027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
6037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
6047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/* invAlt2DL.matE.bbpE = bbpL; nonsense! */
6057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
6067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	shiftL = invAlt2DL.vecE.bbpE - bbpL;
6077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	if( shiftL >= 0 )
6087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
6097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		txL  = invAlt2DL.vecE.xE >> shiftL;
6107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		tyL  = invAlt2DL.vecE.yE >> shiftL;
6117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
6127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	else
6137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
6147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		/* Check for overflow since we are left shifting. */
6157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		maxInt32Value8bbpL >>= -shiftL;
6167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		if(	invAlt2DL.vecE.xE  > maxInt32Value8bbpL ||
6177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			invAlt2DL.vecE.yE  > maxInt32Value8bbpL )
6187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
6197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			/* Overflow error */
6207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			bbs_ERROR3( "The values in the vector cause overflow during bitshift\n%d, %d,\n"
6217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						"The maximum allowed value is %d",
6227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						invAlt2DL.vecE.xE >> invAlt2DL.vecE.bbpE,
6237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						invAlt2DL.vecE.yE >> invAlt2DL.vecE.bbpE,
6247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						maxInt32Value8bbpL >> ( bbpL - ( -shiftL ) ) );
6257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			return;
6267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		}
6277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		txL  = invAlt2DL.vecE.xE << -shiftL;
6287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		tyL  = invAlt2DL.vecE.yE << -shiftL;
6297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		maxInt32Value8bbpL <<= -shiftL;
6307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	}
6317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
6327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/* invAlt2DL.vecE.bbpE = bbpL; nonsense! */
6337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
6347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/* adjust offset */
6357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	txL += xOffsA << bbpL;
6367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	tyL += yOffsA << bbpL;
6377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
6387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/* For each destination pixel find the correspoding source pixel by applying the inverse transformation */
6397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	for( jL = 0; jL < ptrA->heightE; jL++ )
6407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	{
6417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		xL = txL + mxyL * jL;
6427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		yL = tyL + myyL * jL;
6437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		for( iL = 0; iL < ptrA->widthE; iL++ )
6447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		{
6457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			const uint16 bbpLby2L = bbpL / 2;
6467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			const int32 oneL = 0x00000001 << bbpLby2L;
6477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			const int32 fractionOnlyL = 0xFFFFFFFF >> ( 32 - bbpL );
6487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
6497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			/* The bbp for all these variables is the same as bbpLby2L */
6507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			int32 f2xL;
6517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			int32 f2yL;
6527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			int32 f1xL;
6537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			int32 f1yL;
6547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
6557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			/* always whole numbers with a bbp of 0 */
6567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			int32 kL;
6577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			int32 lL;
6587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
6597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			/* The bbpE for these variables is bbpLby2L */
6607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			int32 valL;
6617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
6627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			/* Get the whole numbers only and make the bbp 0. */
6637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			kL = xL >> bbpL;
6647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			lL = yL >> bbpL;
6657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
6667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			/* fraction of destination pixel in the next source pixel */
6677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			f2xL = ( xL & fractionOnlyL ) >> bbpLby2L;
6687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			f2yL = ( yL & fractionOnlyL ) >> bbpLby2L;
6697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			/* fraction of destination pixel in the current source pixel */
6707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			f1xL = oneL - f2xL;
6717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			f1yL = oneL - f2yL;
6727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
6737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			/* increment values for next loop */
6747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			xL += mxxL;
6757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			yL += myxL;
6767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
6777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			if( lL < 0 )
6787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			{
6797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				if( kL < 0 )
6807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				{
6817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					/* handle all pixels in region x0y0 */
6827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					*dstPtrL++ = *ulPtrL;
6837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				}
6847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				else if( kL >= srcWidthL - 1 )
6857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				{
6867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					/* handle all pixels in region x2y0 */
6877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					*dstPtrL++ = *urPtrL;
6887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				}
6897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				else
6907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				{
6917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					/* handle all pixels in region x1y0 */
6927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					/* The bbp has shifted left by bbpLby2L */
6937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					valL =  *( ulPtrL + kL ) * f1xL + *( ulPtrL + kL + 1 ) * f2xL;
6947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					*dstPtrL++ = valL >> bbpLby2L;
6957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				}
6967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			} /* if( lL < 0 ) */
6977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			else if( lL >= srcHeightL - 1 )
6987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			{
6997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				if( kL < 0 )
7007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				{
7017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					/* handle all pixels in region x0y2 */
7027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					*dstPtrL++ = *llPtrL;
7037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				}
7047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				else if( kL >= srcWidthL - 1 )
7057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				{
7067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					/* handle all pixels in region x2y2 */
7077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					*dstPtrL++ = *lrPtrL;
7087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				}
7097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				else
7107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				{
7117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					/* handle all pixels in region x1y2 */
7127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					/* The bbp has shifted left by bbpLby2L */
7137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					valL =   *( llPtrL + kL ) * f1xL + *( llPtrL +  kL + 1 ) * f2xL;
7147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					*dstPtrL++ = valL >> bbpLby2L;
7157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				}
7167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			} /* if( lL >= srcHeightL - 1 ) */
7177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			else
7187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			{
7197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				const uint8* ptr1L;
7207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				const uint8* ptr2L;
7217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
7227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				ptr1L = ulPtrL + lL * srcWidthL;
7237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				/* point to the pixel in the same column */
7247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				ptr2L = ptr1L + srcWidthL;
7257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				if( kL < 0 )
7267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				{
7277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					/* handle all pixels in region x0y1 */
7287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					/* The bbp has shifted left by bbpLby2L */
7297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					valL = *ptr1L * f1yL + *ptr2L * f2yL ;
7307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					*dstPtrL++ = valL >> bbpLby2L;
7317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				}
7327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				else if( kL >= srcWidthL - 1 )
7337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				{
7347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					/* handle all pixels in region x2y1 */
7357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					/* The bbp has shifted left by bbpLby2L */
7367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					valL =  *( ptr1L + srcWidthL - 1 ) * f1yL + *( ptr2L  + srcWidthL - 1 ) * f2yL;
7377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					*dstPtrL++ = valL >> bbpLby2L;
7387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				}
7397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				else
7407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				{
7417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					/* assuming that bbpL = bbpLby2 * 2 */
7427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					/* The bbp for these variables is bbpLby2L */
7437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					int32 v1L;
7447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					int32 v2L;
7457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					/* The bbp for these variables is bbpL */
7467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					const int32 halfL = 0x00000001 << ( bbpL - 1 );
7477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
7487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					/* handle all pixels in region x1y1 */
7497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					/* The bbp has shifted left by bbpLby2L */
7507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					v1L = *( ptr1L + kL ) * f1xL + *( ptr1L + kL + 1 ) * f2xL;
7517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					v2L = *( ptr2L + kL ) * f1xL + *( ptr2L + kL + 1 ) * f2xL;
7527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					/* The bbp has shifted left again by bbpLby2L */
7537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					/* adding the half to round off the resulting value */
7547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					valL = v1L * f1yL + v2L * f2yL + halfL;
7557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project					*dstPtrL++ = valL >> bbpL;
7567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				}
7577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			}
7587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project		} /* iL loop */
7597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	} /* jL loop */
7607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
7617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
7627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
7637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */
7647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
7657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bim_UInt8Image_warp( struct bbs_Context* cpA,
7667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						  struct bim_UInt8Image* ptrA,
7677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						  const struct bim_UInt8Image* srcPtrA,
7687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project						  const struct bts_Flt16Alt2D* altPtrA,
7697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			              int32 resultWidthA,
7707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project			              int32 resultHeightA )
7717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
7727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	bim_UInt8Image_warpOffs( cpA, ptrA, srcPtrA, 0, 0, altPtrA, resultWidthA, resultHeightA );
7737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}
7747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
7757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */
7767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
7777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
778