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

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

?? cfiltertitleoverlay.cpp

?? directshow開發(fā)指南源碼第四章部分源碼,需要安裝directshow8.0以上
?? CPP
字號:
//
// CFilterTitleOverlay.cpp
//

#include "streams.h"          // quartz, includes windows
// Eliminate two expected level 4 warnings from the Microsoft compiler.
// The class does not have an assignment or copy operator, and so cannot
// be passed by value.  This is normal.  This file compiles clean at the
// highest (most picky) warning level (-W4).
#pragma warning(disable: 4511 4512)

#include <measure.h>          // performance measurement (MSR_)
#include <initguid.h>

#if (1100 > _MSC_VER)
#include <olectlid.h>
#else
#include <olectl.h>
#endif

#include "CFilterTitleOverlay.h"
#include "CTitleOverlayProp.h"
#include "CSysTimeOverlayController.h"
#include "CScrollController.h"

// {E3FB4BFE-8E5C-4aec-8162-7DA55BE486A1}
DEFINE_GUID(CLSID_HQTitleOverlay, 
0xe3fb4bfe, 0x8e5c, 0x4aec, 0x81, 0x62, 0x7d, 0xa5, 0x5b, 0xe4, 0x86, 0xa1);

// {E70FE57A-19AA-4a4c-B39A-408D49D73851}
DEFINE_GUID(CLSID_HQTitleOverlayProp, 
0xe70fe57a, 0x19aa, 0x4a4c, 0xb3, 0x9a, 0x40, 0x8d, 0x49, 0xd7, 0x38, 0x51);


//
// setup data
//
const AMOVIESETUP_MEDIATYPE sudPinTypes =
{
    &MEDIATYPE_NULL,            // Major type
    &MEDIASUBTYPE_NULL          // Minor type
};

const AMOVIESETUP_PIN psudPins[] =
{
    {
        L"Input",           // String pin name
        FALSE,              // Is it rendered
        FALSE,              // Is it an output
        FALSE,              // Allowed none
        FALSE,              // Allowed many
        &CLSID_NULL,        // Connects to filter
        L"Output",          // Connects to pin
        1,                  // Number of types
        &sudPinTypes },     // The pin details
      { L"Output",          // String pin name
        FALSE,              // Is it rendered
        TRUE,               // Is it an output
        FALSE,              // Allowed none
        FALSE,              // Allowed many
        &CLSID_NULL,        // Connects to filter
        L"Input",           // Connects to pin
        1,                  // Number of types
        &sudPinTypes        // The pin details
    }
};


const AMOVIESETUP_FILTER sudFilter =
{
    &CLSID_HQTitleOverlay,       // Filter CLSID
    L"HQ Title Overlay Std.",    // Filter name
    MERIT_DO_NOT_USE,        // Its merit
    2,                       // Number of pins
    psudPins                 // Pin details
};


// List of class IDs and creator functions for the class factory. This
// provides the link between the OLE entry point in the DLL and an object
// being created. The class factory will call the static CreateInstance
CFactoryTemplate g_Templates[] = 
{
    { 
		L"HQ Title Overlay Std.",
		&CLSID_HQTitleOverlay,
		CFilterTitleOverlay::CreateInstance,
		NULL,
		&sudFilter 
	},
	{ 
		L"HQ Title Overlay Property Page",
		&CLSID_HQTitleOverlayProp,
		CTitleOverlayProp::CreateInstance 
	}
};
int g_cTemplates = sizeof(g_Templates) / sizeof(g_Templates[0]);



// ----------------------------------------------------------------------------
//            Filter implementation
// ----------------------------------------------------------------------------
CFilterTitleOverlay::CFilterTitleOverlay(TCHAR *tszName, LPUNKNOWN punk, HRESULT *phr) : 
CTransInPlaceFilter(tszName, punk, CLSID_HQTitleOverlay, phr)
{
	mOverlayType = OT_STATIC;
	mOverlayController     = new COverlayController();
	mNeedEstimateFrameRate = FALSE;

	char szTitle[] = "Hello, DirectShow!"; 
	put_Title(szTitle, sizeof(szTitle));
}

CFilterTitleOverlay::~CFilterTitleOverlay()
{
	ReleaseOverlayController();
}

void CFilterTitleOverlay::ReleaseOverlayController(void)
{
	if (mOverlayController)
	{
		delete mOverlayController;
		mOverlayController = NULL;
	}
}

