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

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

?? yuvviewerdlg.cpp

?? 軟件用來觀測和比較源yuv視頻序列
?? CPP
?? 第 1 頁 / 共 2 頁
字號:

/************************************************************************
 *
 *  Ye-Kui Wang       wyk@ieee.org
 *  Juan-Juan Jiang   juanjuan_j@hotmail.com
 *  
 *  March 14, 2002
 *
 ************************************************************************/

/*
 * Disclaimer of Warranty
 *
 * These software programs are available to the user without any
 * license fee or royalty on an "as is" basis.  The developers disclaim 
 * any and all warranties, whether express, implied, or statuary, including 
 * any implied warranties or merchantability or of fitness for a particular 
 * purpose.  In no event shall the copyright-holder be liable for any incidental,
 * punitive, or consequential damages of any kind whatsoever arising from 
 * the use of these programs.
 *
 * This disclaimer of warranty extends to the user of these programs
 * and user's customers, employees, agents, transferees, successors,
 * and assigns.
 *
 * The developers does not represent or warrant that the programs furnished 
 * hereunder are free of infringement of any third-party patents.
 *
 * */


// YUVviewerDlg.cpp : implementation file
//

#include "stdafx.h"
#include "YUVviewer.h"
#include "ChildWindow.h"
#include "YUVviewerDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define WM_DRAG_FILE					WM_USER+10

BOOL g_bPlay;
int g_nFrameNumber = 0;
int g_nOldFrameNumber = -1000; 
BOOL g_Play = true;

int g_nStartFrame = 0;
int g_nEndFrame = 10000;
int g_nCurrentFrame = 0; 
BOOL g_bReversePlay = FALSE;

void getSeqName(char *inseqpath, char *seqname);

//int nImgWidth, nImgHeight;
UINT PlayVideo( LPVOID pParam )
{
	int i;//,j;

	BOOL bPlay = g_bPlay;
	BOOL bEof = FALSE;

	CYUVviewerDlg *pWin = (CYUVviewerDlg *)pParam;
	UINT picsize = pWin->m_nWidth*pWin->m_nHeight;
	int timespan = 1000/atoi(pWin->m_sFrameRate);
	
	if(g_nCurrentFrame < g_nStartFrame) g_nCurrentFrame = g_nStartFrame;
	if(g_nCurrentFrame > g_nEndFrame) g_nCurrentFrame = g_nEndFrame;

	for(i=0; i<pWin->m_iCount; i++)
	{
		pWin->m_pFile[i]->Seek(g_nCurrentFrame*picsize*3/2, SEEK_SET);
		pWin->m_pWnd[i]->nPicShowOrder = g_nCurrentFrame;
	}
	
	HANDLE hPlayTemp1 = OpenMutex(MUTEX_ALL_ACCESS,FALSE,"Play");
	
	while(g_nCurrentFrame >= g_nStartFrame && g_nCurrentFrame <= g_nEndFrame && !bEof)
	{
		DWORD t2=GetTickCount();
		g_nFrameNumber = g_nCurrentFrame;//j;
 
		if ( WAIT_OBJECT_0 == WaitForSingleObject(hPlayTemp1,INFINITE) )
			ReleaseMutex( hPlayTemp1 );
		
		for(i=0; i<pWin->m_iCount; i++)
		{
			pWin->m_pFile[i]->Seek(g_nCurrentFrame*picsize*3/2, SEEK_SET);

			if(picsize != pWin->m_pFile[i]->Read(pWin->m_pWnd[i]->Y,picsize))
			{
				AfxMessageBox("Get to end of file");
				bEof = TRUE;
				break;
			}
			if(1)//bColorImage) 
			{
				if(picsize/4 != pWin->m_pFile[i]->Read(pWin->m_pWnd[i]->Cb,picsize/4))
				{
					AfxMessageBox("Get to end of file");
					bEof = TRUE;
					break;
				}
				if(picsize/4 != pWin->m_pFile[i]->Read(pWin->m_pWnd[i]->Cr,picsize/4))
				{
					AfxMessageBox("Get to end of file");
					bEof = TRUE;
					break;
				}
			}

			pWin->m_pWnd[i]->InvalidateRect (NULL,FALSE);
			pWin->m_pWnd[i]->UpdateWindow ();
			pWin->m_pWnd[i]->nPicShowOrder=g_nCurrentFrame;
		}

		if(g_bReversePlay == FALSE)
			g_nCurrentFrame++;
		else 
			g_nCurrentFrame--;

		int t1=GetTickCount()-t2;
		if(t1 < timespan) 
			Sleep(timespan - t1); // sleep time in milliseconds
	}
	
	pWin->m_pWinThread = NULL;
	AfxEndThread(0);

	return 1;

}

