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 + -
显示快捷键?