utility.c

来自「ADI blackfin DSP的基于device friver的jpeg压缩算」· C语言 代码 · 共 84 行

C
84
字号
#include "utility.h"
u16 bufferIndex[16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};


RESULT prepare_buffer(u8* start_addr, ADI_DEV_BUFFER * buffer, u32 bufferNum, ADI_DEV_BUFFER_TYPE bufferType)
{
    int i;
    ADI_DEV_BUFFER				*pWorkingBuffer = buffer;
    
    if(!buffer)
    	return EJ_ERR_INVALID_PARAM;
    	
	switch (bufferType) 
	{
	    
	    case ADI_DEV_CIRC:
	    {
			pWorkingBuffer->Circular.Data 					= NULL;	//supply by user
			pWorkingBuffer->Circular.SubBufferCount 		= 4;	//just a example
			pWorkingBuffer->Circular.SubBufferElementCount 	= 512;
			pWorkingBuffer->Circular.ElementWidth			= 2;	//total 1024 bytes
			pWorkingBuffer->Circular.CallbackType			= ADI_DEV_CIRC_FULL_BUFFER;
			pWorkingBuffer->Circular.pAdditionalInfo		= NULL;

	    }
	    	break;
	    case ADI_DEV_1D:
	    {
	        	
	        for(i = 0; i < bufferNum; i++)
	        {
	        	pWorkingBuffer->OneD.Data					= NULL;
	        	pWorkingBuffer->OneD.ElementCount			= 512;
	        	pWorkingBuffer->OneD.ElementWidth			= 2;
	        	pWorkingBuffer->OneD.CallbackParameter		= (void *)(bufferIndex + i);	// indicate which buffer make callback
	        	pWorkingBuffer->OneD.ProcessedFlag			= FALSE;
	        	pWorkingBuffer->OneD.ProcessedElementCount 	= 0;
	        	if(i == bufferNum - 1)
	        		pWorkingBuffer->OneD.pNext = NULL;
	        	else
	        		pWorkingBuffer->OneD.pNext				= (ADI_DEV_1D_BUFFER *)pWorkingBuffer + 1;
	        	pWorkingBuffer->OneD.pAdditionalInfo		= NULL;
	        	pWorkingBuffer 								= (ADI_DEV_BUFFER *)pWorkingBuffer->OneD.pNext;
	        }
	    }
	    	break;
	    case ADI_DEV_2D:
	    {
	        for(i = 0; i < bufferNum; i++)
	        {
	        	pWorkingBuffer->TwoD.Data					= start_addr + i * FRAME_SIZE;
	        	pWorkingBuffer->TwoD.ElementWidth			= 2;
#ifdef	ENTIRE_FIELD_MODE
	        	pWorkingBuffer->TwoD.XCount					= ADI_ITU656_PAL_LINE_WIDTH / pWorkingBuffer->TwoD.ElementWidth;
	        	pWorkingBuffer->TwoD.YCount					= ADI_ITU656_PAL_HEIGHT;
#endif
#ifdef ACTIVE_FIELD_MODE
				pWorkingBuffer->TwoD.XCount					= ADI_ITU656_PAL_WIDTH*2 / pWorkingBuffer->TwoD.ElementWidth;
				pWorkingBuffer->TwoD.YCount					= ADI_ITU656_PAL_ACTIVE_LINES;
#endif
	        	pWorkingBuffer->TwoD.XModify				= 2;
	        	pWorkingBuffer->TwoD.YModify				= 2;
	        	pWorkingBuffer->TwoD.CallbackParameter		= (void *)(bufferIndex + i);	// indicate which buffer make callback
	        	pWorkingBuffer->TwoD.ProcessedFlag			= FALSE;
	        	pWorkingBuffer->TwoD.ProcessedElementCount 	= 0;
	        	if(i == bufferNum - 1)
	        		pWorkingBuffer->TwoD.pNext = NULL;
	        	else
	        		pWorkingBuffer->TwoD.pNext				= (ADI_DEV_2D_BUFFER *)pWorkingBuffer + 1;
	        	pWorkingBuffer->TwoD.pAdditionalInfo		= NULL;
	        	pWorkingBuffer 								= (ADI_DEV_BUFFER *)pWorkingBuffer->TwoD.pNext;
	        }
	    }
	    	break;
	    default:
	    	break;
	}
	
	return EJ_ERR_NONE;

}


⌨️ 快捷键说明

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