Home | History | Annotate | Download | only in b_ImageEm
      1 /*
      2  * Copyright (C) 2008 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 /* ---- includes ----------------------------------------------------------- */
     18 
     19 #include "b_BasicEm/Functions.h"
     20 #include "b_BasicEm/Math.h"
     21 #include "b_ImageEm/Flt16Image.h"
     22 #include "b_ImageEm/ComplexImage.h"
     23 
     24 /* ------------------------------------------------------------------------- */
     25 
     26 /* ========================================================================= */
     27 /*                                                                           */
     28 /* ---- \ghd{ auxiliary functions } ---------------------------------------- */
     29 /*                                                                           */
     30 /* ========================================================================= */
     31 
     32 /* ------------------------------------------------------------------------- */
     33 
     34 /* ========================================================================= */
     35 /*                                                                           */
     36 /* ---- \ghd{ constructor / destructor } ----------------------------------- */
     37 /*                                                                           */
     38 /* ========================================================================= */
     39 
     40 /* ------------------------------------------------------------------------- */
     41 
     42 void bim_Flt16Image_init( struct bbs_Context* cpA,
     43 						  struct bim_Flt16Image* ptrA )
     44 {
     45 	bbs_Int16Arr_init( cpA, &ptrA->allocArrE );
     46 	bbs_Int16Arr_init( cpA, &ptrA->arrE );
     47 	ptrA->widthE = 0;
     48 	ptrA->heightE = 0;
     49 	ptrA->bbpE = 0;
     50 }
     51 
     52 /* ------------------------------------------------------------------------- */
     53 
     54 void bim_Flt16Image_exit( struct bbs_Context* cpA,
     55 						  struct bim_Flt16Image* ptrA )
     56 {
     57 	bbs_Int16Arr_exit( cpA, &ptrA->arrE );
     58 	bbs_Int16Arr_exit( cpA, &ptrA->allocArrE );
     59 	ptrA->widthE = 0;
     60 	ptrA->heightE = 0;
     61 	ptrA->bbpE = 0;
     62 }
     63 
     64 /* ------------------------------------------------------------------------- */
     65 
     66 /* ========================================================================= */
     67 /*                                                                           */
     68 /* ---- \ghd{ operators } -------------------------------------------------- */
     69 /*                                                                           */
     70 /* ========================================================================= */
     71 
     72 /* ------------------------------------------------------------------------- */
     73 
     74 void bim_Flt16Image_copy( struct bbs_Context* cpA,
     75 						  struct bim_Flt16Image* ptrA,
     76 						  const struct bim_Flt16Image* srcPtrA )
     77 {
     78 #ifdef DEBUG1
     79 	if( ptrA->arrE.allocatedSizeE < srcPtrA->arrE.allocatedSizeE )
     80 	{
     81 		bbs_ERROR0( "void bim_Flt16Image_copy(...):\n"
     82 				   "Unsufficient allocated memory in destination image." );
     83 		return;
     84 	}
     85 #endif
     86 	ptrA->widthE  = srcPtrA->widthE;
     87 	ptrA->heightE = srcPtrA->heightE;
     88 	ptrA->bbpE    = srcPtrA->bbpE;
     89 	bbs_Int16Arr_copy( cpA, &ptrA->arrE, &srcPtrA->arrE );
     90 }
     91 
     92 /* ------------------------------------------------------------------------- */
     93 
     94 flag bim_Flt16Image_equal( struct bbs_Context* cpA,
     95 						   const struct bim_Flt16Image* ptrA,
     96 						   const struct bim_Flt16Image* srcPtrA )
     97 {
     98 	if( ptrA->widthE  != srcPtrA->widthE ) return FALSE;
     99 	if( ptrA->heightE != srcPtrA->heightE ) return FALSE;
    100 	if( ptrA->bbpE    != srcPtrA->bbpE ) return FALSE;
    101 	return bbs_Int16Arr_equal( cpA, &ptrA->arrE, &srcPtrA->arrE );
    102 }
    103 
    104 /* ------------------------------------------------------------------------- */
    105 
    106 /* ========================================================================= */
    107 /*                                                                           */
    108 /* ---- \ghd{ query functions } -------------------------------------------- */
    109 /*                                                                           */
    110 /* ========================================================================= */
    111 
    112 /* ------------------------------------------------------------------------- */
    113 
    114 /* ========================================================================= */
    115 /*                                                                           */
    116 /* ---- \ghd{ modify functions } ------------------------------------------- */
    117 /*                                                                           */
    118 /* ========================================================================= */
    119 
    120 /* ------------------------------------------------------------------------- */
    121 
    122 void bim_Flt16Image_create( struct bbs_Context* cpA,
    123 						    struct bim_Flt16Image* ptrA,
    124 						    uint32 widthA,
    125 							uint32 heightA,
    126  					        struct bbs_MemSeg* mspA )
    127 {
    128 	if( bbs_Context_error( cpA ) ) return;
    129 	if( ptrA->arrE.arrPtrE != 0 )
    130 	{
    131 		bim_Flt16Image_size( cpA, ptrA, widthA, heightA );
    132 	}
    133 	else
    134 	{
    135 		/* OLD CODE
    136 		bbs_Int16Arr_create( cpA, &ptrA->arrE, widthA * heightA, mspA );
    137 		*/
    138 		bbs_Int16Arr_createAligned( cpA, &ptrA->arrE, widthA * heightA, mspA, &ptrA->allocArrE, bbs_MEMORY_ALIGNMENT );
    139 
    140 		ptrA->widthE  = widthA;
    141 		ptrA->heightE = heightA;
    142 	}
    143 }
    144 
    145 /* ------------------------------------------------------------------------- */
    146 /* incompatible with ALIGN
    147 void bim_Flt16Image_assignExternalImage( struct bbs_Context* cpA,
    148 										 struct bim_Flt16Image* ptrA,
    149 										 struct bim_Flt16Image* srcPtrA )
    150 {
    151 	struct bbs_MemSeg sharedSegL = bbs_MemSeg_createShared( cpA, srcPtrA->arrE.arrPtrE, srcPtrA->widthE * srcPtrA->heightE );
    152 
    153 	if( ptrA->arrE.arrPtrE != 0 )
    154 	{
    155 		bbs_ERROR0( "void bim_Flt16Image_assignExternalImage( ... ): image was already created once" );
    156 		return;
    157 	}
    158 
    159 	bim_Flt16Image_create( cpA,
    160 						   ptrA,
    161 					       srcPtrA->widthE,
    162 						   srcPtrA->heightE,
    163 						   &sharedSegL );
    164 
    165 	ptrA->bbpE = srcPtrA->bbpE;
    166 }
    167 */
    168 /* ------------------------------------------------------------------------- */
    169 
    170 void bim_Flt16Image_size( struct bbs_Context* cpA,
    171 						  struct bim_Flt16Image* ptrA,
    172 						  uint32 widthA,
    173 						  uint32 heightA )
    174 {
    175 	if( ptrA->arrE.allocatedSizeE < widthA * heightA )
    176 	{
    177 		bbs_ERROR0( "void bim_Flt16Image_size( struct bim_Flt16Image*, uint32 sizeA ):\n"
    178 				   "Unsufficient allocated memory" );
    179 		return;
    180 	}
    181 	ptrA->widthE  = widthA;
    182 	ptrA->heightE = heightA;
    183 	bbs_Int16Arr_size( cpA, &ptrA->arrE, widthA * heightA );
    184 }
    185 
    186 /* ------------------------------------------------------------------------- */
    187 
    188 /* ========================================================================= */
    189 /*                                                                           */
    190 /* ---- \ghd{ I/O } -------------------------------------------------------- */
    191 /*                                                                           */
    192 /* ========================================================================= */
    193 
    194 /* ------------------------------------------------------------------------- */
    195 
    196 uint32 bim_Flt16Image_memSize( struct bbs_Context* cpA,
    197 							   const struct bim_Flt16Image* ptrA )
    198 {
    199 	return  bbs_SIZEOF16( uint32 )
    200 		  + bbs_SIZEOF16( uint32 ) /* version */
    201 		  + bbs_SIZEOF16( ptrA->widthE )
    202 		  + bbs_SIZEOF16( ptrA->heightE )
    203 		  + bbs_SIZEOF16( ptrA->bbpE )
    204 		  + bbs_Int16Arr_memSize( cpA, &ptrA->arrE );
    205 }
    206 
    207 /* ------------------------------------------------------------------------- */
    208 
    209 uint32 bim_Flt16Image_memWrite( struct bbs_Context* cpA,
    210 							    const struct bim_Flt16Image* ptrA,
    211 								uint16* memPtrA )
    212 {
    213 	uint32 memSizeL = bim_Flt16Image_memSize( cpA, ptrA );
    214 	memPtrA += bbs_memWrite32( &memSizeL, memPtrA );
    215 	memPtrA += bbs_memWriteUInt32( bim_FLT16_IMAGE_VERSION, memPtrA );
    216 	memPtrA += bbs_memWrite32( &ptrA->widthE, memPtrA );
    217 	memPtrA += bbs_memWrite32( &ptrA->heightE, memPtrA );
    218 	memPtrA += bbs_memWrite32( &ptrA->bbpE, memPtrA );
    219 	bbs_Int16Arr_memWrite( cpA, &ptrA->arrE, memPtrA );
    220 	return memSizeL;
    221 }
    222 
    223 /* ------------------------------------------------------------------------- */
    224 
    225 uint32 bim_Flt16Image_memRead( struct bbs_Context* cpA,
    226 							   struct bim_Flt16Image* ptrA,
    227 							   const uint16* memPtrA,
    228  					           struct bbs_MemSeg* mspA )
    229 {
    230 	uint32 memSizeL, versionL;
    231 	if( bbs_Context_error( cpA ) ) return 0;
    232 	memPtrA += bbs_memRead32( &memSizeL, memPtrA );
    233 	memPtrA += bbs_memReadVersion32( cpA, &versionL, bim_FLT16_IMAGE_VERSION, memPtrA );
    234 	memPtrA += bbs_memRead32( &ptrA->widthE, memPtrA );
    235 	memPtrA += bbs_memRead32( &ptrA->heightE, memPtrA );
    236 	memPtrA += bbs_memRead32( &ptrA->bbpE, memPtrA );
    237 	bbs_Int16Arr_memRead( cpA, &ptrA->arrE, memPtrA, mspA );
    238 
    239 	if( memSizeL != bim_Flt16Image_memSize( cpA, ptrA ) )
    240 	{
    241 		bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bim_Flt16Image_memRead( const struct bim_Flt16Image* ptrA, const void* memPtrA ):\n"
    242                    "size mismatch" );
    243 		return 0;
    244 	}
    245 	return memSizeL;
    246 }
    247 
    248 /* ------------------------------------------------------------------------- */
    249 
    250 /* ========================================================================= */
    251 /*                                                                           */
    252 /* ---- \ghd{ exec functions } --------------------------------------------- */
    253 /*                                                                           */
    254 /* ========================================================================= */
    255 
    256 /* ------------------------------------------------------------------------- */
    257 
    258 void bim_Flt16Image_setAllPixels( struct bbs_Context* cpA,
    259 								  struct bim_Flt16Image* ptrA,
    260 								  int16 valueA,
    261 								  int32 bbpA )
    262 {
    263 	long iL;
    264 	int16* ptrL = ptrA->arrE.arrPtrE;
    265 	for( iL = ptrA->widthE * ptrA->heightE; iL > 0; iL-- )
    266 	{
    267 		*ptrL++ = valueA;
    268 	}
    269 	ptrA->bbpE = bbpA;
    270 }
    271 
    272 /* ------------------------------------------------------------------------- */
    273 
    274 /**
    275 			|				|				|				|
    276 			|	(loop x1)	|	(loop x2)	|	(loop x3)	|
    277 			o------------->-o------------>--o------------->-o
    278 			|				|				|				|
    279 			|				|				|				|
    280 			|				|				|				|
    281 			|				|				|				|
    282 	( sectionL->x1E, sectionL->y1E )		|				|
    283 ---------o-	R-------------------------------|----------------
    284 		 |	|				|				|				|
    285 		 |	|				|				|				|
    286 		 |	|				|				|				|
    287 		 |	|				|				|				|
    288    (loop y1)|				|				|				|
    289 		 |	|				|				|				|
    290 		 V	|				|				|				|
    291 		 |	|				|( 0, 0 )		|				|		X
    292 ---------o------------------I------------------------------------------------->
    293 		 |	|				|				|				|
    294 		 |	|				|				|				|
    295 		 |	|				|				|				|
    296 		 |	|				|				|				|
    297 		 |	|				|				|				|
    298    (loop y2)|				|				|				|
    299 		 |	|				|				|				|
    300 		 |	|				|				|				|
    301 		 |	|				|				|				|
    302 		 V	|				|				|				|
    303 		 |	|				|				|				|
    304 ---------o------------------|---------------I				|
    305 		 |	|				|		( srcPtrA->widthE, srcPtrA->heightE )
    306 		 |	|				|								|
    307 		 |	|				|								|
    308 		 |	|				|								|
    309 		 |	|				|								|
    310 		 |	|				|								|
    311    (loop y3)|				|								|
    312 		 |	|				|								|
    313 		 |	|				|								|
    314 		 V	|				|								|
    315 		 |	|				|								|
    316 ---------o--------------------------------------------------R
    317 							|				( sectionL->x2E, sectionL->y2E )
    318 							|
    319 						  Y	|
    320 							|
    321 							|
    322 							V
    323 
    324   To understand how the algorithm work refer to the diagram above.
    325   The image boundaries are indicated by letter "I" ( 0, 0 ) to ( srcPtrA->widthE, srcPtrA->heightE )
    326   The rectangle boundaries are indicated by letter "R" ( sectionPtrA->x1E, sectionPtrA->y1E ) to ( sectionPtrA->x2E, sectionPtrA->y2E )
    327 
    328   In the above example the intersection of the image and the rectange is
    329   ( 0, 0 ), ( srcPtrA->widthE, srcPtrA->heightE )
    330 
    331   The size of the destination image is always ( ( sectionL->x2E, sectionL->y2E ) - ( sectionL->x1E, sectionL->y1E ) )
    332 
    333   All coordinates are assumed to be relative to the original image.
    334 
    335   1. parse all pixels in "loop y1"
    336 	1.a. parse all pixels in "loop x1"
    337 	1.b. parse all pixels in "loop x2"
    338 	1.c. parse all pixels in "loop x3"
    339   2. parse all pixels in "loop y2"
    340 	2.a. parse all pixels in "loop x1"
    341 	2.b. parse all pixels in "loop x2"
    342 	2.c. parse all pixels in "loop x3"
    343   3. parse all pixels in "loop y3"
    344 	3.a. parse all pixels in "loop x1"
    345 	3.b. parse all pixels in "loop x2"
    346 	3.c. parse all pixels in "loop x3"
    347 
    348 */
    349 
    350 /** copies a section of given image */
    351 void bim_Flt16Image_copySection( struct bbs_Context* cpA,
    352 								 struct bim_Flt16Image* ptrA,
    353 								 const struct bim_Flt16Image* srcPtrA,
    354 								 const struct bts_Int16Rect* sectionPtrA )
    355 {
    356 
    357 	int16* srcPixelPtrL;
    358 	int16* dstPixelPtrL;
    359 	int32 yIndexL;
    360 	int32 xIndexL;
    361 
    362 	struct bts_Int16Rect srcImageSubSectionL;
    363 	struct bts_Int16Rect sectionL;
    364 
    365 	/* make sure that the rectangle passed is correct, in case the x2 < x1 or y2 < y1, swap them */
    366 	sectionL.x1E = bbs_min( sectionPtrA->x1E, sectionPtrA->x2E );
    367 	sectionL.x2E = bbs_max( sectionPtrA->x1E, sectionPtrA->x2E );
    368 	sectionL.y1E = bbs_min( sectionPtrA->y1E, sectionPtrA->y2E );
    369 	sectionL.y2E = bbs_max( sectionPtrA->y1E, sectionPtrA->y2E );
    370 
    371 	/* find the intersection betweem the rectangle and the image, the image always starts at 0,0 */
    372 	srcImageSubSectionL.x1E = bbs_max( 0, sectionL.x1E );
    373 	srcImageSubSectionL.y1E = bbs_max( 0, sectionL.y1E );
    374 	srcImageSubSectionL.x2E = bbs_min( ( int32 ) srcPtrA->widthE, sectionL.x2E );
    375 	srcImageSubSectionL.y2E = bbs_min( ( int32 ) srcPtrA->heightE, sectionL.y2E );
    376 
    377 	/* If the image and the rectangle do not intersect in X direction, set the intersecting rectangle to the image coordinates */
    378 	if( srcImageSubSectionL.x2E < srcImageSubSectionL.x1E )
    379 	{
    380 		srcImageSubSectionL.x1E = 0;
    381 		srcImageSubSectionL.x2E = srcPtrA->widthE;
    382 	}
    383 	/* do the same as above in the Y direction */
    384 	if( srcImageSubSectionL.y2E < srcImageSubSectionL.y1E )
    385 	{
    386 		srcImageSubSectionL.y1E = 0;
    387 		srcImageSubSectionL.y2E = srcPtrA->heightE;
    388 	}
    389 
    390 	/* initialize, set size, and allocate required memory for the destination image if required */
    391 	bim_Flt16Image_size( cpA, ptrA, sectionL.x2E - sectionL.x1E, sectionL.y2E - sectionL.y1E );
    392 	ptrA->bbpE = srcPtrA->bbpE;
    393 
    394 	/* get the pointer to the destination image */
    395 	dstPixelPtrL = ptrA->arrE.arrPtrE;
    396 
    397 	/* 1. parse all pixels in "loop y1" */
    398 	for( yIndexL = sectionL.y1E; yIndexL < srcImageSubSectionL.y1E && yIndexL < sectionL.y2E; yIndexL++ )
    399 	{
    400 		/* move to the first pixel that needs to be copied. */
    401 		srcPixelPtrL = srcPtrA->arrE.arrPtrE;
    402 
    403 		/* 1.a. parse all pixels in "loop x1" */
    404 		for( xIndexL = sectionL.x1E; xIndexL < srcImageSubSectionL.x1E && xIndexL < sectionL.x2E; xIndexL++ )
    405 		{
    406 			*dstPixelPtrL++ = *srcPixelPtrL;
    407 		}
    408 		/* 1.b. parse all pixels in "loop x2" */
    409 		for( ; xIndexL < srcImageSubSectionL.x2E && xIndexL < sectionL.x2E; xIndexL++ )
    410 		{
    411 			*dstPixelPtrL++ = *srcPixelPtrL++;
    412 		}
    413 		srcPixelPtrL--;
    414 		/* 1.c. parse all pixels in "loop x3" */
    415 		for( ; xIndexL < sectionL.x2E; xIndexL++ )
    416 		{
    417 			*dstPixelPtrL++ = *srcPixelPtrL;
    418 		}
    419 	}
    420 	/* 2. parse all pixels in "loop y2" */
    421 	for( ; yIndexL < srcImageSubSectionL.y2E && yIndexL < sectionL.y2E; yIndexL++ )
    422 	{
    423 		/* move to the first pixel that needs to be copied. */
    424 		srcPixelPtrL = srcPtrA->arrE.arrPtrE + yIndexL * srcPtrA->widthE + srcImageSubSectionL.x1E;
    425 
    426 		/* 2.a. parse all pixels in "loop x1" */
    427 		for( xIndexL = sectionL.x1E; xIndexL < srcImageSubSectionL.x1E && xIndexL < sectionL.x2E; xIndexL++ )
    428 		{
    429 			*dstPixelPtrL++ = *srcPixelPtrL;
    430 		}
    431 		/* 2.b. parse all pixels in "loop x2" */
    432 		for( ; xIndexL < srcImageSubSectionL.x2E && xIndexL < sectionL.x2E; xIndexL++ )
    433 		{
    434 			*dstPixelPtrL++ = *srcPixelPtrL++;
    435 		}
    436 		srcPixelPtrL--;
    437 		/* 2.c. parse all pixels in "loop x3" */
    438 		for( ; xIndexL < sectionL.x2E; xIndexL++ )
    439 		{
    440 			*dstPixelPtrL++ = *srcPixelPtrL;
    441 		}
    442 	}
    443 	/* 3. parse all pixels in "loop y3" */
    444 	for( ; yIndexL < sectionL.y2E; yIndexL++ )
    445 	{
    446 		srcPixelPtrL = srcPtrA->arrE.arrPtrE + ( srcImageSubSectionL.y2E - 1 ) * srcPtrA->widthE + srcImageSubSectionL.x1E;
    447 
    448 		/* 3.a. parse all pixels in "loop x1" */
    449 		for( xIndexL = sectionL.x1E; xIndexL < srcImageSubSectionL.x1E && xIndexL < sectionL.x2E; xIndexL++ )
    450 		{
    451 			*dstPixelPtrL++ = *srcPixelPtrL;
    452 		}
    453 		/* 3.b. parse all pixels in "loop x3" */
    454 		for( ; xIndexL < srcImageSubSectionL.x2E && xIndexL < sectionL.x2E; xIndexL++ )
    455 		{
    456 			*dstPixelPtrL++ = *srcPixelPtrL++;
    457 		}
    458 		srcPixelPtrL--;
    459 		/* 3.c. parse all pixels in "loop x3" */
    460 		for( ; xIndexL < sectionL.x2E; xIndexL++ )
    461 		{
    462 			*dstPixelPtrL++ = *srcPixelPtrL;
    463 		}
    464 	}
    465 
    466 }
    467 
    468 /* ------------------------------------------------------------------------- */
    469 
    470 void bim_Flt16Image_importReal( struct bbs_Context* cpA,
    471 							    struct bim_Flt16Image* dstPtrA,
    472 						        const struct bim_ComplexImage* srcPtrA )
    473 {
    474 	long iL;
    475 	int16* dstL;
    476 	const struct bbs_Complex* srcL;
    477 	bim_Flt16Image_size( cpA, dstPtrA, srcPtrA->widthE, srcPtrA->heightE );
    478 	dstPtrA->bbpE = 0;
    479 	dstL = dstPtrA->arrE.arrPtrE;
    480 	srcL = srcPtrA->arrE.arrPtrE;
    481 	for( iL = srcPtrA->widthE * srcPtrA->heightE; iL > 0; iL-- )
    482 	{
    483 		*dstL++ = ( *srcL++ ).realE;
    484 	}
    485 }
    486 
    487 /* ------------------------------------------------------------------------- */
    488 
    489 void bim_Flt16Image_importImag( struct bbs_Context* cpA,
    490 							    struct bim_Flt16Image* dstPtrA,
    491 						        const struct bim_ComplexImage* srcPtrA )
    492 {
    493 	long iL;
    494 	int16* dstL;
    495 	const struct bbs_Complex* srcL;
    496 	bim_Flt16Image_size( cpA, dstPtrA, srcPtrA->widthE, srcPtrA->heightE );
    497 	dstPtrA->bbpE = 0;
    498 	dstL = dstPtrA->arrE.arrPtrE;
    499 	srcL = srcPtrA->arrE.arrPtrE;
    500 	for( iL = srcPtrA->widthE * srcPtrA->heightE; iL > 0; iL-- )
    501 	{
    502 		*dstL++ = ( *srcL++ ).imagE;
    503 	}
    504 }
    505 
    506 /* ------------------------------------------------------------------------- */
    507 
    508 void bim_Flt16Image_importAbs( struct bbs_Context* cpA,
    509 							   struct bim_Flt16Image* dstPtrA,
    510 						       const struct bim_ComplexImage* srcPtrA )
    511 {
    512 	long iL;
    513 	int16* dstL;
    514 	const struct bbs_Complex* srcL;
    515 	bim_Flt16Image_size( cpA, dstPtrA, srcPtrA->widthE, srcPtrA->heightE );
    516 	dstPtrA->bbpE = 0;
    517 	dstL = dstPtrA->arrE.arrPtrE;
    518 	srcL = srcPtrA->arrE.arrPtrE;
    519 	for( iL = srcPtrA->widthE * srcPtrA->heightE; iL > 0; iL-- )
    520 	{
    521 		*dstL++ = bbs_sqrt32( ( int32 )srcL->realE * srcL->realE + ( int32 )srcL->imagE * srcL->imagE );
    522 		srcL++;
    523 	}
    524 }
    525 
    526 /* ------------------------------------------------------------------------- */
    527 
    528 void bim_Flt16Image_importPhase( struct bbs_Context* cpA,
    529 								 struct bim_Flt16Image* dstPtrA,
    530 						         const struct bim_ComplexImage* srcPtrA )
    531 {
    532 	long iL;
    533 	int16* dstL;
    534 	const struct bbs_Complex* srcL;
    535 	bim_Flt16Image_size( cpA, dstPtrA, srcPtrA->widthE, srcPtrA->heightE );
    536 	dstPtrA->bbpE = 0;
    537 	dstL = dstPtrA->arrE.arrPtrE;
    538 	srcL = srcPtrA->arrE.arrPtrE;
    539 	for( iL = srcPtrA->widthE * srcPtrA->heightE; iL > 0; iL-- )
    540 	{
    541 		*dstL++ = bbs_phase16( srcL->realE, srcL->imagE );
    542 		srcL++;
    543 	}
    544 }
    545 
    546 /* ------------------------------------------------------------------------- */
    547 
    548 /* ========================================================================= */
    549 
    550 
    551