1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 110f224ffecd2f1190744b5bc5c97f4ce373ba0adetommi@webrtc.org#ifndef WEBRTC_MODULES_VIDEO_CAPTURE_MAIN_SOURCE_WINDOWS_SINK_FILTER_DS_H_ 120f224ffecd2f1190744b5bc5c97f4ce373ba0adetommi@webrtc.org#define WEBRTC_MODULES_VIDEO_CAPTURE_MAIN_SOURCE_WINDOWS_SINK_FILTER_DS_H_ 13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <Streams.h> // Include base DS filter header files 15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1687c29b570711208c5f74bf9eaffbea549de866c7pbos@webrtc.org#include "webrtc/modules/video_capture/include/video_capture_defines.h" 17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc 19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace videocapturemodule 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//forward declaration 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass CaptureSinkFilter; 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/** 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * input pin for camera input 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass CaptureInputPin: public CBaseInputPin 30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic: 32f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org int32_t _moduleId; 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VideoCaptureCapability _requestedCapability; 35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VideoCaptureCapability _resultingCapability; 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org HANDLE _threadHandle; 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 38f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org CaptureInputPin(int32_t moduleId, 39f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org IN TCHAR* szName, 40f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org IN CaptureSinkFilter* pFilter, 41f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org IN CCritSec * pLock, 42f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org OUT HRESULT * pHr, 43f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org IN LPCWSTR pszName); 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual ~CaptureInputPin(); 45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org HRESULT GetMediaType (IN int iPos, OUT CMediaType * pmt); 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org HRESULT CheckMediaType (IN const CMediaType * pmt); 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org STDMETHODIMP Receive (IN IMediaSample *); 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org HRESULT SetMatchingMediaType(const VideoCaptureCapability& capability); 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass CaptureSinkFilter: public CBaseFilter 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic: 56f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org CaptureSinkFilter(IN TCHAR * tszName, 57f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org IN LPUNKNOWN punk, 58f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org OUT HRESULT * phr, 59f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org VideoCaptureExternal& captureObserver, 60f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org int32_t moduleId); 61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual ~CaptureSinkFilter(); 62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // -------------------------------------------------------------------- 64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // class methods 65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 66f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org void ProcessCapturedFrame(unsigned char* pBuffer, int32_t length, 67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const VideoCaptureCapability& frameInfo); 68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // explicit receiver lock aquisition and release 69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void LockReceive() { m_crtRecv.Lock();} 70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void UnlockReceive() {m_crtRecv.Unlock();} 71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // explicit filter lock aquisition and release 72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void LockFilter() {m_crtFilter.Lock();} 73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void UnlockFilter() { m_crtFilter.Unlock(); } 74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void SetFilterGraph(IGraphBuilder* graph); // Used if EVR 75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // -------------------------------------------------------------------- 77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // COM interfaces 78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgDECLARE_IUNKNOWN ; 79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org STDMETHODIMP SetMatchingMediaType(const VideoCaptureCapability& capability); 80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // -------------------------------------------------------------------- 82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // CBaseFilter methods 83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int GetPinCount (); 84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CBasePin * GetPin ( IN int Index); 85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org STDMETHODIMP Pause (); 86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org STDMETHODIMP Stop (); 87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org STDMETHODIMP GetClassID ( OUT CLSID * pCLSID); 88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // -------------------------------------------------------------------- 89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // class factory calls this 90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org static CUnknown * CreateInstance (IN LPUNKNOWN punk, OUT HRESULT * phr); 91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprivate: 92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CCritSec m_crtFilter; // filter lock 93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CCritSec m_crtRecv; // receiver lock; always acquire before filter lock 94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CaptureInputPin * m_pInput; 95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VideoCaptureExternal& _captureObserver; 96f7e44d647cd0f893a185dfbe043cb313cab29fd0pbos@webrtc.org int32_t _moduleId; 97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 983b89e10f31160da35b408fd00cb8f89d2b08862dpbos@webrtc.org} // namespace videocapturemodule 993b89e10f31160da35b408fd00cb8f89d2b08862dpbos@webrtc.org} // namespace webrtc 1000f224ffecd2f1190744b5bc5c97f4ce373ba0adetommi@webrtc.org#endif // WEBRTC_MODULES_VIDEO_CAPTURE_MAIN_SOURCE_WINDOWS_SINK_FILTER_DS_H_ 101