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

📄 myfifo.c

📁 MP4编码源码
💻 C
字号:
/****************************************************************************/
/* MODULE:                                                                								*/
/*  Myfifo.c 						                           								*/
/****************************************************************************/
/*
 *   TCC Version 0.0
 *   Copyright (c) telechips, Inc.
 *   ALL RIGHTS RESERVED
*/
/****************************************************************************/

#include "resource/tccresource.h"
#include "Myfifo.h"

int pGetFifoElement(void* handle, PPFIFOELEMENT ppBuf);
int pPushFifo(void* handle, PFIFOELEMENT pBuf);
int pPopFifo(void* handle, PPFIFOELEMENT ppBuf);
int pShowFifo(void* handle, PPFIFOELEMENT ppBuf);
void pFlushFifo(void* handle);

pfGetFifoElement GetFifoElement = pGetFifoElement;
pfPushFifo PushFifo = pPushFifo;
pfPopFifo PopFifo = pPopFifo;
pfShowFifo ShowFifo = pShowFifo;
pfFlushFifo FlushFifo = pFlushFifo;

int pGetFifoElement(void* handle, PPFIFOELEMENT ppBuf)
{
	unsigned int i, iLoopCnt;
	PMYFIFO pMyFifo;
	PPFIFOELEMENT ppFifoBufArray;
	PFIFOELEMENT pFifoElement;

//	LOCK_FIFO;
	pMyFifo = (PMYFIFO)handle;
	
	iLoopCnt = pMyFifo->uiMaxNumOfElement;
	ppFifoBufArray = pMyFifo->ppFifoBufArray;
	
	for(i=0 ; i<iLoopCnt ; ++i)
	{
		pFifoElement = ppFifoBufArray[i];
		if(pFifoElement->uiIsUsing == 0)
		{
			*ppBuf = pFifoElement;
//			UNLOCK_FIFO;
			return 1;
		}
	}
//	UNLOCK_FIFO;
	return 0;
}
int pPushFifo(void* handle, PFIFOELEMENT pBuf)
{
	PMYFIFO pMyFifo;
	PPFIFOELEMENT ppFifo;
	PFIFOELEMENT pFifoElement;
	unsigned int uiWriteIdx;
	unsigned int uiMaxNumOfElement;


	pMyFifo = (PMYFIFO)handle;
	ppFifo = pMyFifo->ppFIFO;
	
	uiWriteIdx = pMyFifo->uiWriteIdx;
	pFifoElement = ppFifo[uiWriteIdx];

#if 0			// Why need this function 	?  
	if(pFifoElement != (PFIFOELEMENT)0)
	{

		return 0;
	}
#endif
	ppFifo[uiWriteIdx] = pBuf;	
	uiMaxNumOfElement = pMyFifo->uiMaxNumOfElement;
	pMyFifo->uiWriteIdx = (uiWriteIdx + 1) & (uiMaxNumOfElement - 1);
	
	pBuf->uiIsUsing = 1;				
	return 1;
}


int pPopFifo(void* handle, PPFIFOELEMENT ppBuf)
{
	PMYFIFO pMyFifo;
	PPFIFOELEMENT ppFifo;
	PFIFOELEMENT pFifoElement;
	unsigned int uiReadIdx;
	unsigned int uiMaxNumOfElement;
	
	pMyFifo = (PMYFIFO)handle;
	uiReadIdx = pMyFifo->uiReadIdx;
	ppFifo = pMyFifo->ppFIFO;
	
	pFifoElement = ppFifo[uiReadIdx];

	if(pFifoElement == (PFIFOELEMENT)0)
	{

		return 0;
	}

	uiMaxNumOfElement = pMyFifo->uiMaxNumOfElement;	
	pMyFifo->uiReadIdx = (uiReadIdx + 1) & (uiMaxNumOfElement - 1);
	
	ppFifo[uiReadIdx] = (PFIFOELEMENT)0;
	*ppBuf = pFifoElement;	

	
	return 1;
}

int pShowFifo(void* handle, PPFIFOELEMENT ppBuf)
{
	PMYFIFO pMyFifo;
	PPFIFOELEMENT ppFifo;
	PFIFOELEMENT pFifoElement;
	unsigned int uiReadIdx;
	
	pMyFifo = (PMYFIFO)handle;
	uiReadIdx = pMyFifo->uiReadIdx;
	ppFifo = pMyFifo->ppFIFO;
	
	pFifoElement = ppFifo[uiReadIdx];

	if(pFifoElement == (PFIFOELEMENT)0)
	{
		return 0;
	}

	*ppBuf = pFifoElement;	

	return 1;
}

void pFlushFifo(void* handle)
{
	PMYFIFO pMyFifo;
	PPFIFOELEMENT ppFifo;
	PPFIFOELEMENT ppFifoBufArray;
	PFIFOELEMENT pFifoElement;
	
	unsigned int uiMaxNumOfElement, i;



		
	pMyFifo = (PMYFIFO)handle;

	uiMaxNumOfElement = pMyFifo->uiMaxNumOfElement;
	ppFifo = pMyFifo->ppFIFO;
	ppFifoBufArray = pMyFifo->ppFifoBufArray;
	
	for(i=0; i<uiMaxNumOfElement ; ++i)
	{
	//	if(ppFifoBufArray[i])
	//		memset(ppFifoBufArray[i]->pBuf,ppFifoBufArray[i]->uiMaxBufSize);
			
		pFifoElement = ppFifoBufArray[i];
		pFifoElement->uiIsUsing = 0;
		pFifoElement->uiRealBufSize = 0;

		ppFifo[i] = 0;
		
	}

	pMyFifo->uiReadIdx = 0;
	pMyFifo->uiWriteIdx = 0;	
}



int CreateFIFO(void* handle, unsigned int uiNumOfElement, unsigned int uiSizeOfElement)
{
	PMYFIFO pMyFifo;
	PPFIFOELEMENT ppFifoBuf;
	PPFIFOELEMENT ppFifoBufArray;
	PFIFOELEMENT pFifoElement;
	unsigned int pMem;
	unsigned int i;

	pMem = (unsigned int)handle;
	pMyFifo = (PMYFIFO)pMem;
	
	pMem += sizeof(MYFIFO);
	
	pMyFifo->uiReadIdx = 0;
	pMyFifo->uiWriteIdx = 0;
	pMyFifo->uiMaxNumOfElement = uiNumOfElement;
	pMyFifo->ppFIFO = ppFifoBuf = (PPFIFOELEMENT)pMem;
	
	pMem += uiNumOfElement * sizeof(PFIFOELEMENT);

	pMyFifo->ppFifoBufArray = ppFifoBufArray = (PPFIFOELEMENT)pMem;

	pMem += uiNumOfElement * sizeof(PFIFOELEMENT);
	
	uiSizeOfElement = ((uiSizeOfElement) & 0xffffffff);
	
	for(i=0; i<uiNumOfElement ; ++i)
	{
		pFifoElement = (PFIFOELEMENT)(pMem + i * (sizeof(FIFOELEMENT) + uiSizeOfElement));

		pFifoElement->uiIsUsing = 0;
		pFifoElement->uiMaxBufSize = uiSizeOfElement;
		pFifoElement->uiRealBufSize = 0;
		pFifoElement->pBuf = (unsigned int*)(pFifoElement + 1);

		ppFifoBufArray[i] = pFifoElement;		
		ppFifoBuf[i] = (PFIFOELEMENT)0;
	}

	return 1;
}


⌨️ 快捷键说明

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