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

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

?? pic_playback.c

?? 嵌入式系統(tǒng)下的文件管理處理,和基本圖片jpg格式處理原代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*-------------------------------------------------*
* $RCSfile: pic_playback.c,v $
* $Date: 2007/01/24 13:32:21 $
* $Author: lanzhu $
* $Log: pic_playback.c,v $
* Revision 1.5  2007/01/24 13:32:21  lanzhu
* 進行圖片的TV-OUT 輸出時, 如果圖片超大,進行字模的內存釋放
*
* Revision 1.4  2007/01/21 20:04:30  lanzhu
* 去除打印
*
* Revision 1.3  2007/01/21 09:47:02  lanzhu
* 使圖片在TV 上面等比例顯示
*
* Revision 1.2  2007/01/18 05:40:19  cuining
* 增加對TV_OUT的支持接口函數(shù)
*
* Revision 1.1.1.1  2007/01/17 12:28:43  lanzhu
* 齊蘭柱 準備一個新的代碼分支
*
* Revision 1.4  2007/01/03 06:19:21  cuining
* 圖片播放完畢后,調用SPMP_PicPlayBackEnd();
*
* Revision 1.3  2006/12/18 02:14:27  taiyun
* Modify include filename
*
* Revision 1.2  2006/12/12 01:28:20  lanzhu
* 修改 #include "appCamDsc.h" 所指向的文件
*
* Revision 1.1.1.1  2006/12/05 03:01:16  lanzhu
* no message
*
* Revision 1.1.1.1  2006/12/01 09:49:35  lanzhu
* no message
*
*
*--------------------------------------------------*/

#define DEBUG_TVOUT

#include "SPMP_define.h"

#include <ctype.h>
#include <string.h>

#include "spca_general.h"
#include "sig_api.h"
#include "os_api.h"
#include "hw_disp.h"
#include "gfx_general.h"

#include "dsc_api.h"
#include "system_api.h"
#include "display_api.h"
#include "appGfx.h"
#include "mcatch_cmd.h"
#include "../../include/app/appCamDsc.h"
#include "SysUtility.h"

#include "appdriver.h"

/**********************************************
*
*   圖片文件播放失敗標志  liuying 2006/11/09
*
**********************************************/
#define PIC_PLAY_SUCCESS 0
#define PIC_PLAY_FAIL    1
/**************************************************************************
 *                   G E N E R A L    C O N S T A N T S                   *
 **************************************************************************/
#define LCM_MARK_VALUE	(0xfff8)

#define ENABLE_FONT_RELOAD		(0x01)
#define DISABLE_FONT_RELOAD		(0x00) 

#define JPG_MEM_MAX			(640l*480)

 /**************************************************************************
 *                             M A C R O S                                *
 **************************************************************************/

 /**************************************************************************
 *                         D A T A   T Y P E S                            *
 **************************************************************************/

/**************************************************************************
 *                        G L O B A L   D A T A                           *
 **************************************************************************/

// 設定是否需要進行系統(tǒng)字模數(shù)據(jù)的重新裝載
static UINT16 gReloadFontFlag = 0x00;

// 描述顯示區(qū)域的結構體
static struct PBRect_s DispRect;  
static UINT32 SPMPBGJPGBEENPLAYING = 0;
extern UINT16 pic_play_flag;//liuying added 2006/11/09
 /**************************************************************************
 *                 E X T E R N A L   R E F E R E N C E S                  *
 **************************************************************************/
extern UINT8* gpCamDataRetBuf;

/**************************************************************************
 *               F U N C T I O N   D E C L A R A T I O N S                *
 **************************************************************************/

// 獲取得到的圖片信息的指針
static void * getPlaybackInfoptr( void );

// 計算目標圖片的尺寸
static UINT16 caculate_target_size (UINT16 srcWidth, UINT16 srcHeight,
									UINT16 *ptarWidth, UINT16 *ptarHeight);	
// 計算圖片原點的坐標值
static UINT16 caculate_offset (	UINT16 PicWidth, UINT16 PicHeight, 
							   UINT16 *pXOffSet, UINT16 *pYOffSet);
