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

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

?? jpeg_mcubuffer.c

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

$RCSfile: JPEG_McuBuffer.c,v $
$Revision: 1.5 $
$Date: 2006/07/31 01:11:59 $

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

Description:
Mcu Data Buffer Managing Module

References:

******************************************************************************
Tab Setting:			4
Target Processor:		Blackfin
Target Tools Revision:	ccblkfn		C/C++ compiler					6.3.0.0
						easmblkfn	BlackFin assembler				2.2.4.1
						elfar		ELF Librarian/Archive Utility	4.4.1.2
						linker		Linker							2.8.8.2
******************************************************************************

Modification History:
====================
$Log: JPEG_McuBuffer.c,v $
Revision 1.5  2006/07/31 01:11:59  bmk
fixed a bug in 422


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

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

#include "IMG_common.h"             // Common definitions
#include "JPEG_api_common.h"		//
#include "JPEG_UserTypeDefs.h"		// User defined typedefs
#include "JPEG_memalloc.h"
#define JPEGBUFFERVALIDATED
#if USE_DMA
#include "McuBufferDMA.h"		// DMA prototypes
#endif

#ifndef BLACKFIN_JPEG_ENC
#define BLACKFIN_JPEG_ENC
#endif

/****************************************************************************
 *		Local variables													    *
 ****************************************************************************/
/* MCU Constants: */
#define BLOCK_SIZE			64
#define BLOCK_WIDTH			8

// Output Side Macros
#define MAX_MCUBUFFERS	8			// Not necessarily multiple of 2

#define FREE			0
#define	BUSY			1
#ifndef JPEGBUFFERVALIDATED
static const int	MCU_SIZE_BASIC = 64;
#define LOG_BLOCK_SIZE		6
static const int	MCU_NO_OF_BUFFERS_SEQUENTIAL = 2;
static const int	MCU_NO_OF_BUFFERS_PROGRESSIVE = 2;
static const int	MCU_NO_OF_BUFFERS_LOSSLESS = 3;
#else
#define	MCU_SIZE_BASIC  64
#define LOG_BLOCK_SIZE		6
#define	MCU_NO_OF_BUFFERS_SEQUENTIAL  2
#define	MCU_NO_OF_BUFFERS_PROGRESSIVE  2
#define	MCU_NO_OF_BUFFERS_LOSSLESS  3
#endif
/****************************************************************************
 * 		Function Declarations												*
 ****************************************************************************/

/* Encoder functions: */
#ifdef BLACKFIN_JPEG_ENC
	extern void gFormMCU420JpegEnc_BLACKFIN(tMcuBuffer *, uint8 *mcuData);
	extern void gFormMCU422JpegEnc_BLACKFIN(tMcuBuffer *, uint8 *mcuData);
	extern void gFormMCU444JpegEnc_BLACKFIN(tMcuBuffer *, uint8 *mcuData);
	extern void gFormMCU400JpegEnc_BLACKFIN(tMcuBuffer *, uint8 *mcuData);
	extern void gFormRowLosslessJpegEnc_BLACKFIN(tMcuBuffer *, uint8 *mcuData);
#endif
#ifndef JPEGBUFFERVALIDATED
static void     sFormRowLossless(tMcuBuffer *mcuHandle, uint8 *mcuData);

static int32	JPEG_McuBuffer_Sequential_READ(tMcuBuffer *);
static int32	JPEG_McuBuffer_Progressive_READ(tMcuBuffer *);
static int32	JPEG_McuBuffer_Lossless_READ(tMcuBuffer *);
static void	    JPEG_McuBuffer_Progressive_NEXT(tMcuBuffer *);
static void	    JPEG_McuBuffer_Lossless_NEXT(tMcuBuffer *);

static void	    sFormMCU400(tMcuBuffer *mbdata, uint8 *mcudata);
static void	    sFormMCU420(tMcuBuffer *mbdata, uint8 *mcudata);
static void	    sFormMCU422(tMcuBuffer *mbdata, uint8 *mcudata);
static void	    sFormMCU444(tMcuBuffer *mbdata, uint8 *mcudata);

