DirectShow基礎類庫開發參考文檔

以下的文章是我在學習DirectShow的過程中翻譯自DirectX 9 SDK的幫助文檔,希望對大家瞭解和編寫自己的filter等組件時有所幫助。翻譯文檔的內容我會陸續發到網上。
 

1.       DirectShow基礎類庫概述

Microsoft® DirectShow®基礎類庫是一系列的C++類和實用函數的集合,這些使用函數的設計的目的是爲了實現DirectShowfilter。對應用程序開發人員來說,某些幫助類也是非常有用的。

本篇文章描述了這個基礎類庫,包含了以下一些部分:

2.       如何使用DirectShow基礎類庫

如果你想使用Microsoft® DirectShow®基礎類庫,你必須生成和鏈接基礎類庫的庫文件,這些庫文件位於:

(SDK 根目錄)\Samples\C++\DirectShow\BaseClasses

DirectShow的基礎類庫的工作空間的名字叫做BaseClasses.dsw。這個工程生成了兩個版本的庫文件,一個零售版本——Strmbase.lib,一個調式版本的庫文件——Strmbasd.lib。在你的自己的工程裏面,如果你想使用基本類庫,你必須包含Streams.h這個頭文件。你的應用程序既可以鏈接Strmbase.lib or to Strmbasd.lib,這取決於你生成的程序的版本,即你是生成一個零售版本還是一個調試版本。

下面這個表格總結了你需要的文件:

工作空間

BaseClasses.dsw

零售版庫文件

Strmbase.lib

調試版本庫文件

Strmbasd.lib

頭文件

Streams.h


 

 

2.1.       預處理符號

當你在你的工程中包含了Streams.h這個頭文件,下面的與處理符號就有了特殊的意義:

  • PERF: 保留字符。不要使用這個預處理符號。

  • VFWROBUST: 在零售版本中啓用指針驗證。在調試版本週,這個並不是必須定義VFWROBUST宏。

3.       Filter基本類庫簡介

這篇文文章描述了Microsoft DirectShow基本類庫,這個庫是爲filter開發人員設計的,但是應用程序開發人員可能會找到一些有幫助的類文件,或者調試應用程序時有些幫助。但是基本庫類並不是DirectShow程序必須的。

下面的章節概述了大多數最重要的基本類:

下面的這些類用來支持COM對象的創建:

描述

CBaseObject

基本對象類。

CUnknown

實現了IUnknown 接口。

 

大多數的DirectShow類派生於CBaseObject。這個類提供了一個在在Dll文件中的活動對象計數器,在運行時的調試幫助。在調試版本中,如果DLL沒有被加載,但是對象計數器大於0,則被斷言失敗。這樣就可以很容易的追蹤由引用計數引起的內存泄露問題。

所有的這些基本類支持從CUnknown 中派生出來的COM接口,CUnknown派生於CBaseObjectCUnknown類支持引用計數、QueryInterface、聚合。

下面的這些類支持DirectShow filterpin對象的創建:

描述

CBaseFilter

Filter的基礎類,實現了IBaseFilter接口。

CBasePin

Pin(接腳)的基本類,實現了IPinIQualityControl接口。

CBaseInputPin

輸入pin的基本類,使用了本地內存傳輸。實現了IMemInputPin接口。這個接口派生於CBasePin

CBaseOutputPin

輸出pin的基本類,使用了IMemInputPin連接。這個類派生於CBasePIn

 

下面的這些類在創建專門的filter有一些幫助:

描述

CSource

創建源filter的基本類。這個基本類用來創建推源,但是不適合用來創建一個拉源(參考推模式、拉模式),比如說文件讀取器。如果要創建一個輸出pin,使用CSourceStream類。

CTransformFilter

變換filter的基本類。這個類執行了一個數據的副本的拷貝。這個類的接腳類(pin)CTransformInputPinCTransformOutputPin

CTransInPlaceFilter

變換filter的基本類,這個類不拷貝數據。這個類在向下遊傳輸數據之前,直接執行輸入數據處理。這個類的接腳是CTransInPlaceInputPin CTransInPlaceOutputPin

CVideoTransformFilter

視頻變換filter基本類,這個類派生於CTransformFilter然後添加了一些質量控制。

CBaseRenderer

渲染filter的基本類。輸入接腳(Pin)CRendererInputPin

CBaseVideoRenderer

視頻渲染的基本類,這個類派生於CBaseRenderer

要使用這些類,你必須要派生你自己的類,然後在你自己的類裏面編寫代碼來實現filter裏面的功能。越專業的基類,你要在你自己的派生類裏面要書寫的代碼就越少。

下面的這些類實現了一些用在filterpin中的輔助對象。這些類中的大多數無需從中派生,可以直接使用。

類名

描述

CPullPin

在分析器上的輔助對象輸入接腳。支持IAsyncReader推源的連接器

COutputQueue

輸出接腳的輔助對象,可以傳送一個樣本隊列(queue samples )到一個工作線程(worker thread)

CSourceSeeking

在一個有着準確外接接腳的源filter裏面實現一個位置查找的輔助對象。(這個類並不是爲有多接腳的filter設計的,比如說像解析器)

CEnumPins

在一個filter上爲列舉接腳的用的枚舉對象。實現了IEnumPins接口。

CEnumMediaTypes

這是一個用於在接腳中枚舉最優先的媒體類型的枚舉對象,這個對象實現了IEnumMediaTypes接口。

CMemAllocator

內存分配器對象,實現了IMemAllocator接口。

CMediaSample

媒體樣本對象。實現了IMediaSample2接口。

CBaseReferenceClock

引用時鐘的基本類。實現了IReferenceClock接口。

CMediaType

輔助對象用來操作AM_MEDIA_TYPE數據結構。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章