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

📄 wt97fwdrow32f.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) 2002-2005 Intel Corporation. All Rights Reserved.//////*/#ifndef __WT97FWDROW32F_H__#define __WT97FWDROW32F_H__// Include common, EXTERNAL part of interface#include "wt97fwdrowgen.h"#include "wt97const32f.h"////  And defines specific WT97, forward, row-oriented transform INTERNAL routines//  depended on data type (like border processing and so on).//  Here is 32f version.//inline void WT97FwdFirstStepBig(const Ipp32f* src, Ipp32f* low, Ipp32f* high){    high[0]  = src[1] + ALPHA  * (src [0] + src [2]);    low [0]  = src[0] + BETAx2 *  high[0];    high[1]  = src[3] + ALPHA  * (src [4] + src [2]);    low [1]  = src[2] + BETA   * (high[0] + high[1]);    high[0] += GAMMA   * (low [0] + low [1]);    low [0] += DELTAx2 *  high[0];    low [0] *= KL;}inline void WT97FwdFirstStepSmall(const Ipp32f* src, Ipp32f* low, Ipp32f* high){    high[0]  = src[0] + ALPHAx2 *  src [1];    high[1]  = src[2] + ALPHA   * (src [1] + src [3]);    low [0]  = src[1] + BETA    * (high[0] + high[1]);    high[0] += GAMMAx2 * low [0];}inline void WT97FwdLastStepBig(const Ipp32f* src, Ipp32f* low, Ipp32f* high){    high[2]  = src[1] + ALPHAx2 * src [0];    low [1]  = src[0] + BETA * (high[1] + high[2]);    high[1] += GAMMA * (low [0] + low [1]);    low [0] += DELTA * (high[0] + high[1]);    high[2] += GAMMAx2 *  low [1];    low [1] += DELTA   * (high[1] + high[2]);    low [0] *= KL;    low [1] *= KL;    high[0] *= KH;    high[1] *= KH;    high[2] *= KH;}inline void WT97FwdLastStepSmall(const Ipp32f* src, Ipp32f* low, Ipp32f* high){    low [1]  = src[0] + BETAx2  * high[1];    high[1] += GAMMA * (low [0] + low [1]);    low [0] += DELTA * (high[0] + high[1]);    low [0] *= KL;    high[0] *= KH;    low [1] += DELTAx2 * high[1];    low [1] *= KL;    high[1] *= KH;}inline void WT97FwdInterStep(const Ipp32f* src, Ipp32f* low, Ipp32f* high){    high[2]  = src[1] + ALPHA * (src [0] + src [2]);    low [1]  = src[0] + BETA  * (high[1] + high[2]);    high[1] += GAMMA * (low [0] + low [1]);    low [0] += DELTA * (high[0] + high[1]);    low [0] *= KL;    high[0] *= KH;}inline void WT97FwdRowFirstL_2(const Ipp32f* src, Ipp32f* low, Ipp32f* high){    high[0] = src[1] - src[0];    low [0] = src[0] + 0.5f * high[0];}inline void WT97FwdRowFirstL_3(const Ipp32f* src, Ipp32f* low, Ipp32f* high){    low [0] = FWDL4pL0x2 * src[0] + 0.5f * src[1] + FWDL2x2 * src[2]; // (2.0 * L0 + L4) * src[0] + 0.5 * src[1] + 2.0 * L2 * src[2];    low [1] = 0.5f * (src[0] + src[2]);                               // -(ALPHA+GAMMA+4.0*GAMMA*ALPHA*BETA)*KH*(src[0] + src[2]);    high[0] = src[1] - low [1];                                       // (4.0 * GAMMA * BETA + 1) * KH * src[1] - tmp;    low [1] += (src[1] - low[0]);}inline void WT97FwdRowFirstL_4(const Ipp32f* src, Ipp32f* low, Ipp32f* high){    high[0]  = src[1] + ALPHA   * (src [0] + src [2]);    low [0]  = src[0] + BETAx2  *  high[0];    high[1]  = src[3] + ALPHAx2 *  src [2];    low [1]  = src[2] + BETA    * (high[1] + high[0]);    high[1] += GAMMAx2 *  low[1];    high[0] += GAMMA   * (low[1] + low[0]);    low [1] += DELTA   * (high[1] + high[0]);    low [0] += DELTAx2 * high[0];    low [0] *= KL;    low [1] *= KL;    high[0] *= KH;    high[1] *= KH;}inline void WT97FwdRowFirstL_H2MulKH(Ipp32f* high){    high[2] *= KH;}inline void WT97FwdRowFirstL_Ending(const Ipp32f* src, unsigned int size, Ipp32f* low, Ipp32f* high){    unsigned int i = (size - 5) >> 1;    unsigned int j = 4 + 2*i;    Ipp32f *highI = &high[i];    Ipp32f *lowI  = &low [i];    const Ipp32f *srcJ  = &src [j];    Ipp32f tmpL = srcJ[-4] + BETA  * ( srcJ[-5] + srcJ[-3] + ALPHA *(srcJ[-6] + 2.0f*srcJ[-4] + srcJ[-2]) );    Ipp32f tmpH = srcJ[-3] + ALPHA * (srcJ[-4] + srcJ[-2]);    highI[1]  = srcJ[-1] + ALPHA * (srcJ[-2] + srcJ[0]);    lowI [1]  = srcJ[-2] + BETA  * (tmpH + highI[1]);    tmpH += GAMMA * (tmpL + lowI [1]);    if(size & 1)    {        lowI [2]  = srcJ[0] + BETAx2  * highI[1];        highI[1] += GAMMA * (lowI [1] + lowI [2]);        lowI [1] += DELTA * (tmpH + highI[1]);        lowI [1] *= KL;        lowI [2] += DELTAx2 * highI[1];        lowI [2] *= KL;        highI[1] *= KH;    }    else    {        highI[2]  = srcJ[1] + ALPHAx2 * srcJ [0];        lowI [2]  = srcJ[0] + BETA * (highI[1] + highI[2]);        highI[1] += GAMMA * (lowI [1] + lowI [2]);        lowI [1] += DELTA * (tmpH + highI[1]);        highI[2] += GAMMAx2 *  lowI [2];        lowI [2] += DELTA   * (highI[1] + highI[2]);        lowI [1] *= KL;        lowI [2] *= KL;        highI[1] *= KH;        highI[2] *= KH;    }}inline void WT97FwdRowFirstH_1(const Ipp32f* src, Ipp32f* high){    high[0]  = 2.0f * src[0];}inline void WT97FwdRowFirstH_2(const Ipp32f* src, Ipp32f* low, Ipp32f* high){    high[0] = src[0] - src[1];    low [0] = src[1] + 0.5f * high[0];}inline void WT97FwdRowFirstH_3(const Ipp32f* src, Ipp32f* low, Ipp32f* high){    low [0]  = FWDH1x2 * src[2] + FWDH3 * src[0]; //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]  = 0.5f  * (src[1] + 0.5f * low [0]);}inline void WT97FwdRowFirstH_Ending(const Ipp32f* src, unsigned int size, Ipp32f* low, Ipp32f* high){    unsigned int i = (size - 4) >> 1;    unsigned int j = 3 + 2*i;    Ipp32f *highI = &high[i];    Ipp32f *lowI  = &low [i-1];    const Ipp32f *srcJ  = &src [j];    Ipp32f tmpL = srcJ[-4] + BETA  * ( srcJ[-5] + srcJ[-3] + ALPHA *(srcJ[-6] + 2.0f*srcJ[-4] + srcJ[-2]) );    highI[0] = srcJ[-3] + ALPHA * (srcJ[-4] + srcJ[-2]);    highI[1]  = srcJ[-1] + ALPHA * (srcJ[-2] + srcJ[0]);    lowI [1]  = srcJ[-2] + BETA  * (highI[0] + highI[1]);    highI[0] += GAMMA * (tmpL + lowI [1]);    if(size & 1)    {        highI[2]  = srcJ[1] + ALPHAx2 * srcJ [0];        lowI [2]  = srcJ[0] + BETA * (highI[1] + highI[2]);        highI[1] += GAMMA * (lowI [1] + lowI [2]);        lowI [1] += DELTA * (highI[0] + highI[1]);        highI[2] += GAMMAx2 *  lowI [2];        lowI [2] += DELTA   * (highI[1] + highI[2]);        lowI [1] *= KL;        lowI [2] *= KL;        highI[0] *= KH;        highI[1] *= KH;        highI[2] *= KH;    }    else    {        lowI [2]  = srcJ[0] + BETAx2  * highI[1];        highI[1] += GAMMA * (lowI [1] + lowI [2]);        lowI [1] += DELTA * (highI[0] + highI[1]);        lowI [1] *= KL;        lowI [2] += DELTAx2 * highI[1];        lowI [2] *= KL;        highI[0] *= KH;        highI[1] *= KH;    }}#endif // __WT97FWDROW32F_H__

⌨️ 快捷键说明

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