📄 cvcamavi.h
字号:
/*M/////////////////////////////////////////////////////////////////////////////////////////// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.//// By downloading, copying, installing or using the software you agree to this license.// If you do not agree to this license, do not download, install,// copy or use the software.////// Intel License Agreement// For Open Source Computer Vision Library//// Copyright (C) 2000, Intel Corporation, all rights reserved.// Third party copyrights are property of their respective owners.//// Redistribution and use in source and binary forms, with or without modification,// are permitted provided that the following conditions are met://// * Redistribution's of source code must retain the above copyright notice,// this list of conditions and the following disclaimer.//// * Redistribution's in binary form must reproduce the above copyright notice,// this list of conditions and the following disclaimer in the documentation// and/or other materials provided with the distribution.//// * The name of Intel Corporation may not be used to endorse or promote products// derived from this software without specific prior written permission.//// This software is provided by the copyright holders and contributors "as is" and// any express or implied warranties, including, but not limited to, the implied// warranties of merchantability and fitness for a particular purpose are disclaimed.// In no event shall the Intel Corporation or contributors be liable for any direct,// indirect, incidental, special, exemplary, or consequential damages// (including, but not limited to, procurement of substitute goods or services;// loss of use, data, or profits; or business interruption) however caused// and on any theory of liability, whether in contract, strict liability,// or tort (including negligence or otherwise) arising in any way out of// the use of this software, even if advised of the possibility of such damage.////M*/#ifndef __CVCAMAVI_H__#define __CVCAMAVI_H__#include <string>using namespace std ;/////////////////////////////////////////////////////////////////////////////////////////template <class T> class SafePointer{ protected: T* m_pointer; public: SafePointer() : m_pointer(0) {}; SafePointer(T* pointer) {m_pointer = pointer;}; SafePointer(const SafePointer& p) { m_pointer = p.m_pointer; if(m_pointer) { m_pointer->AddRef(); } }; ~SafePointer() { if(m_pointer) { m_pointer->Release(); m_pointer = NULL; }//if(m_pointer) }; T* value() {return m_pointer;}; T* operator ->() {return m_pointer;}; T** operator &() { if(m_pointer) { m_pointer->Release(); m_pointer = NULL; }//if(m_pointer) return &m_pointer; }; void operator =(T* pointer) { if(m_pointer) m_pointer->Release(); m_pointer = pointer; }; int is_valid() {return int(m_pointer);};};/////////////////////////////////////////////////////////////////////////////////////////class cvcamUseCom{public: cvcamUseCom() { CoInitialize(0); } ~cvcamUseCom() { CoUninitialize();; }};/////////////////////////////////////////////////////////////////////////////////////////class HrExeption{public: HRESULT hr; int occasion;};/////////////////////////////////////////////////////////////////////////////////////////class SafeHr{public: SafeHr(): m_occasion(0) { } HRESULT operator=(HRESULT res) { ++m_occasion; if (FAILED(res)) { HrExeption excpt; excpt.hr = res; excpt.occasion = m_occasion; throw excpt; } return res; }protected: int m_occasion;};/////////////////////////////////////////////////////////////////////////////////////////class cvcamSourceFile{public: HRESULT WaitForCompletion(); HRESULT SetWindow(const HWND window); cvcamSourceFile(const char* file = NULL, void (*callback)(void*) = NULL); //Media controlling methods HRESULT Start(); HRESULT Stop(); HRESULT Pause(); HRESULT Resume(); //Property settings HRESULT SetCallBack(void (*callback)(void*)); HRESULT SetWidth(const int width); HRESULT SetHeight(const int height); bool IsRunning(); bool IsValid; //Seeking methods HRESULT SetTimeFormat(const int format); HRESULT GetDuration(LONGLONG *pDuration); HRESULT GetCurrentPosition(LONGLONG *pCurrent); HRESULT SetPosition(LONGLONG *pCurrent); protected: HWND m_hWnd; //Initialise/Release COM cvcamUseCom Iusecom; //DirectShow Interfaces SafePointer<IGraphBuilder> m_pGraph; SafePointer<IMediaControl> m_pMediaControl; SafePointer<IMediaEventEx> m_pEvent; SafePointer<IVideoWindow> m_pVideoWindow; SafePointer<IPin> m_pPin; SafePointer<IBasicVideo> m_pBasicVideo; SafePointer<IBaseFilter> m_pSFilter; SafePointer<IProxyTransform> m_pProxyTrans; SafePointer<IPin> m_pSourceOut; SafePointer<IPin> m_pProxyIn; SafePointer<IPin> m_pProxyOut; SafePointer<IEnumPins> m_pEnumPins; SafePointer<IBaseFilter> m_pProxyBase; SafePointer<IMediaSeeking> m_pMediaSeeking; //Data string m_file; void (*m_pcallback)(void*); int m_width; int m_height; SafeHr m_hr;private:};/////////////////////////////////////////////////////////////////////////////////////////#define MAX_AVIS 100#define AVIS_START 1000typedef unsigned int uint;class cvcamAVIs{public: cvcamAVIs() { memset(files,0,MAX_AVIS); }; uint AddSource( char* path, void (*callback)(void*) ) { cvcamSourceFile* tmp = new cvcamSourceFile(path, callback); if (!tmp) return -1; if(!tmp->IsValid) return -1; uint i=0; while (files[i]) i++; if(i>= MAX_AVIS) return (uint)-1; files[i] = tmp; return i+AVIS_START; } bool ReleaseSource(uint source) {// source -= AVIS_START; if (files[source]) { delete files[source]; files[source] = NULL; return true; } return false; } cvcamSourceFile* operator[](uint source) {// source -= AVIS_START; if( source < MAX_AVIS ) return files[source]; return NULL; } ~cvcamAVIs() {// for(uint i = AVIS_START; i < AVIS_START+MAX_AVIS; i++) for(uint i = 0; i < MAX_AVIS; i++) ReleaseSource(i); }protected: cvcamSourceFile* files[MAX_AVIS]; private:};/////////////////////////////////////////////////////////////////////////////////////////extern HINSTANCE DLLhinst;#endif //__CVCAMAVI_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -