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

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

?? delegatefilter.cpp

?? 對比兩個AVI文件的psnr值的VC源代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// AviDelegateWriter.cpp: implementation of the CDelegatorFilter class.
//
//////////////////////////////////////////////////////////////////////
#include <streams.h>
//#include <Vfw.h>
#include <direct.h>
#include <math.h>
//#include <Aviriff.h>
#include <stdio.h>

#include "IPsnr.h"
#include "SourcePin.h"	// Added by ClassView
#include "CompedPin.h"	// Added by ClassView
#include "AviPsnrFilter.h"
#include "DelegateFilter.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

double diff_y,diff_u,diff_v;
DWORD fccYV12 = MAKEFOURCC('Y','V','1','2');
DWORD fccYUY2 = MAKEFOURCC('Y','U','Y','2');
DWORD fccDTV1 = MAKEFOURCC('D','T','V','1');
CDelegatorFilter::CDelegatorFilter(LPUNKNOWN pUnk, HRESULT *phr):
CUnknown(NAME("CAviDelegator"), pUnk),
    m_pFilter(NULL),
    m_CompedPin(NULL),
	m_SourcePin(NULL),
	m_bCompedEnd(FALSE),
	m_bSourceEnd(FALSE),
	m_bStopped(FALSE),
	m_nWidth(0),
	m_nHeight(0),
	m_nSrcCount(0),
	m_nCompCount(0),
	m_dwCompLen(0),
	m_dwSrcLen(0),
	m_pSrcData(NULL),
	m_pCompData(NULL),
	m_pDataYV12(NULL),
	m_pPosition(NULL)
    //m_fWriteError(0)

{
//	 ASSERT(phr);
    
    m_pFilter = new CAviPsnrFilter(this, GetOwner(), &m_Lock, phr);
    if (m_pFilter == NULL) {
        if (phr)
            *phr = E_OUTOFMEMORY;
        return;
    }

    m_CompedPin = new CCompedPin(this,GetOwner(),
                               m_pFilter,
                               &m_Lock,
                               &m_ReceiveLock,
                               phr);
    if (m_CompedPin == NULL) {
        if (phr)
            *phr = E_OUTOFMEMORY;
        return;
    }
	
	m_SourcePin = new CSourcePin(this,GetOwner(),
                               m_pFilter,
                               &m_Lock,
                               &m_ReceiveLock,
                               phr);
    if (m_SourcePin == NULL) {
        if (phr)
            *phr = E_OUTOFMEMORY;
        return;
    }
	
//	m_CompedPin->m_pVpin = m_SourcePin;
//	m_SourcePin->m_pApin = m_CompedPin;

	memset(&m_PSNR, 0, sizeof(m_PSNR));
	//AVIFileInit();
}

CDelegatorFilter::~CDelegatorFilter()
{
	if(m_SourcePin)
		delete m_SourcePin;
	if(m_CompedPin)
		delete m_CompedPin;
    if(m_pFilter)
		delete m_pFilter;
	if(m_pPosition)
		delete m_pPosition;
	if(m_pDataYV12)
		delete m_pDataYV12;
}

CUnknown * WINAPI CDelegatorFilter::CreateInstance(LPUNKNOWN punk, HRESULT *phr)
{
//	ASSERT(phr);
    
    CDelegatorFilter *pNewObject = new CDelegatorFilter( punk, phr);
    if (pNewObject == NULL) {
        if (phr)
            *phr = E_OUTOFMEMORY;
    }

    return pNewObject;
}

STDMETHODIMP CDelegatorFilter::NonDelegatingQueryInterface(REFIID riid, void ** ppv)
{
    CheckPointer(ppv,E_POINTER);
    CAutoLock lock(&m_Lock);

    // Do we have this interface

	
	if(riid == IID_IPSNR)  //提供IPsnr接口給外界
	{
		return GetInterface((IPsnr *) m_pFilter, ppv);
	}
	if (riid == IID_IBaseFilter || riid == IID_IMediaFilter || riid == IID_IPersist ) 
	{
		return m_pFilter->NonDelegatingQueryInterface(riid, ppv);
	} 
	else if (riid == IID_IMediaPosition || riid == IID_IMediaSeeking) {
		if (m_pPosition == NULL) 
		{

			HRESULT hr = S_OK;
			m_pPosition = new CPosPassThru(NAME("Dump Pass Through"),
				(IUnknown *) GetOwner(),
				(HRESULT *) &hr, m_SourcePin);
			if (m_pPosition == NULL) 
				return E_OUTOFMEMORY;

			if (FAILED(hr)) 
			{
				delete m_pPosition;
				m_pPosition = NULL;
				return hr;
			}
		}
		return m_pPosition->NonDelegatingQueryInterface(riid, ppv);
	} 

	return CUnknown::NonDelegatingQueryInterface(riid, ppv);

} // NonDelegatingQueryInterface

