亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? jpeg_bitsbuffer.c

?? ADI blackfin DSP的基于device friver的jpeg壓縮算法
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*****************************************************************************
Copyright(c) 2005 Analog Devices, Inc.  All Rights Reserved. This software is 
proprietary and confidential to Analog Devices, Inc. and its licensors.
******************************************************************************

$RCSfile: JPEG_BitsBuffer.c,v $
$Revision: 1.1 $
$Date: 2006/07/17 07:44:02 $

Project:	JPEG IMAGE CODEC
Title:		Example BitsBuffer module
Author(s):	D.G, A.S, P.G
Revised by:

Description:
Bitstream Data Buffer Managing Module

References:

******************************************************************************
Tab Setting:			4
Target Processor:		Blackfin
Target Tools Revision:	VDSP++ 3.5
******************************************************************************

Modification History:
====================
$Log: JPEG_BitsBuffer.c,v $
Revision 1.1  2006/07/17 07:44:02  bmk
JPEG-MJPEG User access files


******************************************************************************/

#include <stdlib.h>				// For NULL
#include <stdio.h>              // For fread()
#include <string.h>             // For memset()

#include "IMG_Common.h"             // common JPEG definitions
#include "JPEG_api_common.h"		//
#include "JPEG_memalloc.h"		    // User defined function prototypes
#include "JPEG_bitsbuffer.h"		// User defined typedefs
#define JPEGBUFFERVALIDATED
#define JPEGBUFFER
/* Bits Buffer functions: */
 tBitsBuffer      *JPEG_BitsBuffer_NEW(void);
 int              JPEG_BitsBuffer_CONFIG(tBitsBuffer *handle, eBitsBuf_config item, unsigned int value);
 int              JPEG_BitsBuffer_INIT(tBitsBuffer *handle);
 void             JPEG_BitsBuffer_DELETE(tBitsBuffer *handle);
 int              JPEG_BitsBuffer_RESET(tBitsBuffer *handle);

/* Encoder Bits Buffer functions: */
 unsigned char    *JPEG_BitsBuffer_REQUEST(tBitsBuffer *handle);
 int              JPEG_BitsBuffer_WRITE(tBitsBuffer *handle, int numBytes);
 int              JPEG_BitsBuffer_FLUSH(tBitsBuffer *handle);

/* Decoder Bits Buffer functions: */
 int				JPEG_BitsBuffer_READ (tBitsBuffer *handle);
// extern unsigned char	*JPEG_BitsBuffer_PROCESS (tBitsBuffer *handle);
 unsigned char    *JPEG_BitsBuffer_PROCESS(tBitsBuffer *handle, int *pNumBytes);
 void				JPEG_BitsBuffer_RELEASE (tBitsBuffer *handle);


#if USE_DMA
#include "BitsBufferDMA.h"		// DMA prototypes
#endif // USE_DMA

#define BITSTREAM_FILE_BUFFER_SIZE 1000000 /* approx 1 MB */
#define DECODER_SINGLE_BUFFERED /* This implementation is ONLY single buffered for DECODER */
/* The double buffer mode is currently broken for the decoder */

/****************************************************************************
 *		Local variables													    *
 ****************************************************************************/
/* Bitstream Constants: */

//static const int    BITS_BUF_DESBUF_SIZE = 1024;    /* Size of each buffer */
#define    BITS_BUF_DESBUF_SIZE  1024  
/****************************************************************************
 * 		Function Declarations												*
 ****************************************************************************/


