總結與計畫
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異常。我們可以使用 ...