// 獲得設定的顯示區(qū)域的大小
static UINT16 get_disp_rect_size(UINT16 *pWidth, UINT16 *pHeight);

// 將邏輯坐標值,轉換為物理坐標值
static UINT16 logxy_2_phyxy(UINT16 LogX, UINT16 LogY, 
							UINT16 *pPhyX, UINT16 *pPhyY);

// 判斷文件名的后綴是否與輸入的擴展名一致	
static UINT16 judge_file_ext_name(UINT8 * pFileName, UINT8 * pExtName);

// BMP WBMP PNG 的播放
static UINT16 SPMP_PNGPlayBack(	UINT16 LogXOffset, 
								   UINT16 LogYOffset, 
								   UINT8 *pFileName );

// 設定字模裝載標志
static void set_font_reload_flag( UINT16 flag );
// 獲取字模裝載標志
static UINT16 get_font_reload_flag( void );

/************************************************************************/
/*			設定邏輯窗口上顯示區(qū)域的 原點和邊長
  input:
			x		[in] 區(qū)域原點(左上角) 在邏輯窗口上的 X 坐標值	
			y		[in] 區(qū)域原點(左上角) 在邏輯窗口上的 Y 坐標值	
			width	[in] 區(qū)域在邏輯窗口的寬 
			height	[in] 區(qū)域在邏輯窗口的高 
  output:
			0 成功, 非0值失敗
  func:
			設定需要顯示的區(qū)域的原點值 和邊長值
  status:	
                                                                        */
/************************************************************************/
UINT16 SPMP_JPGSetRect(UINT16 x, UINT16 y, 
						   UINT16 width, UINT16 height)
{

/*
	UINT16 Pannel_X,Pannel_Y;

	// 獲得本產品的屏幕尺寸( 物理尺寸值 )
	SPMP_GetPannelSize(&Pannel_X, &Pannel_Y);

	sio_printf("\r\n  PANNEL_X = %d Y = %d\r\n", Pannel_X, Pannel_Y);	

	// !!! 注意此處的判斷 
	if ( ((x+width)>Pannel_Y) 
		|| ((y+height)>Pannel_X) 
		|| !width || !height ) 
	{
		ERROR_OUTPUT(("hi man SetRect err!\r\n"));
		ERROR_STOP;
		return APP_DRV_ERR;
	}

	// 將輸入的參數(shù)記錄到全局變量中
	DispRect.x		= x;
	DispRect.y		= y;
	DispRect.width	= width;
	DispRect.height	= height;
 */

	// 返回成功
	return APP_DRV_OK;
}

/*
 *	
 */
UINT16 SPMP_JPGSetRectEx(UINT16 x, UINT16 y, 
						   UINT16 width, UINT16 height)
{

	UINT16 Pannel_X,Pannel_Y;

#ifdef QLZ_DEBUG_00
	sio_printf("\r\n >>>>>> JPGSetRectEx \r\n");
#endif

	// 獲得本產品的屏幕尺寸( 物理尺寸值 )
	SPMP_GetPannelSize(&Pannel_X, &Pannel_Y);

#ifdef QLZ_DEBUG_00
	sio_printf(" Pannel 寬 = %d  高 = %d\r\n", Pannel_X, Pannel_Y);	
#endif

	// 如果是設置回LCM界面, 并且需要進行字模的裝載 
	if(	(SPMP_PANNEL_Y == width) && ( SPMP_PANNEL_X == height) )
	{
		if ( get_font_reload_flag() ) 
		{
			set_font_reload_flag( DISABLE_FONT_RELOAD );
			MWLoadExtraFont( );			
#ifdef QLZ_DEBUG_00
	sio_printf(" -------- reload FONT OK!!! \r\n");	
#endif			
		}
	}

	// 將輸入的參數(shù)記錄到全局變量中
	DispRect.x		= x;
	DispRect.y		= y;
	DispRect.width	= width;
	DispRect.height	= height;

#ifdef QLZ_DEBUG_00
	sio_printf("\r\n <<<<<<< JPGSetRectEx \r\n");	
#endif

	// 返回成功
	return APP_DRV_OK;
}