/* Decoder functions: */
static void     sStoreMcuBuffer(uint8 *currFrame, uint8 *outBuffer, int32 x,
							                         int32 y, int32 frameWidth);
static void     sStore420McuBuffer(tMcuBuffer *lDer);
static void     sStore422McuBuffer(tMcuBuffer *lDer);
static void     sStore444McuBuffer(tMcuBuffer *lDer);
static void     sStoreMonoMcuBuffer(tMcuBuffer *lDer);
static void     sStoreLosslessMcuBuffer(tMcuBuffer *lDer);
#else
int32	JPEG_McuBuffer_Sequential_READ(tMcuBuffer *);
int32	JPEG_McuBuffer_Progressive_READ(tMcuBuffer *);
int32	JPEG_McuBuffer_Lossless_READ(tMcuBuffer *);
void    JPEG_McuBuffer_Lossless_NEXT(tMcuBuffer *);
void     sStore420McuBuffer(tMcuBuffer *lDer);
void     sStore422McuBuffer(tMcuBuffer *lDer);
void     sStore444McuBuffer(tMcuBuffer *lDer);
void     sStoreMonoMcuBuffer(tMcuBuffer *lDer);
void     sStoreLosslessMcuBuffer(tMcuBuffer *lDer);
#endif

// Tempoary workaround to get the output buffer pointer updated.
void *mcu_ex;


/*
********************************************************************************
** Function:		JPEG_McuBuffer_NEW
**
** Description:		This function creates a new instance of MCU buffer object.
**					After calling this function, JPEG_McuBuffer_CONFIG is called
**					to set all fields to required values.
**
** Arguments:		None
**
** Outputs:
**
** Return value:	Handle to new MCU buffer instance. NULL upon failure.
********************************************************************************
*/
tMcuBuffer *JPEG_McuBuffer_NEW(void)
{
	tMcuBuffer *mcu;
	MemObjHandle	*MemObj;

	MemObj = JPEG_MemAlloc_NEW(1, sizeof(tMcuBuffer), MEM_TYPE_OBJECT);
	if (MemObj==NULL)
		return NULL;
	mcu = (tMcuBuffer *)JPEG_MemAlloc_ADDRESS(MemObj);

	// Reset the MCU buffer parameters
	memset (mcu, 0, sizeof(tMcuBuffer));

	// Save pointer to this memory object.
	mcu->ThisMemObj = MemObj;

	/* To be assigned (and tested against zero) in JPEG_McuBuffer_INIT() */
	mcu->mcubuffer = NULL;
	mcu->interLeaveFormat = 0;
	mcu->encodingMode = 0;
	
	mcu_ex = (void*)mcu;

	return mcu;
}

/*
********************************************************************************
** Function:		JPEG_McuBuffer_DELETE
**
** Description:		This function deletes the MCU buffer object, releasing its
**					memory.
**
** Arguments:
**	mcuHandle[IN]	Handle to the Mcu Buffer data access instance.
**
** Outputs:
**
** Return value:	None
********************************************************************************
*/
void JPEG_McuBuffer_DELETE(tMcuBuffer *mcu)
{
	// Deallocate buffer memory object
	JPEG_MemAlloc_DELETE(mcu->BufferMemObj);

	// Deallocate tMcuBuffer memory object itself
	JPEG_MemAlloc_DELETE(mcu->ThisMemObj);

	/* Decoder specific memory clean up */
	if ( !(mcu->is_encoder) )
	{
    	// Deallocate mcuFree memory object
    	JPEG_MemAlloc_DELETE(mcu->mcuFreeMemObj);
    }
}


