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

📄 wt97fwdrow16s.h

📁 这是在PCA下的基于IPP库示例代码例子,在网上下了IPP的库之后,设置相关参数就可以编译该代码.
💻 H
字号:
/* ////////////////////////////////////////////////////////////////////////////                  INTEL CORPORATION PROPRIETARY INFORMATION//     This software is supplied under the terms of a license agreement or//     nondisclosure agreement with Intel Corporation and may not be copied//     or disclosed except in accordance with the terms of that agreement.//          Copyright(c) 2005 Intel Corporation. All Rights Reserved.//////*/#ifndef __WT97FWDROW16S_H__#define __WT97FWDROW16S_H__// Include common, EXTERNAL part of interface#include "wt97fwdrowgen.h"#include "wt97const16s32s.h"////  And defines specific WT97, forward, row-oriented transform INTERNAL routines//  depended on data type (like border processing and so on).//  Here is 16s version.//inline void WT97FwdFirstStepBig(const Ipp16s* src, Ipp16s* low, Ipp16s* high){    high[0]  = src[1] + (Ipp16s)(((Ipp64s)FIX_ALPHA   * (src [0] + src [2]) + (1 << 15)) >> 16);    low [0]  = src[0] + (Ipp16s)(((Ipp64s)FIX_BETAx2  *  high[0]            + (1 << 15)) >> 16);    high[1]  = src[3] + (Ipp16s)(((Ipp64s)FIX_ALPHA   * (src [4] + src [2]) + (1 << 15)) >> 16);    low [1]  = src[2] + (Ipp16s)(((Ipp64s)FIX_BETA    * (high[0] + high[1]) + (1 << 15)) >> 16);    high[0] +=          (Ipp16s)(((Ipp64s)FIX_GAMMA   * (low [0] + low [1]) + (1 << 15)) >> 16);    low [0] +=          (Ipp16s)(((Ipp64s)FIX_DELTAx2 *  high[0]            + (1 << 15)) >> 16);    low [0]  =          (Ipp16s)(((Ipp64s)FIX_KL      *  low [0]            + (1 << 15)) >> 16);}inline void WT97FwdFirstStepSmall(const Ipp16s* src, Ipp16s* low, Ipp16s* high){    high[0]  = src[0] + (Ipp16s)(((Ipp64s)FIX_ALPHAx2 *  src [1]            + (1 << 15)) >> 16);    high[1]  = src[2] + (Ipp16s)(((Ipp64s)FIX_ALPHA   * (src [1] + src [3]) + (1 << 15)) >> 16);    low [0]  = src[1] + (Ipp16s)(((Ipp64s)FIX_BETA    * (high[0] + high[1]) + (1 << 15)) >> 16);    high[0] +=          (Ipp16s)(((Ipp64s)FIX_GAMMAx2 *  low [0]            + (1 << 15)) >> 16);}inline void WT97FwdLastStepBig(const Ipp16s* src, Ipp16s* low, Ipp16s* high){    high[2]  = src[1] + (Ipp16s)(((Ipp64s)FIX_ALPHAx2 *  src [0]            + (1 << 15)) >> 16);    low [1]  = src[0] + (Ipp16s)(((Ipp64s)FIX_BETA    * (high[1] + high[2]) + (1 << 15)) >> 16);    high[1] +=          (Ipp16s)(((Ipp64s)FIX_GAMMA   * (low [0] + low [1]) + (1 << 15)) >> 16);    low [0] +=          (Ipp16s)(((Ipp64s)FIX_DELTA   * (high[0] + high[1]) + (1 << 15)) >> 16);    high[2] +=          (Ipp16s)(((Ipp64s)FIX_GAMMAx2 *  low [1]            + (1 << 15)) >> 16);    low [1] +=          (Ipp16s)(((Ipp64s)FIX_DELTA   * (high[1] + high[2]) + (1 << 15)) >> 16);    low [0]  =          (Ipp16s)(((Ipp64s)FIX_KL      *  low [0]            + (1 << 15)) >> 16);    low [1]  =          (Ipp16s)(((Ipp64s)FIX_KL      *  low [1]            + (1 << 15)) >> 16);    high[0]  =          (Ipp16s)(((Ipp64s)FIX_KH      *  high[0]            + (1 << 15)) >> 16);    high[1]  =          (Ipp16s)(((Ipp64s)FIX_KH      *  high[1]            + (1 << 15)) >> 16);    high[2]  =          (Ipp16s)(((Ipp64s)FIX_KH      *  high[2]            + (1 << 15)) >> 16);}inline void WT97FwdLastStepSmall(const Ipp16s* src, Ipp16s* low, Ipp16s* high){    low [1]  = src[0] + (Ipp16s)(((Ipp64s)FIX_BETAx2  *  high[1]            + (1 << 15)) >> 16);    high[1] +=          (Ipp16s)(((Ipp64s)FIX_GAMMA   * (low [0] + low [1]) + (1 << 15)) >> 16);    low [0] +=          (Ipp16s)(((Ipp64s)FIX_DELTA   * (high[0] + high[1]) + (1 << 15)) >> 16);    low [0]  =          (Ipp16s)(((Ipp64s)FIX_KL      *  low [0]            + (1 << 15)) >> 16);    high[0]  =          (Ipp16s)(((Ipp64s)FIX_KH      *  high[0]            + (1 << 15)) >> 16);    low [1] +=          (Ipp16s)(((Ipp64s)FIX_DELTAx2 *  high[1]            + (1 << 15)) >> 16);    low [1]  =          (Ipp16s)(((Ipp64s)FIX_KL      *  low [1]            + (1 << 15)) >> 16);    high[1]  =          (Ipp16s)(((Ipp64s)FIX_KH      *  high[1]            + (1 << 15)) >> 16);}inline void WT97FwdInterStep(const Ipp16s* src, Ipp16s* low, Ipp16s* high){    high[2]  = src[1] + (Ipp16s)(((Ipp64s)FIX_ALPHA * (src [0] + src [2]) + (1 << 15)) >> 16);    low [1]  = src[0] + (Ipp16s)(((Ipp64s)FIX_BETA  * (high[1] + high[2]) + (1 << 15)) >> 16);    high[1] +=          (Ipp16s)(((Ipp64s)FIX_GAMMA * (low [0] + low [1]) + (1 << 15)) >> 16);    low [0] +=          (Ipp16s)(((Ipp64s)FIX_DELTA * (high[0] + high[1]) + (1 << 15)) >> 16);    low [0]  =          (Ipp16s)(((Ipp64s)FIX_KL    *  low [0]            + (1 << 15)) >> 16);    high[0]  =          (Ipp16s)(((Ipp64s)FIX_KH    *  high[0]            + (1 << 15)) >> 16);}inline void WT97FwdRowFirstL_2(const Ipp16s* src, Ipp16s* low, Ipp16s* high){    high[0] = src[1] - src[0];    low [0] = src[0] + (high[0] >> 1);}inline void WT97FwdRowFirstL_3(const Ipp16s* src, Ipp16s* low, Ipp16s* high){    low [0]  = (Ipp16s)(((Ipp64s)FIX_FWDL4pL0x2 *  src[0] + (1 << 15)) >> 16) +                                         (src[1] >> 1)               +               (Ipp16s)(((Ipp64s)FIX_FWDL2x2    *  src[2] + (1 << 15)) >> 16); // (2.0 * L0 + L4) * src[0] + 0.5 * src[1] + 2.0 * L2 * src[2];    low [1]  = (src[0] + src[2]) >> 1;                                // -(FIX_ALPHA+GAMMA+4.0*GAMMA*FIX_ALPHA*FIX_BETA)*KH*(src[0] + src[2]);    high[0]  = src[1] - low [1];                                      // (4.0 * FIX_GAMMA * FIX_BETA + 1) * KH * src[1] - tmp;    low [1] += (src[1] - low[0]);}inline void WT97FwdRowFirstL_4(const Ipp16s* src, Ipp16s* low, Ipp16s* high){    high[0]  = src[1] + (Ipp16s)(((Ipp64s)FIX_ALPHA   * (src [0] + src [2]) + (1 << 15)) >> 16);    low [0]  = src[0] + (Ipp16s)(((Ipp64s)FIX_BETAx2  *  high[0]            + (1 << 15)) >> 16);    high[1]  = src[3] + (Ipp16s)(((Ipp64s)FIX_ALPHAx2 *  src [2]            + (1 << 15)) >> 16);    low [1]  = src[2] + (Ipp16s)(((Ipp64s)FIX_BETA    * (high[1] + high[0]) + (1 << 15)) >> 16);    high[1] +=          (Ipp16s)(((Ipp64s)FIX_GAMMAx2 *  low [1]            + (1 << 15)) >> 16);    high[0] +=          (Ipp16s)(((Ipp64s)FIX_GAMMA   * (low [1] + low [0]) + (1 << 15)) >> 16);    low [1] +=          (Ipp16s)(((Ipp64s)FIX_DELTA   * (high[1] + high[0]) + (1 << 15)) >> 16);    low [0] +=          (Ipp16s)(((Ipp64s)FIX_DELTAx2 *  high[0]            + (1 << 15)) >> 16);    low [0]  =          (Ipp16s)(((Ipp64s)FIX_KL      *  low [0]            + (1 << 15)) >> 16);    low [1]  =          (Ipp16s)(((Ipp64s)FIX_KL      *  low [1]            + (1 << 15)) >> 16);    high[0]  =          (Ipp16s)(((Ipp64s)FIX_KH      *  high[0]            + (1 << 15)) >> 16);    high[1]  =          (Ipp16s)(((Ipp64s)FIX_KH      *  high[1]            + (1 << 15)) >> 16);}inline void WT97FwdRowFirstL_H2MulKH(Ipp16s* high){    high[2] = (Ipp16s)(((Ipp64s)FIX_KH * high[2] + (1 << 15)) >> 16);}inline void WT97FwdRowFirstL_Ending(const Ipp16s* src, unsigned int size, Ipp16s* low, Ipp16s* high){    unsigned int i = (size - 5) >> 1;    unsigned int j = 4 + 2*i;    Ipp16s *highI = &high[i];    Ipp16s *lowI  = &low [i];    const Ipp16s *srcJ  = &src [j];    Ipp16s tmpL = srcJ[-4] +                  (Ipp16s)(((Ipp64s)FIX_BETA  * ( srcJ[-5] + srcJ[-3] +                  (Ipp16s)(((Ipp64s)FIX_ALPHA * (srcJ[-6] + 2 * srcJ[-4] + srcJ[-2]) + (1 << 15)) >> 16) )+ (1 << 15)) >> 16);    Ipp16s tmpH = srcJ[-3] + (Ipp16s)(((Ipp64s)FIX_ALPHA * (srcJ[-4] + srcJ[-2]) + (1 << 15)) >> 16);    highI[1]  = srcJ[-1] + (Ipp16s)(((Ipp64s)FIX_ALPHA * (srcJ[-2] + srcJ[0]) + (1 << 15)) >> 16);    lowI [1]  = srcJ[-2] + (Ipp16s)(((Ipp64s)FIX_BETA  * (tmpH + highI[1]) + (1 << 15)) >> 16);    tmpH     +=            (Ipp16s)(((Ipp64s)FIX_GAMMA * (tmpL + lowI [1]) + (1 << 15)) >> 16);    if(size & 1)    {        lowI [2]  = srcJ[0] + (Ipp16s)(((Ipp64s)FIX_BETAx2  *  highI[1]             + (1 << 15)) >> 16);        highI[1] +=           (Ipp16s)(((Ipp64s)FIX_GAMMA   * (lowI [1] + lowI [2]) + (1 << 15)) >> 16);        lowI [1] +=           (Ipp16s)(((Ipp64s)FIX_DELTA   * (tmpH     + highI[1]) + (1 << 15)) >> 16);        lowI [1]  =           (Ipp16s)(((Ipp64s)FIX_KL      *  lowI [1]             + (1 << 15)) >> 16);        lowI [2] +=           (Ipp16s)(((Ipp64s)FIX_DELTAx2 *  highI[1]             + (1 << 15)) >> 16);        lowI [2]  =           (Ipp16s)(((Ipp64s)FIX_KL      *  lowI [1]             + (1 << 15)) >> 16);        highI[1]  =           (Ipp16s)(((Ipp64s)FIX_KH      *  lowI [1]             + (1 << 15)) >> 16);    }    else    {        highI[2]  = srcJ[1] + (Ipp16s)(((Ipp64s)FIX_ALPHAx2 *  srcJ [0]             + (1 << 15)) >> 16);        lowI [2]  = srcJ[0] + (Ipp16s)(((Ipp64s)FIX_BETA    * (highI[1] + highI[2]) + (1 << 15)) >> 16);        highI[1] +=           (Ipp16s)(((Ipp64s)FIX_GAMMA   * (lowI [1] + lowI [2]) + (1 << 15)) >> 16);        lowI [1] +=           (Ipp16s)(((Ipp64s)FIX_DELTA   * (tmpH + highI[1])     + (1 << 15)) >> 16);        highI[2] +=           (Ipp16s)(((Ipp64s)FIX_GAMMAx2 *  lowI [2]             + (1 << 15)) >> 16);        lowI [2] +=           (Ipp16s)(((Ipp64s)FIX_DELTA   * (highI[1] + highI[2]) + (1 << 15)) >> 16);        lowI [1]  =           (Ipp16s)(((Ipp64s)FIX_KL      *  lowI [1]             + (1 << 15)) >> 16);        lowI [2]  =           (Ipp16s)(((Ipp64s)FIX_KL      *  lowI [2]             + (1 << 15)) >> 16);        highI[1]  =           (Ipp16s)(((Ipp64s)FIX_KH      *  highI[1]             + (1 << 15)) >> 16);        highI[2]  =           (Ipp16s)(((Ipp64s)FIX_KH      *  highI[2]             + (1 << 15)) >> 16);    }}inline void WT97FwdRowFirstH_1(const Ipp16s* src, Ipp16s* high){    high[0]  = src[0] << 1;}inline void WT97FwdRowFirstH_2(const Ipp16s* src, Ipp16s* low, Ipp16s* high){    high[0] = src[0] - src[1];    low [0] = src[1] + (high[0] >> 1);}inline void WT97FwdRowFirstH_3(const Ipp16s* src, Ipp16s* low, Ipp16s* high){    low [0]  = (Ipp16s)(((Ipp64s)FIX_FWDH1x2 * src[2] + (1 << 15)) >> 16) +               (Ipp16s)(((Ipp64s)FIX_FWDH3   * src[0] + (1 << 15)) >> 16); //2.0 * H1 * src[2] + H3 * src[0];    high[0]  = low [0] - src [1];    high[1]  = low [0] + src [1];    low [0]  = src [0] + src [2];    high[1]  = low [0] - high[1];    low [0]  = (src[1] + (low [0] >> 1)) >> 1;}inline void WT97FwdRowFirstH_Ending(const Ipp16s* src, unsigned int size, Ipp16s* low, Ipp16s* high){    unsigned int i = (size - 4) >> 1;    unsigned int j = 3 + 2*i;    Ipp16s *highI = &high[i];    Ipp16s *lowI  = &low [i-1];    const Ipp16s *srcJ  = &src [j];    Ipp16s tmpL = srcJ[-4] + (Ipp16s)(((Ipp64s)FIX_BETA  * ( srcJ[-5] + srcJ[-3] +                             (Ipp16s)(((Ipp64s)FIX_ALPHA * (srcJ[-6] + 2 * srcJ[-4] + srcJ[-2]) + (1 << 15)) >> 16) ) + (1 << 15)) >> 16);    highI[0] = srcJ[-3] + (Ipp16s)(((Ipp64s)FIX_ALPHA * (srcJ[-4] + srcJ[-2]) + (1 << 15)) >> 16);    highI[1]  = srcJ[-1] + (Ipp16s)(((Ipp64s)FIX_ALPHA * (srcJ[-2] + srcJ[0])  + (1 << 15)) >> 16);    lowI [1]  = srcJ[-2] + (Ipp16s)(((Ipp64s)FIX_BETA  * (highI[0] + highI[1]) + (1 << 15)) >> 16);    highI[0] +=            (Ipp16s)(((Ipp64s)FIX_GAMMA * (tmpL + lowI [1])     + (1 << 15)) >> 16);    if(size & 1)    {        highI[2]  = srcJ[1] + (Ipp16s)(((Ipp64s)FIX_ALPHAx2 *  srcJ [0]             + (1 << 15)) >> 16);        lowI [2]  = srcJ[0] + (Ipp16s)(((Ipp64s)FIX_BETA    * (highI[1] + highI[2]) + (1 << 15)) >> 16);        highI[1] +=           (Ipp16s)(((Ipp64s)FIX_GAMMA   * (lowI [1] + lowI [2]) + (1 << 15)) >> 16);        lowI [1] +=           (Ipp16s)(((Ipp64s)FIX_DELTA   * (highI[0] + highI[1]) + (1 << 15)) >> 16);        highI[2] +=           (Ipp16s)(((Ipp64s)FIX_GAMMAx2 *  lowI [2]             + (1 << 15)) >> 16);        lowI [2] +=           (Ipp16s)(((Ipp64s)FIX_DELTA   * (highI[1] + highI[2]) + (1 << 15)) >> 16);        lowI [1]  =           (Ipp16s)(((Ipp64s)FIX_KL      *  lowI [1]             + (1 << 15)) >> 16);        lowI [2]  =           (Ipp16s)(((Ipp64s)FIX_KL      *  lowI [2]             + (1 << 15)) >> 16);        highI[0]  =           (Ipp16s)(((Ipp64s)FIX_KH      *  highI[0]             + (1 << 15)) >> 16);        highI[1]  =           (Ipp16s)(((Ipp64s)FIX_KH      *  highI[1]             + (1 << 15)) >> 16);        highI[2]  =           (Ipp16s)(((Ipp64s)FIX_KH      *  highI[2]             + (1 << 15)) >> 16);    }    else    {        lowI [2]  = srcJ[0] + (Ipp16s)(((Ipp64s)FIX_BETAx2  *  highI[1]             + (1 << 15)) >> 16);        highI[1] +=           (Ipp16s)(((Ipp64s)FIX_GAMMA   * (lowI [1] + lowI [2]) + (1 << 15)) >> 16);        lowI [1] +=           (Ipp16s)(((Ipp64s)FIX_DELTA   * (highI[0] + highI[1]) + (1 << 15)) >> 16);        lowI [1]  =           (Ipp16s)(((Ipp64s)FIX_KL      *  lowI [1]             + (1 << 15)) >> 16);        lowI [2] +=           (Ipp16s)(((Ipp64s)FIX_DELTAx2 *  highI[1]             + (1 << 15)) >> 16);        lowI [2]  =           (Ipp16s)(((Ipp64s)FIX_KL      *  lowI [2]             + (1 << 15)) >> 16);        highI[0]  =           (Ipp16s)(((Ipp64s)FIX_KH      *  highI[0]             + (1 << 15)) >> 16);        highI[1]  =           (Ipp16s)(((Ipp64s)FIX_KH      *  highI[1]             + (1 << 15)) >> 16);    }}#endif // __WT97FWDROW16S_H__

⌨️ 快捷键说明

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