//
// CreateInstance
//
// Override CClassFactory method.
// Provide the way for COM to create a CNullInPlace object
//
CUnknown * WINAPI CFilterTitleOverlay::CreateInstance(LPUNKNOWN punk, HRESULT *phr) 
{
#if 1
	char    szCreatorPath[256], szCreatorName[256];
	::strcpy(szCreatorPath, "");
	::strcpy(szCreatorName, "");
	HMODULE hModule = ::GetModuleHandle(NULL);
	::GetModuleFileName(hModule, szCreatorPath, 256);
	char * backSlash = ::strrchr(szCreatorPath, '\\');
	if (backSlash)
	{
		strcpy(szCreatorName, backSlash);
	}
	::_strlwr(szCreatorName);
	// Please specify your app name with lowercase
	if (::strstr(szCreatorName, "graphedt") == NULL &&
		::strstr(szCreatorName, "ourapp") == NULL)
	{
		*phr = E_FAIL;
		return NULL;
	}
#endif

	CFilterTitleOverlay *pNewObject = new CFilterTitleOverlay(NAME("TitleOverlay"), punk, phr);
	if (pNewObject == NULL) 
	{
		*phr = E_OUTOFMEMORY;
	}
	return pNewObject;
} 

//
// Basic COM - used here to reveal our own interfaces
STDMETHODIMP CFilterTitleOverlay::NonDelegatingQueryInterface(REFIID riid, void ** ppv)
{
	CheckPointer(ppv, E_POINTER);

	if (riid == IID_ISpecifyPropertyPages) 
	{
		return GetInterface((ISpecifyPropertyPages *) this, ppv);
	}
	else if (riid == IID_ITitleOverlay)
	{
		return GetInterface((ITitleOverlay *) this, ppv);
	}
	else 
	{
		return CTransInPlaceFilter::NonDelegatingQueryInterface(riid, ppv);
	}
} // NonDelegatingQueryInterface

// Only RGB 32/24/565/555 supported 
HRESULT CFilterTitleOverlay::CheckInputType(const CMediaType* mtIn)
{
	// Dynamic format change will never be allowed!
	if (IsStopped() && *mtIn->Type() == MEDIATYPE_Video)
	{
		if (*mtIn->Subtype() == MEDIASUBTYPE_RGB32 ||
			*mtIn->Subtype() == MEDIASUBTYPE_RGB24 ||
			*mtIn->Subtype() == MEDIASUBTYPE_RGB555 ||
			*mtIn->Subtype() == MEDIASUBTYPE_RGB565)
		{
			return NOERROR;
		}
	}
	return E_INVALIDARG;
}

HRESULT CFilterTitleOverlay::Transform(IMediaSample *pSample)
{
	// If we cann't read frame rate info from input pin's connection media type,
	// We estimate it from the first sample's time stamp!
	if (mNeedEstimateFrameRate)
	{
		mNeedEstimateFrameRate = FALSE;
		REFERENCE_TIME  startTime = 0;
		REFERENCE_TIME  endTime   = 0;
		double          estimated = 25;
		if (SUCCEEDED(pSample->GetTime(&startTime, &endTime)))
		{
			estimated = 1.0 * UNITS / (endTime - startTime);
		}
		mOverlayController->SetEstimatedFrameRate(estimated);
	}

	if (mOverlayType != OT_NONE)
	{
		PBYTE  pData = NULL;
		pSample->GetPointer(&pData);
		mOverlayController->DoTitleOverlay(pData);
	}

	return NOERROR;
}

HRESULT CFilterTitleOverlay::SetInputVideoInfoToController(void)
{
	if (mOverlayController && m_pInput && m_pInput->IsConnected())
	{
		CMediaType  mt = m_pInput->CurrentMediaType();
		if (mt.formattype != FORMAT_VideoInfo)
		{
			return E_FAIL;
		}

		RGB_FORMAT   colorSpace = FT_NONE;
		if (mt.subtype == MEDIASUBTYPE_RGB32)  // Determine RGB format
		{
			colorSpace = FT_RGB32;
		}
		else if (mt.subtype == MEDIASUBTYPE_RGB24)
		{
			colorSpace = FT_RGB24;
		}
		else if (mt.subtype == MEDIASUBTYPE_RGB555)
		{
			colorSpace = FT_RGB555;
		}
		else if (mt.subtype == MEDIASUBTYPE_RGB565)
		{
			colorSpace = FT_RGB565;
		}
		else if (mt.subtype == MEDIASUBTYPE_RGB8)
		{
			colorSpace = FT_RGB8;
		}
		mOverlayController->SetInputColorSpace(colorSpace);
		VIDEOINFOHEADER * pHeader = (VIDEOINFOHEADER *) mt.pbFormat;
		mNeedEstimateFrameRate    = pHeader->AvgTimePerFrame > 0 ? FALSE : TRUE;
		mOverlayController->SetInputVideoInfo(pHeader);
		return NOERROR;
	}
	return E_FAIL;	
}

