jpc_qmfb.h - vx32 - Local 9vx git repository for patches.
 (HTM) git clone git://r-36.net/vx32
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       jpc_qmfb.h (6450B)
       ---
            1 /*
            2  * Copyright (c) 1999-2000 Image Power, Inc. and the University of
            3  *   British Columbia.
            4  * Copyright (c) 2001-2002 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  * Quadrature Mirror-Image Filter Bank (QMFB) Routines
           66  *
           67  * $Id: jpc_qmfb.h 1918 2005-07-24 14:12:08Z baford $
           68  */
           69 
           70 #ifndef JPC_QMFB_H
           71 #define JPC_QMFB_H
           72 
           73 /******************************************************************************\
           74 * Includes.
           75 \******************************************************************************/
           76 
           77 #include "jasper/jas_seq.h"
           78 
           79 /******************************************************************************\
           80 * Constants.
           81 \******************************************************************************/
           82 
           83 /* The maximum number of channels for a QMF bank. */
           84 #define        JPC_QMFB1D_MAXCHANS        2
           85 
           86 /* Select reversible integer-to-integer mode. */
           87 #define        JPC_QMFB1D_RITIMODE        1
           88 
           89 /* Vertical filtering. */
           90 #define        JPC_QMFB1D_VERT        0x10000
           91 
           92 /* QMFB IDs. */
           93 #define        JPC_QMFB1D_FT        1        /* 5/3 */
           94 #define        JPC_QMFB1D_NS        2        /* 9/7 */
           95 
           96 /******************************************************************************\
           97 * Types.
           98 \******************************************************************************/
           99 
          100 /* Forward declaration. */
          101 struct jpc_qmfb1dops_s;
          102 
          103 /* Band information. */
          104 
          105 typedef struct {
          106 
          107         /* The starting index for the band in the downsampled domain. */
          108         int start;
          109 
          110         /* The ending index for the band in the downsampled domain. */
          111         int end;
          112 
          113         /* The location of the start of the band. */
          114         int locstart;
          115 
          116         /* The location of the end of the band. */
          117         int locend;
          118 
          119 } jpc_qmfb1dband_t;
          120 
          121 /* QMF bank */
          122 
          123 typedef struct {
          124 
          125         /* The operations for this QMFB. */
          126         struct jpc_qmfb1dops_s *ops;
          127 
          128 } jpc_qmfb1d_t;
          129 
          130 /* QMFB operations. */
          131 
          132 typedef struct jpc_qmfb1dops_s {
          133 
          134         /* The number of channels in the QMFB. */
          135         int (*getnumchans)(jpc_qmfb1d_t *qmfb);
          136 
          137         /* Get the analysis filters for this QMFB. */
          138         int (*getanalfilters)(jpc_qmfb1d_t *qmfb, int len, jas_seq2d_t **filters);
          139 
          140         /* Get the synthesis filters for this QMFB. */
          141         int (*getsynfilters)(jpc_qmfb1d_t *qmfb, int len, jas_seq2d_t **filters);
          142 
          143         /* Do analysis. */
          144         void (*analyze)(jpc_qmfb1d_t *qmfb, int flags, jas_seq2d_t *x);
          145 
          146         /* Do synthesis. */
          147         void (*synthesize)(jpc_qmfb1d_t *qmfb, int flags, jas_seq2d_t *x);
          148 
          149 } jpc_qmfb1dops_t;
          150 
          151 /******************************************************************************\
          152 * Functions.
          153 \******************************************************************************/
          154 
          155 /* Create a QMFB from a QMFB ID. */
          156 jpc_qmfb1d_t *jpc_qmfb1d_make(int qmfbid);
          157 
          158 /* Create a copy of a QMFB. */
          159 jpc_qmfb1d_t *jpc_qmfb1d_copy(jpc_qmfb1d_t *qmfb);
          160 
          161 /* Destroy a QMFB. */
          162 void jpc_qmfb1d_destroy(jpc_qmfb1d_t *qmfb);
          163 
          164 /* Get the number of channels for a QMFB. */
          165 int jpc_qmfb1d_getnumchans(jpc_qmfb1d_t *qmfb);
          166 
          167 /* Get the analysis filters for a QMFB. */
          168 int jpc_qmfb1d_getanalfilters(jpc_qmfb1d_t *qmfb, int len,
          169   jas_seq2d_t **filters);
          170 
          171 /* Get the synthesis filters for a QMFB. */
          172 int jpc_qmfb1d_getsynfilters(jpc_qmfb1d_t *qmfb, int len,
          173   jas_seq2d_t **filters);
          174 
          175 /* Get the bands for a QMFB. */
          176 void jpc_qmfb1d_getbands(jpc_qmfb1d_t *qmfb, int flags, uint_fast32_t xstart,
          177   uint_fast32_t ystart, uint_fast32_t xend, uint_fast32_t yend, int maxbands,
          178   int *numbandsptr, jpc_qmfb1dband_t *bands);
          179 
          180 /* Perform analysis. */
          181 void jpc_qmfb1d_analyze(jpc_qmfb1d_t *qmfb, int flags, jas_seq2d_t *x);
          182 
          183 /* Perform synthesis. */
          184 void jpc_qmfb1d_synthesize(jpc_qmfb1d_t *qmfb, int flags, jas_seq2d_t *x);
          185 
          186 #endif