1.å¦ä½è®¾è®¡èªå®ä¹çDIrectShow transform filter
2.Shiro源码分析---FilterChain创建过程
3.filter的源码中文意思是什么?
4.filter过滤器配置如何不过滤一些页面
å¦ä½è®¾è®¡èªå®ä¹çDIrectShow transform filter
对äºDIrectShowçåå¦è èè¨ï¼æ大çå°é¾è«è¿äºå°è¯è®¾è®¡èªå®ä¹çfilterã
设计èªå®ä¹çtransform filteræ¯å°é¾ç
å 为 é¦å filteræ¯ä¸ç§dll ï¼åç¼å为.axï¼èç¼ådllå·¥ç¨éè¦ä¸å®çVCåºç¡ æ以建议å è¡¥å ä¸ç¹dllçç¥è¯
å ¶æ¬¡ dllç注åï¼GUIDççæåå·¥ç¨çé ç½®é½å¾éº»ç¦ã
å次 ç½ä¸ç¼ºä¹ç°æçtransform filterçä¾åãDirectShowç»çæºç æ¯å¦NULLINPLACE åCONTRASTé½å¤ªå¤æï¼é½å¸¦æ对è¯æ¡åå±æ§é¡µï¼ä¸éååå¦è ï¼èä¸è¿äºä¾å 没æä¸ä¸ªæ¶åå°å¾åæ ¼å¼ç转æ¢ï¼ètransform filteræ大çå ¬ç¨å°±æ¯åªä½ç±»åç转æ¢ï¼å æ¤è¿äºä¾åä¸éç¨
ä½ä¸ºä¸ä¸ªåå¦è ï¼æ深深åå°è¿äºé®é¢çå°æ°ï¼ç»è¿å»è¦é»ç ç»äºèµ°åºäºè¿ä¸ªæ³¥æ½ï¼è±ç¶å¼æãäºæ¯æå®è®°å½ä¸æ¥ï¼å¸æå¯ä»¥å¯¹å ¶ä»äººæ帮å©ï¼ä¹ä½ä¸ºå¯¹å¹´çä¸ä¸ªå°ç»ã
æçä¾åæ¯ è®¾è®¡ä¸ä¸ª transform filter æ YUY2 bit çåªä½è½¬å为RGB bitçç±»åã
åå æ¯æçæå头åªæ¯æYUY2 bitè¿ç§æ ¼å¼ï¼ ææ³å¾å°ä½å¾ãã顺便å¦ä¹ ä¸ä¸Filterç设计
以ä¸ä¸ºå ·ä½æ¥éª¤ï¼
ä¸ é ç½®å¼åç¯å¢
1. VCä¸å¨Tools->Options->Directories 设置好DirectX SDKç头æ件ååºæ件路å¾
2. ç¼è¯äºåºç±»æºç ,çæstrmbasd.lib (debugç), strmbase.lib(releaseç)
3. VCå导æ°å»ºä¸ä¸ªwin DLLï¼emptyï¼å·¥ç¨
4. Setting->Link->Output file name: YUV2RGBfilter.ax
5. Setting->Linkå å ¥strmbasd.lib winmm.lib quartz.lib vfw.lib (注æè·¯å¾)
6. å®ä¹ä¸ä¸ªåå.defæ件ï¼å å ¥å°å·¥ç¨ï¼å 容å¦ä¸ï¼
LIBRARY YUV2RGBfilter.ax
EXPORTS
DllMain PRIVATE
DllGetClassObject PRIVATE
DllCanUnloadNow PRIVATE
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE
7.建ç«ä¸ä¸ªç±» YUV2RGBfilter 建ç«ä»çcppæ件åhæ件
8. å¨YUV2RGBfilter.cppä¸å®ä¹DLLçå ¥å£å½æ°å注å æ¾å¨cppæ件çæå
//
// DllEntryPoint
//
extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE, ULONG, LPVOID);
BOOL APIENTRY DllMain(HANDLE hModule,
DWORD dwReason,
LPVOID lpReserved)
{
return DllEntryPoint((HINSTANCE)(hModule), dwReason, lpReserved);
}
////////////////////////////////////////////////////////////////////////
//
// Exported entry points for registration and unregistration
// (in this case they only call through to default implementations).
//
////////////////////////////////////////////////////////////////////////
STDAPI DllRegisterServer()
{
return AMovieDllRegisterServer2( TRUE );
}
STDAPI DllUnregisterServer()
{
return AMovieDllRegisterServer2( FALSE );
}
9. cppæ件ä¸è¦å å«ç头æ件
#include <streams.h>
#include <windows.h>
#include <initguid.h>
#include <olectl.h>
#if ( > _MSC_VER)
#include <olectlid.h>
#endif
#include "Y2Ruids.h" // our own public guids
#include "YUV2RGBfilter.h"
äº å¼åFilter
1. çæGUID( å½ä»¤è¡æ¨¡å¼ä¸è¿è¡guidgenå·¥å ·) 为ä»å»ºç«ä¸ä¸ªæ件Y2Ruids.h åç¬å¼ç¨
#include <initguid.h>
// YUV2toRGB Filter Object
// { FFC8FD-B1A6-b0-A-D6EDEAFDA}
DEFINE_GUID(CLSID_YUV2toRGB,
0xffc8fd, 0xb1a6, 0xb0, 0xa3, 0x8, 0xd6, 0xed, 0xea, 0xf4, 0x5, 0xda);
2. æé CYUV2RGBfilterç±» 继æ¿èªCTransformFilter åå¨TransformFilter.hä¸
// ----------------------------------------------------------------------------
// Class definitions of CYUV2RGBfilter
// ----------------------------------------------------------------------------
//
//
class CYUV2RGBfilter : public CTransformFilter
{
public:
static CUnknown * WINAPI CreateInstance(LPUNKNOWN punk, HRESULT *phr);
STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void ** ppv);
DECLARE_IUNKNOWN;
// override pure virtual function
HRESULT CheckInputType(const CMediaType *mtIn);
HRESULT CheckTransform(const CMediaType *mtIn, const CMediaType *mtOut);
HRESULT DecideBufferSize(IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *pProp);
HRESULT GetMediaType(int iPosition, CMediaType *pMediaType);
HRESULT Transform(IMediaSample *pIn, IMediaSample *pOut);
private:
//Constructor
CYUV2RGBfilter(TCHAR *tszName, LPUNKNOWN punk, HRESULT *phr);
// member function
VOID ChangeFormat(AM_MEDIA_TYPE* pAdjustedType);
DWORD ConvertYUV2toRGB(BYTE* yuv, BYTE* rgb, DWORD dsize);
// member variable
const long m_lBufferRequest;
CCritSec m_Y2RLock; // To serialise access.
};
3. ææ ¼å¼æ¹åæé å½æ°
//
// CNullInPlace::Constructor
//
CYUV2RGBfilter::CYUV2RGBfilter(TCHAR *tszName,LPUNKNOWN punk,HRESULT *phr) :
CTransformFilter(tszName, punk, CLSID_YUV2toRGB),
m_lBufferRequest(1)
{
ASSERT(tszName);
ASSERT(phr);
} // CYUV2RGBfilter
4. æ¹åCTransformFilteräºä¸ªçº¯èå½æ°ï¼æéè¦çå°æ¹ï¼
HRESULT CheckInputType(const CMediaType *mtIn);
HRESULT CheckTransform(const CMediaType *mtIn, const CMediaType *mtOut);
HRESULT DecideBufferSize(IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *pProp);
HRESULT GetMediaType(int iPosition, CMediaType *pMediaType);
HRESULT Transform(IMediaSample *pIn, IMediaSample *pOut);
5. 设计èªå·±çç§æå½æ° å®æä¸å®çåè½
6. 注åFilterä¿¡æ¯
// 注åä¿¡æ¯
//setup data
const AMOVIESETUP_MEDIATYPE
sudPinTypes = { &MEDIATYPE_Video // clsMajorType
, &MEDIASUBTYPE_NULL } ; // clsMinorType
const AMOVIESETUP_PIN
psudPins[] = { { L"Input" // strName
, FALSE // bRendered
, FALSE // bOutput
, FALSE // bZero
, FALSE // bMany
, &CLSID_NULL // clsConnectsToFilter
, L"Output" // strConnectsToPin
, 1 // nTypes
, &sudPinTypes } // lpTypes
, { L"Output" // strName
, FALSE // bRendered
, TRUE // bOutput
, FALSE // bZero
, FALSE // bMany
, &CLSID_NULL // clsConnectsToFilter
, L"Input" // strConnectsToPin
, 1 // nTypes
, &sudPinTypes } }; // lpTypes
Shiro源码分析---FilterChain创建过程
在Shiro框架中,无论是设计进行认证还是权限控制,都依赖于过滤器的源码配置与应用。在实际开发中,设计可能需要配置多个过滤器,源码但每个请求所经过的设计视频采集 源码过滤器组合却因请求不同而异。因此,源码理解一个请求会通过哪些过滤器,设计对于熟练使用Shiro至关重要。源码本文将详细解析请求通过的设计过滤器创建过程。
Shiro框架通过`org.apache.shiro.web.filter.mgt.FilterChainResolver`接口定义了如何确定一个请求应经过哪些过滤器。源码接口中的设计唯一方法`getChain`负责查找并组装一个过滤器链(FilterChain),该链包含了请求处理过程中所应用的源码所有过滤器。`FilterChain`是设计一个熟知的概念,尤其是源码对于Servlet开发人员来说,它在日常工作中常见。而`FilterChainResolver`仅是毕业季源码一个接口,Shiro提供了默认实现类`org.apache.shiro.web.filter.mgt.PathMatchingFilterChainResolver`,该实现类利用请求路径来匹配相应的过滤器。
在深入理解PathMatchingFilterChainResolver的源码前,先来看看FilterChainManager是如何管理和创建FilterChain的。Shiro提供了一个默认的FilterChainManager实现类`org.apache.shiro.web.filter.mgt.DefaultFilterChainManager`。其关键方法`createChain`在系统启动时被调用,用于创建各个FilterChain。以配置示例`/static/**、烈焰源码修改/formfilterlogin,/role`为例,`chainName`与`chainDefinition`分别代表了需要管理的FilterChain名称与定义。
了解了FilterChainManager的创建与管理机制后,接下来关注FilterChainResolver如何确定请求所需过滤器链。在`DefaultFilterChainManager.proxy`方法中,`NamedFilterList`的实现类`org.apache.shiro.web.filter.mgt.SimpleNamedFilterList`被调用,此步骤是jfinal源码解读确定过滤器链的关键环节。
至此,Shiro框架中FilterChain创建过程已全面解析完成。如有任何错误或需要进一步讨论的问题,欢迎指正。感谢阅读,期待更多的技术交流。
filter的中文意思是什么?
Filter 技术是servlet 2.3 新增加的功能。servlet2.3是mrp计算源码sun公司于年月发布的,它的开发者包括许多个人和公司团体,充分体现了sun公司所倡导的代码开放性原则。在众多参与者的共同努力下,servlet2.3比以往功能都强大了许多,而且性能也有了大幅提高。
扩展资料
Filter实际上只是一些函数,在编写函数之前,要确定这个Filter属于哪一类,不同类的Filter,所需要的参数是不一样的,缺省情况下,参数个数为一个。
在WordPress中,Filter的类名是通过Tag来指定的,每个Tag下可以定义很多Filter,每个Filter又可以有自己的优先级。Filter是通过Tag来调用的,每次调用,注册在该Tag下的所有的Filter都会被运行,
这些Filter的调用顺序是根据注册时定义的优先级来确定的,优先级数值低的先执行,优先级数值高的后执行。
要知道具体某一类Filter的参数是什么,需要先知道该类Filter的Tag名,不同的Tag在不同的时候会被调用,通过查阅WordPress文档找到添加Filter的适当地方。
然后在WordPress的源码中搜索该Tag的名字,查找某个已加入该Tag的函数或者说是Filter,确定函数参数以后就可以编写自己的实现函数了。注意要在函数中返回处理过后的内容以供其他的Filter继续处理。
百度百科-Filter
filter过滤器配置如何不过滤一些页面
一般我的方法是
判断uri的是不是这三个
如果是这三个,不做处理,直接直接 下一步
=================
唉,直接给你看源码吧
在doFilter方法里写上
String contextPath = InitObjects.getContextPath();
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
//获得用户请求的uri
String uri = httpServletRequest.getRequestURI();
//eccludedPages是个List,存放着比如index.jsp,error.jsp等不需要过滤的页面
if (!excludedPages.contains(uri)) {
}
}
filterChain.doFilter(request, response);