void CYUVviewerDlg::OnOrder() 
{
	if(g_bReversePlay == FALSE)
	{
		m_buttonOrder.SetWindowText("Forward");
		g_bReversePlay = TRUE;
	}
	else
	{
		m_buttonOrder.SetWindowText("Backward");
		g_bReversePlay = FALSE;
	}
}

void CYUVviewerDlg::OnPauseplay() 
{

	UpdateData(TRUE);

	g_nStartFrame = m_nFrameFrom;
	if(m_nFrameTo != 0) g_nEndFrame = m_nFrameTo;
	else g_nEndFrame = 10000;

	// create a new thread
	if (m_bPlay)
	{
		m_buttonPausePlay.SetWindowText("Pause");
		m_bPlay = false;
		g_Play = true;
	}
	else
	{
		m_buttonPausePlay.SetWindowText("Play");
		m_bPlay = true;
	}

	char chTitle[10];
	m_buttonPausePlay.GetWindowText(chTitle,10);
	hPlayTemp = NULL;
	hPlayTemp=OpenMutex(MUTEX_ALL_ACCESS,FALSE,"Play");
	if ( strcmp( chTitle,"Play" ) == 0 )
	{
		WaitForSingleObject( hPlayTemp,0);
		
	}
	else
		ReleaseMutex(hPlayTemp);

	if ( m_pWinThread == NULL)
		m_pWinThread = AfxBeginThread( (AFX_THREADPROC)PlayVideo , (void*)this);


}

void CYUVviewerDlg::OnCloseall() 
{
	int i;

	for(i=0; i<m_iCount; i++)
	{
		if(m_pFile[i])
			m_pFile[i]->Close();
		if(m_pWnd[i])
			m_pWnd[i]->DestroyWindow();

		m_pFile[i]=NULL;
	}
	m_iCount = 0;

	g_nFrameNumber = 0;
	g_nOldFrameNumber = -1000; 
	g_Play = true;

	g_nStartFrame = 0;
	g_nEndFrame = 10000;
	g_nCurrentFrame = 0; 
	g_bReversePlay = FALSE;
}

void CYUVviewerDlg::OnCancel() 
{
	int i;

	for(i=0; i<m_iCount; i++)
	{
		if(m_pFile[i])
			m_pFile[i]->Close();
		if(m_pWnd[i])
			m_pWnd[i]->DestroyWindow();
	}
	
	CDialog::OnCancel();
}

