jpc_util.c - vx32 - Local 9vx git repository for patches.
 (HTM) git clone git://r-36.net/vx32
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       jpc_util.c (5748B)
       ---
            1 /*
            2  * Copyright (c) 1999-2000 Image Power, Inc. and the University of
            3  *   British Columbia.
            4  * Copyright (c) 2001-2003 Michael David Adams.
            5  * All rights reserved.
            6  */
            7 
            8 /* __START_OF_JASPER_LICENSE__
            9  * 
           10  * JasPer License Version 2.0
           11  * 
           12  * Copyright (c) 1999-2000 Image Power, Inc.
           13  * Copyright (c) 1999-2000 The University of British Columbia
           14  * Copyright (c) 2001-2003 Michael David Adams
           15  * 
           16  * All rights reserved.
           17  * 
           18  * Permission is hereby granted, free of charge, to any person (the
           19  * "User") obtaining a copy of this software and associated documentation
           20  * files (the "Software"), to deal in the Software without restriction,
           21  * including without limitation the rights to use, copy, modify, merge,
           22  * publish, distribute, and/or sell copies of the Software, and to permit
           23  * persons to whom the Software is furnished to do so, subject to the
           24  * following conditions:
           25  * 
           26  * 1.  The above copyright notices and this permission notice (which
           27  * includes the disclaimer below) shall be included in all copies or
           28  * substantial portions of the Software.
           29  * 
           30  * 2.  The name of a copyright holder shall not be used to endorse or
           31  * promote products derived from the Software without specific prior
           32  * written permission.
           33  * 
           34  * THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS
           35  * LICENSE.  NO USE OF THE SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER
           36  * THIS DISCLAIMER.  THE SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS
           37  * "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
           38  * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
           39  * PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.  IN NO
           40  * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL
           41  * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING
           42  * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
           43  * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
           44  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.  NO ASSURANCES ARE
           45  * PROVIDED BY THE COPYRIGHT HOLDERS THAT THE SOFTWARE DOES NOT INFRINGE
           46  * THE PATENT OR OTHER INTELLECTUAL PROPERTY RIGHTS OF ANY OTHER ENTITY.
           47  * EACH COPYRIGHT HOLDER DISCLAIMS ANY LIABILITY TO THE USER FOR CLAIMS
           48  * BROUGHT BY ANY OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL
           49  * PROPERTY RIGHTS OR OTHERWISE.  AS A CONDITION TO EXERCISING THE RIGHTS
           50  * GRANTED HEREUNDER, EACH USER HEREBY ASSUMES SOLE RESPONSIBILITY TO SECURE
           51  * ANY OTHER INTELLECTUAL PROPERTY RIGHTS NEEDED, IF ANY.  THE SOFTWARE
           52  * IS NOT FAULT-TOLERANT AND IS NOT INTENDED FOR USE IN MISSION-CRITICAL
           53  * SYSTEMS, SUCH AS THOSE USED IN THE OPERATION OF NUCLEAR FACILITIES,
           54  * AIRCRAFT NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL
           55  * SYSTEMS, DIRECT LIFE SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH
           56  * THE FAILURE OF THE SOFTWARE OR SYSTEM COULD LEAD DIRECTLY TO DEATH,
           57  * PERSONAL INJURY, OR SEVERE PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH
           58  * RISK ACTIVITIES").  THE COPYRIGHT HOLDERS SPECIFICALLY DISCLAIM ANY
           59  * EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR HIGH RISK ACTIVITIES.
           60  * 
           61  * __END_OF_JASPER_LICENSE__
           62  */
           63 
           64 /*
           65  * $Id: jpc_util.c 1918 2005-07-24 14:12:08Z baford $
           66  */
           67 
           68 /******************************************************************************\
           69 * Includes
           70 \******************************************************************************/
           71 
           72 #include <assert.h>
           73 #include <stdio.h>
           74 #include <string.h>
           75 #include <math.h>
           76 #include <stdlib.h>
           77 #include <stdarg.h>
           78 
           79 #include "jasper/jas_math.h"
           80 #include "jasper/jas_malloc.h"
           81 
           82 #include "jpc_fix.h"
           83 #include "jpc_cs.h"
           84 #include "jpc_flt.h"
           85 #include "jpc_util.h"
           86 
           87 /******************************************************************************\
           88 * Miscellaneous Functions
           89 \******************************************************************************/
           90 
           91 int jpc_atoaf(char *s, int *numvalues, double **values)
           92 {
           93         static char delim[] = ", \t\n";
           94         char buf[4096];
           95         int n;
           96         double *vs;
           97         char *cp;
           98 
           99         strncpy(buf, s, sizeof(buf));
          100         buf[sizeof(buf) - 1] = '\0';
          101         n = 0;
          102         if ((cp = strtok(buf, delim))) {
          103                 ++n;
          104                 while ((cp = strtok(0, delim))) {
          105                         if (cp != '\0') {
          106                                 ++n;
          107                         }
          108                 }
          109         }
          110 
          111         if (n) {
          112                 if (!(vs = jas_malloc(n * sizeof(double)))) {
          113                         return -1;
          114                 }
          115 
          116                 strncpy(buf, s, sizeof(buf));
          117                 buf[sizeof(buf) - 1] = '\0';
          118                 n = 0;
          119                 if ((cp = strtok(buf, delim))) {
          120                         vs[n] = atof(cp);
          121                         ++n;
          122                         while ((cp = strtok(0, delim))) {
          123                                 if (cp != '\0') {
          124                                         vs[n] = atof(cp);
          125                                         ++n;
          126                                 }
          127                         }
          128                 }
          129         } else {
          130                 vs = 0;
          131         }
          132 
          133         *numvalues = n;
          134         *values = vs;
          135 
          136         return 0;
          137 }
          138 
          139 jas_seq_t *jpc_seq_upsample(jas_seq_t *x, int m)
          140 {
          141         jas_seq_t *z;
          142         int i;
          143 
          144         if (!(z = jas_seq_create(jas_seq_start(x) * m, (jas_seq_end(x) - 1) * m + 1)))
          145                 return 0;
          146         for (i = jas_seq_start(z); i < jas_seq_end(z); i++) {
          147                 *jas_seq_getref(z, i) = (!JAS_MOD(i, m)) ? jas_seq_get(x, i / m) :
          148                   jpc_inttofix(0);
          149         }
          150 
          151         return z;
          152 }
          153 
          154 jpc_fix_t jpc_seq_norm(jas_seq_t *x)
          155 {
          156         jpc_fix_t s;
          157         int i;
          158 
          159         s = jpc_inttofix(0);
          160         for (i = jas_seq_start(x); i < jas_seq_end(x); i++) {
          161                 s = jpc_fix_add(s, jpc_fix_mul(jas_seq_get(x, i), jas_seq_get(x, i)));
          162         }
          163 
          164         return jpc_dbltofix(sqrt(jpc_fixtodbl(s)));
          165 }
          166 
          167 jas_seq_t *jpc_seq_conv(jas_seq_t *x, jas_seq_t *y)
          168 {
          169         int i;
          170         int j;
          171         int k;
          172         jas_seq_t *z;
          173         jpc_fix_t s;
          174         jpc_fix_t v;
          175 
          176         z = jas_seq_create(jas_seq_start(x) + jas_seq_start(y),
          177           jas_seq_end(x) + jas_seq_end(y) - 1);
          178         assert(z);
          179         for (i = jas_seq_start(z); i < jas_seq_end(z); i++) {
          180                 s = jpc_inttofix(0);
          181                 for (j = jas_seq_start(y); j < jas_seq_end(y); j++) {
          182                         k = i - j;
          183                         if (k < jas_seq_start(x) || k >= jas_seq_end(x)) {
          184                                 v = JPC_FIX_ZERO;
          185                         } else {
          186                                 v = jas_seq_get(x, k);
          187                         }
          188                         s = jpc_fix_add(s, jpc_fix_mul(jas_seq_get(y, j), v));
          189                 }
          190                 *jas_seq_getref(z, i) = s;
          191         }
          192 
          193         return z;
          194 }