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.
174 lines
13 KiB
174 lines
13 KiB
3 years ago
|
;* ======================================================================== *;
|
||
|
;* 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. *
|
||
|
* ========================================================================= *
|