首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

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

后端 346.33KB 18 需要积分: 1
立即下载

资源介绍:

DirectShow Transform Filter最典型的例子,带注释,难度不大,学习必备 博客对应文章http://blog.csdn.net/leixiaohua1020/article/details/12498975
// // CFilterTitleOverlay.cpp // #include // 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 // performance measurement (MSR_) #include #if (1100 > _MSC_VER) #include #else #include #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 char PBYTE pData = NULL; //获取IMediaSample中的数据 pSample->GetPointer(&pData); //叠加 mOverlayController->DoTitleOverlay(pData); } return NOERROR; } HRESULT CFilterTitleOverlay::SetInputVideoInfoToController(void) { if (mOverlayController && m_pInput && m_pInput->IsConnected()) { //当前MEdiaType 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) { HRESUL

资源文件列表:

FilterTitleOverlay.zip 大约有44个文件
  1. FilterTitleOverlay/
  2. FilterTitleOverlay/CAutoFont.cpp 2.06KB
  3. FilterTitleOverlay/CAutoFont.h 518B
  4. FilterTitleOverlay/CBasePixel.cpp 1.06KB
  5. FilterTitleOverlay/CBasePixel.h 925B
  6. FilterTitleOverlay/CFilterTitleOverlay.cpp 13.12KB
  7. FilterTitleOverlay/CFilterTitleOverlay.h 2.4KB
  8. FilterTitleOverlay/COverlayController.cpp 11.77KB
  9. FilterTitleOverlay/COverlayController.h 3.12KB
  10. FilterTitleOverlay/CPixelRGB24.cpp 419B
  11. FilterTitleOverlay/CPixelRGB24.h 280B
  12. FilterTitleOverlay/CPixelRGB32.cpp 450B
  13. FilterTitleOverlay/CPixelRGB32.h 315B
  14. FilterTitleOverlay/CPixelRGB555.cpp 1KB
  15. FilterTitleOverlay/CPixelRGB555.h 407B
  16. FilterTitleOverlay/CPixelRGB565.cpp 1KB
  17. FilterTitleOverlay/CPixelRGB565.h 408B
  18. FilterTitleOverlay/CPixelRGB8.cpp 1.44KB
  19. FilterTitleOverlay/CPixelRGB8.h 487B
  20. FilterTitleOverlay/CScrollController.cpp 3.99KB
  21. FilterTitleOverlay/CScrollController.h 832B
  22. FilterTitleOverlay/CSysTimeOverlayController.cpp 1.33KB
  23. FilterTitleOverlay/CSysTimeOverlayController.h 492B
  24. FilterTitleOverlay/CTitleOverlayProp.cpp 10.38KB
  25. FilterTitleOverlay/CTitleOverlayProp.h 1.61KB
  26. FilterTitleOverlay/Debug/
  27. FilterTitleOverlay/Debug/注册filter(new).bat 31B
  28. FilterTitleOverlay/Debug/注册filter.bat 21B
  29. FilterTitleOverlay/FilterGraph1.jpg 22.64KB
  30. FilterTitleOverlay/FilterTitleOverlay.aps 20.97KB
  31. FilterTitleOverlay/FilterTitleOverlay.def 226B
  32. FilterTitleOverlay/FilterTitleOverlay.dsp 7.73KB
  33. FilterTitleOverlay/FilterTitleOverlay.ilk 1.35MB
  34. FilterTitleOverlay/FilterTitleOverlay.rc 4.85KB
  35. FilterTitleOverlay/FilterTitleOverlay.sln 902B
  36. FilterTitleOverlay/FilterTitleOverlay.suo 35.5KB
  37. FilterTitleOverlay/FilterTitleOverlay.vcxproj 10.29KB
  38. FilterTitleOverlay/FilterTitleOverlay.vcxproj.filters 4.42KB
  39. FilterTitleOverlay/FilterTitleOverlay.vcxproj.user 659B
  40. FilterTitleOverlay/ITitleOverlay.h 2.57KB
  41. FilterTitleOverlay/OverlayDefs.h 425B
  42. FilterTitleOverlay/Release/
  43. FilterTitleOverlay/Release/注册filter.bat 21B
  44. FilterTitleOverlay/resource.h 1.04KB
