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

📄 wt97invrow32s.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 __WT97INVROW32S_H__#define __WT97INVROW32S_H__// Include common, EXTERNAL part of interface#include "wt97invrowgen.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 32s version.//inline void WT97InvInterStep(const Ipp32s* low, const Ipp32s* high, Ipp32s* dst){    dst[4]  = (Ipp32s)(((Ipp64s)FIX_KH       *  low [0]            + (1 << 15)) >> 16) -              (Ipp32s)(((Ipp64s)FIX_DELTAxKL * (high[0] + high[1]) + (1 << 15)) >> 16);    dst[3]  = (Ipp32s)(((Ipp64s)FIX_KL       *  high[0]            + (1 << 15)) >> 16) -              (Ipp32s)(((Ipp64s)FIX_GAMMA    * (dst [2] + dst [4]) + (1 << 15)) >> 16);    dst[2] -= (Ipp32s)(((Ipp64s)FIX_BETA     * (dst [1] + dst [3]) + (1 << 15)) >> 16);    dst[1] -= (Ipp32s)(((Ipp64s)FIX_ALPHA    * (dst [0] + dst [2]) + (1 << 15)) >> 16);}inline void WT97InvFirtStepSmall(const Ipp32s* low, const Ipp32s* high, Ipp32s* dst){    dst[0]  = (Ipp32s)(((Ipp64s)FIX_KH         *  low [0]            + (1 << 15)) >> 16) -              (Ipp32s)(((Ipp64s)FIX_DELTAxKLx2 *  high[0]            + (1 << 15)) >> 16);    dst[2]  = (Ipp32s)(((Ipp64s)FIX_KH         *  low [1]            + (1 << 15)) >> 16) -              (Ipp32s)(((Ipp64s)FIX_DELTAxKL   * (high[0] + high[1]) + (1 << 15)) >> 16);    dst[1]  = (Ipp32s)(((Ipp64s)FIX_KL         *  high[0]            + (1 << 15)) >> 16) -              (Ipp32s)(((Ipp64s)FIX_GAMMA      * (dst [0] + dst [2]) + (1 << 15)) >> 16);    dst[0] -= (Ipp32s)(((Ipp64s)FIX_BETAx2     *  dst [1]            + (1 << 15)) >> 16);}inline void WT97InvFirtStepBig(const Ipp32s* low, const Ipp32s* high, Ipp32s* dst){    dst[1]  = (Ipp32s)(((Ipp64s)FIX_KH       *  low [0]            + (1 << 15)) >> 16) -              (Ipp32s)(((Ipp64s)FIX_DELTAxKL * (high[0] + high[1]) + (1 << 15)) >> 16);    dst[0]  = (Ipp32s)(((Ipp64s)FIX_KL       *  high[0]            + (1 << 15)) >> 16) -              (Ipp32s)(((Ipp64s)FIX_GAMMAx2  *  dst [1]            + (1 << 15)) >> 16);    dst[3]  = (Ipp32s)(((Ipp64s)FIX_KH       *  low [1]            + (1 << 15)) >> 16) -              (Ipp32s)(((Ipp64s)FIX_DELTAxKL * (high[1] + high[2]) + (1 << 15)) >> 16);    dst[2]  = (Ipp32s)(((Ipp64s)FIX_KL       *  high[1]            + (1 << 15)) >> 16) -              (Ipp32s)(((Ipp64s)FIX_GAMMA    * (dst [1] + dst [3]) + (1 << 15)) >> 16);    dst[1] -= (Ipp32s)(((Ipp64s)FIX_BETA     * (dst [0] + dst [2]) + (1 << 15)) >> 16);    dst[0] -= (Ipp32s)(((Ipp64s)FIX_ALPHAx2  *  dst [1]            + (1 << 15)) >> 16);}inline void WT97InvLastStepSmall(Ipp32s high, Ipp32s* dst){    dst[3]  = (Ipp32s)(((Ipp64s)FIX_KL      *  high             + (1 << 15)) >> 16) -              (Ipp32s)(((Ipp64s)FIX_GAMMAx2 *  dst[2]           + (1 << 15)) >> 16);    dst[2] -= (Ipp32s)(((Ipp64s)FIX_BETA    * (dst[1] + dst[3]) + (1 << 15)) >> 16);    dst[3] -= (Ipp32s)(((Ipp64s)FIX_ALPHAx2 *  dst[2]           + (1 << 15)) >> 16);    dst[1] -= (Ipp32s)(((Ipp64s)FIX_ALPHA   * (dst[2] + dst[0]) + (1 << 15)) >> 16);}inline void WT97InvLastStepBig(Ipp32s low, Ipp32s high, Ipp32s* dst){    dst[4]  = (Ipp32s)(((Ipp64s)FIX_KH         *  low              + (1 << 15)) >> 16) -              (Ipp32s)(((Ipp64s)FIX_DELTAxKLx2 *  high             + (1 << 15)) >> 16);    dst[3]  = (Ipp32s)(((Ipp64s)FIX_KL         *  high             + (1 << 15)) >> 16) -              (Ipp32s)(((Ipp64s)FIX_GAMMA      * (dst[2] + dst[4]) + (1 << 15)) >> 16);    dst[4] -= (Ipp32s)(((Ipp64s)FIX_BETAx2     *  dst[3]           + (1 << 15)) >> 16);    dst[2] -= (Ipp32s)(((Ipp64s)FIX_BETA       * (dst[1] + dst[3]) + (1 << 15)) >> 16);    dst[1] -= (Ipp32s)(((Ipp64s)FIX_ALPHA      * (dst[0] + dst[2]) + (1 << 15)) >> 16);    dst[3] -= (Ipp32s)(((Ipp64s)FIX_ALPHA      * (dst[2] + dst[4]) + (1 << 15)) >> 16);}inline void WT97InvRowFirstL_2(const Ipp32s* low, const Ipp32s* high, Ipp32s* dst){    dst[0]  = low[0] - (high[0] >> 1);    dst[1]  = high[0] + dst[0];}inline void WT97InvRowFirstL_3(const Ipp32s* low, const Ipp32s* high, Ipp32s* dst){    dst[1]  = high[0] >> 1;    dst[0]  = (Ipp32s)(((Ipp64s)FIX_FWDH1x2 * (low[1] - low[0]) + (1 << 15)) >> 16);    dst[2]  = low[1] - dst[0] - dst[1];    dst[0] += low[0] - dst[1];    dst[1] += (low[0] + low[1]) >> 1;}inline void WT97FwdInvFirstL_Ending(const Ipp32s* low, const Ipp32s* high, Ipp32s* dst, unsigned int  size){    unsigned int offset = ( size >> 1) - 4;    const Ipp32s *lowI  = &low [offset+1];    const Ipp32s *highI = &high[offset];    Ipp32s       *dstJ  = &dst [offset*2-2];    Ipp32s tmp1  = (Ipp32s)(((Ipp64s)FIX_KH       *  lowI [0]             + (1 << 15)) >> 16) -                   (Ipp32s)(((Ipp64s)FIX_DELTAxKL * (highI[0] + highI[1]) + (1 << 15)) >> 16);    lowI++;    highI++;    dstJ+=2;    dstJ[4]  = (Ipp32s)(((Ipp64s)FIX_KH        *  lowI [0]             + (1 << 15)) >> 16) -               (Ipp32s)(((Ipp64s)FIX_DELTAxKL  * (highI[0] + highI[1]) + (1 << 15)) >> 16);    Ipp32s tmp2  = (Ipp32s)(((Ipp64s)FIX_KL    *  highI[0]             + (1 << 15)) >> 16) -                   (Ipp32s)(((Ipp64s)FIX_GAMMA * (tmp1  + dstJ[4])     + (1 << 15)) >> 16);    lowI++;    highI++;    dstJ+=2;    dstJ[4]  = (Ipp32s)(((Ipp64s)FIX_KH       *  lowI [0]              + (1 << 15)) >> 16) -               (Ipp32s)(((Ipp64s)FIX_DELTAxKL * (highI[0] + highI[1])  + (1 << 15)) >> 16);    dstJ[3]  = (Ipp32s)(((Ipp64s)FIX_KL       *  highI[0]              + (1 << 15)) >> 16) -               (Ipp32s)(((Ipp64s)FIX_GAMMA    * (dstJ [2]  + dstJ [4]) + (1 << 15)) >> 16);    dstJ[2] -= (Ipp32s)(((Ipp64s)FIX_BETA     * (tmp2      + dstJ [3]) + (1 << 15)) >> 16);    highI++;    lowI++;    dstJ+=2;    if(size&1)    {        dstJ[4]  = (Ipp32s)(((Ipp64s)FIX_KH         *  lowI [0]             + (1 << 15)) >> 16) -                   (Ipp32s)(((Ipp64s)FIX_DELTAxKLx2 *  highI[0]             + (1 << 15)) >> 16);        dstJ[3]  = (Ipp32s)(((Ipp64s)FIX_KL         *  highI[0]             + (1 << 15)) >> 16) -                   (Ipp32s)(((Ipp64s)FIX_GAMMA      * (dstJ [2] + dstJ [4]) + (1 << 15)) >> 16);        dstJ[4] -= (Ipp32s)(((Ipp64s)FIX_BETAx2     *  dstJ [3]             + (1 << 15)) >> 16);        dstJ[2] -= (Ipp32s)(((Ipp64s)FIX_BETA       * (dstJ [1] + dstJ [3]) + (1 << 15)) >> 16);        dstJ[1] -= (Ipp32s)(((Ipp64s)FIX_ALPHA      * (dstJ [0] + dstJ [2]) + (1 << 15)) >> 16);        dstJ[3] -= (Ipp32s)(((Ipp64s)FIX_ALPHA      * (dstJ [2] + dstJ [4]) + (1 << 15)) >> 16);    }    else    {        dstJ[3]  = (Ipp32s)(((Ipp64s)FIX_KL      *  highI[0]             + (1 << 15)) >> 16) -                   (Ipp32s)(((Ipp64s)FIX_GAMMAx2 *  dstJ [2]             + (1 << 15)) >> 16);        dstJ[2] -= (Ipp32s)(((Ipp64s)FIX_BETA    * (dstJ [1] + dstJ [3]) + (1 << 15)) >> 16);        dstJ[3] -= (Ipp32s)(((Ipp64s)FIX_ALPHAx2 *  dstJ [2]             + (1 << 15)) >> 16);        dstJ[1] -= (Ipp32s)(((Ipp64s)FIX_ALPHA   * (dstJ [2] + dstJ [0]) + (1 << 15)) >> 16);    }}inline void WT97InvRowFirstH_1(Ipp32s high, Ipp32s* dst){    dst[0] = high >> 1;}inline void WT97InvRowFirstH_2(const Ipp32s* low, const Ipp32s* high, Ipp32s* dst){    dst[1] = low[0] - (high[0] >> 1);    dst[0] = high[0] + dst[1];}inline void WT97InvRowFirstH_3(const Ipp32s* low, const Ipp32s* high, Ipp32s* dst){    dst[1] = high[1] - high[0];    dst[0] = low[0] + (high[0] >> 1) + (Ipp32s)(((Ipp64s)FIX_FWDL2x2 * dst[1] + (1 << 15)) >> 16);    dst[2] = (Ipp32s)(((Ipp64s)FIX_HALFmFWDL2x4 * dst[1] + (1 << 15)) >> 16) + dst[0];    dst[1] = low[0] - ((high[1] + high[0]) >> 2);}inline void WT97InvRowFirstH_4(const Ipp32s* low, const Ipp32s* high, Ipp32s* dst){    dst[1]  = (Ipp32s)(((Ipp64s)FIX_KH         *  low [0]            + (1 << 15)) >> 16) -              (Ipp32s)(((Ipp64s)FIX_DELTAxKL   * (high[0] + high[1]) + (1 << 15)) >> 16);    dst[3]  = (Ipp32s)(((Ipp64s)FIX_KH         *  low [1]            + (1 << 15)) >> 16) -              (Ipp32s)(((Ipp64s)FIX_DELTAxKLx2 *  high[1]            + (1 << 15)) >> 16);    dst[2]  = (Ipp32s)(((Ipp64s)FIX_KL         *  high[1]            + (1 << 15)) >> 16) -              (Ipp32s)(((Ipp64s)FIX_GAMMA      * (dst [1] + dst [3]) + (1 << 15)) >> 16);    dst[0]  = (Ipp32s)(((Ipp64s)FIX_KL         *  high[0]            + (1 << 15)) >> 16) -              (Ipp32s)(((Ipp64s)FIX_GAMMAx2    *  dst [1]            + (1 << 15)) >> 16);    dst[3] -= (Ipp32s)(((Ipp64s)FIX_BETAx2     *  dst [2]            + (1 << 15)) >> 16);    dst[1] -= (Ipp32s)(((Ipp64s)FIX_BETA       * (dst [0] + dst [2]) + (1 << 15)) >> 16);    dst[2] -= (Ipp32s)(((Ipp64s)FIX_ALPHA      * (dst [1] + dst [3]) + (1 << 15)) >> 16);    dst[0] -= (Ipp32s)(((Ipp64s)FIX_ALPHAx2    *  dst [1]            + (1 << 15)) >> 16);}inline void WT97FwdInvFirstH_Ending(const Ipp32s* low, const Ipp32s* high, Ipp32s* dst, unsigned int  size){    unsigned int offset = ((size + 1) >> 1) - 4;    const Ipp32s *lowI  = &low [offset + 1];    const Ipp32s *highI = &high[offset + 1];    Ipp32s       *dstJ  = &dst [offset * 2 - 1];    Ipp32s tmp = (Ipp32s)(((Ipp64s)FIX_KH       *  lowI [0]             + (1 << 15)) >> 16) -                 (Ipp32s)(((Ipp64s)FIX_DELTAxKL * (highI[0] + highI[1]) + (1 << 15)) >> 16);    lowI++;    highI++;    dstJ+=2;    dstJ[4]  = (Ipp32s)(((Ipp64s)FIX_KH       *  lowI [0]             + (1 << 15)) >> 16) -               (Ipp32s)(((Ipp64s)FIX_DELTAxKL * (highI[0] + highI[1]) + (1 << 15)) >> 16);    dstJ[3]  = (Ipp32s)(((Ipp64s)FIX_KL       *  highI[0]             + (1 << 15)) >> 16) -               (Ipp32s)(((Ipp64s)FIX_GAMMA    * (tmp      + dstJ [4]) + (1 << 15)) >> 16);    lowI++;    highI++;    dstJ+=2;    if(size&1)    {        dstJ[3]  = (Ipp32s)(((Ipp64s)FIX_KL      *  highI[0]             + (1 << 15)) >> 16) -                   (Ipp32s)(((Ipp64s)FIX_GAMMAx2 *  dstJ [2]             + (1 << 15)) >> 16);        dstJ[2] -= (Ipp32s)(((Ipp64s)FIX_BETA    * (dstJ [1] + dstJ [3]) + (1 << 15)) >> 16);        dstJ[3] -= (Ipp32s)(((Ipp64s)FIX_ALPHAx2 *  dstJ [2]             + (1 << 15)) >> 16);        dstJ[1] -= (Ipp32s)(((Ipp64s)FIX_ALPHA   * (dstJ [2] + dstJ [0]) + (1 << 15)) >> 16);    }    else    {        dstJ[4]  = (Ipp32s)(((Ipp64s)FIX_KH         *  lowI [0]             + (1 << 15)) >> 16) -                   (Ipp32s)(((Ipp64s)FIX_DELTAxKLx2 *  highI[0]             + (1 << 15)) >> 16);        dstJ[3]  = (Ipp32s)(((Ipp64s)FIX_KL         *  highI[0]             + (1 << 15)) >> 16) -                   (Ipp32s)(((Ipp64s)FIX_GAMMA      * (dstJ [2] + dstJ [4]) + (1 << 15)) >> 16);        dstJ[4] -= (Ipp32s)(((Ipp64s)FIX_BETAx2     *  dstJ [3]             + (1 << 15)) >> 16);        dstJ[2] -= (Ipp32s)(((Ipp64s)FIX_BETA       * (dstJ [1] + dstJ [3]) + (1 << 15)) >> 16);        dstJ[1] -= (Ipp32s)(((Ipp64s)FIX_ALPHA      * (dstJ [0] + dstJ [2]) + (1 << 15)) >> 16);        dstJ[3] -= (Ipp32s)(((Ipp64s)FIX_ALPHA      * (dstJ [2] + dstJ [4]) + (1 << 15)) >> 16);    }}#endif // __WT97INVROW32S_H__

⌨️ 快捷键说明

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