/*
********************************************************************************
** Function:		JPEG_BitsBuffer_NEW
**
** Description:		Creates a new instance of Bit Stream buffer object.
**                  Used in JPEG ENCODER & DECODER.
**
** Arguments:		None
**
** Outputs:
**
** Return value:	Handle to new Bit Stream buffer instance
********************************************************************************
*/
tBitsBuffer *JPEG_BitsBuffer_NEW(void)
{
	tBitsBuffer		*bitsbuf = NULL;
	MemObjHandle    *MemObj;

    // Note: previous code had the TempBuffers (PROGRESSIVE) being 1024 large, and the
    // LOSSLESS buffers being dependent on the following formula:
    //	lTemp = (int32)(imageEncParam->maxXDimension * 1.5);
    //	if(lTemp < 2048)
    //		lTemp = 2048;

	MemObj = JPEG_MemAlloc_NEW(1, sizeof(tBitsBuffer), MEM_TYPE_OBJECT);
	if (MemObj==NULL)
		return NULL;

	bitsbuf = (tBitsBuffer *)JPEG_MemAlloc_ADDRESS(MemObj);

	// Reset bitsbuffer to zero - good for second and subsequent calls
	memset (bitsbuf,  0, sizeof(tBitsBuffer));

    // Save pointer to the tBitsBuffer's own memory allocation object
	bitsbuf->ThisMemObj = MemObj;

	MemObj = NULL;
	bitsbuf->desBuffer1 = NULL;

	MemObj = JPEG_MemAlloc_NEW(1, BITS_BUF_DESBUF_SIZE * sizeof(uint8), MEM_TYPE_DATA);
	if (MemObj==NULL)
	{
    // Deallocate previously allocated memory
		JPEG_MemAlloc_DELETE(bitsbuf->ThisMemObj);
		return NULL;
	}

	bitsbuf->desBuffer1 = (uint8 *)JPEG_MemAlloc_ADDRESS(MemObj);

    // Save pointer to desBuffer1's memory allocation object
	bitsbuf->BufferMemObjs[0] = MemObj;

	MemObj = NULL;
	bitsbuf->desBuffer2 = NULL;

	MemObj = JPEG_MemAlloc_NEW(1, BITS_BUF_DESBUF_SIZE * sizeof(uint8), MEM_TYPE_DATA);
	if (MemObj==NULL)
	{
    // Deallocate previously allocated memory
		JPEG_MemAlloc_DELETE(bitsbuf->BufferMemObjs[0]);
		JPEG_MemAlloc_DELETE(bitsbuf->ThisMemObj);
		return NULL;
	}

	bitsbuf->desBuffer2 = (uint8 *)JPEG_MemAlloc_ADDRESS(MemObj);

    // Save pointer to desBuffer1's memory allocation object
	bitsbuf->BufferMemObjs[1] = MemObj;


	return bitsbuf;
}

/*
********************************************************************************
** Function:		JPEG_BitsBuffer_DELETE
**
** Description:		This function deletes the Bit Stream buffer object.
**                  Used in JPEG ENCODER & DECODER.
**
** Arguments:
**	bitsbuf [IN]	Handle to the Bit Stream data access instance.
**
** Outputs:
**
** Return value:	None
********************************************************************************
*/
void JPEG_BitsBuffer_DELETE (tBitsBuffer *bitsbuf)
{
	// Deallocate buffer memory objects
	JPEG_MemAlloc_DELETE(bitsbuf->BufferMemObjs[1]);
	JPEG_MemAlloc_DELETE(bitsbuf->BufferMemObjs[0]);

	// Deallocate Bit Stream Buffer memory object
//	if(!bitsbuf->is_encoder) /* only for decoder */
//    {
//     	JPEG_MemAlloc_DELETE(bitsbuf->DecodeBitStreamMemObj);
//    }

	// Deallocate tBitsBuffer memory object last
	JPEG_MemAlloc_DELETE(bitsbuf->ThisMemObj);
}

/*
********************************************************************************
** Function:		JPEG_BitsBuffer_CONFIG
**
** Description:		This function configures the instance of a Bit Stream
**					buffer object with the given configuration value.
**                  Called in both JPEG ENCODER & DECODER, but only has
**                  functionality in Encoder at this stage.
**
** Arguments:
**	bitsbuf [IN]	Handle to the Bit Stream data access instance.
**	item [IN]		item to configure.
**	value[IN]		Configuration value.
**
** Outputs:
**
** Return value:	1 if successful; 0 otherwise
********************************************************************************
*/
int JPEG_BitsBuffer_CONFIG(tBitsBuffer *bitsbuf, eBitsBuf_config item, unsigned int value)
{
	switch(item)
	{
		case BITSBUF_ENCODER:
			bitsbuf->is_encoder = value;
			break;

		case BITSBUF_POINTER:
		    /* Encoder instance uses this: */
			bitsbuf->externalBuffer = (unsigned char *)value;

			/* Decoder instance uses this: */
			bitsbuf->ptrFile = (tIMG_BufferInfo *)value;
			break;

		default:
			return 0;
	}

	return 1;
}

