📄 fimvlib.c
字号:
/******************************************************************************
Filename: fimvlib.c
Descriptions
- FIMV 2.0 common library
History
-08.Aug.2003:purnnamu
draft
Copyright (c) 2003 SAMSUNG Electronics.
# However, Anybody can use this code without our permission.
******************************************************************************/
#include "..\include\fim20_def.h"
#include "..\include\fimvlib.h"
/********************************************************
AllocImage420 - allocate memory for IMAGE420 image & Initialize the object.
Description:
- freeBuf: current freeBufStartAddress
- type : IMAGE420_PADDED, IMAGE420_NO_PADDED, IMAGE420_DCTQ_COEFF
- return value: the increased freeBufStartAddress.
*/
unsigned int AllocImage420(PIMAGE420 pImage420,unsigned int freeBuf,unsigned int imageWidth,unsigned int imageHeight,unsigned int type)
{
unsigned int i;
pImage420->frameStartAddr=freeBuf;
switch(type&IMAGE420_MASK)
{
case IMAGE420_PADDED:
pImage420->yStartAddr=freeBuf+(imageWidth+32)*16+16;
freeBuf+=(imageWidth+32)*(imageHeight+32);
pImage420->cbStartAddr=freeBuf+(imageWidth+32)*16/4+16/2;
freeBuf+=(imageWidth+32)*(imageHeight+32)/4;
pImage420->crStartAddr=freeBuf+(imageWidth+32)*16/4+16/2;
freeBuf+=(imageWidth+32)*(imageHeight+32)/4;
break;
case IMAGE420_NO_PADDED:
pImage420->yStartAddr=freeBuf;
freeBuf+=imageWidth*imageHeight;
pImage420->cbStartAddr=freeBuf;
freeBuf+=imageWidth*imageHeight/4;
pImage420->crStartAddr=freeBuf;
freeBuf+=imageWidth*imageHeight/4;
break;
case IMAGE420_DCTQ_COEFF:
pImage420->yStartAddr=freeBuf;
freeBuf+=(imageWidth*2)*imageHeight;
pImage420->cbStartAddr=freeBuf;
freeBuf+=(imageWidth*2)*imageHeight/4;
pImage420->crStartAddr=freeBuf;
freeBuf+=(imageWidth*2)*imageHeight/4;
break;
default:
break;
}
if(type&IMAGE420_CLEAR)
{
for(i=pImage420->frameStartAddr;i<freeBuf;i++)
{
*(unsigned char *)i=0xff; //for debug
}
}
pImage420->type=type&IMAGE420_MASK;
pImage420->imageWidth=imageWidth;
pImage420->imageHeight=imageHeight;
return freeBuf;
}
void CopyImage420(PIMAGE420 pDstImage420,PIMAGE420 pSrcImage420)
{
unsigned char *pYSrcStart,*pYDstStart;
unsigned char *pCbSrcStart,*pCbDstStart;
unsigned char *pCrSrcStart,*pCrDstStart;
unsigned int ySize,cbSize,crSize;
unsigned int imageWidth,imageHeight,i;
imageWidth=pSrcImage420->imageWidth;
imageHeight=pSrcImage420->imageHeight;
if(pSrcImage420->type!=pDstImage420->type || pSrcImage420->type==IMAGE420_DCTQ_COEFF)
{
printf("ERROR:The type of two IMAGE420 picture has to be same.\n");
return;
}
switch(pSrcImage420->type)
{
case IMAGE420_PADDED:
pYSrcStart=(unsigned char *)( pSrcImage420->yStartAddr-((imageWidth+32)*16+16) );
pYDstStart=(unsigned char *)( pDstImage420->yStartAddr-((imageWidth+32)*16+16) );
ySize=(imageWidth+32)*(imageHeight+32);
pCbSrcStart=(unsigned char *)( pSrcImage420->cbStartAddr-((imageWidth+32)*16/4+16/2) );
pCbDstStart=(unsigned char *)( pDstImage420->cbStartAddr-((imageWidth+32)*16/4+16/2) );
cbSize=(imageWidth+32)*(imageHeight+32)/4;
pCrSrcStart=(unsigned char *)( pSrcImage420->crStartAddr-((imageWidth+32)*16/4+16/2) );
pCrDstStart=(unsigned char *)( pDstImage420->crStartAddr-((imageWidth+32)*16/4+16/2) );
crSize=(imageWidth+32)*(imageHeight+32)/4;
break;
case IMAGE420_NO_PADDED:
pYSrcStart=(unsigned char *)pSrcImage420->yStartAddr;
pYDstStart=(unsigned char *)pDstImage420->yStartAddr;
ySize=imageWidth*imageHeight;
pCbSrcStart=(unsigned char *)pSrcImage420->cbStartAddr;
pCbDstStart=(unsigned char *)pDstImage420->cbStartAddr;
cbSize=imageWidth*imageHeight/4;
pCrSrcStart=(unsigned char *)pSrcImage420->crStartAddr;
pCrDstStart=(unsigned char *)pDstImage420->crStartAddr;
crSize=imageWidth*imageHeight/4;
break;
case IMAGE420_DCTQ_COEFF:
// not implemented yet.
break;
default:
printf("ERROR:CopyImage420:not supported IMAGE420 type.\n");
return;
break;
}
for(i=0;i<ySize;i++)
*(pYDstStart+i)=*(pYSrcStart+i);
for(i=0;i<cbSize;i++)
*(pCbDstStart+i)=*(pCbSrcStart+i);
for(i=0;i<crSize;i++)
*(pCrDstStart+i)=*(pCrSrcStart+i);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -