這個問題不難,但是似乎沒有人寫出來,今天有人問我,我就總結了一下。首先要說明的就是filter tracer是不行的,這個問題好像很久以前就看到有人說過,但是自己用filter的時候要不然是列舉,要不然是自己寫的,所以完全沒有意識到這個情況。
首先就是查登錄檔,在hkey_current_user/software/microsoft/activemovie/devenum下面有幾個分類,各個filter都在裡面。比如divx mpeg-4 fast-motion這個filter就在下面的div4裡面。可以看到他的clsid是d76e2820-1563-11cf-ac98-00aa004c0fa9。
一般在程式裡面都是用列舉。下面是一段示例**:
hresult hr;
ccombstr filtername(name);
icreatedevenum *psysdevenum = null;
hr = cocreateinstance(clsid_systemdeviceenum, null, clsctx_inproc_server,iid_icreatedevenum, (void **)&psysdevenum);
ienummoniker *penumcat = null;
hr = psysdevenum->createclassenumerator(clsid_legacyamfiltercategory, &penumcat, 0);
if (hr == s_ok)
variantclear(&varname);
ppropbag->release();
pmoniker->release();
}penumcat->release();
}psysdevenum->release();
name是乙個字串,用於存放要列舉的filter的friendlyname。需要注意的是createclassenumerator的時候的clsid_legacyamfiltercategory這個引數是指filter的型別,這裡是列舉解碼的filter。如果是編碼的filter就應該是clsid_videocompressorcategory。
clsid_legacyamfiltercategory對應directshow filter,
而clsid_videocompressorcategory 對應videocompressor目錄
filter的簡單認識
filter 把傳入的函式依次作用於每個元素,然後根據返回值是 true還 是false決定保留還是丟棄該元素。注意到filter 函式返回的是乙個iterator,也就是乙個惰性序列,所以要強迫filter 完成計算結果,需要用list 函式獲得所有結果並返回list。下面 是為了實現回數的判斷和...
filter 的各種值
之前只用過filter的opacity,竟然不知道filter還有很多的值,可以在我們的專案中設定使用。下面將會使用 屬性值的方式介紹filter。1.none。預設值,沒有效果。2.blur。給影象設定高斯模糊。radius 一值設定高斯函式的標準差,或者是螢幕上以多少畫素融在一起,所以值越大越模...
filter所謂的特性
其實在07 02這個例子裡,我們使用了兩個過濾器,encodingfilter負責設定編碼,securityfilter負責控制許可權,那這兩個過濾器是怎麼起作用的呢?它們兩個同時過濾乙個請求時誰先誰後呢?下面這個圖會告訴我們答案。所有的奧秘就在filter中的filterchain中。伺服器會按照...