學習寫DSHOW框架下的FILTER之三

2022-02-10 08:38:39 字數 3796 閱讀 1845

總結與計畫

8:30 --- 9:00

transform filter的編寫

其是使用兩個特點:

1. dshow框架+ com框架

dshow框架:其是包括filter與pin

com框架:    其主要是業務邏輯的編寫.

2. 編寫filter的兩種方式

1. 繼承基類( filter,pin)

2. 繼承source, translate , render 性質的filter.

[ 使用編寫filter的業務流程來看待filter的編寫]

[ dshow,filter的建立嚮導,連線嚮導]

其所說明的問題.

1. dshow其是可以流程化的. 所以我們要去掌握其的流程

1. filter建立流程

1. 各種filter其的流程,與建立方式

2. filter 使用流程

2. 嚮導,模組其的最終目標: 讓使用者直接地編寫業務邏輯就可以了.

1. 哪些是流程

2. 哪些是業務邏輯

3. 流程與業務邏輯之間是怎麼樣結合的

中間:0. 確定功能,

1.確定此filter的性質:( source filter, translate filter, render filter)

2.確定使用者對於此filter的操作介面

3.對於dshow流程實現方式的確定: 標準的( 繼承filter,pin的基類),簡化( 繼承source, translate,render 類)

4.對於子類當中的有關方法進行過載    [ 這一點的要求很好的掌握]

過載方法當中的核心業務邏輯其是由com類完成

實現:在com類當中編寫業務邏輯

後期:使用工具將此filter的資訊註冊到登錄檔當中.

流程的優化:

準備,中間過程,其是可以自動生成的.

讓filter的編寫人員其可以直接地面向業務邏輯的編寫

dshow其對於使用者而言是使用了統一的方式.

1. 這樣我們也是可以自動生成**的.

2. pc機與wince上所使用的**其是可以相同的.

1. dshow 建立filter graph ,控制filter graph

2. filter的編寫其也是可以相同的

==>

我所希望的直接地編寫業務邏輯, 或許 filter其的簡化版本其就是這樣的目標

看來關鍵還是一點半

一點:核心業務邏輯的編寫

半點:流程當中的第四點, 需要花點時間

解法:1. 對於三種filter的demo要進行分析:

1. 其是使用哪一種方式:標準還是簡化( 附思考:如果是標準,那簡化怎麼要樣寫,反之)

2. 在各種方式下其過載了哪些方法

解法:首先全域性地掌握其的業務流程

然後:了解半點的知識

最後: 盡情地編寫最後一點

在filter 編寫當中,其有

source ,translate , render,

stream

basefilter

pin

其各自之間的關係是什麼呢

[  分析ezrgb24 filter sample ]

其是包括: 簡化的方式來進行的編寫的.

個人覺得標準的寫法只是適合初始學者, 或者說: 簡化的方式其是只是合適一些特殊場合.

如:我們使用標準的寫法完成了乙個filter, 那麼其已經滿足了dshow框架的流程,其可以變化的方面,就是業務邏輯方法.所以我們可以去繼承此filter的com類,然後過載其的一些業務邏輯的方式.

[ 問題]

1>ezrgb24.def : error lnk2001: 無法解析的外部符號 dllcanunloadnow

1>ezrgb24.def : error lnk2001: 無法解析的外部符號 dllgetclassobject

其要新增:

#pragma comment( lib,"strmbase.lib")

#pragma comment( lib,"strmiids.lib")

[ filter當中的com部分]

1. 建立com物件

2. 查詢介面

其是建立filter的載體類, com類,查詢介面( dshow介面,使用者自定義介面)

所以其是要求過載的

[filter 屬性包]

filter的屬性包其也是 dshow框架當中一部分,其對於使用者而言,其只是響應事件就可以了,

[ filter其必須實現的三個介面]

1.ibasefilter

2.imediafilter

3.ipersist

這三個介面

[ pin 必然實現基本介面]

ipin

iqualitycontrol

傳送pin其還要實現

imediaposition

imediaseeking

接收pin其還要實現

imeminputpin

屬於source 性質的filte的pin其還要實現

iasyncreader

屬於render性質的filter的pin其還要實現

ipinconnection

[ filter其必須實現的三個介面 的分析]

1.ibasefilter

2.imediafilter

3.ipersist   

dshow 其對於filter graph 管理,也是相當的方便,靈活.

針對於不同的多**場合其是使用不同的 filter graph ,

也就是採用不同的策略, 想到了策略模式.

策略模式其的本質特點:

統一介面,對於介面的不同實現

如:如人都有腦袋,但每乙個人的腦袋裡面所裝的東西是不同的.

我們要寫filter要想被dshow所認識,控制,其就必須實現 dshow所規定的介面.

那dshow其哪些介面,其為什麼會有這些介面呢.

根據 第一點所產生的需求:   

建立filter, 得到filter的資訊(版本),filter有幾個pin, 將filter新增到filter graph當中.

可以歸結為filter的基本資訊管理包括:

findpin

enumpins

queryfilterinfo

jionfiltergraph

==>這些資訊其是放置在ibasefilter 當中

( 而建立filter, 其是屬於com 框架的部分.)

==> dshow其使用上面的方式就可以將filter連線起來.

其它資訊: filter的狀態,其是在其它介面當中實現

filter其當中資料: stream,也是要儲存的.

==> filter的資訊訪問,狀態控制, 儲存與建立,其均是由dshow來管理,dshow然後其封裝乙個介面,使用者通過此介面就可以很方            便地完成對於整個filter graph的管理.       

===>

小結:filter其必須要實現的三個介面: ibasefilter, imediafilter ,ipersist

每寫乙個filter其是必須實現的三個介面, 但ms為了方便filter開發,其提供了cbasefilter ,

cbasefilter 其實現了這三個介面,

==>  2,3 當中的作用其不是由filter來管理的,而是由pin管理,pin其的管理物件是 stream. stream 與sample之間有什麼關聯呢.

Foundation框架下的基本類

功能 將oc和c語言當中的基本資料型別轉換成例項物件 oc中的字串具有強大的功能,即封裝性極強,我們只需要找到相應的api,就可以對字串做相應操作。oc中字串分為 不可變字串 和 可變字串 其中 可變字串 是 不可變字串 的子類。在ios開發中 字串通常用作顯示文字,即作為 uilable uite...

Foundation框架下的常用類

欄位的許可權 注 在類中宣告字段,可以為字段新增許可權 private 私有許可權 protected 保護許可權 public 公有許可權 inte ce father nsobject end father d 9 保護成員,被繼承了,仍然是保護成員 公有成員,被繼承了,仍然是公有成員 注 實際...

spring框架下的 Qualifier註解

autowired是根據型別進行自動裝配的。如果當spring上下文中存在不止乙個userdao型別的bean時,就會丟擲beancreationexception異常 如果spring上下文中不存在userdao型別的bean,也會丟擲beancreationexception異常。我們可以使用 ...