/************************************************************************/
/*		將一張JPG 圖片全屏播放到屏幕上
  input:
			pFileName	[in]	JPG 文件名字符串的指針
  output:
			0 成功, 非0值失敗  
  func:	
			自動進行目標的 X Y 邊長的調整, 和圖片原點坐標值的計算
  note:	
			使用此函數(shù)之前,一定要調用 GFXModeSet 
                                                                        */
/************************************************************************/
UINT16 SPMP_JPGPlayBack(UINT8 * pFileName)
{
	UINT16 err;
	UINT16 tarWidth, tarHeight;	
	UINT16 tmp_Width, tmp_Height;	

	UINT16 x_offset, y_offset;
	dscPbInfoContext_t	*pInfo;
	camDscPbParam_t pbAttr;
	
	// 判斷輸入的參數(shù)是否正確	
	if ((NULL == pFileName) || !strlen(pFileName) ) {
		ERROR_OUTPUT(("jpg pk err1\r\n"));
		return APP_DRV_ERR;
	}

#ifdef QLZ_DEBUG_00
	sio_printf("\r\n >>> JPG playback fname = %s\r\n", pFileName);
#endif

	// 將輸入的文件名設定到系統(tǒng)中
	SPMP_sysFileNamePtrSet(MCATCH_CMD_CAM_GROUP, pFileName);

	// 獲得JPG 圖片的信息	
	err = SPMP_SendSignal((UINT16)MCATCH_CMD_IMAGE_INFO_GET, (UINT8 *)NULL, (UINT16)NULL);		
	// 判斷是否出錯
	if ( err ) {
		pic_play_flag = PIC_PLAY_FAIL;//liuying added 2006/11/09
		return pic_play_flag;
	}

	// 返回信息的地址指針
	pInfo = (dscPbInfoContext_t	*) getPlaybackInfoptr();

#ifdef QLZ_DEBUG_00
	sio_printf("\r\n 圖片信息 width = %d height = %d\r\n", pInfo->width, pInfo->height);	
#endif

	if( (MCATCH_TV_OUT_NTSC == dispTargetGet()) 
		|| (MCATCH_TV_OUT_PAL== dispTargetGet()) )
	{
		tmp_Width = pInfo->width;
		tmp_Height = pInfo->height;		
		pbAttr.rotate			= MCATCH_ROTATE_NONE;		
	}		
	else{
		// LCM 的狀況, 需要進行選著
		tmp_Width = pInfo->height;
		tmp_Height = pInfo->width;
		#if ROTATE_DEASIL	/*順時針旋轉90度*/
		pbAttr.rotate			= MCATCH_ROTATE_90;
		#else			/*逆時針旋轉90度*/
		pbAttr.rotate			= MCATCH_ROTATE_270;
		#endif	
	}	

	// 計算目標的寬高值
	caculate_target_size(tmp_Width, tmp_Height, &tarWidth, &tarHeight);		
	// 計算 圖片原點的位置值	
	caculate_offset(tarWidth, tarHeight, &x_offset, &y_offset);

#ifdef QLZ_DEBUG_00
	sio_printf(" 計算后的目標 W = %d H = %d\r\n", tarWidth, tarHeight);	
	sio_printf(" 計算后的偏移 X = %d Y = %d\r\n", x_offset, y_offset);	
#endif

	// 源圖片的信息使用獲得的結果	
	pbAttr.srcXOffset	= 0x00;
	pbAttr.srcYOffset	= 0x00;
	pbAttr.srcWidth		= pInfo->width;
	pbAttr.srcHeight	= pInfo->height;

	pbAttr.tarXOffset		= x_offset;
	pbAttr.tarYOffset		= y_offset;
	pbAttr.tarWidth			= tarWidth;
	pbAttr.tarHeight		= tarHeight;

	// 以下使用固定的參數(shù)
	//pbAttr.rotate			 = MCATCH_ROTATE_270;
	pbAttr.effect			 = 0;
	pbAttr.thumbSelected	 = 0;
	pbAttr.zoomStep          = 10;
	pbAttr.panStep           = 10;
	pbAttr.isShow            = 1;
	pbAttr.optStorage        = MCATCH_DATA_DIRECTION_CARD;     	


#ifdef QLZ_DEBUG_00
	sio_printf("\r\n --- 進行圖片的顯示\r\n");	
#endif

	
	// 判斷是否需要將字模數(shù)據(jù),進行釋放
	{
		UINT32 i;
		i = tarWidth;
		i *= tarHeight;

		if ( (i>JPG_MEM_MAX) && (!get_font_reload_flag()) ) 
		{
			
#ifdef QLZ_DEBUG_00
	sio_printf("\r\n --- 將字模數(shù)據(jù)進行釋放!!!\r\n");	
#endif			
			MWUnLoadExtraFont();	// 將字模釋放,增加系統(tǒng)內存					
			set_font_reload_flag( ENABLE_FONT_RELOAD );	// 將字模重新裝載標志置1			
		}
	}

	// 進行圖片的播放 
	err = SPMP_SendSignal((UINT16)MCATCH_CMD_PLAYBACK_START, (UINT8 *)&pbAttr, (UINT16)sizeof(pbAttr));
	if (err) 
	{
#ifdef QLZ_DEBUG_00
		sio_printf("\r\n --- 圖片顯示出錯 err = 0x%x\r\n", err);	
#endif
		pic_play_flag = PIC_PLAY_FAIL;//liuying added 2006/11/09
		return pic_play_flag;
	}

#ifdef QLZ_DEBUG_00
	sio_printf("\r\n --- 圖片顯示成功!\r\n");	
#endif
	
	SPMPBGJPGBEENPLAYING = 1;
	pic_play_flag = PIC_PLAY_SUCCESS;//liuying added 2006/11/27
	SPMP_PicPlayBackEnd();

	// 返回成功
	return APP_DRV_OK;
}