int CYUVviewerDlg::OnOpenfile() 
{
	UpdateData(TRUE);

	UINT picsize = m_nWidth*m_nHeight;

	m_pFile[m_iCount] = new CFile();

	char BASED_CODE szFilter[] = "All Files (*.*)|*.*||";
	CFileDialog dlg( TRUE, "yuv", NULL, OFN_HIDEREADONLY,szFilter);
	if(dlg.DoModal()!=IDOK) return 0; 
	
	sprintf( inSeqence[m_iCount], "%s", dlg.GetPathName() );
	getSeqName(inSeqence[m_iCount], inSeqName[m_iCount]);


	if(!m_pFile[m_iCount]->Open(inSeqence[m_iCount], CFile::modeRead )) 
	{
		AfxMessageBox("Can't open input file");
		return 0;
	}
/*
char *oneframe;
CFile outf;
outf.Open("right.yuv", CFile::modeCreate | CFile::modeWrite);
//  if(m_nFrameSize == 0) // 0: CIF, 1:QCIF
  oneframe = (char*) malloc(picsize*3/2);

  m_pFile[m_iCount]->Seek( picsize*3/2, CFile::begin );
  while( picsize*3/2 == m_pFile[m_iCount]->Read(oneframe, picsize*3/2) )
  {
    outf.Write(oneframe, picsize*3/2);
  }

  outf.Close();
  m_pFile[m_iCount]->Close();
  free(oneframe);
return 0;
*/
//	CYUVviewerDlg* pWin = (CYUVviewerDlg*)pParam;

	m_pWnd[m_iCount]=new CChildWindow((CFrameWnd*)this, m_nWidth, m_nHeight,1);

	if(picsize != m_pFile[m_iCount]->Read(m_pWnd[m_iCount]->Y,picsize))
	{
		MessageBox("Get to end of file");
		return 0;
	}
	if(1)//bColorImage) 
	{
		if(picsize/4 != m_pFile[m_iCount]->Read(m_pWnd[m_iCount]->Cb,picsize/4))
		{
			MessageBox("Get to end of file");
			return 0;
		}
		if(picsize/4 != m_pFile[m_iCount]->Read(m_pWnd[m_iCount]->Cr,picsize/4))
		{
			MessageBox("Get to end of file");
			return 0;
		}
	}

	m_pWnd[m_iCount]->ShowWindow(SW_SHOW);

	if(m_nZoom == -1) m_pWnd[m_iCount]->CenterWindow(m_nWidth,m_nHeight);
	else if(m_nZoom == 0) m_pWnd[m_iCount]->CenterWindow(m_nWidth*2,m_nHeight*2);
	if(m_zoom4) m_pWnd[m_iCount]->CenterWindow(m_nWidth*4,m_nHeight*4);


	m_iCount++;
	
	// create a new thread

//	m_pWinThread[ m_iCountThread ] = AfxBeginThread( (AFX_THREADPROC)PlayVideo , (void*)this);

	
/*	if ( pWnd != NULL )
	{
		delete pWnd;
		pWnd = NULL;
	}
	m_pFile[m_iCountThread]->Close();
*/
	return 1;

}

void CYUVviewerDlg::OnNext() 
{
	int i;
	UINT picsize = m_nWidth*m_nHeight;

	UpdateData(TRUE);

	g_nStartFrame = m_nFrameFrom;
	if(m_nFrameTo != 0) g_nEndFrame = m_nFrameTo;
	else g_nEndFrame = 10000;

	for(i=0; i<m_iCount; i++)
	{
		m_pFile[i]->Seek(g_nCurrentFrame*picsize*3/2, SEEK_SET);
		m_pWnd[i]->nPicShowOrder = g_nCurrentFrame;
	}
	
	if(g_nCurrentFrame < g_nEndFrame) // && !bEof)
	{
		g_nFrameNumber = g_nCurrentFrame;//j;
 
		for(i=0; i<m_iCount; i++)
		{
			if(picsize != m_pFile[i]->Read(m_pWnd[i]->Y,picsize))
			{
				MessageBox("Get to end of file");
				return;
			}
			if(1)//bColorImage) 
			{
				if(picsize/4 != m_pFile[i]->Read(m_pWnd[i]->Cb,picsize/4))
				{
					MessageBox("Get to end of file");
					return;
				}
				if(picsize/4 != m_pFile[i]->Read(m_pWnd[i]->Cr,picsize/4))
				{
					MessageBox("Get to end of file");
					return;
				}
			}
			m_pWnd[i]->InvalidateRect (NULL,FALSE);
			m_pWnd[i]->UpdateWindow ();
			m_pWnd[i]->nPicShowOrder ++;
		}
		g_nCurrentFrame++;
		//Sleep(200); // sleep time in milliseconds
	}


/*	if ( m_bPlay && hPlayTemp != NULL)
	{
		g_nOldFrameNumber = g_nFrameNumber;
		ReleaseMutex(hPlayTemp);
		g_Play = true;
	}
	WaitForSingleObject( hPlayTemp,INFINITE );
*/
/*	if ( g_nFrameNumber == g_nOldFrameNumber+1)
	{
	//	g_Play = false;
		OpenMutex(MUTEX_ALL_ACCESS,FALSE,"Play");
	}
*/
/*	if ( !g_bPlay )
		OpenMutex(MUTEX_ALL_ACCESS,FALSE,"Play");
*/
}