/*
********************************************************************************
** Function:		JPEG_McuBuffer_CONFIG
**
** Description:		This function configures the instance of an image data access
**					object with the given configuration value.
**
** Arguments:
**	mcuHandle[IN]	Handle to the Mcu Buffer data access instance.
**	item [IN]		Item to configure.
**	value[IN]		Configuration value.
**
** Outputs:
**
** Return value:	E_TRUE or E_FALSE
********************************************************************************
*/
int JPEG_McuBuffer_CONFIG(tMcuBuffer *mcu, eMcu_config item, unsigned int value)
{
	int32 		lReturn = E_TRUE;

	switch(item)
	{
		case MCU_ENCODER:
			mcu->is_encoder = value;
			break;
		case MCU_POINTER_C1:
			mcu->frameCurrPos = (uint8 *) value;
			break;
		case MCU_POINTER_C2:
//			mcu->cbCurrPos = (uint8 *) value;
			break;
		case MCU_POINTER_C3:
//			mcu->crCurrPos = (uint8 *) value;
			break;
		case MCU_FRAME_WIDTH:
			mcu->frameWidth = value;
			break;
		case MCU_FRAME_HEIGHT:
			mcu->frameHeight = value;
			break;
		case MCU_ORIGINAL_FRAME_WIDTH:
			mcu->originalFramWidth = value;
			break;
		case MCU_ORIGINAL_FRAME_HEIGHT:
			mcu->originalFramHeight = value;
			break;
		case MCU_IMAGE_FORMAT:
			mcu->interLeaveFormat = value;
			break;
		case MCU_ENCODING_MODE:
			mcu->encodingMode = value;
			break;
//		case MCU_COMP_NUMBER:
//			mcu->componentNumber = value;
//			break;
		case MCU_COMP_FRAME:
			mcu->frameCurrPos = (uint8 *)value;
			break;

		default:
			lReturn = E_FALSE;
	}

	return lReturn;
}

/*
********************************************************************************
** Function:		JPEG_McuBuffer_INIT
**
** Description:		This function initialises the instance of an image data
**					access object, allocating any memory. JPEG_McuBuffer_CONFIG
*					must have been called before calling this function.
**
** Arguments:
**	mcuHandle[IN]	Handle to the Mcu Buffer data access instance.
**
** Outputs:
**
** Return value:	1 if successful; 0 otherwise
********************************************************************************
*/
int JPEG_McuBuffer_INIT(tMcuBuffer *mcu)
{
	int	            lReturn = 1;
	MemObjHandle    *MemObj;


	if(mcu->is_encoder)
	{
    	switch(mcu->encodingMode)
    	{
    		case SEQUENTIAL:
    			mcu->numberOfBuffers = MCU_NO_OF_BUFFERS_SEQUENTIAL;
    			switch(mcu->interLeaveFormat)
    			{
    				case YUV420:
    	 				mcu->mcuSize = (6 * MCU_SIZE_BASIC);
    	 				break;
    				case YUV422:
    	 				mcu->mcuSize = (4 * MCU_SIZE_BASIC);
    	 				break;
    				case YUV444:
    				case RGB:
    		 			mcu->mcuSize = (3 * MCU_SIZE_BASIC);
    		 			break;
    				case MONOCHROME:
    		 			mcu->mcuSize = MCU_SIZE_BASIC;
    		 			break;
    		 		default:
    		 			lReturn = 0;
    		 			break;
    			}
    			break;
    		case PROGRESSIVE:
    			mcu->numberOfBuffers = MCU_NO_OF_BUFFERS_PROGRESSIVE;
    			mcu->mcuSize = MCU_SIZE_BASIC;
    			break;
    		case LOSSLESS:
    			mcu->numberOfBuffers = MCU_NO_OF_BUFFERS_LOSSLESS;
    			mcu->mcuSize = mcu->frameWidth;
    			break;
    		default:
    			lReturn = 0;
    			break;
    	}
	}
	else
	{

    	/* Allocate memory for mcuFree: */
    	mcu->numberOfBuffers = MAX_MCUBUFFERS;
    	MemObj = JPEG_MemAlloc_NEW(1, mcu->numberOfBuffers * sizeof(int), MEM_TYPE_OBJECT);
    	if(MemObj==NULL)
    	{
    		return NULL;
    	}
    	mcu->mcuFree = (int *)JPEG_MemAlloc_ADDRESS(MemObj);
    	mcu->mcuFreeMemObj = MemObj;

		mcu->componentNumber = 3;

		if(mcu->interLeaveFormat == YUV444 || mcu->interLeaveFormat == RGB)
		{
			mcu->mcuSize = 3 * MCU_SIZE_BASIC;
		}
		else
		{
			if(mcu->interLeaveFormat == YUV422)
			{
				mcu->mcuSize = 8 * MCU_SIZE_BASIC;
			}
			else
			{
				if(mcu->interLeaveFormat == YUV420)
				{
					mcu->mcuSize = 6 * MCU_SIZE_BASIC;
				}
				else /* MONOCHROME */
				{
        			mcu->componentNumber = 1;
					mcu->mcuSize =  MCU_SIZE_BASIC;
				}
			}
		}
	}

	MemObj = JPEG_MemAlloc_NEW(1, mcu->mcuSize * sizeof(uint8) * mcu->numberOfBuffers, MEM_TYPE_DATA);
	if (MemObj==NULL)
		lReturn = E_FALSE;

	mcu->mcubuffer = (uint8 *)JPEG_MemAlloc_ADDRESS(MemObj);

	// Save pointer to this memory object.
	mcu->BufferMemObj = MemObj;

	return lReturn;
}


