下载资源后端资源详情
FilterTitleOverlay.zip
大小:346.33KB
价格:35积分
下载量:0
评分:
5.0
上传者:leixiaohua1020
更新日期:2025-09-22

DirectShow Filter : 字幕叠加 (带注释)

资源文件列表(大概)

文件名
大小
FilterTitleOverlay/
-
FilterTitleOverlay/CAutoFont.cpp
2.06KB
FilterTitleOverlay/CAutoFont.h
518B
FilterTitleOverlay/CBasePixel.cpp
1.06KB
FilterTitleOverlay/CBasePixel.h
925B
FilterTitleOverlay/CFilterTitleOverlay.cpp
13.12KB
FilterTitleOverlay/CFilterTitleOverlay.h
2.4KB
FilterTitleOverlay/COverlayController.cpp
11.77KB
FilterTitleOverlay/COverlayController.h
3.12KB
FilterTitleOverlay/CPixelRGB24.cpp
419B
FilterTitleOverlay/CPixelRGB24.h
280B
FilterTitleOverlay/CPixelRGB32.cpp
450B
FilterTitleOverlay/CPixelRGB32.h
315B
FilterTitleOverlay/CPixelRGB555.cpp
1KB
FilterTitleOverlay/CPixelRGB555.h
407B
FilterTitleOverlay/CPixelRGB565.cpp
1KB
FilterTitleOverlay/CPixelRGB565.h
408B
FilterTitleOverlay/CPixelRGB8.cpp
1.44KB
FilterTitleOverlay/CPixelRGB8.h
487B
FilterTitleOverlay/CScrollController.cpp
3.99KB
FilterTitleOverlay/CScrollController.h
832B
FilterTitleOverlay/CSysTimeOverlayController.cpp
1.33KB
FilterTitleOverlay/CSysTimeOverlayController.h
492B
FilterTitleOverlay/CTitleOverlayProp.cpp
10.38KB
FilterTitleOverlay/CTitleOverlayProp.h
1.61KB
FilterTitleOverlay/Debug/
-
FilterTitleOverlay/Debug/注册filter(new).bat
31B
FilterTitleOverlay/Debug/注册filter.bat
21B
FilterTitleOverlay/FilterGraph1.jpg
22.64KB
FilterTitleOverlay/FilterTitleOverlay.aps
20.97KB
FilterTitleOverlay/FilterTitleOverlay.def
226B
FilterTitleOverlay/FilterTitleOverlay.dsp
7.73KB
FilterTitleOverlay/FilterTitleOverlay.ilk
1.35MB
FilterTitleOverlay/FilterTitleOverlay.rc
4.85KB
FilterTitleOverlay/FilterTitleOverlay.sln
902B
FilterTitleOverlay/FilterTitleOverlay.suo
35.5KB
FilterTitleOverlay/FilterTitleOverlay.vcxproj
10.29KB
FilterTitleOverlay/FilterTitleOverlay.vcxproj.filters
4.42KB
FilterTitleOverlay/FilterTitleOverlay.vcxproj.user
659B
FilterTitleOverlay/ITitleOverlay.h
2.57KB
FilterTitleOverlay/OverlayDefs.h
425B
FilterTitleOverlay/Release/
-
FilterTitleOverlay/Release/注册filter.bat
21B
FilterTitleOverlay/resource.h
1.04KB

资源内容介绍

DirectShow Transform Filter最典型的例子,带注释,难度不大,学习必备博客对应文章http://blog.csdn.net/leixiaohua1020/article/details/12498975
//// 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//注意g_Templates名称是固定的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// 检查调用该Filter的程序// 一开始调试不了,就卡在这了 = =if (::strstr(szCreatorName, "graphedit") == NULL &&::strstr(szCreatorName, "ourapp") == NULL){*phr = E_FAIL;return NULL;}#endif//通过New对象的方法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//暴露接口,使外部程序可以QueryInterface,关键!STDMETHODIMP CFilterTitleOverlay::NonDelegatingQueryInterface(REFIID riid, void ** ppv){CheckPointer(ppv, E_POINTER);//根据不同的REFIID,获得不同的接口指针if (riid == IID_ISpecifyPropertyPages) {return GetInterface((ISpecifyPropertyPages *) this, ppv);}else if (riid == IID_ITitleOverlay){return GetInterface((ITitleOverlay *) this, ppv);}else {//不是以上的REFIID的话,调用父类的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是unsigned charPBYTE pData = NULL;//获取IMediaSample中的数据pSample->GetPointer(&pData);//叠加mOverlayController->DoTitleOverlay(pData);}return NOERROR;}HRESULT CFilterTitleOverlay::SetInputVideoInfoToController(void){if (mOverlayController && m_pInput && m_pInput->IsConnected()){//当前MEdiaTypeCMediaType 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){HRESUL

用户评论 (0)

发表评论

captcha

相关资源

npdsplay.dll 修改版支持firefox播放在线mp3

系统明明装有WMP9,打开含有在线播放mp3的网页,Firefox却还要下载安装Quicktime ,岂有此理,上网一搜,果然有此问题。
找到解决办法,将此修改的npdsplay.dll文件拷贝到Mozilla Firefox\plugins目录下即可。
详情请看:http://blog.csdn.net/robotics5/archive/2007/10/17/1829558.aspx

145.89KB47积分

时间序列预测模型实战案例(Xgboost)(Python)(机器学习)包括时间序列预测和时间序列分类,点击即可运行!

内容概要资源包括三部分(时间序列预测部分和时间序列分类部分和所需的测试数据集全部包含在内)在本次实战案例中,我们将使用Xgboost算法进行时间序列预测。Xgboost是一种强大的梯度提升树算法,适用于各种机器学习任务,它最初主要用于解决分类问题,在此基础上也可以应用于时间序列预测。时间序列预测是通过分析过去的数据模式来预测未来的数值趋势。它在许多领域中都有广泛的应用,包括金融、天气预报、股票市场等。我们将使用Python编程语言来实现这个案例。其中包括模型训练部分和保存部分,可以将模型保存到本地,一旦我们完成了模型的训练,我们可以使用它来进行预测。我们将选择合适的输入特征,并根据模型的预测结果来生成未来的数值序列。最后,我们会将预测结果与实际观测值进行对比,评估模型的准确性和性能。适合人群:时间序列预测的学习者,机器学习的学习者,能学到什么:本模型能够让你对机器学习和时间序列预测有一个清楚的了解,其中还包括数据分析部分和特征工程的代码操作阅读建议:大家可以仔细阅读代码部分,其中包括每一步的注释帮助读者进行理解,其中涉及到的知识有数据分析部分和特征工程的代码操作。

407.12KB23积分

2013淘宝双十二红包秒杀器

2013淘宝双十二红包秒杀器

738.77KB46积分

TE田纳西-伊斯曼过程数据集

TE过程控制数据集,其中22个训练集,22个测试集。每个训练集由52个测量信号组成。共480行。每个测试集由52个测量信号组成。共960行。https://blog.csdn.net/LuohenYJ/article/details/78441707

3.64MB26积分