void CYUVviewerDlg::OnNext5() 
{
	int i;
	UINT picsize = m_nWidth*m_nHeight;

	UpdateData(TRUE);

	g_nStartFrame = m_nFrameFrom;
	if(m_nFrameTo != 0) g_nEndFrame = m_nFrameTo;
	else g_nEndFrame = 10000;

	g_nCurrentFrame += 4;
	if(g_nCurrentFrame > g_nEndFrame) g_nCurrentFrame = g_nEndFrame;

	for(i=0; i<m_iCount; i++)
	{
		m_pFile[i]->Seek(g_nCurrentFrame*picsize*3/2, SEEK_SET);
		m_pWnd[i]->nPicShowOrder = g_nCurrentFrame;
	}
	
	if(g_nCurrentFrame < g_nEndFrame) // && !bEof)
	{
		g_nFrameNumber = g_nCurrentFrame;//j;
 
		for(i=0; i<m_iCount; i++)
		{
			if(picsize != m_pFile[i]->Read(m_pWnd[i]->Y,picsize))
			{
				MessageBox("Get to end of file");
				return;
			}
			if(1)//bColorImage) 
			{
				if(picsize/4 != m_pFile[i]->Read(m_pWnd[i]->Cb,picsize/4))
				{
					MessageBox("Get to end of file");
					return;
				}
				if(picsize/4 != m_pFile[i]->Read(m_pWnd[i]->Cr,picsize/4))
				{
					MessageBox("Get to end of file");
					return;
				}
			}
			m_pWnd[i]->InvalidateRect (NULL,FALSE);
			m_pWnd[i]->UpdateWindow ();
			m_pWnd[i]->nPicShowOrder ++;
		}
		g_nCurrentFrame++;
		//Sleep(200); // sleep time in milliseconds
	}

/*	if ( m_bPlay && hPlayTemp != NULL)
	{
		g_nOldFrameNumber = g_nFrameNumber;
		ReleaseMutex(hPlayTemp);
//		g_Play = true;
	}
	WaitForSingleObject( hPlayTemp,INFINITE );
	for ( int i=0;i<5;i++)
	{
	//	g_Play = false;
		ReleaseMutex(hPlayTemp);
		WaitForSingleObject( hPlayTemp,INFINITE );
		
	}
	if ( g_nFrameNumber == g_nOldFrameNumber+5 )
	{
		OpenMutex(MUTEX_ALL_ACCESS,FALSE,"Play");
	}
*/	
}

void CYUVviewerDlg::OnPrevious() 
{
	int i;
	int picsize = m_nWidth*m_nHeight;

	UpdateData(TRUE);

	g_nStartFrame = m_nFrameFrom;
	if(m_nFrameTo != 0) g_nEndFrame = m_nFrameTo;
	else g_nEndFrame = 10000;

	g_nCurrentFrame -= 2;
	if(g_nCurrentFrame<0) g_nCurrentFrame = 0;

	for(i=0; i<m_iCount; i++)
	{
		m_pFile[i]->Seek(g_nCurrentFrame*picsize*3/2, SEEK_SET);
		m_pWnd[i]->nPicShowOrder = g_nCurrentFrame;
	}
	
	if(g_nCurrentFrame < g_nEndFrame) // && !bEof)
	{
		g_nFrameNumber = g_nCurrentFrame;//j;
 
		for(i=0; i<m_iCount; i++)
		{
			m_pFile[i]->Read(m_pWnd[i]->Y,picsize);
			if(1)//bColorImage) 
			{
				m_pFile[i]->Read(m_pWnd[i]->Cb,picsize/4);
				m_pFile[i]->Read(m_pWnd[i]->Cr,picsize/4);
			}
			m_pWnd[i]->InvalidateRect (NULL,FALSE);
			m_pWnd[i]->UpdateWindow ();
			m_pWnd[i]->nPicShowOrder ++;
		}
		g_nCurrentFrame++;
		//Sleep(200); // sleep time in milliseconds
	}
}

