You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

173 lines
13 KiB

;* ======================================================================== *;
;* TEXAS INSTRUMENTS, INC. *;
;* *;
;* IMGLIB DSP Image/Video Processing Library *;
;* *;
;* Release: Revision 1.04b *;
;* CVS Revision: 1.10 Sun Sep 29 03:32:24 2002 (UTC) *;
;* Snapshot date: 23-Oct-2003 *;
;* *;
;* This library contains proprietary intellectual property of Texas *;
;* Instruments, Inc. The library and its source code are protected by *;
;* various copyrights, and portions may also be protected by patents or *;
;* other legal protections. *;
;* *;
;* This software is licensed for use with Texas Instruments TMS320 *;
;* family DSPs. This license was provided to you prior to installing *;
;* the software. You may review this license by consulting the file *;
;* TI_license.PDF which accompanies the files in this library. *;
;* ------------------------------------------------------------------------ *;
;* Copyright (C) 2003 Texas Instruments, Incorporated. *;
;* All Rights Reserved. *;
;* ======================================================================== *;
;* ======================================================================== *;
;* Assembler compatibility shim for assembling 4.30 and later code on *;
;* tools prior to 4.30. *;
;* ======================================================================== *;
;* ======================================================================== *;
;* End of assembler compatibility shim. *;
;* ======================================================================== *;
* ========================================================================= *
* *
* TEXAS INSTRUMENTS, INC. *
* *
* NAME *
* IMG_mad_16x16 *
* *
* REVISION DATE *
* 18-Dec-2001 *
* *
* USAGE *
* This routine is C-callable and can be called as: *
* *
* void IMG_mad_16x16 *
* ( *
* const unsigned char *restrict refImg, *
* const unsigned char *restrict srcImg, *
* int pitch, *
* int h, *
* int v, *
* unsigned *restrict match *
* ) *
* *
* refImg Reference image. *
* srcImg[256] 16x16 block image to look for. *
* pitch Width of reference image. *
* h Horiz. size of search area. *
* v Vert. size of search area. Must be multiple of 2. *
* match[2] Result: *
* match[0] is packed x, y. *
* match[1] is MAD value. *
* *
* DESCRIPTION *
* This routine returns the location of the minimum absolute *
* difference between a 16x16 search block and some block in a *
* (h + 16) x (v + 16) search area. h and v are the sizes of the *
* search space for the top left coordinate of the search block. *
* refImg points to the top left pixel of the search area. *
* *
* (0,0) (h,0) (h+16,0) *
* ;--------------+--------; *
* ; search | ; *
* ; space | ; *
* ; | ; search area *
* ;--------------+ ; within reference image *
* (0,v) (h,v) ; *
* ; ; *
* ;-----------------------; *
* (0, v+16) (v+16,h+16) *
* *
* The location is returned relative to the above coordinate system *
* as x and y packed in two 16-bit quantities in a 32-bit word: *
* *
* 31 16 15 0 *
* +----------------+----------------+ *
* match[0]: | x | y | *
* +----------------+----------------+ *
* *
* 31 0 *
* +---------------------------------+ *
* match[1]: | SAD value at location x, y | *
* +---------------------------------+ *
* *
* ASSUMPTIONS *
* srcImg and refImg do not alias in memory. *
* The routine is written for Little Endian configuration. *
* Two MADS are performed together and hence it is assumed that v *
* the vertical dimension is a multiple of 2. *
* *
* MEMORY NOTE *
* No special requirements on alignment of arrays is required. *
* *
* TECHNIQUES *
* The two outer loops are merged, the two inner loops are merged. *
* The inner loop process 2 lines of 2 search locations in parallel. *
* The search is performed in top-to-bottom, left-to-right order, *
* with the earliest match taking precedence in the case of ties. *
* Further use is made of C64x specific instructions such as SUBABS4 *
* and DOTPU4. The SUBABS4 takes the absolute difference on four 8 *
* bit quantities packed into a 32 bit word. The DOTPU4 performs four *
* 8 bit wide multiplies and adds the results together. *
* *
* C CODE *
* *
* void IMG_mad_16x16 *
* ( *
* const unsigned char *restrict refImg, *
* const unsigned char *restrict srcImg, *
* int pitch, int h, int v, *
* unsigned int *restrict match *
* ) *
* { *
* int i, j, x, y, matx, maty; *
* unsigned matpos, matval; *
* *
* matval = ~0U; *
* matx = maty = 0; *
* *
* for (x = 0; x < x; x++) *
* for (y = 0; y < v; y++) *
* { *
* unsigned acc = 0; *
* *
* for (i = 0; i < 16; i++) *
* for (j = 0; j < 16; j++) *
* acc += abs(srcImg[i*16 + j] - *
* refImg[(i+y)*pitch + x + j]); *
* *
* if (acc < matval) *
* { *
* matval = acc; *
* matx = x; *
* maty = y; *
* } *
* } *
* *
* matpos = (0xffff0000 & (matx << 16)) | *
* (0x0000ffff & maty); *
* match[0] = matpos; *
* match[1] = matval; *
* } *
* *
* CYCLES *
* 38 * h * v + 20 *
* *
* e.g. h=v= 4: 628 cycles *
* h=v=32: 38932 cycles *
* *
* CODESIZE *
* 776 bytes. *
* *
* ------------------------------------------------------------------------- *
* Copyright (c) 2003 Texas Instruments, Incorporated. *
* All Rights Reserved. *
* ========================================================================= *
.global _IMG_mad_16x16
* ========================================================================= *
* End of file: img_mad_16x16.h64 *
* ------------------------------------------------------------------------- *
* Copyright (c) 2003 Texas Instruments, Incorporated. *
* All Rights Reserved. *
* ========================================================================= *