/*
********************************************************************************
** Function:		JPEG_McuBuffer_RESET
**
** Description:		This function resets the instance of an image data access
**					object, but must NOT modify items set in JPEG_McuBuffer_CONFIG
**
** Arguments:
**	mcuHandle[IN]	Handle to the Mcu Buffer data access instance.
**
** Outputs:
**
** Return value:	E_TRUE or E_FALSE
********************************************************************************
*/
int32 JPEG_McuBuffer_RESET(tMcuBuffer *mcu)
{
    int32	 lFrameSize;

    /* common settings requiring reset between images */

    /* reset frame component pointers to top left hand corner */
	mcu->lumCurrPos = mcu->frameCurrPos;
	lFrameSize = mcu->frameWidth * mcu->frameHeight;
	mcu->cbCurrPos = mcu->frameCurrPos + lFrameSize;
	switch(mcu->interLeaveFormat)
	{
		case YUV420: //4:2:0
				lFrameSize = lFrameSize >> 2;
				break;
		case YUV422: //4:2:2
				lFrameSize = lFrameSize >> 1;
				break;
		case YUV444: //4:4:4
				break;
		case MONOCHROME:	//4:0:0
				lFrameSize = 0;
				break;
		case RGB: //RGB
				break;
	}
	mcu->crCurrPos = mcu->cbCurrPos + lFrameSize;

	mcu->x = 0;
	mcu->y = 0;

	if(mcu->is_encoder)
	{


    	mcu->mcuBufferIndex = 0;
    	mcu->processBufferIndex = 0;
    	mcu->numberOfEmptyBuffers = mcu->numberOfBuffers;

    	mcu->componentNumber = 0; // Used for PROGRESSIVE & LOSSLESS only

    	/* Starting values of progressive frame parameters */
    	if(mcu->encodingMode == PROGRESSIVE)
    	{
    		/* Frame width & height of each progressive-mode scan */
    		int	 progressiveFrameWidth = mcu->originalFramWidth;
    		int	 progressiveFrameHeight = mcu->originalFramHeight;


    		mcu->component_next = 0;

    		// Set counter for first component
    		// Counter is equal to number of MCUs per frame,
    		// rounded up to a multiple of the MCU width and height:
    	 	progressiveFrameWidth += BLOCK_WIDTH - 1;
    		progressiveFrameWidth /= BLOCK_WIDTH;
    		progressiveFrameWidth *= BLOCK_WIDTH;

    	 	progressiveFrameHeight += BLOCK_WIDTH - 1;
    		progressiveFrameHeight /= BLOCK_WIDTH;
    		progressiveFrameHeight *= BLOCK_WIDTH;

    		mcu->progressiveBlockCount = progressiveFrameWidth * progressiveFrameHeight;
    		mcu->progressiveBlockCount /= BLOCK_SIZE;
//    		mcu->progressiveBlockCount /= BLOCK_SIZE;

    		/* Adjust frame dimensions to be used for components after first: */
    		if(mcu->interLeaveFormat == YUV420)
    		{
    			progressiveFrameWidth >>= 1;
    			progressiveFrameHeight >>= 1;
    		}
    		else if(mcu->interLeaveFormat == YUV422)
    		{
    			progressiveFrameWidth >>= 1;
    		}

    		/* Round up to a multiple of the MCU width or height before dividing by it: */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品女主播在线观看| 91麻豆精品国产自产在线观看一区| 精品国产一区二区三区久久久蜜月 | 国产伦精品一区二区三区视频青涩| 日韩一级大片在线观看| 韩国视频一区二区| 国产三区在线成人av| 成人性视频网站| 亚洲国产欧美日韩另类综合| 欧美精选在线播放| 激情六月婷婷综合| 国产精品久久久久久久久快鸭| 日本久久精品电影| 日韩av不卡在线观看| 久久综合久久99| 91同城在线观看| 亚洲成av人片在线| 精品国产露脸精彩对白| 91影院在线免费观看| 亚洲成人自拍偷拍| 久久亚洲一区二区三区四区| 不卡电影免费在线播放一区| 亚洲国产成人va在线观看天堂| 欧美一二三区在线观看| 成人丝袜18视频在线观看| 一区二区三区不卡视频| 精品国产免费一区二区三区四区| 大胆欧美人体老妇| 午夜视黄欧洲亚洲| 国产欧美精品一区二区色综合朱莉| 91在线看国产| 久久99精品久久久久久国产越南| 国产精品嫩草影院av蜜臀| 欧美性猛片xxxx免费看久爱| 国内一区二区视频| 午夜精品久久久久久久99樱桃| 亚洲精品一区二区三区精华液| 波多野结衣精品在线| 日日摸夜夜添夜夜添国产精品| 欧美国产一区二区| 欧美电影在线免费观看| hitomi一区二区三区精品| 日韩不卡一区二区三区| 国产精品毛片a∨一区二区三区| 欧美日韩在线播| 波多野结衣视频一区| 免费看日韩a级影片| 18成人在线视频| 久久亚洲春色中文字幕久久久| 欧美日韩亚洲综合在线| thepron国产精品| 极品少妇xxxx精品少妇| 亚洲成av人片www| 亚洲日本成人在线观看| 久久久美女毛片| 日韩免费成人网| 欧美日韩一区三区四区| 91麻豆福利精品推荐| 成人污视频在线观看| 国产曰批免费观看久久久| 性久久久久久久久久久久 | 综合自拍亚洲综合图不卡区| 欧美大片一区二区| 欧美一区二区三区日韩视频| 欧美亚洲尤物久久| 91国产福利在线| 菠萝蜜视频在线观看一区| 国产在线一区二区| 麻豆视频一区二区| 奇米影视一区二区三区小说| 亚洲国产精品欧美一二99| 亚洲欧美韩国综合色| 一区精品在线播放| 日韩伦理av电影| 亚洲欧美日韩系列| 日韩一区有码在线| 中文字幕一区二区三区四区| 国产精品激情偷乱一区二区∴| 国产日韩欧美亚洲| 国产女同性恋一区二区| 国产精品久久午夜夜伦鲁鲁| 国产精品乱码一区二区三区软件| 国产三级久久久| 国产精品伦一区二区三级视频| 国产欧美精品一区二区三区四区| 国产调教视频一区| 国产精品国产三级国产普通话三级 | 欧美日本不卡视频| 91精品国产一区二区三区香蕉| 欧美精品色一区二区三区| 在线电影国产精品| 日韩欧美在线影院| 精品久久一区二区三区| 久久免费精品国产久精品久久久久| 亚洲精品一区二区三区99| 国产欧美1区2区3区| 亚洲人123区| 亚洲午夜久久久久久久久电影院| 调教+趴+乳夹+国产+精品| 蜜桃91丨九色丨蝌蚪91桃色| 国产一区二区三区四区在线观看 | 国产精品午夜久久| 中文字幕亚洲成人| 亚洲二区视频在线| 麻豆91精品91久久久的内涵| 国产99久久久国产精品潘金网站| 99精品一区二区三区| 欧美日韩午夜在线| 欧美mv日韩mv国产网站app| 国产精品久久久久一区二区三区 | 成人激情文学综合网| 日本久久一区二区| 欧美成人a∨高清免费观看| 日本一区二区电影| 亚洲第一成年网| 国产精品2024| 在线日韩av片| www激情久久| 亚洲欧美福利一区二区| 日本色综合中文字幕| av一区二区不卡| 91精品国产综合久久久久久久久久 | 国产三级精品视频| 亚洲国产成人91porn| 韩日av一区二区| 欧美亚洲动漫精品| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 日本成人在线电影网| 成人一区二区三区| 欧美疯狂性受xxxxx喷水图片| 自拍偷拍亚洲激情| 免费观看一级特黄欧美大片| 99精品国产视频| 精品免费视频.| 亚洲卡通欧美制服中文| 国产伦精品一区二区三区免费| 久久久久久久久蜜桃| 一区二区在线观看视频| 国产一区美女在线| 日韩一区二区在线免费观看| 亚洲黄一区二区三区| 丁香六月综合激情| 精品99999| 激情深爱一区二区| 91精品欧美一区二区三区综合在 | 国产一区二区0| 色婷婷激情久久| 国产午夜精品久久久久久久| 秋霞成人午夜伦在线观看| 欧美在线视频日韩| 亚洲欧洲日韩综合一区二区| 国产一区二区在线影院| 日韩丝袜美女视频| 午夜久久久影院| 精品视频色一区| 亚洲国产aⅴ成人精品无吗| 91视频在线观看免费| 国产精品久久久久婷婷 | 成人午夜电影网站| 久久精品欧美日韩精品| 国产美女一区二区| 精品成人在线观看| 美美哒免费高清在线观看视频一区二区| 色94色欧美sute亚洲13| 一区二区三区小说| 一本高清dvd不卡在线观看| 中文字幕一区二区三区四区不卡 | 久久99国产精品免费网站| 51久久夜色精品国产麻豆| 亚洲午夜久久久久| 欧美剧情片在线观看| 日韩国产一二三区| 91精品蜜臀在线一区尤物| 麻豆精品在线播放| 久久精品欧美日韩精品| www.欧美.com| 亚洲综合色成人| 3d动漫精品啪啪一区二区竹菊| 日本视频免费一区| 久久久精品免费网站| 成人少妇影院yyyy| 中文字幕一区免费在线观看| 色狠狠一区二区| 亚洲国产婷婷综合在线精品| 色婷婷综合视频在线观看| 亚洲国产视频一区二区| 欧美日本不卡视频| 麻豆精品在线播放| 欧美精品一区二区三区在线播放 | 欧美激情一区二区三区不卡 | 精品久久久久久亚洲综合网| 国产盗摄一区二区| 精品免费视频.| 99re这里都是精品| 天天色天天爱天天射综合| 91精品在线免费| 成人精品高清在线| 亚洲小说欧美激情另类| 日韩一区二区免费电影| 丁香婷婷综合激情五月色|