directshow

 
DirectShow开发点滴
Setting Up the Build Environment
Tools->Options->Projects->VC++ Directories->Include Files:
C:/DXSDK/Include
C:/DXSDK/Samples/C++/DirectShow/BaseClasses
C:/DXSDK/Samples/C++/DirectShow/Common
C:/DXSDK/Samples/C++/Common/Include
Tools->Options->Projects->VC++ Directories->Library Files:
C:/DXSDK/Lib
C:/DXSDK/Samples/C++/Common
C:/DXSDK/Samples/C++/DirectShow/Common
 
DirectShow中关于TV调频部分章节
Country/Region Assignments 
International Analog TV Tuning
Frequency Tables
Tables and Assignments
TV Tuner Filter
IAMTVTuner Interface
IAMTuner Interface
怎么使用IAMTuner::put_Channel调频?频率表的获取?通过IAMTuner::put_CountryCode设置国家/地区来选择基础频率表?再使用IAMTVTuner::AutoTune获取详细频率表?但为什么在Graphedt中试验却没有信号?
 
1.PAL制式和NTSC制式
PAL:25 frames per second,625 lines
NTSC:30 frames per second,525 lines
当DVD的输出为PAL制式,而capture 设备为NTSC制式时,就有可能引起字幕看不到的问题。这时就需要设置capture设备为PAL制式,以防止看不到字幕。
可使用Video Capture Filter的IAMAnalogVideoDecoder接口的put_TVFormat方法实现。
2.正确设置“国家/地区”选项
如果是在大陆进行扫描,而将“国家/地区”设置成台湾,那么将scan不到signal。
3.理解“国家/地区”与TV System的对应关系
4.Frequency Tables和scan功能及set channel功能
5.好习惯:CoInitialize开始,CoUninitialize结束
7.一个TVTuner包含的视频标准可以是PAL、NTSC和SECAM中的一种或多种。如果只包含PAL一种,那么只能接收PAL格式电视信号(同理,如果只包含NTSC或SECAM,那么也只能接收NTSC格式信号或SECAM格式信号)。NTSC格式的TV Tunner一般销往美国、台湾等采用NTSC标准的国家,而PAL格式的则销往欧洲等采用PAL标准的国家。如果包含多种则可以接收多种格式信号,例如:如果包含PAL和NTSC两种,则可以接收PAL和NTSC两种格式的信号。
注意:TV Tunner不可以设置视频标准,没有设置视频标准的接口,但提供了接口获取TV Tunner所支持的标准。
8.DVD可以用遥控器控制输出制式,切换PAL和NTSC输出
9.Video Capture Device可以capture PAL格式video,也可以capture NTSC格式video,当capture到的video为PAL格式时,它对应的输出应该为PAL制式,当Capture到的是NTSC时,对应的应该输出NTSC格式video。
10.PAL和NTSC是针对模拟信号而言,数字信号的格式既不是PAL也不是NTSC,它有自己的标准。
11.数字信号和模拟信号,数字电视。
12.程序实现与驱动的相关性。必须驱动提供了相关功能,程序才有可能实现,实际上都是跟驱动交流,让驱动去实现进行选择的操作。
13.在切换视频标准时,必须先将graph stop,再进行切换,再将graph run起来,如果是TV信号下,graph run起来后,必须重写频道信息,否则没有信号。因为graph一stop了,寄存器中的频道信息就清空了
14.CComPtr<IGraphBuilder> m_pGraph;头文件atlbase.h库文件:atlsd.lib for debug; atls.lib for release.
m_pGraph.CoCreateInstance(CLSID_FilterGraph, 0, CLSCTX_INPROC_SERVER);
m_pGraph->AddFilter(pIFilter,(LPCWSTR) szWideReferenceName);
CComPtr<IMediaControl> m_pControl;
m_pGraph->QueryInterface(IID_IMediaControl,(void**)&m_pControl);
m_pGraph.QueryInterface((void**)&m_pControl);
如果确定不用了,可手动Release但最好不,不要->Release
15.关于DSHOW中的链接错误;
Unresolved external symbol "long __stdcall ATL::AtlWinModuleInit(struct ATL::_ATL_WIN_MODULE70 *)" (?AtlWinModuleInit@ATL@@YGJPAU_ATL_WIN_MODULE70@1@@Z) referenced in function "public: __thiscall ATL::CAtlWinModule::CAtlWinModule(void)" (??0CAtlWinModule@ATL@@QAE@XZ)
unresolved external symbol "class ATL::CAtlBaseModule ATL::_AtlBaseModule" (?_AtlBaseModule@ATL@@3VCAtlBaseModule@1@A)
解决:atlsd.lib for debug; atls.lib for release.
 
 
template<
   class T
> 
class CComPtr
Parameters
T
A COM interface specifying the type of pointer to be stored.
template<
   class T,
   const IID* piid = &__uuidof(T)
> 
class CComQIPtr: public CComPtr<T>
Parameters
T
A COM interface specifying the type of pointer to be stored.
piid
A pointer to the IID of T.
 
 
CComPtr<IGraphBuilderm_pGraph;
CComPtr<ICaptureGraphBuilder2> m_pBuild;
HRESULT hr = m_pGraph.CoCreateInstance(CLSID_FilterGraph, 0, CLSCTX_INPROC_SERVER);
CComQIPtr<IVideoWindow> pVidWin(m_pGraph);
IPersistStream *   pPersist = NULL;
hr = m_pGraph->QueryInterface(IID_IPersistStream, reinterpret_cast<void**>(&pPersist));
 
CComQIPtr<IMediaControl> pMediaCtr;
pMediaCtr = m_pGraph;
      hr = pMediaCtr->Run();
      pMediaCtr.Release();
 
CComQIPtr<IMediaControlm_pControl;
hr = m_pGraph->QueryInterface(IID_IMediaControl, (void **)&m_pControl);
 
CComPtr<IPin>   pPinSrc,pPinDes;
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值