HandVuFilter.h
上传用户:lijia5631
上传日期:2008-11-10
资源大小:1214k
文件大小:5k
源码类别:

视频捕捉/采集

开发平台:

MultiPlatform

  1. /**   * HandVu - a library for computer vision-based hand gesture   * recognition.   * Copyright (C) 2004 Mathias Kolsch, matz@cs.ucsb.edu   *   * This program is free software; you can redistribute it and/or   * modify it under the terms of the GNU General Public License   * as published by the Free Software Foundation; either version 2   * of the License, or (at your option) any later version.   *   * This program is distributed in the hope that it will be useful,   * but WITHOUT ANY WARRANTY; without even the implied warranty of   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   * GNU General Public License for more details.   *   * You should have received a copy of the GNU General Public License   * along with this program; if not, write to the Free Software   * Foundation, Inc., 59 Temple Place - Suite 330,    * Boston, MA  02111-1307, USA.   *   * $Id: HandVuFilter.h,v 1.11 2005/10/30 23:00:43 matz Exp $ **/ #include "IHandVuFilter.h"
  2. #include "ImageOverlay.h"
  3. class CUserStudyA;
  4. class CUserStudyB;
  5. class HandVu;
  6. typedef vector<HVFilterEventListener*> HVFEListenerVector;
  7. class CHandVuFilter : public CTransInPlaceFilter,
  8.                       public IHandVuFilter,
  9.                       public RefClock,
  10.                       public ISpecifyPropertyPages,
  11.                       public CPersistStream
  12. {
  13.  public:
  14.   DECLARE_IUNKNOWN;
  15.   static CUnknown * WINAPI CreateInstance(LPUNKNOWN punk, HRESULT *phr);
  16.   // Reveals HandVuFilter and ISpecifyPropertyPages
  17.   STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void ** ppv);
  18.   // CPersistStream stuff
  19.   HRESULT ScribbleToStream(IStream *pStream);
  20.   HRESULT ReadFromStream(IStream *pStream);
  21.   // Overrriden from CTransformFilter base class
  22.   HRESULT Transform(IMediaSample *pMediaSample);
  23.   HRESULT CheckInputType(const CMediaType *mtIn);
  24.   HRESULT CheckTransform(const CMediaType *mtIn, const CMediaType *mtOut);
  25.   HRESULT DecideBufferSize(IMemAllocator *pAlloc,
  26.                            ALLOCATOR_PROPERTIES *pProperties);
  27.   HRESULT GetMediaType(int iPosition, CMediaType *pMediaType);
  28.   // These implement the custom IHandVuFilter interface
  29.   STDMETHODIMP GetHandVuFilterParams(HandVuFilterParams& params) const;
  30.   STDMETHODIMP SetHandVuFilterParams(const HandVuFilterParams& params);
  31.   STDMETHODIMP Initialize(int width, int height, int iPixelSize, CameraController* pCamCon);   STDMETHODIMP LoadConductor(const string& filename);   STDMETHODIMP ConductorLoaded(bool* pLoaded);   STDMETHODIMP StartRecognition(int obj_id);   STDMETHODIMP StopRecognition(int obj_id);   STDMETHODIMP IsActive(bool* pActive);   STDMETHODIMP GetState(int obj_id, hvState& state);   STDMETHODIMP GetCenterPosition(double* pX, double* pY);   STDMETHODIMP GetRecognizedPosture(string& descriptor);   STDMETHODIMP SetOverlayLevel(int level);   STDMETHODIMP GetOverlayLevel(int* pLevel);   STDMETHODIMP CorrectDistortion(bool enable);   STDMETHODIMP CanCorrectDistortion(bool* pPossible);   STDMETHODIMP IsCorrectingDistortion(bool* pOn);   STDMETHODIMP SetDetectionArea(int left, int top, int right, int bottom);   STDMETHODIMP RecomputeNormalLatency();   STDMETHODIMP SetAdjustExposure(bool enable);   STDMETHODIMP CanAdjustExposure(bool* pLoaded);   STDMETHODIMP IsAdjustingExposure(bool* pEnabled);   STDMETHODIMP AddListener(HVFilterEventListener* pHVFListener);   STDMETHODIMP RemoveListener(HVFilterEventListener* pHVFListener);   STDMETHODIMP ToggleMaintenanceApp();   STDMETHODIMP ToggleFDLOnly();   STDMETHODIMP OnLButtonUp(UINT nFlags, double x, double y);
  32.   STDMETHODIMP OnMouseMove(UINT nFlags, double x, double y);   STDMETHODIMP TakeSnapshot();   STDMETHODIMP GetVersion(string& version);
  33. #if defined(HAVE_USER_STUDY)
  34.   STDMETHODIMP AbortStudyHV1Task();   STDMETHODIMP AbortStudyHV1Session();   STDMETHODIMP StartStudyHV1();   STDMETHODIMP StartStudyHV2(); #endif   
  35.   STDMETHODIMP SetTimecodeReader(IUnknown* tcr);
  36.   STDMETHODIMP SetVerbosity(int level, const string& logfilename);
  37.   // ISpecifyPropertyPages interface
  38.   STDMETHODIMP GetPages(CAUUID *pPages);
  39.     
  40.   // CPersistStream override
  41.   STDMETHODIMP GetClassID(CLSID *pClsid);
  42.   virtual RefTime GetCurrentTimeUsec() const;
  43.   virtual RefTime GetSampleTimeUsec() const;
  44.     
  45.  private:
  46.   // Constructor
  47.   CHandVuFilter(TCHAR *tszName, LPUNKNOWN punk, HRESULT *phr,
  48.                 bool bModifiesData=true);
  49.   ~CHandVuFilter();
  50.     
  51.   // Look after doing the special effect
  52.   BOOL CanPerformHandVuFilter(const CMediaType *pMediaType) const;
  53.   void HandVuFramenumber();
  54.   string GetTimecode();
  55.   void SaveImageArea(IplImage* pImg);
  56.  private:
  57.   // Private play critical section
  58.   mutable CCritSec         m_HandVuFilterLock;
  59.   HandVuFilterParams       m_params;
  60.   IplImage*                m_pColorHeader;
  61.   bool                     m_img_bottom_up;
  62.   int                      m_cxImage, m_cyImage; // image size, once we saw one
  63.   CComPtr<IAMTimecodeReader> m_pIAMTCReader;
  64.   RefTime                  m_t_sample;
  65.   HVFEListenerVector       m_HVFListenerPtrs;
  66.   CImageOverlay*           m_pOverlay;
  67. #ifdef HAVE_USER_STUDY
  68.   CUserStudyA*             m_pUserStudyA;
  69.   CUserStudyB*             m_pUserStudyB;
  70. #endif
  71.   bool                     m_show_maintenanceapp;
  72.   bool                     m_take_one_snapshot;
  73.   bool                     m_is_initialized;
  74.   bool                     m_FDL_only;
  75.   bool                     m_FDL_is_initialized;
  76. }; // HandVuFilter