/*
********************************************************************************
** Function:		JPEG_BitsBuffer_INIT
**
** Description:		This function initialises the instance of an bit stream data
**					access object, allocating any memory. JPEG_BitsBuffer_CONFIG
**					must have been called before calling this function.
**                  Used in JPEG ENCODER & DECODER.
**
** Arguments:
**	bitsbuf [IN]	Handle to the Bit Stream data access instance.
**
** Outputs:
**
** Return value:	1 if successful; 0 otherwise
********************************************************************************
*/
int JPEG_BitsBuffer_INIT(tBitsBuffer *bitsbuf)
{
	MemObjHandle    *MemObj;
	int     error_code=0;

	if(bitsbuf->is_encoder) /* Encoder specific initialisation */
	{
    	bitsbuf->numberOfBuffers = 2; /* double buffering scheme */

    	error_code=1;
    }
    else /* Decoder specific initialisation */
	{
    	bitsbuf->numberOfBuffers = 1; /* single buffering scheme */

//    	MemObj = JPEG_MemAlloc_NEW(1, (BITSTREAM_FILE_BUFFER_SIZE+4) * sizeof(uint8), MEM_TYPE_DATA);
//    	if (MemObj!=NULL)
//    	{
//
//        	bitsbuf->InputBitstreamFile = (uint8 *)JPEG_MemAlloc_ADDRESS(MemObj);
//
//            // Save pointer to desBuffer1's memory allocation object
//        	bitsbuf->DecodeBitStreamMemObj = MemObj;
//
//        	bitsbuf->BitStreamFileSize = fread(bitsbuf->InputBitstreamFile, 1, BITSTREAM_FILE_BUFFER_SIZE, bitsbuf->ptrFile);
//
//            if (!feof(bitsbuf->ptrFile))
//            {
//                printf("Input file is too big!\n");
//            }
//            else
//                 error_code=1;
//        }
        bitsbuf->BitStreamFileSize = bitsbuf->ptrFile->Length;
        bitsbuf->InputBitstreamFile = bitsbuf->ptrFile->Pointer;
        error_code=1;
    }

	return error_code;
}

/*
********************************************************************************
** Function:		JPEG_BitsBuffer_RESET
**
** Description:		This function resets the instance of a bit stream data access
**					object, setting all fields to default starting values.
**                  Used in JPEG ENCODER & DECODER.
** Arguments:
**	bitsbuf [IN]	Handle to the Bit Stream data access instance.
**
** Outputs:
**
** Return value:	1 if successful; 0 otherwise
********************************************************************************
*/
int JPEG_BitsBuffer_RESET(tBitsBuffer *bitsbuf)
{
	/* Encoder-only: */
	bitsbuf->dmaInitiateThreshold = 256;
	bitsbuf->externalBufferIndex = 0;

	bitsbuf->numberOfEmptyBuffers = bitsbuf->numberOfBuffers;
	bitsbuf->writeBufferCount = 0;
	bitsbuf->nextBuffer = 1;			// to select a new buffer
	bitsbuf->firstOrsecondBuffer = 1;	// first new buffer will be 0.

	bitsbuf->numBytes = 0;

	/* Decoder-only: */
	bitsbuf->end_of_file = 0;

	bitsbuf->numBytesBuf_1 = 0;
	bitsbuf->numBytesBuf_2 = 0;

    bitsbuf->InputFilePosition = 0;

	return 1;
}