/************************************************************************/
/* BMP WBMP PNG GIF 的播放

  input:
		  LogXOffset	[in]	圖片原點的 邏輯X 坐標值
		  LogYOffset	[in]	圖片原點的 邏輯Y 坐標值	
		  pFileName	[in]	圖片文件名字符串
  output:
		  0 成功, 非0值失敗 
  func:
		  
                                                                        */
/************************************************************************/
UINT16 SPMP_PicPlayBack(UINT16 LogXOffset, UINT16 LogYOffset,UINT8 *pFileName )
{
	// 判斷是否為 GIF 文件
	if ( !judge_file_ext_name(pFileName, "GIF") ) 
	{
		return	SPMP_GIFPlayBack(LogXOffset, LogYOffset, pFileName);
	}

	return	SPMP_PNGPlayBack(LogXOffset, LogYOffset, pFileName);
}


/************************************************************************/
/*	輸入一個文件名字符串,將此圖片播放到屏幕上
  input:
			LogXOffset	[in]	圖片原點的 邏輯X 坐標值
			LogYOffset	[in]	圖片原點的 邏輯Y 坐標值	
			pFileName	[in]	圖片文件名字符串
  output:
			0 成功, 非0值失敗  
  func:
  note:
                                                                        */
/************************************************************************/
static UINT16 SPMP_PNGPlayBack(	UINT16 LogXOffset, 
									UINT16 LogYOffset, 
									UINT8 *pFileName )
{
	UINT16 err;
	dscPbInfoContext_t	*pInfo;	
	UINT16 tarXOffset, tarYoffset;
	camDscPbParam_t pbAttr;

	// 將邏輯坐標值轉換為物理坐標值	
	logxy_2_phyxy(LogXOffset, LogYOffset, &tarXOffset, &tarYoffset);
	// step 2: set file name to system   ( MCATCH_CMD_CAM_GROUP)
	SPMP_sysFileNamePtrSet(MCATCH_CMD_CAM_GROUP, pFileName);
	
	// 獲得圖片的信息	
	err = SPMP_SendSignal((UINT16)MCATCH_CMD_IMAGE_INFO_GET, (UINT8 *)NULL, (UINT16)NULL);
	if ( err) {
		ERROR_REPORT;
		return err;
	}


	// 返回信息的地址指針
	pInfo = (dscPbInfoContext_t	*) getPlaybackInfoptr();	

	DEBUG_OUTPUT(("width %d hight %d \r\n", pInfo->width, pInfo->height));

	// 源圖片的信息使用獲得的結果	
	pbAttr.srcXOffset	= 0x00;
	pbAttr.srcYOffset	= 0x00;
	pbAttr.srcWidth		= pInfo->width;
	pbAttr.srcHeight	= pInfo->height;
	
	// 目標圖片的參數(shù),使用計算后的結果
	pbAttr.tarXOffset		= tarXOffset;
	pbAttr.tarYOffset		= tarYoffset;
	pbAttr.tarWidth			= 0;
	pbAttr.tarHeight		= 0;	

	// 以下使用固定的參數(shù)
	pbAttr.rotate			 = 0;
	pbAttr.effect			 = 0;
	pbAttr.thumbSelected	 = 0;
	pbAttr.zoomStep          = 0;
	pbAttr.panStep           = 0;
	pbAttr.isShow            = 1;
	pbAttr.optStorage        = MCATCH_DATA_DIRECTION_CARD;     	
	
	// 進行圖片的播放 
	err = SPMP_SendSignal((UINT16)MCATCH_CMD_PLAYBACK_START, 
						(UINT8 *)&pbAttr,
						(UINT16)sizeof(pbAttr));

	if ( err) {
		ERROR_REPORT;
		return err;
	}

	// 返回成功
	return err;
}

