intel ipp5.0 for pca linux 的调用实例

来源:互联网 发布:旧言代刷网源码 编辑:程序博客网 时间:2024/05/21 14:51

1.今天本来是准备把wmmx手册看一边,并准备移植代码,不过后来ipp库不会过期使得这个想法又可以实现了,所以下午下载了一个ipp for pca的的库,并安装了.不过遇到了问题是安装后没有产生静态库文件,没办法.在网上搜了一大圈后只好采用比较麻烦的方法,就是调用动态库的 方法.这跟windows下有很大的不同.主要是要在程序中包含dlfcn.h这个头文件,然后调用四个函数.
a,首先是声明三个变量
void *handle;  //返回动态库中函数的地址
char *error;    //报告错误信息
void handle;    //句柄
b,然后调用库打开函数dlopen()
handle=dlopen("./ippVC_WMMX50LNX_d.so",RTLD_LAZY);
RTLD_LAZY表示推迟每个函数实际的载入操作,也可以为RTLD_NOW,表示让所有的库都载如内存,立即可用.这两个标志可以和RTLD_GLOBAL进行与操作,它允许库中所由外部引用都抗议通过调用其他动态库中找到的函数解析出来, 当然其他动态库也必须是已载入的动态库.
c,接着调用函数dlerror()
if(error=dlerror()){
printf("%s/n",error);exit(1);
}检查出错信息
d, 然后在库中找到对应的函数符号,dlsym()并把它赋给函数指针
ippiInterpolateLuma_H264_8u_C1R = dlsym(handle,"ippiInterpolateLuma_H264_8u_C1R");
if(error=dlerror()){
printf("%s/n",error);exit(1);
}检查出错信息
e,然后 调用函数,并检查出错信息
f,关闭动态库dlclose(handle);
具体程序如下:(这个是h264插值的程序,程序结果有误,这里只是验证库可以调用)

#include "ipp.h"
#include "dlfcn.h"
#include "stdio.h"
#include "ippdefs.h"
int main()
{
Ipp8u pSrc[169];
Ipp8u pDst[64];
Ipp8u i;
Ipp32s srcStep=13;
Ipp32s dstStep=8;
Ipp32s dx=1;Ipp32s dy=1;
IppStatus status;
IppiSize roi={4,4};
void *handle;
char *error;
IppStatus (*ippiInterpolateLuma_H264_8u_C1R)(const Ipp8u* pSrc,Ipp32s srcStep, Ipp8u* pDst, Ipp32s dstStep, Ipp32s dx, Ipp32s dy, IppiSize roi);
handle=dlopen("./ippVC_WMMX50LNX_d.so",RTLD_LAZY);     //这里要加上当前路径,最好这样写,因为pxa270操作系统的文件系统是只读的,不能把文件拷到其他目录
if(error=dlerror()){
printf("%s/n",error);exit(1);
}
ippiInterpolateLuma_H264_8u_C1R=dlsym(handle,"ippiInterpolateLuma_H264_8u_C1R");
if(error=dlerror()){
printf("%s/n",error);exit(1);
}
for( i=0;i< 81; i++)
pSrc[i]=i;
//IPPAPI(status, ippiInterpolateLuma_H264_8u_C1R, (const Ipp8u* pSrc,Ipp32s srcStep, Ipp8u* pDst, Ipp32s dstStep, Ipp32s dx, Ipp32s dy,IppiSize roi))
status = ippiInterpolateLuma_H264_8u_C1R (pSrc,srcStep, pDst,dstStep,dx, dy,roi);
if (status==ippStsNoErr)
{printf("ok/n");

}
else
printf("ipp error/n");
for(i=0;i< 81; i++)
{
if (!(i&0x07))
printf("/n");
printf("%d ");

}
dlclose(handle);
}

另外库中针对H.264解码已经实现的函数如下:
/*********** H.264 Decoder functions ************/
/* Interpolation */
IPPAPI(IppStatus, ippiInterpolateLuma_H264_8u_C1R, (const Ipp8u* pSrc,
 Ipp32s srcStep, Ipp8u* pDst, Ipp32s dstStep, Ipp32s dx, Ipp32s dy, IppiSize roi))

IPPAPI(IppStatus, ippiInterpolateChroma_H264_8u_C1R, (const Ipp8u* pSrc,
 Ipp32s srcStep, Ipp8u* pDst, Ipp32s dstStep, Ipp32s dx, Ipp32s dy, IppiSize roi))

/* Intra Prediction */
IPPAPI(IppStatus, ippiPredictIntra_4x4_H264_8u_C1R, (Ipp8u* pSrcLeft,
 Ipp8u *pSrcAbove, Ipp8u *pSrcAboveLeft, Ipp8u* pDst,  int leftStep,
 int dstStep, IppIntra4x4PredMode_H264 predMode, Ipp32u availability))

IPPAPI(IppStatus, ippiPredictIntra_16x16_H264_8u_C1R, (Ipp8u* pSrcLeft,
 Ipp8u *pSrcAbove, Ipp8u *pSrcAboveLeft, Ipp8u* pDst, int leftStep,
 int dstStep, IppIntra16x16PredMode_H264 predMode, Ipp32u availability))

IPPAPI(IppStatus, ippiPredictIntraChroma8x8_H264_8u_C1R, (Ipp8u* pSrcLeft,
 Ipp8u *pSrcAbove, Ipp8u *pSrcAboveLeft, Ipp8u* pDst, int leftStep,
 int dstStep, IppIntraChromaPredMode_H264 predMode, Ipp32u availability))

/* Dequant/Transform */
IPPAPI(IppStatus, ippiTransformDequantLumaDCFromPair_H264_8u16s_C1,
 (Ipp8u** ppSrc, Ipp16s* pDst, int QP))

IPPAPI(IppStatus, ippiTransformDequantChromaDCFromPair_H264_8u16s_C1,
 (Ipp8u** ppSrc, Ipp16s* pDst, int QP))

IPPAPI(IppStatus, ippiDequantTransformResidualFromPairAndAdd_H264_8u_C1,
 (Ipp8u** ppSrc, const Ipp8u* pPred, Ipp16s* pDC, Ipp8u* pDst,
 int predStep, int dstStep, int QP, int AC))

/* Deblock filter */
IPPAPI(IppStatus, ippiFilterDeblockingLuma_VerEdge_H264_8u_C1IR, (Ipp8u* pSrcDst,
 Ipp32s srcdstStep, Ipp8u* pAlpha, Ipp8u* pBeta, Ipp8u* pThresholds, Ipp8u *pBS))

IPPAPI(IppStatus, ippiFilterDeblockingLuma_HorEdge_H264_8u_C1IR, (Ipp8u* pSrcDst,
 Ipp32s srcdstStep, Ipp8u* pAlpha, Ipp8u* pBeta, Ipp8u* pThresholds, Ipp8u *pBS))

IPPAPI(IppStatus, ippiFilterDeblockingChroma_VerEdge_H264_8u_C1IR, (Ipp8u* pSrcDst,
 Ipp32s srcdstStep, Ipp8u* pAlpha, Ipp8u* pBeta, Ipp8u* pThresholds, Ipp8u *pBS))

IPPAPI(IppStatus, ippiFilterDeblockingChroma_HorEdge_H264_8u_C1IR, (Ipp8u* pSrcDst,
 Ipp32s srcdstStep, Ipp8u* pAlpha, Ipp8u* pBeta, Ipp8u* pThresholds, Ipp8u *pBS))

原创粉丝点击