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

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

?? pic_playback.c

?? 嵌入式系統下的文件管理處理,和基本圖片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的支持接口函數
*
* 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                           *
 **************************************************************************/

// 設定是否需要進行系統字模數據的重新裝載
static UINT16 gReloadFontFlag = 0x00;

// 描述顯示區域的結構體
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);
// 獲得設定的顯示區域的大小
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 );

/************************************************************************/
/*			設定邏輯窗口上顯示區域的 原點和邊長
  input:
			x		[in] 區域原點(左上角) 在邏輯窗口上的 X 坐標值	
			y		[in] 區域原點(左上角) 在邏輯窗口上的 Y 坐標值	
			width	[in] 區域在邏輯窗口的寬 
			height	[in] 區域在邏輯窗口的高 
  output:
			0 成功, 非0值失敗
  func:
			設定需要顯示的區域的原點值 和邊長值
  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;
	}

	// 將輸入的參數記錄到全局變量中
	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			
		}
	}

	// 將輸入的參數記錄到全局變量中
	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:	
			使用此函數之前,一定要調用 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;
	
	// 判斷輸入的參數是否正確	
	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

	// 將輸入的文件名設定到系統中
	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;

	// 以下使用固定的參數
	//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

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

		if ( (i>JPG_MEM_MAX) && (!get_font_reload_flag()) ) 
		{
			
#ifdef QLZ_DEBUG_00
	sio_printf("\r\n --- 將字模數據進行釋放!!!\r\n");	
#endif			
			MWUnLoadExtraFont();	// 將字模釋放,增加系統內存					
			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;
	
	// 目標圖片的參數,使用計算后的結果
	pbAttr.tarXOffset		= tarXOffset;
	pbAttr.tarYOffset		= tarYoffset;
	pbAttr.tarWidth			= 0;
	pbAttr.tarHeight		= 0;	

	// 以下使用固定的參數
	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一区二区三区免费野_久草精品视频
午夜久久久久久久久| 国产女人aaa级久久久级 | 中文字幕精品一区二区三区精品| 日产国产高清一区二区三区| 欧美视频三区在线播放| 亚洲电影第三页| 欧美一区二区三区四区在线观看| 日韩不卡一二三区| 日韩精品在线看片z| 国内精品久久久久影院一蜜桃| 26uuu亚洲| 成人av午夜电影| 亚洲一区二区精品视频| 在线成人av影院| 狠狠色丁香久久婷婷综合_中| 国产欧美一区二区三区网站| 91在线观看下载| 偷拍亚洲欧洲综合| 精品伦理精品一区| 91在线精品一区二区| 亚洲成人7777| 国产欧美日韩不卡免费| 日本乱人伦aⅴ精品| 日韩成人午夜精品| 国产欧美视频在线观看| 91麻豆国产福利在线观看| 午夜亚洲国产au精品一区二区| 日韩女同互慰一区二区| 成人a免费在线看| 亚洲成人tv网| 欧美韩国日本一区| 欧美日韩中文一区| 国产伦精品一区二区三区视频青涩| 亚洲欧洲av在线| 日韩一区二区三区电影在线观看| 丁香亚洲综合激情啪啪综合| 亚洲www啪成人一区二区麻豆| 欧美精品一区二区三区视频| 成人精品高清在线| 日韩国产欧美在线视频| 国产精品美日韩| 欧美一级爆毛片| 一本在线高清不卡dvd| 精品在线免费视频| 亚洲国产一二三| 国产日韩欧美a| 69p69国产精品| 在线看国产一区| 成人一区二区三区视频| 久久精品国产精品亚洲红杏| 夜夜操天天操亚洲| 国产女人aaa级久久久级| 91精品国产综合久久精品图片| www.欧美.com| 国产精品一区二区久久精品爱涩 | 亚洲国产激情av| 制服丝袜中文字幕一区| 一本一道久久a久久精品| 国产精品一线二线三线精华| 日韩精品欧美精品| 亚洲视频在线一区二区| 久久久青草青青国产亚洲免观| 欧美精品 日韩| 色综合天天性综合| 国产成人综合网站| 麻豆成人久久精品二区三区红 | 首页综合国产亚洲丝袜| 国产精品毛片a∨一区二区三区| 日韩色在线观看| 欧美精品久久天天躁| 色噜噜狠狠色综合中国| 99视频精品免费视频| 成人三级伦理片| 成人激情小说乱人伦| 成人免费va视频| 国产成人午夜片在线观看高清观看 | 久久精品国产精品青草| 五月综合激情婷婷六月色窝| 亚洲第一搞黄网站| 一区二区三区免费| 亚洲柠檬福利资源导航| 国产精品久久久久精k8| 欧美激情一区二区三区不卡| 国产亚洲欧美在线| 国产欧美日韩三区| 中文字幕av不卡| 中文字幕五月欧美| 亚洲品质自拍视频| 日韩美女久久久| 亚洲影视在线播放| 亚洲一二三区在线观看| 亚洲成在人线免费| 免费观看一级欧美片| 免费观看日韩电影| 国产一区二区精品久久99| 国产一区二区三区四区五区入口| 国产福利一区二区三区视频在线| 国产成人a级片| 97精品久久久久中文字幕| 91蜜桃网址入口| 欧美日韩性生活| 精品久久久三级丝袜| www激情久久| 中文字幕亚洲成人| 亚洲福利一区二区三区| 日本不卡在线视频| 国产成人在线观看| 91久久精品网| 精品国精品国产尤物美女| 日本一区二区三级电影在线观看| ...xxx性欧美| 日本不卡不码高清免费观看| 国产精品69久久久久水密桃| 日本二三区不卡| 日韩一区国产二区欧美三区| 国产网站一区二区| 一区二区三区欧美| 黄一区二区三区| 日本精品视频一区二区三区| 日韩精品一区二区三区老鸭窝| 国产日韩欧美亚洲| 图片区小说区区亚洲影院| 国产激情精品久久久第一区二区| 99精品一区二区三区| 制服视频三区第一页精品| 国产午夜亚洲精品不卡| 亚洲国产综合91精品麻豆| 久色婷婷小香蕉久久| 色婷婷亚洲综合| 久久久久久黄色| 视频在线观看91| 成人av在线一区二区三区| 91精品久久久久久久久99蜜臂| 国产精品拍天天在线| 日韩精品欧美精品| 91免费观看视频| 国产色婷婷亚洲99精品小说| 午夜一区二区三区在线观看| 成人国产在线观看| 欧美大白屁股肥臀xxxxxx| 亚洲免费av高清| 国产成人啪免费观看软件| 在线看不卡av| 亚洲欧洲韩国日本视频| 国产在线精品一区二区不卡了| 欧美丝袜第三区| 日韩理论片中文av| 国产中文一区二区三区| 91 com成人网| 亚洲在线视频免费观看| 99久久精品免费看国产 | 国产激情精品久久久第一区二区| 欧美精品日韩一本| 亚洲免费在线电影| 成人av网站在线观看免费| 26uuu另类欧美亚洲曰本| 青青青伊人色综合久久| 欧美性猛交xxxxxxxx| 亚洲欧美日韩久久| 成人av在线播放网址| 亚洲国产精品国自产拍av| 精品一区二区三区欧美| 91麻豆精品国产自产在线观看一区| 亚洲影视资源网| 欧美亚洲日本国产| 亚洲五码中文字幕| 欧美三区免费完整视频在线观看| 亚洲靠逼com| 色94色欧美sute亚洲线路一久 | 国产91精品免费| www久久精品| 国产精品一区二区久激情瑜伽| 久久久www成人免费无遮挡大片| 精久久久久久久久久久| 精品欧美黑人一区二区三区| 韩国精品主播一区二区在线观看 | 爽好久久久欧美精品| 欧美日韩夫妻久久| 亚洲va欧美va人人爽| 欧美日韩一区在线观看| 亚洲成人免费av| 欧美不卡在线视频| 国产乱码精品一品二品| 国产精品网站在线播放| av电影天堂一区二区在线观看| 国产精品成人网| 在线看一区二区| 琪琪久久久久日韩精品| 日韩欧美激情在线| 国产伦理精品不卡| 国产精品美女久久久久久 | 国产一区欧美日韩| 国产亚洲美州欧州综合国| 成人三级在线视频| 一区二区三区中文字幕在线观看| 欧美网站一区二区| 日本成人中文字幕| 国产三级三级三级精品8ⅰ区| 91视频你懂的| 青青草国产精品97视觉盛宴|