⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 predictor.h

📁 很好的JPEG图象解码器,基于VC环境开发。
💻 H
字号:
/* * predictor.h -- *  * Code for predictor calculation. Its function version, predictor.c, * is used in debugging compilation. * * Copyright (c) 1994 Kongji Huang and Brian C. Smith. * Cornell University * All rights reserved. *  * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose, without fee, and without written agreement is * hereby granted, provided that the above copyright notice and the following * two paragraphs appear in all copies of this software. *  * IN NO EVENT SHALL CORNELL UNIVERSITY BE LIABLE TO ANY PARTY FOR * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF CORNELL * UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *  * CORNELL UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS * ON AN "AS IS" BASIS, AND CORNELL UNIVERSITY HAS NO OBLIGATION TO * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. */#ifndef _PREDICTOR#define _PREDICTOR#ifndef DEBUG/* *-------------------------------------------------------------- * * Predict -- * *      Calculate the predictor for pixel[row][col][curComp], *	i.e. curRowBuf[col][curComp]. It handles the all special  *	cases at image edges, such as first row and first column *	of a scan. * * Results: *      predictor is passed out. * * Side effects: *      None. * *-------------------------------------------------------------- */#define Predict(row,col,curComp,curRowBuf,prevRowBuf,Pr,Pt,psv,predictor)\{    register int left,upper,diag,leftcol;				\									\    leftcol=col-1;							\    if (row==0) {							\									\       /*								\        * The predictor of first pixel is (1<<(Pr-Pt-1), and the	\        * predictors for rest of first row are left neighbors.		\        */								\       if (col==0) {							\          *predictor = (1<<(Pr-Pt-1));					\       }								\       else {								\          *predictor = curRowBuf[leftcol][curComp];			\       }								\    }									\    else {								\									\       /*								\        * The predictors of first column are upper neighbors.		\        * All other preditors are calculated according to psv.		\        */								\       upper=prevRowBuf[col][curComp];					\       if (col==0)							\          *predictor = upper;						\       else {								\          left=curRowBuf[leftcol][curComp];				\          diag=prevRowBuf[leftcol][curComp];				\          switch (psv) {						\             case 0:							\                     *predictor = 0;					\                     break;						\             case 1:							\                     *predictor = left;					\                     break;						\             case 2:							\                     *predictor = upper;				\                     break;						\             case 3:							\                     *predictor = diag;					\                     break;						\             case 4:							\                     *predictor = left+upper-diag;			\                     break;						\             case 5:							\                     *predictor = left+((upper-diag)>>1);		\                     break;						\             case 6:							\                     *predictor = upper+((left-diag)>>1);		\                     break;						\             case 7:							\                     *predictor = (left+upper)>>1;			\                     break;						\             default:							\                     fprintf(stderr,"Warning: Undefined PSV\n");	\                     *predictor = 0;					\           }								\        }								\      }									\}/* *-------------------------------------------------------------- * * QuickPredict -- * *      Calculate the predictor for sample curRowBuf[col][curComp]. *	It does not handle the special cases at image edges, such  *      as first row and first column of a scan. We put the special  *	case checkings outside so that the computations in main *	loop can be simpler. This has enhenced the performance *	significantly. * * Results: *      predictor is passed out. * * Side effects: *      None. * *-------------------------------------------------------------- */#define QuickPredict(col,curComp,curRowBuf,prevRowBuf,psv,predictor){	\    register int left,upper,diag,leftcol;				\									\    leftcol=col-1;							\    upper=prevRowBuf[col][curComp];					\    left=curRowBuf[leftcol][curComp];					\    diag=prevRowBuf[leftcol][curComp];					\									\    /* 									\     * All predictor are calculated according to psv.			\     */									\    switch (psv) {							\      case 0:								\              *predictor = 0;						\              break;							\      case 1:								\              *predictor = left;					\              break;							\      case 2:								\              *predictor = upper;					\              break;							\      case 3:								\              *predictor = diag;					\              break;							\      case 4:								\              *predictor = left+upper-diag;				\              break;							\      case 5:								\              *predictor = left+((upper-diag)>>1);			\              break;							\      case 6:								\              *predictor = upper+((left-diag)>>1);			\              break;							\      case 7:								\              *predictor = (left+upper)>>1;				\              break;							\      default:								\              fprintf(stderr,"Warning: Undefined PSV\n");		\              *predictor = 0;						\     }									\}#endif /* DEBUG */#endif /* _PREDICTOR */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -