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

📄 fimvlib.c

📁 三星s3c2460开发板完整功能测试代码
💻 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 + -