void CYUVviewerDlg::OnPrevious5() 
{
	int i;
	int picsize = m_nWidth*m_nHeight;

	UpdateData(TRUE);

	g_nStartFrame = m_nFrameFrom;
	if(m_nFrameTo != 0) g_nEndFrame = m_nFrameTo;
	else g_nEndFrame = 10000;

	g_nCurrentFrame -= 6;
	if(g_nCurrentFrame<0) g_nCurrentFrame = 0;

	for(i=0; i<m_iCount; i++)
	{
		m_pFile[i]->Seek(g_nCurrentFrame*picsize*3/2, SEEK_SET);
		m_pWnd[i]->nPicShowOrder = g_nCurrentFrame;
	}
	
	if(g_nCurrentFrame < g_nEndFrame) // && !bEof)
	{
		g_nFrameNumber = g_nCurrentFrame;//j;
 
		for(i=0; i<m_iCount; i++)
		{
			m_pFile[i]->Read(m_pWnd[i]->Y,picsize);
			if(1)//bColorImage) 
			{
				m_pFile[i]->Read(m_pWnd[i]->Cb,picsize/4);
				m_pFile[i]->Read(m_pWnd[i]->Cr,picsize/4);
			}
			m_pWnd[i]->InvalidateRect (NULL,FALSE);
			m_pWnd[i]->UpdateWindow ();
			m_pWnd[i]->nPicShowOrder ++;
		}
		g_nCurrentFrame++;
		//Sleep(200); // sleep time in milliseconds
	}
}

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文无字幕一区二区三区| 狂野欧美性猛交blacked| 蜜桃精品视频在线| av在线不卡电影| 日韩亚洲欧美高清| 亚洲国产婷婷综合在线精品| 国产激情视频一区二区三区欧美 | 欧美一区二区三区的| 国产精品成人一区二区艾草 | 青青草成人在线观看| 成人毛片在线观看| 精品国产91乱码一区二区三区 | 黄色日韩三级电影| 5566中文字幕一区二区电影| 亚洲精品乱码久久久久久日本蜜臀| 狠狠色丁香婷综合久久| 4438x成人网最大色成网站| 亚洲男女一区二区三区| 成人激情免费电影网址| 国产婷婷色一区二区三区四区| 日韩av中文在线观看| 欧美精品丝袜久久久中文字幕| 日韩成人伦理电影在线观看| 99视频超级精品| 国产精品麻豆视频| 99久久综合国产精品| 欧美激情一二三区| 国产91在线|亚洲| 久久蜜桃av一区二区天堂| 精品亚洲porn| 久久先锋影音av鲁色资源网| 韩国欧美一区二区| 日韩免费看网站| 久久99蜜桃精品| 久久久噜噜噜久久中文字幕色伊伊| 激情小说欧美图片| 久久久久国产成人精品亚洲午夜| 久久成人av少妇免费| 精品99一区二区| 国产盗摄一区二区三区| 欧美国产在线观看| 成人av网站免费| 一区二区在线观看免费视频播放| 欧美无乱码久久久免费午夜一区| 亚洲午夜在线电影| gogogo免费视频观看亚洲一| 精品午夜久久福利影院| 精品国产乱码久久久久久免费| 精品国产乱子伦一区| 亚洲三级理论片| 国产精品一区三区| 色婷婷久久99综合精品jk白丝| 欧美一区二区三区四区五区| 99热99精品| 国产a久久麻豆| 久久97超碰国产精品超碰| 亚洲人亚洲人成电影网站色| 日韩视频不卡中文| 欧美裸体bbwbbwbbw| 91视视频在线观看入口直接观看www | 欧美成人精品二区三区99精品| 91香蕉国产在线观看软件| 韩国成人精品a∨在线观看| 首页国产欧美日韩丝袜| 樱花影视一区二区| 亚洲三级在线播放| 亚洲色欲色欲www| 亚洲国产精品av| 精品国产免费人成在线观看| 日韩一区二区三区在线| 欧美疯狂性受xxxxx喷水图片| 91麻豆产精品久久久久久| 狠狠色狠狠色综合系列| 久久91精品久久久久久秒播| 亚洲h在线观看| 亚洲国产精品久久久久婷婷884 | 亚洲国产精品久久久男人的天堂| 中文字幕乱码日本亚洲一区二区 | 成人午夜激情片| 日韩高清不卡在线| 最新欧美精品一区二区三区| 亚洲精品一区在线观看| 精品99999| 久久久久成人黄色影片| 国产精品妹子av| 国产精品理论片| 亚洲精品五月天| 一二三四区精品视频| 亚洲午夜久久久久| 蜜桃一区二区三区在线| 国内欧美视频一区二区| 国产麻豆视频一区二区| 东方欧美亚洲色图在线| 92精品国产成人观看免费| 色综合天天综合网国产成人综合天| 91久久免费观看| 6080日韩午夜伦伦午夜伦| 欧美电影免费观看高清完整版 | 4438x亚洲最大成人网| 欧美一级午夜免费电影| 精品av久久707| 中文字幕一区二区三区乱码在线 | 亚洲欧美日韩国产另类专区| 一区二区三区在线观看动漫| 午夜电影久久久| 国产精品小仙女| 91在线视频播放| 欧美日韩国产高清一区二区三区 | 欧美视频一区在线观看| 精品久久久久99| 亚洲欧美在线高清| 日日骚欧美日韩| 福利一区二区在线| 欧美性猛片xxxx免费看久爱| wwww国产精品欧美| 亚洲精品欧美激情| 国内精品在线播放| 色偷偷久久人人79超碰人人澡| 91精品综合久久久久久| 亚洲卡通欧美制服中文| 日韩不卡一区二区| 777欧美精品| 26uuu国产日韩综合| 夜色激情一区二区| 免费在线看一区| 91免费看`日韩一区二区| 欧美日韩高清在线播放| 国产欧美日产一区| 偷拍自拍另类欧美| 在线一区二区三区四区| 亚洲一区二区视频在线观看| 免费成人av在线| 国产精品性做久久久久久| 在线中文字幕不卡| 国产精品每日更新在线播放网址 | 久久精品国产网站| 国产成人高清在线| 制服丝袜国产精品| 亚洲黄色尤物视频| 成人动漫在线一区| 精品成人免费观看| 午夜视频在线观看一区二区 | 色偷偷成人一区二区三区91 | 欧美一区二区成人| 亚洲理论在线观看| 国产91精品在线观看| 欧美一区二区免费视频| 亚洲午夜av在线| 色偷偷88欧美精品久久久| 国产精品乱码一区二三区小蝌蚪| 玖玖九九国产精品| 欧美肥妇bbw| 亚洲国产成人高清精品| 欧美撒尿777hd撒尿| 亚洲欧洲韩国日本视频| 成人美女视频在线观看18| 久久精品一区二区三区av| 九九精品视频在线看| 91精品欧美福利在线观看| 亚洲国产精品精华液网站| 欧美亚洲国产怡红院影院| 亚洲乱码日产精品bd| 色综合一个色综合| 日韩一区日韩二区| 99热99精品| 亚洲精品日韩一| 欧美三级日韩三级| 亚洲 欧美综合在线网络| 欧美日韩在线亚洲一区蜜芽| 亚洲一区二区中文在线| 欧美午夜精品一区二区蜜桃| 亚洲综合图片区| 欧美视频一区二区在线观看| 亚洲综合一区在线| 欧美日韩国产免费一区二区| 午夜精品在线视频一区| 精品视频全国免费看| 婷婷开心久久网| 欧美一区二区性放荡片| 久久er精品视频| 欧美韩国日本一区| 91福利在线免费观看| 午夜久久久久久久久 | 精品黑人一区二区三区久久| 韩国av一区二区三区在线观看| 久久久精品免费网站| 99在线精品一区二区三区| 亚洲午夜在线电影| 精品欧美乱码久久久久久 | 亚洲欧美日韩中文字幕一区二区三区| 91啪九色porn原创视频在线观看| 亚洲一区二区三区小说| 日韩女优av电影在线观看| 国产a级毛片一区| 亚洲一区二区三区免费视频| 日韩亚洲欧美高清| 丁香婷婷综合五月| 亚洲一区免费观看| 精品区一区二区| 99久久国产综合精品色伊|