DirectShow学习笔记

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Filter Graph Manager
Filter Graph Manaer
ICaptureGraphBuilder2( Capture Filter Graph,
)
(1)SetFiltergraph // IGraphBuilder*, FilterGraph (2)RenderStream // Capture Source Filter PIN Capture ,Preview,CC,VBI, Filter Graph
Subtype
//MEDIASUBTYPE_Y
Formattype
FORMAT_None
FORMAT_DvInfo ( DV )
FORMAT_VideoInfo (
)
FORMAT_WaveFormatE (
)
FORMAT_VideoInfo2 ////
7.Filter
DirectShow Filter IFilterGraph::ConectDirect,IGraphBuilder::Connect
DirectShow
DirectShow
1 DirectShow
DirectShow
DirectDraw,DirectSound,Direct3D
Filter
DirectShow
2 Filter
Filter COM
,
PIN pin, PIN PIN . COM IPin
Filter PIN Filter
2 DirectShow
1
Filter Graph Manager
2
Filter Graph
3
Filter Graph Manager
IMediaControl
(1) Filter Graph Manager hr=CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_FilterGraph, (void**)&pGraph)
12 DirectShow
DirectShow Filter (user mode),
kernel mode
DirectShow Filter Filter
DirectShow ksProxy Filter, WDM
IBaseFilter Filter
IPin PIN
IFilterGraph Filter Graph
AM_MEDIA_TYPE
MSDN
typedef struct _MediaType{
GUID majortype //
GUID subtype // ( )
GUID formattype //
ULONG cbFormat // formatype
BYTE* pbFormat // formattype
(void**)&pGB);
// DV
PIN, Interleaved Pin, Video Pin
//
Interleaved Pin
Video Pin
Hr=pGB->RenderStream(PIN_CATEGORY_PREVIEW,MEDIATYPE_Interleaved,
2
(IMemAllocator)
Sample Sample COM IMediaSample
Filter
Filter
IMemAllocator::GetBuffer Sample
9 Filter Graph
10
11
1
Filter Graph , IReferenceClock
FGM(Filter Graph Manager)
Live
Source(Capture Source Filter)
Filter
Live Source Audio Renderer
Filter IReferenceClock
2 (Time Stample)
Renderer Sample
Start Time End Time
Renderer
IMediaSample::SetTime
Filter
Filter
PIN
PIN PIN
PIN
PIN
Conect
PIN
Connect Start
IF PIN THEN EXIT
IF Filter THEN EXIT
// CALL AgreeMediaType Connect End AgreeMediaType Start
PIN PIN mediatypeEnums
(2) Filter Graph
Filter Graph IFilterGraph::AddFilter IFilterGraph::ConnectDirect IGraphBuilder::AddSourceFilter IGraphBuilder::Connect IGraphBuilder::RenderFile IGraphBuilder::Render ICaptureGraphBuilder2::RenderStream
RenderStream(&PIN_CATEGORY_CAPTURE,&MEDIATYPE_Video,pCap,NULL,pMux);
pMux Mux Splitter
(3) SetOutputFileName
avi,asf Mux Filter
HRESULT SetOutputFileName( const GUID *pType, LPCOLESTR lpwstrFile, // IBaseFilter **ppf, // Mux Filter IFileSinkFilter **pSink //
IGraphBuilder::RenderFile,
8.Filter
1 Filter
Filter Filter
PIN IMemInputPin::Receive
PIN IMemInputPin
Filter Capture Source
PIN IAsycnRender
PIN IAsyncReader
Fillter Source.
Filter Graph Filter
Filter Graph Manager
(2)
(3) Filter Graph
4
Filter Graph
5 Sample
Filter Graph
Filter Filter
Sample
Sample
Filter
6 Media Type
DirectShow
(Sample)
put_Channel //
TV Tuner
1 DirectShow (VC 6.0)
dshow.h streams.h
qedit.h
strmiids.lib strmbasd.lib(strmbase.lib Release ) quartz.lib
winmm.lib uuid.lib
VC tools\option\
IGraphBuilder IFilterGraph
Filter Graph RenderFile,Render,AddSourceFilter
IMediaControl Filter Graph
IVideoWindow( )
// put_MessageDrain
IMediaEventEx( )
IMediaSeeking( )
PIN PIN
CompleteConnect Filter Sample COM
Sample
IMemAllocator IMenAllocator COM Sample
: Filter Graph
DirectShow Filter Graph
IGraphBuilder:Render
ICaptureGraphBuilder2::RenderStream
TryMediaTypes, AgreeMediaType End TryMediaTypes Start FOR EACH mediatype IN mediatypEnums AttempConnection(media) NEXT TryMediaTypes End
AttemptConnection Start CheckMediaType // IF THEN PIN ELSE FAILED END IF CALL ReceiveConnect // IF SUCCEED THEN CALL CompleteConnect ELSE FAIL END IF AttemptConnect End
Filter Graph GraphEdit
(1)
IGraphBuilder::RenderFile(filename);
IGraphBuilder
Filter Graph
(2)
ICaptureGraphBuilder2 * pGB=NULL;
Hr=CoCreateInstance
(CLSID_CaptureGraphBuilder2,NULL,CLSCTX_INPROC,IID_ICapturepType subtype subtype
MEDIASUBTYPE_Avi Avi
MEDIASUBTYPE_Asf( Asf),
windows
Mux Filter
pType Mux Filter File Writer GUID
ICrossbar // IAMTuner IAMTVTuner //
IMediaControl *pControl=NULL; Hr=pGraph->QueryInterface(IID_IMediaControl,(void**)&pControl): IVideoWindow* pVW=NULL; Hr=pGraph->QueryInterface(IID_IVideoWindow,(void**)&pVW);
3 Render Filter
Filter
3.Filter Graph( )
Filter Graph DirectShow
DirectShow
Filter Graph Filter Graph
(avi ) Filter Graph File Source
AVI Splitter,AVI Spliiter
1 Filter Source Filter( ) Transform Filter( ) Render Filter( )
2 Source Filter
File Source Filter( )
Transform Filter
Spliiter Filter
Mux Filter( )
Encoder,Decoder,Compressor
get_WindowStyle(&style);
style&=~WS_CAPTION;
DirectShow
put_WindowStyle(style) Video Window
///put_FullScreenMode
4 Filter Graph pGraph->Run();
3 Filter Graph
HRESULT RenderStream( const GUID *pCategory, const GUID *pType, IUnknown *pSource, IBaseFilter *pIntermediate, IBaseFilter *pSink );
: RenderStream( PIN_CATEGORY_PREVIEW,&MEDIATYPE_Video,pCap,NULL,NULL);
(3)
Renderer Filter
IVideoWindow
//put_Owner
SetWindowPosition
//put_MessageDrain
//put_Visible
//SetNotifyWindow Filter Graph
//put_WindowStyle Video Window
long style=0;
AVI
Ddcompressor Video Renderer AVI Spliter DirectSound Device DirectSound Device
4 Filter Graph Manager
Filter Graph Manager COM DirectShow Filter
1 Filter Filter
//
}
GUID majortype MEDIATYPE_Video( ) MEDIATYPE_Audio( ) MEDIATYPE_AnologVideo( ) // MEDIATYPE_AnologAudio( ) // MEDIATYPE_Stream( ) //Filter Source Filter MEDIATYPE_Interleaved //DV
相关文档
最新文档