0评论
提交 加载更多评论
其他资源 npdsplay.dll 修改版支持firefox播放在线mp3
系统明明装有WMP9,打开含有在线播放mp3的网页,Firefox却还要下载安装Quicktime ,岂有此理,上网一搜,果然有此问题。
找到解决办法,将此修改的npdsplay.dll文件拷贝到Mozilla Firefox\plugins目录下即可。
详情请看:http://blog.csdn.net/robotics5/archive/2007/10/17/1829558.aspx
时间序列预测模型实战案例(Xgboost)(Python)(机器学习)包括时间序列预测和时间序列分类,点击即可运行!
内容概要 资源包括三部分(时间序列预测部分和时间序列分类部分和所需的测试数据集全部包含在内) 在本次实战案例中,我们将使用Xgboost算法进行时间序列预测。Xgboost是一种强大的梯度提升树算法,适用于各种机器学习任务,它最初主要用于解决分类问题,在此基础上也可以应用于时间序列预测。 时间序列预测是通过分析过去的数据模式来预测未来的数值趋势。它在许多领域中都有广泛的应用,包括金融、天气预报、股票市场等。我们将使用Python编程语言来实现这个案例。 其中包括模型训练部分和保存部分,可以将模型保存到本地,一旦我们完成了模型的训练,我们可以使用它来进行预测。我们将选择合适的输入特征,并根据模型的预测结果来生成未来的数值序列。最后,我们会将预测结果与实际观测值进行对比,评估模型的准确性和性能。 适合人群:时间序列预测的学习者,机器学习的学习者, 能学到什么:本模型能够让你对机器学习和时间序列预测有一个清楚的了解,其中还包括数据分析部分和特征工程的代码操作 阅读建议:大家可以仔细阅读代码部分,其中包括每一步的注释帮助读者进行理解,其中涉及到的知识有数据分析部分和特征工程的代码操作。
2013淘宝双十二红包秒杀器
2013淘宝双十二红包秒杀器
TE田纳西-伊斯曼过程数据集
TE过程控制数据集,其中22个训练集,22个测试集。每个训练集由52个测量信号组成。共480行。每个测试集由52个测量信号组成。共960行。https://blog.csdn.net/LuohenYJ/article/details/78441707
管理运筹学配套软件3-5版.zip
管理运筹学配套软件3-5版.zip
苹果手机微信聊天记录备份导出神器:WX Backup、Win版本
微信里积累了数年的聊天记录,连iPhone都吃不消了,可惜你依旧不能删掉它们。 把重要的聊天记录导出来吧,然后你就可以在电脑上好好收藏和品味了。 WX Backup的优点: 1、没有广告,不收费,软件非常简约 2、保存的聊天记录可以跟微信一样打开浏览,可以保存图片、视频、语音、表情、链接分享等 3、支持增量导出,即有新的内容更新到iPhone备份文件后,可以增加更新的内容到导出记录中,不会每次新增记录都要新增一个文件 4、可以搜索聊天记录,可以按月选择聊天记录。 WX Backup操作: 1、iTunes备份:用iTunes连接iPhone,将内容备份到电脑上。请注意,不要选择”给iPhone备份加密“! 2。打开软件选择备份文件夹。根据选择的账号和联系人导出聊天记录,瞬间即可导出选中的聊天记录。支持增量导出,即有新的内容更新到iPhone备份文件后,可以增加更新的内容到导出记录中。

苹果手机微信聊天记录备份导出神器:WX Backup、Win版本 
苹果手机微信聊天记录备份导出神器:WX Backup、Win版本 
苹果手机微信聊天记录备份导出神器:WX Backup、Win版本
.NET 工作流程图 WinForm gdi+流程图 C#版流程图绘制 拖动即时刷新 0分下载
WinForm gdi+流程图绘制源码,可根据需要修改,注释完整,有操作说明 良心资源
McAfee8.8企业版完整安装包(含P2补丁,免序列号,在线升级)+通用加强规则
自定义规则非常强大的McAfee8.8企业版完整安装包(含P2补丁).可以免费升级,因为时间久远,只推荐WIN7以及以前的系统使用。 PS:配置好规则后,可以让你的系统百毒不侵