void CDelegatorFilter::ReleaseAviRs()
{
	m_PSNR.dbSnr_y = m_PSNR.dbSnr_y_sums/m_nSrcCount;
	m_PSNR.dbSnr_u = m_PSNR.dbSnr_u_sums/m_nSrcCount;
	m_PSNR.dbSnr_v = m_PSNR.dbSnr_v_sums/m_nSrcCount;
/*	FILE	*stream;

	char path[MAX_PATH+12];
	getcwd(path, MAX_PATH);
	int nLen=strlen(path);
	if(*(path+nLen-1)=='\\')
		strcat(path, "result.txt");
	else
		strcat(path, "\\result.txt");
	stream = fopen(path, "w");
	fprintf(stream, "PSNR_Y=%f6.2\nPSNR_U=%f6.2\nPSNR_V=%f6.2", m_PSNR.dbSnr_y, m_PSNR.dbSnr_u, m_PSNR.dbSnr_v);
	fclose(stream);
*/
}

HRESULT	CDelegatorFilter::GiveFrame(BYTE *pData, DWORD dwLen, BOOL bType)
{
	CAutoLock lock(&m_Lock);

	if(m_nSrcCount==m_nCompCount) //剛剛計算完一對兒,現(xiàn)在是新的一幀數(shù)據(jù)
	{
		if(bType==0)			 //源視頻	
		{
			m_pSrcData = pData;	 //把數(shù)據(jù)先存起來,等壓縮數(shù)據(jù)到了與它進行計算
			m_dwSrcLen = dwLen;
			m_nSrcCount++;		
		}
		if(bType==1)			 //壓縮視頻	
		{
//			if(m_pCompData)
//				delete m_pCompData;
//			m_pCompData = new BYTE[dwLen];
//			memcpy(m_pCompData, pData, dwLen);
			m_pCompData = pData; //把數(shù)據(jù)先存起來,等壓縮數(shù)據(jù)到了與它進行計算
			m_dwCompLen = dwLen;
			m_nCompCount++;
		}

	}
	else if(m_nSrcCount<m_nCompCount)  //壓縮數(shù)據(jù)先到
	{
		if(bType==1)					//不能再來一幀壓縮數(shù)據(jù)
			return -1;
		m_nSrcCount++;				
		if(m_nSrcCount!=m_nCompCount)	//幀號必須是一致的
			return -1;
		if(!m_pCompData)				//壓縮數(shù)據(jù)必須已經存儲
			return -1;
		CalPSNR(pData,m_pCompData, dwLen);  //進行計算
		m_pCompData = NULL;				//不能delete,由dshow自動管理
	}

	else if(m_nSrcCount>m_nCompCount)	 //源數(shù)據(jù)先到
	{
		if(bType==0)					//不能再來一幀源數(shù)據(jù)
			return -1;
		m_nCompCount++;	
		if(m_nSrcCount!=m_nCompCount)	//幀號必須是一致的
			return -1;
		if(!m_pSrcData)					//源數(shù)據(jù)必須已經存儲
			return -1;
		CalPSNR(m_pSrcData, pData, dwLen);//進行計算

		m_pSrcData = NULL;				//不能delete,由dshow自動管理
	}
	return S_OK;
}

HRESULT CDelegatorFilter::CalPSNR(BYTE *pSource, BYTE *pComped, DWORD dwLen)
{
	if(m_CompedPin->m_FourCC==fccYUY2)
	{
		yuy22yv12(pComped,m_pDataYV12,m_nWidth, m_nHeight);
		//顛倒
		snr_cal_rev(pSource, m_pDataYV12, m_nWidth, m_nHeight);
	}
	else if(m_CompedPin->m_FourCC==fccYV12)
	{
		//不顛倒
		snr_cal(pSource, pComped, m_nWidth, m_nHeight);
	}
//	m_PSNR.dbSnr_y_sums+=m_PSNR.dbSnr_y;
//	m_PSNR.dbSnr_u_sums+=m_PSNR.dbSnr_u;
//	m_PSNR.dbSnr_v_sums+=m_PSNR.dbSnr_v;

	return S_OK;
}