HRESULT CFilterTitleOverlay::CompleteConnect(PIN_DIRECTION direction, IPin *pReceivePin)
{
	HRESULT hr = CTransInPlaceFilter::CompleteConnect(direction, pReceivePin);

	if (SUCCEEDED(hr) && direction == PINDIR_INPUT)
	{
		hr = SetInputVideoInfoToController();
	}
	return hr;
}

HRESULT CFilterTitleOverlay::StartStreaming()
{
	BOOL pass = mOverlayController->StartTitleOverlay();
	return pass ? S_OK : E_FAIL;
}

HRESULT CFilterTitleOverlay::StopStreaming()
{
	mOverlayController->StopTitleOverlay();
	return NOERROR;
}

	
// --- ISpecifyPropertyPages ---
STDMETHODIMP CFilterTitleOverlay::GetPages(CAUUID *pPages)
{
	pPages->cElems = 1;
	pPages->pElems = (GUID *) CoTaskMemAlloc(sizeof(GUID));
	if (pPages->pElems == NULL) 
	{
		return E_OUTOFMEMORY;
	}
	*(pPages->pElems) = CLSID_HQTitleOverlayProp;
	return NOERROR;
}

// 當(dāng)字符疊加的類型改變時,需要生成新的應(yīng)用邏輯控制類對象實例,
// 并且在新生成的控制對象上設(shè)置參數(shù)信息。
void CFilterTitleOverlay::SideEffectOverlayTypeChanged(void)
{
	ReleaseOverlayController();
	switch (mOverlayType)
	{
	case OT_SYSTIME:
		mOverlayController = new CSysTimeOverlayController();
		break;

	case OT_SCROLL_TOP:
		mOverlayController = new CScrollController();
		((CScrollController*) mOverlayController)->SetScrollBottomOrTop(FALSE);
		break;
	case OT_SCROLL_BOTTOM:
		mOverlayController = new CScrollController();
		((CScrollController*) mOverlayController)->SetScrollBottomOrTop(TRUE);
		break;

	case OT_NONE:
	case OT_STATIC:
	default:
		mOverlayController = new COverlayController();
	}
	// Make sure to set input video info to the new controller 
	SetInputVideoInfoToController();
}

// --- ITitleOverlay methods ---
STDMETHODIMP CFilterTitleOverlay::put_TitleOverlayType(long inOverlayType)
{
	CAutoLock   lockit(&mITitleOverlaySync);
	// When filter graph is active, change overlay type is not allowed!
	if (m_State != State_Stopped)
	{
		return E_UNEXPECTED;
	}

	if (mOverlayType != (OVERLAY_TYPE)inOverlayType)
	{
		mOverlayType = (OVERLAY_TYPE)inOverlayType;
		SideEffectOverlayTypeChanged();
	}
	return NOERROR;
}

STDMETHODIMP CFilterTitleOverlay::get_TitleOverlayType(long * outOverlayType)
{
	CAutoLock   lockit(&mITitleOverlaySync);
	*outOverlayType = mOverlayType;
	return NOERROR;
}

STDMETHODIMP CFilterTitleOverlay::put_TitleOverlayStyle(int inUsingCover)
{
	CAutoLock   lockit(&mITitleOverlaySync);
	mOverlayController->SetOverlayStyle(inUsingCover);
	return NOERROR;
}

STDMETHODIMP CFilterTitleOverlay::get_TitleOverlayStyle(int * outUsingCover)
{
	CAutoLock   lockit(&mITitleOverlaySync);
	mOverlayController->GetOverlayStyle(outUsingCover);
	return NOERROR;
}

STDMETHODIMP CFilterTitleOverlay::put_Title(const char * inTitle, int inLength)
{
	CAutoLock   lockit(&mITitleOverlaySync);
	// When filter graph is active, change title text is not allowed!
	if (m_State != State_Stopped)
	{
		return E_UNEXPECTED;
	}
	mOverlayController->SetTitle(inTitle, inLength);
	return NOERROR;
}

STDMETHODIMP CFilterTitleOverlay::get_Title(char * outBuffer, int * outLength)
{
	CAutoLock   lockit(&mITitleOverlaySync);
	*outLength = mOverlayController->GetTitle(outBuffer);
	return NOERROR;
}

