#pragma once
#include <Windows.h>
#include <tchar.h>
#include "myOpenCV.h"
#include <vector>
#include "BaseProcess.h"
#include <d3d9.h>
#include <dshow.h>
#include <Vmr9.h>
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
#define SAFE_RELEASE(x) { if (x) x->Release(); x = NULL; }
#define CHECK(x) { if(((HRESULT)(x)) < 0) return false; }
class ECTrainerGUI : public BaseProcess
{
private:
const cv::String WIN_DISP = "ECTrainer Display";
const cv::String WIN_MAIN = "Eye Contact Trainer";
const cv::Size MAIN_FRAME_SIZE = cv::Size(1480, 620);
const int IMAGE_WIDTH = 640;
const cv::Size DISP_SIZE = cv::Size(640, 480);
const cv::Point SCENE_BUFFER_POS = cv::Point(170, 120);
const cv::Point DISP_IMAGE_POS = cv::Point(820, 120);
const int KEY_ESC = 27;
cv::Mat _MainFrame; // メインウインドウフレーム
cv::Mat _DispImage; // 刺激画像(操作者用)
cv::Mat _DispBuffer; // 刺激画面(被験者用)
//cv::Mat _SceneBuffer; // 視野画像
cv::Mat _Logo; // ロゴ
cv::Mat _blank; // ブランク
int _SceneBufferHeight;
float _SceneBufferScale;
int _DispImageHeight;
HWND _hWndMain;
RECT _DispRect; // DirectShow動画表示位置
HWND _hWnd;
LPDIRECT3D9 _pD3D;
LPDIRECT3DDEVICE9 _pD3DDev;
IGraphBuilder* _pGB;
IBaseFilter* _pVMR9;
IBaseFilter* _pSource;
ICaptureGraphBuilder2* _pCGB2;
IMediaControl* _pMediaCont;
IMediaEvent* _pMediaEvent;
IMediaPosition* _pMediaPosition;
bool InitDx(HINSTANCE hInstance);
bool PlayMovie(std::wstring movie);
bool StopMovie();
bool IsPlaying();
public:
ECTrainerGUI(ECTrainer* pEct);
~ECTrainerGUI();
bool Init(HINSTANCE hInstance);
bool MainLoop();
HWND GetMainHWnd() { return _hWndMain; }
void SetDispBuffer(cv::Mat& img);
};