void CDelegatorFilter::yuy22yv12(BYTE* puc_in, BYTE* puc_out, int width_y, int height_y)
{
	int XY = width_y * height_y;
	BYTE* puc_YUY2 = puc_in;  
	BYTE* puc_y = puc_out; 
	BYTE* puc_v = puc_out + XY; 
	BYTE* puc_u = puc_out + ((XY *5)>>2); 

	int nCtr, nOuterCtr;
	int cx2 = width_y<<1;


	//Y
	for(nCtr=0; nCtr<XY; nCtr++)
	{
		*puc_y = *puc_YUY2;
		puc_y++;
		puc_YUY2 += 2;
	}

	puc_YUY2 = puc_in + 1;

	//U and V
	for(nOuterCtr=0; nOuterCtr < height_y>>1; nOuterCtr++)
	{
		for(nCtr=0; nCtr < width_y>>1; nCtr++)
		{
			//U
			*puc_u = (unsigned char)(((int)(*puc_YUY2) + (int)(*(puc_YUY2 + cx2)))/2);
			puc_u++;
			puc_YUY2 += 2;

			//V
			*puc_v = (unsigned char)(((int)(*puc_YUY2) + (int)(*(puc_YUY2 + cx2)))/2);
			puc_v++;
			puc_YUY2 += 2;
		}
		puc_YUY2 += cx2;
	}
}

