buffer_init.c

来自「ADI的ADSP-BF561下实现多媒体开发的通用框架。」· C语言 代码 · 共 152 行

C
152
字号
#include "buffer_init.h"

/************************************************************************
*Descritionn:Initialises the video in/out peripheral DMA buffers and also 
*			 the MEMDMA buffers
*			 TRANSFER_LENGTH is 4 (32-bit). On BF561 the maximum data width transfer
*			 is 32 bit.  
************************************************************************/


/************************************************************************
	Function:buffer_init
	
	Description:Maintain three buffers in L2 memory. The number can be 
				increased but correspondingly case statements should be
				added. The buffers are managed as seperate variables to 
				allow explicit placements in the memory
************************************************************************/

void buffer_init()
{
	int i;
	for (i = 0; i < NUM_BUFFERS_L2; i++) {
		switch (i)
		{		
			case 0:
				Buffer2D_IN[i].Data = subFrame1;
				break;
			case 1: 
				Buffer2D_IN[i].Data = subFrame3;
				break;
			case 2: 
				Buffer2D_IN[i].Data = subFrame5;
				break;
		}
		Buffer2D_IN[i].ElementWidth = TRANSFER_LENGTH;
		Buffer2D_IN[i].XCount = 1716/TRANSFER_LENGTH;
		Buffer2D_IN[i].XModify = TRANSFER_LENGTH;
		Buffer2D_IN[i].YCount = L2NUMROWS;
		Buffer2D_IN[i].YModify = TRANSFER_LENGTH;
		Buffer2D_IN[i].CallbackParameter =&Buffer2D_IN[0];
		Buffer2D_IN[i].pNext = &Buffer2D_IN[i+1];
	}
	Buffer2D_IN[NUM_BUFFERS_L1-1].pNext = NULL;
	
	
	for (i = 0; i < NUM_BUFFERS_L2; i++) {
		switch (i)
		{		
			case 0:
				Buffer2D_OUT[i].Data = subFrame2;
				break;
			case 1: 
				Buffer2D_OUT[i].Data = subFrame4;
				break;
			case 2: 
				Buffer2D_OUT[i].Data = subFrame6;
				break;
			case 3: 
				Buffer2D_OUT[i].Data = subFrame8;
				break;	
			case 4: 
				Buffer2D_OUT[i].Data = subFrame10;
				break;			
		}
		Buffer2D_OUT[i].ElementWidth = TRANSFER_LENGTH;
		Buffer2D_OUT[i].XCount = 1716/TRANSFER_LENGTH;
		Buffer2D_OUT[i].XModify = TRANSFER_LENGTH;
		Buffer2D_OUT[i].YCount = NUMROWS;
		Buffer2D_OUT[i].YModify = TRANSFER_LENGTH;
		Buffer2D_OUT[i].CallbackParameter =NULL;//&Buffer2D_IN[0];
		Buffer2D_OUT[i].pNext = NULL;//&Buffer2D_OUT[i+1];
	}
	Buffer2D_IN[NUM_BUFFERS_L1-1].pNext = NULL;
}

/************************************************************************
	Function:L2Buffer_FullSliceInit
	
	Description:
************************************************************************/

void L2Buffer_FullSliceInit(ADI_DMA_2D_TRANSFER * buffer, unsigned char * startaddress)
{
		buffer->StartAddress = startaddress;
		buffer->XCount = 1716/TRANSFER_LENGTH;
		buffer->XModify = TRANSFER_LENGTH;
		buffer->YCount =  MBROWS;
		buffer->YModify = TRANSFER_LENGTH;
}

/************************************************************************
	Function:L2BufferInit
	
	Description:
************************************************************************/

void L2BufferInit(ADI_DMA_2D_TRANSFER * buffer, unsigned char * startaddress)
{
		buffer->StartAddress = startaddress;
		buffer->XCount = MBCOLS/TRANSFER_LENGTH;
		buffer->XModify = TRANSFER_LENGTH;
		buffer->YCount =  MBROWS;
		buffer->YModify = 1716-MBCOLS+TRANSFER_LENGTH;
}

/************************************************************************
	Function:L1BufferInit
	
	Description:
************************************************************************/

void L1BufferInit(ADI_DMA_2D_TRANSFER * buffer, unsigned char * startaddress)
{
		buffer->StartAddress = startaddress;
		buffer->XCount = MBCOLS/TRANSFER_LENGTH;
		buffer->XModify = TRANSFER_LENGTH;
		buffer->YCount =  MBROWS;
		buffer->YModify = TRANSFER_LENGTH;
}

/************************************************************************
	Function:L2Buffer_FullMBInit
	
	Description:
************************************************************************/

void L2Buffer_FullMBInit(ADI_DMA_2D_TRANSFER * buffer, unsigned char * startaddress)
{
		buffer->StartAddress = startaddress;
		buffer->XCount = MBCOLS/TRANSFER_LENGTH;
		buffer->XModify = TRANSFER_LENGTH;
		buffer->YCount =  MBROWS;
		buffer->YModify = 1716-MBCOLS+TRANSFER_LENGTH;
}
/************************************************************************
	Function:L1Buffer_FullMBInit
	
	Description:
************************************************************************/


void L1Buffer_FullMBInit(ADI_DMA_2D_TRANSFER * buffer, unsigned char * startaddress)
{
		buffer->StartAddress = startaddress;
		buffer->XCount = MBCOLS/TRANSFER_LENGTH;
		buffer->XModify = TRANSFER_LENGTH;
		buffer->YCount =  MBROWS;
		buffer->YModify = TRANSFER_LENGTH;
}

⌨️ 快捷键说明

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