mirror of https://github.com/opencv/opencv.git
Open Source Computer Vision Library
https://opencv.org/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
4.4 KiB
143 lines
4.4 KiB
#pragma once |
|
|
|
#include "pch.h" |
|
#include "BasicTimer.h" |
|
#include "QuadRenderer.h" |
|
#include <DrawingSurfaceNative.h> |
|
#include <ppltasks.h> |
|
#include <windows.storage.streams.h> |
|
#include <memory> |
|
#include <mutex> |
|
|
|
|
|
#include <opencv2\imgproc\types_c.h> |
|
|
|
|
|
namespace PhoneXamlDirect3DApp1Comp |
|
{ |
|
|
|
public enum class OCVFilterType |
|
{ |
|
ePreview, |
|
eGray, |
|
eCanny, |
|
eBlur, |
|
eFindFeatures, |
|
eSepia, |
|
eNumOCVFilterTypes |
|
}; |
|
|
|
class CameraCapturePreviewSink; |
|
class CameraCaptureSampleSink; |
|
|
|
public delegate void RequestAdditionalFrameHandler(); |
|
public delegate void RecreateSynchronizedTextureHandler(); |
|
|
|
[Windows::Foundation::Metadata::WebHostHidden] |
|
public ref class Direct3DInterop sealed : public Windows::Phone::Input::Interop::IDrawingSurfaceManipulationHandler |
|
{ |
|
public: |
|
Direct3DInterop(); |
|
|
|
Windows::Phone::Graphics::Interop::IDrawingSurfaceContentProvider^ CreateContentProvider(); |
|
|
|
// IDrawingSurfaceManipulationHandler |
|
virtual void SetManipulationHost(Windows::Phone::Input::Interop::DrawingSurfaceManipulationHost^ manipulationHost); |
|
|
|
event RequestAdditionalFrameHandler^ RequestAdditionalFrame; |
|
event RecreateSynchronizedTextureHandler^ RecreateSynchronizedTexture; |
|
|
|
property Windows::Foundation::Size WindowBounds; |
|
property Windows::Foundation::Size NativeResolution; |
|
property Windows::Foundation::Size RenderResolution |
|
{ |
|
Windows::Foundation::Size get(){ return m_renderResolution; } |
|
void set(Windows::Foundation::Size renderResolution); |
|
} |
|
void SetAlgorithm(OCVFilterType type) { m_algorithm = type; }; |
|
void UpdateFrame(byte* buffer, int width, int height); |
|
|
|
|
|
protected: |
|
// Event Handlers |
|
void OnPointerPressed(Windows::Phone::Input::Interop::DrawingSurfaceManipulationHost^ sender, Windows::UI::Core::PointerEventArgs^ args); |
|
void OnPointerMoved(Windows::Phone::Input::Interop::DrawingSurfaceManipulationHost^ sender, Windows::UI::Core::PointerEventArgs^ args); |
|
void OnPointerReleased(Windows::Phone::Input::Interop::DrawingSurfaceManipulationHost^ sender, Windows::UI::Core::PointerEventArgs^ args); |
|
|
|
internal: |
|
HRESULT STDMETHODCALLTYPE Connect(_In_ IDrawingSurfaceRuntimeHostNative* host); |
|
void STDMETHODCALLTYPE Disconnect(); |
|
HRESULT STDMETHODCALLTYPE PrepareResources(_In_ const LARGE_INTEGER* presentTargetTime, _Out_ BOOL* contentDirty); |
|
HRESULT STDMETHODCALLTYPE GetTexture(_In_ const DrawingSurfaceSizeF* size, _Out_ IDrawingSurfaceSynchronizedTextureNative** synchronizedTexture, _Out_ DrawingSurfaceRectF* textureSubRectangle); |
|
ID3D11Texture2D* GetTexture(); |
|
|
|
private: |
|
void StartCamera(); |
|
void ProcessFrame(); |
|
bool SwapFrames(); |
|
|
|
QuadRenderer^ m_renderer; |
|
Windows::Foundation::Size m_renderResolution; |
|
OCVFilterType m_algorithm; |
|
bool m_contentDirty; |
|
std::shared_ptr<cv::Mat> m_backFrame; |
|
std::shared_ptr<cv::Mat> m_frontFrame; |
|
std::mutex m_mutex; |
|
|
|
Windows::Phone::Media::Capture::AudioVideoCaptureDevice ^pAudioVideoCaptureDevice; |
|
ICameraCaptureDeviceNative* pCameraCaptureDeviceNative; |
|
IAudioVideoCaptureDeviceNative* pAudioVideoCaptureDeviceNative; |
|
CameraCapturePreviewSink* pCameraCapturePreviewSink; |
|
CameraCaptureSampleSink* pCameraCaptureSampleSink; |
|
|
|
//void ApplyPreviewFilter(const cv::Mat& image); |
|
void ApplyGrayFilter(cv::Mat* mat); |
|
void ApplyCannyFilter(cv::Mat* mat); |
|
void ApplyBlurFilter(cv::Mat* mat); |
|
void ApplyFindFeaturesFilter(cv::Mat* mat); |
|
void ApplySepiaFilter(cv::Mat* mat); |
|
}; |
|
|
|
class CameraCapturePreviewSink : |
|
public Microsoft::WRL::RuntimeClass< |
|
Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::RuntimeClassType::ClassicCom>, |
|
ICameraCapturePreviewSink> |
|
{ |
|
public: |
|
void SetDelegate(Direct3DInterop^ delegate) |
|
{ |
|
m_Direct3dInterop = delegate; |
|
} |
|
|
|
IFACEMETHODIMP_(void) OnFrameAvailable( |
|
DXGI_FORMAT format, |
|
UINT width, |
|
UINT height, |
|
BYTE* pixels); |
|
|
|
private: |
|
Direct3DInterop^ m_Direct3dInterop; |
|
}; |
|
|
|
class CameraCaptureSampleSink : |
|
public Microsoft::WRL::RuntimeClass< |
|
Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::RuntimeClassType::ClassicCom>, |
|
ICameraCaptureSampleSink> |
|
{ |
|
public: |
|
void SetDelegate(Direct3DInterop^ delegate) |
|
{ |
|
m_Direct3dInterop = delegate; |
|
} |
|
|
|
IFACEMETHODIMP_(void) OnSampleAvailable( |
|
ULONGLONG hnsPresentationTime, |
|
ULONGLONG hnsSampleDuration, |
|
DWORD cbSample, |
|
BYTE* pSample); |
|
|
|
private: |
|
Direct3DInterop^ m_Direct3dInterop; |
|
}; |
|
|
|
}
|
|
|