/************************************************************************/
/*	輸入一個文件名字符串,將此圖片播放到屏幕上
  input:
			LogXOffset	[in]	圖片原點的 邏輯X 坐標值
			LogYOffset	[in]	圖片原點的 邏輯Y 坐標值	
			pFileName	[in]	圖片文件名字符串
  output:
			0 成功, 非0值失敗  
  func:
  note:
																		*/
/************************************************************************/
UINT16 SPMP_GIFPlayBack(UINT16 LogXOffset, 
							UINT16 LogYOffset, 
							UINT8 *pFileName )

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
九色|91porny| 五月天久久比比资源色| 久久精品欧美日韩精品 | 久久综合av免费| 国产精品久久一卡二卡| 一区二区三区四区高清精品免费观看| 亚洲一区中文日韩| 乱一区二区av| 91色乱码一区二区三区| 欧美日韩国产电影| 国产清纯白嫩初高生在线观看91 | 亚洲一区二区综合| 精品一区二区三区日韩| 99精品国产91久久久久久| 在线综合视频播放| 亚洲视频在线观看三级| 免费观看一级特黄欧美大片| 91色综合久久久久婷婷| 精品国产网站在线观看| 亚洲综合图片区| 成人少妇影院yyyy| 久久久久久久av麻豆果冻| 亚洲国产精品一区二区www在线| 精品一区二区三区在线视频| 欧美一区二区三区色| 亚洲美女在线一区| 91在线观看一区二区| 2021国产精品久久精品| 秋霞电影网一区二区| 91久久精品一区二区三区| 国产欧美一区二区精品婷婷 | 欧美日韩一区二区三区不卡 | 99久久免费视频.com| 国产日韩欧美精品电影三级在线| 久久国产精品免费| 日韩欧美国产午夜精品| 美女视频黄久久| 日韩一级在线观看| 国产精品主播直播| 国产精品免费久久| 99免费精品在线| 亚洲综合清纯丝袜自拍| 欧美亚洲国产一区在线观看网站| 亚洲一区二区在线播放相泽| 欧美日韩国产精选| 国产美女久久久久| 亚洲人成网站色在线观看 | 亚洲欧美经典视频| 欧美一区二区三区不卡| 国产高清精品在线| 中文字幕一区二区不卡| 制服丝袜中文字幕亚洲| 成人一区在线观看| 午夜av电影一区| 国产日本亚洲高清| 欧美人狂配大交3d怪物一区| 国产成人8x视频一区二区| 一区二区三区在线看| 欧美成人a视频| 欧美午夜精品久久久| 国模一区二区三区白浆| 亚洲一区二区三区视频在线播放 | 91啪亚洲精品| 国产一区二区三区久久久| 亚洲成人自拍偷拍| 亚洲精品日日夜夜| 中文字幕免费在线观看视频一区| 欧美亚洲一区三区| 91免费看`日韩一区二区| 国产99精品视频| 国产一区激情在线| 裸体一区二区三区| 奇米精品一区二区三区四区| 一卡二卡三卡日韩欧美| 中文字幕一区二区三区色视频| 日韩欧美aaaaaa| 日韩一区二区三| 欧美一级电影网站| 日韩欧美在线综合网| 欧美电影免费观看高清完整版在线 | 久久国产成人午夜av影院| 亚洲成人动漫精品| 日韩成人午夜电影| 蜜桃av一区二区在线观看 | 欧美日韩第一区日日骚| 色婷婷av一区二区三区大白胸| 一本一本久久a久久精品综合麻豆| 成人av在线网站| 91麻豆6部合集magnet| 在线观看亚洲一区| 精品欧美久久久| 国产日韩欧美亚洲| 亚洲一区二区精品视频| 日韩国产在线观看| 精品制服美女久久| 成人激情综合网站| 欧美亚洲一区二区三区四区| 精品国一区二区三区| 国产精品日日摸夜夜摸av| 亚洲18色成人| 欧美亚洲图片小说| 欧美精品久久99久久在免费线 | 在线观看区一区二| 精品理论电影在线| 亚洲精品国产视频| 国产91在线观看| 制服丝袜在线91| 亚洲自拍偷拍欧美| 9色porny自拍视频一区二区| 欧美三区在线视频| 亚洲裸体xxx| 国产一区二区三区久久悠悠色av| 精品视频在线免费观看| 久久综合九色欧美综合狠狠 | 久久亚洲欧美国产精品乐播| 亚洲影视在线观看| 99免费精品视频| 欧美激情中文不卡| 国产一区二区在线视频| 欧美乱妇20p| 午夜视频一区二区三区| 色婷婷av一区二区三区大白胸| 国产精品素人视频| 激情综合色丁香一区二区| 日韩欧美久久一区| 久草中文综合在线| 精品免费99久久| 国产精品综合一区二区| 久久久久久久久久美女| 国产精品中文欧美| 亚洲色图视频网站| 在线视频国内一区二区| 天天做天天摸天天爽国产一区| 欧美午夜一区二区| 日韩精品亚洲一区| 久久免费的精品国产v∧| 高清shemale亚洲人妖| 亚洲人成在线观看一区二区| 欧美色手机在线观看| 视频一区中文字幕| 国产精品无遮挡| 日本精品免费观看高清观看| 日韩av不卡一区二区| 久久久国产精华| 欧美性视频一区二区三区| 精品一区二区在线播放| 亚洲免费毛片网站| 精品伦理精品一区| 欧美日韩在线免费视频| 国产精品综合在线视频| 日韩国产在线观看一区| 中文字幕在线视频一区| 欧美卡1卡2卡| 一本到三区不卡视频| 韩国女主播成人在线| 亚洲国产成人va在线观看天堂| 国产三级精品视频| 欧美日韩中文精品| 91成人免费网站| 91在线观看美女| 99久久精品国产一区| 国产一区二区三区免费看| 亚洲成人免费电影| 亚洲午夜免费视频| 亚洲精品v日韩精品| 亚洲同性同志一二三专区| 国产精品三级视频| 欧美国产成人精品| 亚洲国产成人在线| 国产欧美一区二区在线| 伊人夜夜躁av伊人久久| 国产精品久久精品日日| 国产日韩欧美不卡在线| 亚洲欧洲成人自拍| 国产精品福利在线播放| 国产精品福利一区| 亚洲欧美乱综合| 亚洲成人精品在线观看| 韩国av一区二区三区四区| 国产成人av自拍| 色嗨嗨av一区二区三区| 欧美色倩网站大全免费| 日韩一区二区在线播放| 久久久国产精品不卡| 一区二区三区在线免费播放| 日本亚洲最大的色成网站www| 日韩福利电影在线| 国产福利91精品| 欧美亚洲国产一区在线观看网站| 国产成人鲁色资源国产91色综| 在线观看不卡一区| 欧美精品一区在线观看| 一区二区三区在线播放| 久久成人18免费观看| av色综合久久天堂av综合| 欧美一区二区三区四区高清| 亚洲人吸女人奶水| 国产美女娇喘av呻吟久久| 在线观看亚洲精品| 国产精品成人免费|