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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 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对白在线观看九色| 成人黄色小视频| 久久精品亚洲国产奇米99| 国产精品资源在线看| 日韩色在线观看| 极品尤物av久久免费看| 久久婷婷久久一区二区三区| 国产精品白丝jk黑袜喷水| 国产精品欧美一级免费| 色综合天天综合在线视频| 国产精品免费视频一区| 在线观看国产91| 亚洲乱码精品一二三四区日韩在线| 成人免费看视频| 亚洲欧美韩国综合色| 欧美日本一道本在线视频| 日本大胆欧美人术艺术动态| 久久久久久麻豆| 91在线视频观看| 亚欧色一区w666天堂| 精品国产制服丝袜高跟| 99视频在线精品| 亚洲成av人片在线观看无码| 日韩一本二本av| 成人精品小蝌蚪| 午夜精品视频在线观看| 久久久久久久久久久久电影| 91亚洲国产成人精品一区二区三| 亚洲.国产.中文慕字在线| 久久人人爽爽爽人久久久| 成人av影视在线观看| 三级久久三级久久| 久久综合久久久久88| 99久久久久久| 蜜臀久久久久久久| 欧美激情艳妇裸体舞| 欧美色综合网站| 国内精品国产成人| 亚洲一区视频在线| 久久蜜臀中文字幕| 在线视频国内一区二区| 久久99热99| 亚洲免费观看高清在线观看| 精品久久久久久久久久久久久久久久久 | 日韩国产一区二| 国产精品免费久久| 日韩精品影音先锋| 日本精品视频一区二区三区| 久久疯狂做爰流白浆xx| 亚洲精品中文字幕乱码三区| 久久久精品黄色| 欧美精品免费视频| 99久久精品国产观看| 国产在线一区观看| 婷婷丁香激情综合| 自拍偷拍国产亚洲| 欧美激情一区二区三区蜜桃视频| 51精品国自产在线| 97久久精品人人澡人人爽| 国产麻豆精品在线| 麻豆精品在线视频| 亚洲自拍与偷拍| 日韩毛片在线免费观看| 国产亚洲精品aa| 日韩一区二区三区高清免费看看| 色域天天综合网| 成人午夜电影久久影院| 久久99精品久久久久久国产越南| 午夜久久福利影院| 午夜视频一区在线观看| 亚洲人精品午夜| 亚洲国产精品二十页| 久久久午夜电影| 欧美大度的电影原声| 欧美日韩aaaaaa| 欧美伊人精品成人久久综合97 | 亚洲欧美日韩国产成人精品影院| 久久九九国产精品| 国产亚洲欧洲一区高清在线观看| 2020国产精品自拍| 久久亚洲精品小早川怜子| 欧美精品一区在线观看| 亚洲精品一区二区三区影院| 精品国产电影一区二区| 久久夜色精品国产噜噜av| 久久精品亚洲一区二区三区浴池| 国产欧美视频一区二区三区| 国产精品天美传媒| 亚洲色图清纯唯美| 亚洲综合999| 偷拍自拍另类欧美| 久久精品72免费观看| 精久久久久久久久久久| 国产精品99久久久久久似苏梦涵| 国产不卡视频一区二区三区| 成人免费高清在线观看| 色综合久久综合网欧美综合网| 色婷婷精品久久二区二区蜜臂av | 久久久久高清精品| 五月婷婷欧美视频| 亚洲乱码精品一二三四区日韩在线 | 不卡电影一区二区三区| 在线一区二区视频| 在线观看免费视频综合| 欧美男同性恋视频网站| 日韩欧美激情一区| 亚洲国产成人自拍| 日韩一区在线看| 亚洲午夜视频在线| 免费在线观看视频一区| 国产一区二区三区久久久| va亚洲va日韩不卡在线观看| 91日韩在线专区| 欧美丰满美乳xxx高潮www| 久久五月婷婷丁香社区| 一二三区精品视频| 极品尤物av久久免费看| 色综合久久88色综合天天6| 欧美一卡二卡在线| 国产精品毛片大码女人| 午夜精品影院在线观看| 岛国av在线一区| 欧美在线小视频| 国产网站一区二区| 亚洲电影一区二区三区| 国产一区二区免费在线| 在线亚洲+欧美+日本专区| 久久综合色综合88| 亚洲国产乱码最新视频| 粉嫩一区二区三区在线看| 欧美另类z0zxhd电影| 国产精品欧美一级免费| 久久99热99| 欧美日韩国产精品自在自线| 欧美国产一区在线| 免费在线观看精品| 欧美探花视频资源| 国产精品丝袜在线| 久久精品噜噜噜成人av农村| 91美女在线观看| 国产视频不卡一区| 天天综合日日夜夜精品| 一本色道久久综合亚洲aⅴ蜜桃| 精品久久五月天| 婷婷激情综合网| 91久久精品一区二区三| 国产精品美女一区二区三区 | 国产制服丝袜一区| 欧美三区免费完整视频在线观看| 国产精品日韩精品欧美在线| 久久99精品久久久久久动态图| 色成人在线视频| 国产精品不卡在线观看| 国产成人午夜精品影院观看视频| 精品国产一区二区精华| 日韩激情视频网站| 欧美色视频一区| 一区二区三区国产精华| 成人黄色在线视频| 国产午夜一区二区三区| 国产精品资源在线看| 久久久久久久综合日本| 国产一区二区三区四区五区美女| 精品久久久久久久久久久久久久久 | 日韩一区二区在线看| 亚洲成人午夜电影| 欧美日韩一区二区三区免费看| 一区二区三区在线播放| 日本道免费精品一区二区三区| 亚洲欧美日韩电影| 在线亚洲一区二区| 一区二区三区在线影院| 色琪琪一区二区三区亚洲区| 亚洲精品伦理在线| 欧美熟乱第一页| 亚洲成a人片在线观看中文| 777午夜精品免费视频| 午夜伦欧美伦电影理论片| 678五月天丁香亚洲综合网| 青青草国产成人99久久| 精品久久国产老人久久综合| 紧缚奴在线一区二区三区| 国产日韩欧美一区二区三区乱码| 成人动漫一区二区三区| 自拍偷拍亚洲综合| 欧美丝袜自拍制服另类| 奇米精品一区二区三区四区 | 91国在线观看| 亚洲午夜在线观看视频在线| 欧美亚洲一区二区在线观看| 日韩精品福利网| 精品国产乱码久久久久久1区2区| 国产成人精品网址| 亚洲黄色小视频| 欧美剧在线免费观看网站| 久久精品99国产精品日本| 中国av一区二区三区| 在线日韩国产精品| 麻豆极品一区二区三区|