/*
********************************************************************************
** Function:		JPEG_BitsBuffer_REQUEST
**
** Description:		This function is used to obtain the next available Bit
**					Stream buffer about to be filled by the processed output
**					data.
**                  Used in JPEG ENCODER only.
** Arguments:
**	bitsbuf [IN]	Handle to the Bit Stream data access instance.
**
** Outputs:
**
** Return value:	Pointer to a empty data buffer ready for storing the
**					processing output.
********************************************************************************
*/
#if USE_DMA
unsigned char *JPEG_BitsBuffer_REQUEST (tBitsBuffer *bitsbuf)
{
	unsigned char	*lPointer;

	if(bitsbuf->nextBuffer == 1)
	{


			bitsbuf->firstOrsecondBuffer++;
			if(bitsbuf->firstOrsecondBuffer >= bitsbuf->numberOfBuffers)
			{
				bitsbuf->firstOrsecondBuffer = 0;
			}

			bitsbuf->nextBuffer = 0;


// wait until buffer is ready...
// only need to check once 'numberOfBuffers' (ie 2) have been read.
// the first buffers are assumed to be "empty".
			if (bitsbuf->writeBufferCount >= bitsbuf->numberOfBuffers)
				dma_done(bitsbuf->dmaIDs[bitsbuf->firstOrsecondBuffer]);

	}

	if(bitsbuf->firstOrsecondBuffer == 0)
	{
		lPointer = bitsbuf->desBuffer1;
	}
	else
	{
		lPointer = bitsbuf->desBuffer2;
	}

	lPointer = lPointer + bitsbuf->numBytes;

	return(lPointer);
}
#else
#ifdef JPEGBUFFERVALIDATED
asm (".section program;\n"
".align 8;\n"
"_JPEG_BitsBuffer_REQUEST:\n"
"		P0 = R0; NOP; NOP; R3 = 1; \n"
"		R0 = 0; R2 = [P0 + 20];\n"
"		CC = R2 == R3;\n"
"		IF !CC JUMP BBRQ1;\n"
"		R1 = [P0 + 28];\n"
"		CC = R1 <= 0;\n"
"		IF CC JUMP  BBRQ7;\n"
"		R1 = R1 - R2 (NS) || R3 = [P0 + 16];\n"
"		R3 = R3 + R2 (NS) || R0 = [P0 + 24];\n"
"		CC = R0 <= R3;\n"
"		R0= R0 -|- R0 || [P0 + 28] = R1;\n"
"		[P0 + 20] = R0;\n"
"		IF !CC R0 = R3;\n"
"		[P0 + 16] = R0;\n"
"BBRQ1: R0 = [P0 + 16];\n"
"		CC = R0;\n"
"		R1 = [P0 + 8];\n"
"		R2 = [P0 + 4];\n"
"		R0 = [P0 + 36];\n"
"		IF CC R2 = R1;\n"
"		R0 = R2 + R0;\n"
"BBRQ7:	RTS;\n"
".global _JPEG_BitsBuffer_REQUEST;\n");
#else
unsigned char *JPEG_BitsBuffer_REQUEST (tBitsBuffer *bitsbuf) {	
	unsigned char	*lPointer;
	if(bitsbuf->nextBuffer == 1) {
		if(bitsbuf->numberOfEmptyBuffers > 0) {
			bitsbuf->numberOfEmptyBuffers--;
			bitsbuf->firstOrsecondBuffer++;
			if(bitsbuf->firstOrsecondBuffer >= bitsbuf->numberOfBuffers)			
				bitsbuf->firstOrsecondBuffer = 0;			
			bitsbuf->nextBuffer = 0;
		}	else	return (NULL);		
	}
	if(bitsbuf->firstOrsecondBuffer == 0)		lPointer = bitsbuf->desBuffer1;	
	else		lPointer = bitsbuf->desBuffer2;
	lPointer = lPointer + bitsbuf->numBytes;
	return(lPointer);
}
#endif
#endif
/*
********************************************************************************
** Function:		JPEG_BitsBuffer_WRITE
**
** Description:		This function is used to empty a data buffer after
**					processing.
**                  Used in JPEG ENCODER only.
**
** Arguments:
**	bitsbuf [IN]	Handle to the Bit Stream data access instance.
**	numBytes [IN]	Number of Bytes written into the buffer.
**
** Outputs:
**
** Return value:	E_TRUE or E_FALSE
********************************************************************************
*/
#if USE_DMA
int JPEG_BitsBuffer_WRITE (tBitsBuffer *bitsbuf, int numBytes)
{
	int		lCount;

	bitsbuf->numBytes += numBytes;

	if(bitsbuf->numBytes > bitsbuf->dmaInitiateThreshold)
	{
		if(bitsbuf->firstOrsecondBuffer == 0)
		{
			bitsbuf->dmaIDs[bitsbuf->firstOrsecondBuffer] = DMA_BitsBuffer(&bitsbuf->externalBuffer[bitsbuf->externalBufferIndex],
				bitsbuf->desBuffer1, bitsbuf->numBytes);
			bitsbuf->externalBufferIndex += bitsbuf->numBytes;
		}
		else
		{
			bitsbuf->dmaIDs[bitsbuf->firstOrsecondBuffer] = DMA_BitsBuffer(&bitsbuf->externalBuffer[bitsbuf->externalBufferIndex],
				bitsbuf->desBuffer2, bitsbuf->numBytes);
			bitsbuf->externalBufferIndex += bitsbuf->numBytes;
		}
		bitsbuf->numBytes = 0;
		bitsbuf->nextBuffer = 1;
		bitsbuf->writeBufferCount++;

		bitsbuf->numberOfEmptyBuffers++;
	}

	return (E_TRUE);
}
#else
#ifdef JPEGBUFFERVALIDATED
asm(".section program;\n"
".align 8;\n"
"_JPEG_BitsBuffer_WRITE:\n"
"		P0 = R0;\n"
"		R0 = 1; NOP;\n"
"		[--SP] = (P5:4);\n"
"		R2 = [P0 + 36];\n"
"		R2 = R2 + R1 (NS) || R1 = [P0 + 40];\n"
"		[P0 + 36] = R2;\n"
"		CC = R1 < R2;\n"

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人天堂资源www在线| 日韩欧美国产不卡| 欧美久久久一区| 久久久久99精品国产片| 亚洲一区二区精品久久av| 国产九九视频一区二区三区| 在线观看91精品国产入口| 国产精品免费人成网站| 日本欧美大码aⅴ在线播放| 欧美精品在线视频| 亚洲男女毛片无遮挡| 国产一区二区三区久久久 | 欧美人妖巨大在线| 国产精品不卡视频| 国产精品一区在线观看乱码| 欧美日韩国产美女| 夜夜爽夜夜爽精品视频| 成人精品国产福利| 国产女人18毛片水真多成人如厕 | 日韩一区二区精品在线观看| 亚洲一区二区欧美日韩| 99久久精品一区二区| 久久免费美女视频| 国产在线观看免费一区| 精品免费国产一区二区三区四区| 午夜精品免费在线观看| 91黄色激情网站| 亚洲美女区一区| 色综合久久久久综合99| 中文字幕在线免费不卡| 99在线精品观看| 中文字幕日韩精品一区| av综合在线播放| 亚洲人成在线观看一区二区| av在线播放一区二区三区| 亚洲欧美自拍偷拍| 色婷婷激情久久| 亚洲电影中文字幕在线观看| 欧美日韩在线综合| 日韩精品1区2区3区| 欧美一区二区三区播放老司机| 天堂资源在线中文精品| 欧美日韩极品在线观看一区| 视频一区在线视频| 欧美一区二区三区人| 久久99在线观看| www激情久久| thepron国产精品| 亚洲精品国产a久久久久久| 欧美视频精品在线观看| 日本欧美一区二区三区乱码| 精品国产一区a| 高清不卡一区二区在线| 一区视频在线播放| 欧美高清dvd| 国产最新精品免费| 国产精品久久久久久亚洲毛片| 91亚洲精品乱码久久久久久蜜桃| 亚洲最大成人网4388xx| 91精品国产综合久久久久久漫画 | 欧美日韩国产影片| 青青草国产成人99久久| 久久久久国产精品麻豆| 99久久精品免费| 五月天中文字幕一区二区| 亚洲精品一区二区在线观看| av电影一区二区| 蜜桃免费网站一区二区三区| 中文字幕欧美日本乱码一线二线| 欧美性色aⅴ视频一区日韩精品| 日韩 欧美一区二区三区| 国产三级久久久| 欧美日韩精品综合在线| 国产精品一线二线三线| 一区二区三区免费在线观看| 精品国产百合女同互慰| 91丨九色丨蝌蚪富婆spa| 蜜桃视频在线观看一区二区| 亚洲欧洲日韩在线| 精品欧美一区二区三区精品久久| 欧美日韩国产综合一区二区三区| 国产美女视频一区| 午夜久久电影网| 亚洲欧美在线aaa| 久久久噜噜噜久久人人看| 欧美三级在线播放| 成人不卡免费av| 久久精品国产澳门| 日韩中文字幕区一区有砖一区| 国产日韩欧美麻豆| 欧美xxxx老人做受| 欧美日韩精品三区| 97久久精品人人做人人爽50路| 精品一区免费av| 亚洲国产成人av好男人在线观看| 亚洲私人影院在线观看| 久久久国际精品| 精品少妇一区二区三区日产乱码| 欧美剧情电影在线观看完整版免费励志电影| 国产精品乡下勾搭老头1| 美女脱光内衣内裤视频久久网站| 亚洲精品免费看| 中文字幕日韩一区| 国产精品日产欧美久久久久| 精品福利二区三区| 欧美电影精品一区二区| 欧美一区二视频| 欧美精品 国产精品| 欧洲精品在线观看| 91国在线观看| 欧美三级资源在线| 欧美午夜一区二区三区免费大片| 91视频www| 色噜噜狠狠成人网p站| youjizz国产精品| av成人老司机| 91蜜桃视频在线| 日本高清视频一区二区| 欧美在线|欧美| 欧美日韩免费视频| 555www色欧美视频| 欧美一区二区三区视频免费播放| 4438亚洲最大| 日韩女优电影在线观看| 精品国产乱码久久久久久蜜臀 | 26uuu久久综合| 久久久天堂av| 国产精品看片你懂得| 国产精品久久久久久久久久久免费看 | 欧美经典一区二区| 欧美激情一区二区三区全黄| 国产精品情趣视频| 亚洲免费色视频| 午夜久久久久久久久久一区二区| 日韩精品一二三四| 国产原创一区二区三区| 成人永久aaa| 91福利在线观看| 欧美人体做爰大胆视频| 精品国产乱码久久久久久1区2区| 国产片一区二区三区| 亚洲精品乱码久久久久久| 日韩在线一区二区| 国产一区欧美二区| 成人av一区二区三区| 在线一区二区三区做爰视频网站| 欧美午夜宅男影院| 久久这里只精品最新地址| 国产精品久久久久久久久搜平片| 一区二区中文字幕在线| 人禽交欧美网站| 国产91精品一区二区| 在线免费观看成人短视频| 欧美一级午夜免费电影| 国产精品国产a| 日韩av中文在线观看| 成人福利电影精品一区二区在线观看| 色88888久久久久久影院野外| 欧美一区二区三区的| 中文字幕佐山爱一区二区免费| 日本不卡的三区四区五区| 不卡的电影网站| 7777精品伊人久久久大香线蕉完整版| 久久精品一区二区三区不卡| 亚洲国产精品一区二区久久| 国产乱人伦精品一区二区在线观看 | 666欧美在线视频| 国产精品你懂的| 激情综合色综合久久| 色天天综合久久久久综合片| 久久影院视频免费| 亚洲国产精品视频| 播五月开心婷婷综合| 日韩美女视频在线| 午夜精品成人在线| 色偷偷久久人人79超碰人人澡 | 在线电影国产精品| 亚洲欧美在线视频观看| 国产原创一区二区| 51午夜精品国产| 亚洲永久精品大片| 色婷婷综合久久久久中文一区二区 | 国产精品丝袜在线| 美女任你摸久久| 777午夜精品视频在线播放| 亚洲欧美韩国综合色| 成人国产在线观看| 久久影音资源网| 久久国产福利国产秒拍| 欧美乱妇23p| 午夜久久久久久久久久一区二区| 在线观看av不卡| 亚洲欧美视频在线观看视频| 成人午夜碰碰视频| 国产日本亚洲高清| 丁香激情综合国产| 中文字幕二三区不卡| 成人小视频在线| 国产精品色呦呦| 高清不卡一区二区|