void CDelegatorFilter::snr_cal_rev(unsigned char* origi_image, unsigned char * recon_image, int width, int height)
{
	int height_cr=(height>>1);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美浪妇xxxx高跟鞋交| 亚洲国产裸拍裸体视频在线观看乱了| 精品电影一区二区| 欧美经典一区二区| 亚洲伦理在线免费看| 日本视频免费一区| 国产成人精品aa毛片| 色偷偷一区二区三区| 91精品国产综合久久久久久 | 一区二区三区精品在线观看| 亚洲www啪成人一区二区麻豆| 精品一区二区三区久久| 9i看片成人免费高清| 欧美一级电影网站| 中文一区一区三区高中清不卡| 亚洲图片一区二区| 国产精品66部| 欧美视频一区在线观看| 国产清纯白嫩初高生在线观看91 | 色综合久久88色综合天天| 在线播放中文字幕一区| 欧美国产一区二区| 性欧美疯狂xxxxbbbb| 国产69精品久久久久777| 欧美色大人视频| 国产欧美精品区一区二区三区| 亚洲国产日韩一区二区| 国产69精品一区二区亚洲孕妇 | 男人的天堂亚洲一区| 97精品国产露脸对白| 2023国产精华国产精品| 亚洲午夜精品在线| 99riav久久精品riav| 精品欧美一区二区久久| 亚洲一区二区影院| 成人妖精视频yjsp地址| 日韩你懂的电影在线观看| 一区二区在线观看免费| 国产99久久久国产精品潘金网站| 欧美一区二区三区视频免费| 亚洲欧美综合网| 国产精品羞羞答答xxdd| 日韩欧美卡一卡二| 水野朝阳av一区二区三区| 99久久精品免费观看| 国产亚洲综合色| 美女一区二区三区在线观看| 欧美三区免费完整视频在线观看| 国产精品乱人伦中文| 国模大尺度一区二区三区| 欧美男女性生活在线直播观看| 综合婷婷亚洲小说| 波多野洁衣一区| 国产午夜精品在线观看| 久久精品国产精品青草| 91麻豆精品国产91久久久使用方法 | 丝袜a∨在线一区二区三区不卡| 99久久精品国产导航| 国产亚洲成aⅴ人片在线观看 | 久久久噜噜噜久噜久久综合| 婷婷综合另类小说色区| 在线观看亚洲一区| 亚洲猫色日本管| av一区二区三区| 国产精品无遮挡| 国产91丝袜在线播放| 国产精品日日摸夜夜摸av| 国产成人精品一区二区三区网站观看| 久久老女人爱爱| 国产一区二区在线观看免费| 欧美精品一区二区三区高清aⅴ| 久久97超碰国产精品超碰| 日韩亚洲欧美一区二区三区| 丝袜a∨在线一区二区三区不卡| 欧美日韩成人高清| 亚洲成人免费在线| 欧美精品乱码久久久久久按摩 | 精品欧美久久久| 精品一区二区免费视频| 337p日本欧洲亚洲大胆精品| 国模大尺度一区二区三区| 精品精品国产高清a毛片牛牛| 久久国产福利国产秒拍| 26uuu色噜噜精品一区二区| 国产精品资源网| 国产人伦精品一区二区| 成人少妇影院yyyy| 日韩一区中文字幕| 色妞www精品视频| 亚洲伊人色欲综合网| 91麻豆精品国产91久久久更新时间| 丝袜脚交一区二区| 久久亚区不卡日本| 本田岬高潮一区二区三区| 伊人一区二区三区| 日韩视频123| 国产精品538一区二区在线| 一色屋精品亚洲香蕉网站| 在线观看中文字幕不卡| 日本不卡一区二区三区| 久久久久久久综合狠狠综合| 成人a级免费电影| 亚洲午夜日本在线观看| 精品免费日韩av| 成人免费视频一区二区| 亚洲一区二区三区四区五区中文| 欧美色图片你懂的| 蜜桃视频第一区免费观看| 国产亚洲一区二区三区四区 | 亚洲成人免费影院| 欧美成人精品福利| av中文字幕在线不卡| 亚洲国产cao| 精品国产乱码久久久久久免费 | 《视频一区视频二区| 欧美丝袜自拍制服另类| 国内不卡的二区三区中文字幕| 一区二区中文视频| 91精选在线观看| 岛国精品在线观看| 午夜精品一区二区三区电影天堂 | 国产精品香蕉一区二区三区| 一区二区三区色| 精品国产乱码久久久久久夜甘婷婷| 成人精品高清在线| 日韩中文字幕1| 国产精品色眯眯| 91精品国产色综合久久不卡蜜臀| 国产成人在线看| 亚洲国产日韩一区二区| 欧美国产日本韩| 91精品福利在线一区二区三区| 成人av综合一区| 精品一二三四区| 亚洲一区二区三区在线看| 国产亚洲欧美激情| 7777精品伊人久久久大香线蕉完整版 | 欧美日韩国产a| 高清不卡一区二区在线| 日韩av一级片| 亚洲精品v日韩精品| 2023国产精品自拍| 欧美一区日韩一区| 色婷婷av一区二区三区大白胸| 国产一区二区美女| 日韩极品在线观看| 亚洲最大成人网4388xx| 国产婷婷精品av在线| 日韩三级免费观看| 欧美在线|欧美| 99久久国产免费看| 国产福利一区二区三区视频| 丝袜亚洲精品中文字幕一区| 亚洲另类中文字| 欧美国产成人精品| 精品欧美黑人一区二区三区| 欧美日韩高清不卡| 欧美午夜精品久久久久久孕妇 | 亚洲精品国产成人久久av盗摄 | 91在线精品一区二区| 国产一区二区三区在线观看精品| 亚洲a一区二区| 亚洲综合色噜噜狠狠| 国产精品福利在线播放| 久久伊99综合婷婷久久伊| 欧美一级电影网站| 欧美一区二区三区爱爱| 欧美日韩高清影院| 欧美日韩国产小视频在线观看| 一本色道综合亚洲| 99久久精品免费精品国产| av在线不卡观看免费观看| 成人晚上爱看视频| 成人精品视频一区二区三区| 国产传媒一区在线| 国产精品亚洲а∨天堂免在线| 国产一区在线观看麻豆| 精品一二三四区| 国产精品91一区二区| 国产成+人+日韩+欧美+亚洲| 国产呦萝稀缺另类资源| 国产精品一区二区在线播放| 国产一区999| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 北岛玲一区二区三区四区| 成人h动漫精品一区二| 9久草视频在线视频精品| 99在线精品免费| 色综合婷婷久久| 欧美色国产精品| 91精品国产一区二区三区香蕉| 欧美一级一区二区| 欧美成人艳星乳罩| 国产色婷婷亚洲99精品小说| 中文字幕av一区二区三区免费看 | 91精品福利在线| 欧美日韩在线亚洲一区蜜芽| 欧美日韩高清一区二区不卡| 欧美电影免费观看高清完整版在线 | 亚洲婷婷国产精品电影人久久|