STDMETHODIMP CFilterTitleOverlay::put_TitleColor(BYTE inR, BYTE inG, BYTE inB)
{
	CAutoLock   lockit(&mITitleOverlaySync);
	mOverlayController->SetTitleColor(inR, inG, inB);
	return NOERROR;
}

STDMETHODIMP CFilterTitleOverlay::get_TitleColor(BYTE * outR, BYTE * outG, BYTE * outB)
{
	CAutoLock   lockit(&mITitleOverlaySync);
	mOverlayController->GetTitleColor(outR, outG, outB);
	return NOERROR;
}

STDMETHODIMP CFilterTitleOverlay::put_TitleStartPosition(POINT inStartPos)
{
	CAutoLock   lockit(&mITitleOverlaySync);
	mOverlayController->SetTitleStartPosition(inStartPos);
	return NOERROR;
}

STDMETHODIMP CFilterTitleOverlay::get_TitleStartPosition(POINT * outStartPos)
{
	CAutoLock   lockit(&mITitleOverlaySync);
	mOverlayController->GetTitleStartPosition(outStartPos);
	return NOERROR;
}

STDMETHODIMP CFilterTitleOverlay::put_TitleFont(LOGFONT inFont)
{
	CAutoLock   lockit(&mITitleOverlaySync);
	mOverlayController->SetTitleFont(inFont);
	return NOERROR;
}

STDMETHODIMP CFilterTitleOverlay::get_TitleFont(LOGFONT * outFont)
{
	CAutoLock   lockit(&mITitleOverlaySync);
	mOverlayController->GetTitleFont(outFont);
	return NOERROR;
}

STDMETHODIMP CFilterTitleOverlay::put_TitleDuration(double inStart, double inEnd)
{
	CAutoLock   lockit(&mITitleOverlaySync);
	mOverlayController->SetTitleDuration(inStart, inEnd);
	return NOERROR;
}

STDMETHODIMP CFilterTitleOverlay::get_TitleDuration(double * outStart, double * outEnd)
{
	CAutoLock   lockit(&mITitleOverlaySync);
	mOverlayController->GetTitleDuration(outStart, outEnd);
	return NOERROR;
}









/******************************Public Routine******************************\
* exported entry points for registration and
* unregistration (in this case they only call
* through to default implmentations).
*
*
*
* History:
*
\**************************************************************************/
STDAPI DllRegisterServer()
{
	return AMovieDllRegisterServer2( TRUE );
}

STDAPI DllUnregisterServer()
{
	return AMovieDllRegisterServer2( FALSE );
}

// Microsoft C Compiler will give hundreds of warnings about
// unused inline functions in header files.  Try to disable them.
#pragma warning( disable:4514)

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产综合久久久蜜臀图片 | av中文字幕在线不卡| 婷婷亚洲久悠悠色悠在线播放| 136国产福利精品导航| 国产欧美va欧美不卡在线| 国产欧美精品一区aⅴ影院| 国产亚洲精品资源在线26u| www国产成人免费观看视频 深夜成人网| 日韩免费高清电影| 国产农村妇女毛片精品久久麻豆 | 国产精品久久久久久亚洲伦| 久久蜜桃av一区二区天堂| 久久久国产综合精品女国产盗摄| 国产欧美日韩久久| 亚洲主播在线观看| 麻豆精品在线视频| 国产精品一二一区| 色婷婷国产精品| 9191国产精品| 中文字幕av一区二区三区免费看 | 91美女片黄在线观看91美女| 色婷婷综合久久久久中文一区二区| 色综合亚洲欧洲| 日韩一区二区三区在线观看 | 亚洲欧洲一区二区在线播放| 玉米视频成人免费看| 石原莉奈在线亚洲三区| 久久精品72免费观看| av网站一区二区三区| 欧美亚洲综合在线| 久久综合色8888| 一区二区三区**美女毛片| 免费在线看成人av| 成人开心网精品视频| 在线这里只有精品| 精品美女一区二区| 伊人婷婷欧美激情| 久久99精品国产.久久久久| av电影天堂一区二区在线 | 精品一区二区在线视频| 99久久精品一区| 欧美成人精精品一区二区频| 亚洲女与黑人做爰| 狠狠色丁香久久婷婷综| 欧美性大战久久久| 国产精品丝袜一区| 韩国av一区二区三区四区| 欧洲一区二区三区在线| 国产网站一区二区三区| 日韩专区中文字幕一区二区| 91免费国产在线观看| 国产亚洲成aⅴ人片在线观看| 香蕉加勒比综合久久| 91蜜桃网址入口| 国产欧美日韩精品在线| 裸体歌舞表演一区二区| 欧美裸体bbwbbwbbw| 亚洲色大成网站www久久九九| 国产综合色在线| 欧美一个色资源| 亚洲国产欧美在线| 99re视频这里只有精品| 国产午夜亚洲精品羞羞网站| 蜜桃av噜噜一区| 91麻豆精品国产自产在线观看一区 | 一区二区三区不卡视频在线观看 | 亚洲欧美日韩在线| 懂色av一区二区夜夜嗨| 精品粉嫩超白一线天av| 九一九一国产精品| 欧美成人官网二区| 麻豆精品精品国产自在97香蕉| 欧美军同video69gay| 亚洲一区二区三区精品在线| 色系网站成人免费| 亚洲国产视频在线| 欧美日韩在线播放一区| 亚洲国产综合人成综合网站| 欧美色图片你懂的| 午夜激情一区二区| 91精品综合久久久久久| 日本欧美一区二区在线观看| 欧美一区二区三区性视频| 蜜桃视频在线观看一区二区| 日韩欧美在线影院| 国产一区二区看久久| 国产欧美中文在线| 91毛片在线观看| 亚洲综合一区二区精品导航| 欧美日本一区二区| 美女一区二区视频| 欧美激情一区二区三区在线| 97久久精品人人爽人人爽蜜臀| 有码一区二区三区| 欧美一级精品大片| 国产精品一级在线| 一区二区视频在线| 91精品国产91久久综合桃花| 久久精品国产免费看久久精品| 久久精品一区四区| 91精品91久久久中77777| 五月天亚洲婷婷| 久久精品视频在线免费观看| 91亚洲精品久久久蜜桃网站 | 日本不卡视频在线观看| 久久久久国产精品免费免费搜索| a级高清视频欧美日韩| 天天爽夜夜爽夜夜爽精品视频| 久久久综合网站| 欧美这里有精品| 国产老妇另类xxxxx| 一区二区三区加勒比av| 日韩免费高清av| 在线免费观看视频一区| 国产一区二区在线视频| 亚洲激情av在线| 久久日一线二线三线suv| 在线免费观看日本欧美| 国产在线观看一区二区 | 欧美一区二区三区爱爱| www.亚洲色图.com| 男女男精品视频| 亚洲午夜久久久久中文字幕久| 久久久久国产精品麻豆ai换脸| 欧美最新大片在线看| 成人午夜免费视频| 国产美女精品在线| 婷婷成人激情在线网| 亚洲丝袜美腿综合| 国产亚洲一区二区在线观看| 91精品久久久久久久91蜜桃| 91同城在线观看| 成人午夜视频福利| 国产精品77777| 久久国产乱子精品免费女| 亚洲国产日韩一区二区| 综合在线观看色| 国产精品久久久久影院| 久久久国产一区二区三区四区小说| 欧美人动与zoxxxx乱| 欧美伊人久久久久久久久影院| 成人免费va视频| 国产精品羞羞答答xxdd| 黄一区二区三区| 国产一区视频网站| 蜜桃久久精品一区二区| 日本网站在线观看一区二区三区| 亚洲午夜免费福利视频| 亚洲一二三区在线观看| 亚洲精品你懂的| 亚洲在线一区二区三区| 亚洲国产日产av| 天天操天天综合网| 日韩高清在线电影| 蜜桃在线一区二区三区| 美国十次综合导航| 精品一区二区影视| 精品一二线国产| 国产乱码精品一区二区三| 国产精品一级二级三级| 成人少妇影院yyyy| av在线播放成人| 在线观看视频一区| 8x福利精品第一导航| 日韩一区二区在线观看| 久久久久久99精品| 中文字幕中文字幕中文字幕亚洲无线| 国产精品天干天干在观线| 亚洲久本草在线中文字幕| 亚洲国产乱码最新视频| 日韩综合小视频| 国产乱码精品一品二品| 成人高清视频在线| 欧美三级电影精品| 精品日韩一区二区三区 | 91麻豆swag| 欧美精品色综合| 久久午夜老司机| 国产精品国产a| 水野朝阳av一区二区三区| 国产一区福利在线| 色综合久久综合网97色综合| 3751色影院一区二区三区| 久久久一区二区| 亚洲午夜av在线| 国产一区二区美女| 在线观看欧美日本| 欧美不卡123| 一区二区免费在线| 国产原创一区二区| 欧美日本在线播放| 亚洲欧美一区二区在线观看| 日韩高清在线电影| 日本二三区不卡| 国产日韩av一区二区| 天天综合天天做天天综合| 成人黄色网址在线观看| 欧美一区二区美女| 亚洲女同ⅹxx女同tv| 国产激情精品久久久第一区二区|