Commit 38723b03 authored by Vladimir Dudnik's avatar Vladimir Dudnik

simplified sample's interface (remove odd "no processing" branch, add print to…

simplified sample's interface (remove odd "no processing" branch, add print to screen for processing mode)
parent cd8143be
...@@ -177,10 +177,6 @@ public: ...@@ -177,10 +177,6 @@ public:
switch (m_mode) switch (m_mode)
{ {
case MODE_NOP:
// no processing
break;
case MODE_CPU: case MODE_CPU:
{ {
// process video frame on CPU // process video frame on CPU
...@@ -195,7 +191,7 @@ public: ...@@ -195,7 +191,7 @@ public:
cv::Mat m(m_height, m_width, CV_8UC4, mappedTex.pData, (int)mappedTex.RowPitch); cv::Mat m(m_height, m_width, CV_8UC4, mappedTex.pData, (int)mappedTex.RowPitch);
if (!m_disableProcessing) if (m_demo_processing)
{ {
// blur D3D10 surface with OpenCV on CPU // blur D3D10 surface with OpenCV on CPU
cv::blur(m, m, cv::Size(15, 15), cv::Point(-7, -7)); cv::blur(m, m, cv::Size(15, 15), cv::Point(-7, -7));
...@@ -213,9 +209,9 @@ public: ...@@ -213,9 +209,9 @@ public:
cv::directx::convertFromD3D10Texture2D(pSurface, u); cv::directx::convertFromD3D10Texture2D(pSurface, u);
if (!m_disableProcessing) if (m_demo_processing)
{ {
// blur D3D9 surface with OpenCV on GPU with OpenCL // blur D3D10 surface with OpenCV on GPU with OpenCL
cv::blur(u, u, cv::Size(15, 15), cv::Point(-7, -7)); cv::blur(u, u, cv::Size(15, 15), cv::Point(-7, -7));
} }
...@@ -266,13 +262,15 @@ public: ...@@ -266,13 +262,15 @@ public:
cv::Mat m(m_height, m_width, CV_8UC4, mappedTex.pData, (int)mappedTex.RowPitch); cv::Mat m(m_height, m_width, CV_8UC4, mappedTex.pData, (int)mappedTex.RowPitch);
cv::String strMode = cv::format("%s", m_modeStr[mode].c_str()); cv::String strMode = cv::format("%s", m_modeStr[mode].c_str());
cv::String strFPS = cv::format("%2.1f", fps); cv::String strProcessing = m_demo_processing ? "blur frame" : "copy frame";
cv::String strDevName = cv::format("%s", oclDevName.c_str()); cv::String strFPS = cv::format("%2.1f", fps);
cv::String strDevName = cv::format("%s", oclDevName.c_str());
cv::putText(m, strMode, cv::Point(0, 16), 1, 0.8, cv::Scalar(0, 0, 0)); cv::putText(m, strMode, cv::Point(0, 16), 1, 0.8, cv::Scalar(0, 0, 0));
cv::putText(m, strFPS, cv::Point(0, 32), 1, 0.8, cv::Scalar(0, 0, 0)); cv::putText(m, strProcessing, cv::Point(0, 32), 1, 0.8, cv::Scalar(0, 0, 0));
cv::putText(m, strDevName, cv::Point(0, 48), 1, 0.8, cv::Scalar(0, 0, 0)); cv::putText(m, strFPS, cv::Point(0, 48), 1, 0.8, cv::Scalar(0, 0, 0));
cv::putText(m, strDevName, cv::Point(0, 64), 1, 0.8, cv::Scalar(0, 0, 0));
m_pSurface->Unmap(subResource); m_pSurface->Unmap(subResource);
......
...@@ -71,19 +71,19 @@ public: ...@@ -71,19 +71,19 @@ public:
&m_pD3D11Ctx); &m_pD3D11Ctx);
if (FAILED(r)) if (FAILED(r))
{ {
return -1; throw std::runtime_error("D3D11CreateDeviceAndSwapChain() failed!");
} }
r = m_pD3D11SwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&m_pBackBuffer); r = m_pD3D11SwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&m_pBackBuffer);
if (FAILED(r)) if (FAILED(r))
{ {
return -1; throw std::runtime_error("GetBufer() failed!");
} }
r = m_pD3D11Dev->CreateRenderTargetView(m_pBackBuffer, NULL, &m_pRenderTarget); r = m_pD3D11Dev->CreateRenderTargetView(m_pBackBuffer, NULL, &m_pRenderTarget);
if (FAILED(r)) if (FAILED(r))
{ {
return -1; throw std::runtime_error("CreateRenderTargetView() failed!");
} }
m_pD3D11Ctx->OMSetRenderTargets(1, &m_pRenderTarget, NULL); m_pD3D11Ctx->OMSetRenderTargets(1, &m_pRenderTarget, NULL);
...@@ -113,8 +113,7 @@ public: ...@@ -113,8 +113,7 @@ public:
r = m_pD3D11Dev->CreateTexture2D(&desc, NULL, &m_pSurface); r = m_pD3D11Dev->CreateTexture2D(&desc, NULL, &m_pSurface);
if (FAILED(r)) if (FAILED(r))
{ {
std::cerr << "Can't create texture with input image" << std::endl; throw std::runtime_error("Can't create texture with input image");
return -1;
} }
// initialize OpenCL context of OpenCV lib from DirectX // initialize OpenCL context of OpenCV lib from DirectX
...@@ -137,7 +136,7 @@ public: ...@@ -137,7 +136,7 @@ public:
HRESULT r; HRESULT r;
if (!m_cap.read(m_frame_bgr)) if (!m_cap.read(m_frame_bgr))
return -1; throw std::runtime_error("Can't get frame");
cv::cvtColor(m_frame_bgr, m_frame_rgba, CV_RGB2BGRA); cv::cvtColor(m_frame_bgr, m_frame_rgba, CV_RGB2BGRA);
...@@ -147,7 +146,7 @@ public: ...@@ -147,7 +146,7 @@ public:
r = m_pD3D11Ctx->Map(m_pSurface, subResource, D3D11_MAP_WRITE_DISCARD, 0, &mappedTex); r = m_pD3D11Ctx->Map(m_pSurface, subResource, D3D11_MAP_WRITE_DISCARD, 0, &mappedTex);
if (FAILED(r)) if (FAILED(r))
{ {
return r; throw std::runtime_error("surface mapping failed!");
} }
cv::Mat m(m_height, m_width, CV_8UC4, mappedTex.pData, (int)mappedTex.RowPitch); cv::Mat m(m_height, m_width, CV_8UC4, mappedTex.pData, (int)mappedTex.RowPitch);
...@@ -176,15 +175,11 @@ public: ...@@ -176,15 +175,11 @@ public:
r = get_surface(&pSurface); r = get_surface(&pSurface);
if (FAILED(r)) if (FAILED(r))
{ {
return -1; throw std::runtime_error("get_surface() failed!");
} }
switch (m_mode) switch (m_mode)
{ {
case MODE_NOP:
// no processing
break;
case MODE_CPU: case MODE_CPU:
{ {
// process video frame on CPU // process video frame on CPU
...@@ -194,14 +189,14 @@ public: ...@@ -194,14 +189,14 @@ public:
r = m_pD3D11Ctx->Map(m_pSurface, subResource, D3D11_MAP_WRITE_DISCARD, 0, &mappedTex); r = m_pD3D11Ctx->Map(m_pSurface, subResource, D3D11_MAP_WRITE_DISCARD, 0, &mappedTex);
if (FAILED(r)) if (FAILED(r))
{ {
return r; throw std::runtime_error("surface mapping failed!");
} }
cv::Mat m(m_height, m_width, CV_8UC4, mappedTex.pData, (int)mappedTex.RowPitch); cv::Mat m(m_height, m_width, CV_8UC4, mappedTex.pData, (int)mappedTex.RowPitch);
if (!m_disableProcessing) if (m_demo_processing)
{ {
// blur D3D10 surface with OpenCV on CPU // blur data from D3D11 surface with OpenCV on CPU
cv::blur(m, m, cv::Size(15, 15), cv::Point(-7, -7)); cv::blur(m, m, cv::Size(15, 15), cv::Point(-7, -7));
} }
...@@ -217,9 +212,9 @@ public: ...@@ -217,9 +212,9 @@ public:
cv::directx::convertFromD3D11Texture2D(pSurface, u); cv::directx::convertFromD3D11Texture2D(pSurface, u);
if (!m_disableProcessing) if (m_demo_processing)
{ {
// blur D3D9 surface with OpenCV on GPU with OpenCL // blur data from D3D11 surface with OpenCV on GPU with OpenCL
cv::blur(u, u, cv::Size(15, 15), cv::Point(-7, -7)); cv::blur(u, u, cv::Size(15, 15), cv::Point(-7, -7));
} }
...@@ -241,7 +236,7 @@ public: ...@@ -241,7 +236,7 @@ public:
r = m_pD3D11SwapChain->Present(0, 0); r = m_pD3D11SwapChain->Present(0, 0);
if (FAILED(r)) if (FAILED(r))
{ {
return -1; throw std::runtime_error("switch betweem fronat and back buffers failed!");
} }
} // try } // try
...@@ -251,6 +246,12 @@ public: ...@@ -251,6 +246,12 @@ public:
return 10; return 10;
} }
catch (const std::exception& e)
{
std::cerr << "Exception: " << e.what() << std::endl;
return 11;
}
return 0; return 0;
} // render() } // render()
...@@ -265,18 +266,20 @@ public: ...@@ -265,18 +266,20 @@ public:
r = m_pD3D11Ctx->Map(pSurface, subResource, D3D11_MAP_WRITE_DISCARD, 0, &mappedTex); r = m_pD3D11Ctx->Map(pSurface, subResource, D3D11_MAP_WRITE_DISCARD, 0, &mappedTex);
if (FAILED(r)) if (FAILED(r))
{ {
return; throw std::runtime_error("surface mapping failed!");
} }
cv::Mat m(m_height, m_width, CV_8UC4, mappedTex.pData, (int)mappedTex.RowPitch); cv::Mat m(m_height, m_width, CV_8UC4, mappedTex.pData, (int)mappedTex.RowPitch);
cv::String strMode = cv::format("%s", m_modeStr[mode].c_str()); cv::String strMode = cv::format("%s", m_modeStr[mode].c_str());
cv::String strFPS = cv::format("%2.1f", fps); cv::String strProcessing = m_demo_processing ? "blur frame" : "copy frame";
cv::String strDevName = cv::format("%s", oclDevName.c_str()); cv::String strFPS = cv::format("%2.1f", fps);
cv::String strDevName = cv::format("%s", oclDevName.c_str());
cv::putText(m, strMode, cv::Point(0, 16), 1, 0.8, cv::Scalar(0, 0, 0)); cv::putText(m, strMode, cv::Point(0, 16), 1, 0.8, cv::Scalar(0, 0, 0));
cv::putText(m, strFPS, cv::Point(0, 32), 1, 0.8, cv::Scalar(0, 0, 0)); cv::putText(m, strProcessing, cv::Point(0, 32), 1, 0.8, cv::Scalar(0, 0, 0));
cv::putText(m, strDevName, cv::Point(0, 48), 1, 0.8, cv::Scalar(0, 0, 0)); cv::putText(m, strFPS, cv::Point(0, 48), 1, 0.8, cv::Scalar(0, 0, 0));
cv::putText(m, strDevName, cv::Point(0, 64), 1, 0.8, cv::Scalar(0, 0, 0));
m_pD3D11Ctx->Unmap(pSurface, subResource); m_pD3D11Ctx->Unmap(pSurface, subResource);
......
...@@ -154,10 +154,6 @@ public: ...@@ -154,10 +154,6 @@ public:
switch (m_mode) switch (m_mode)
{ {
case MODE_NOP:
// no processing
break;
case MODE_CPU: case MODE_CPU:
{ {
// process video frame on CPU // process video frame on CPU
...@@ -172,7 +168,7 @@ public: ...@@ -172,7 +168,7 @@ public:
cv::Mat m(m_height, m_width, CV_8UC4, memDesc.pBits, memDesc.Pitch); cv::Mat m(m_height, m_width, CV_8UC4, memDesc.pBits, memDesc.Pitch);
if (!m_disableProcessing) if (m_demo_processing)
{ {
// blur D3D9 surface with OpenCV on CPU // blur D3D9 surface with OpenCV on CPU
cv::blur(m, m, cv::Size(15, 15), cv::Point(-7, -7)); cv::blur(m, m, cv::Size(15, 15), cv::Point(-7, -7));
...@@ -194,7 +190,7 @@ public: ...@@ -194,7 +190,7 @@ public:
cv::directx::convertFromDirect3DSurface9(pSurface, u); cv::directx::convertFromDirect3DSurface9(pSurface, u);
if (!m_disableProcessing) if (m_demo_processing)
{ {
// blur D3D9 surface with OpenCV on GPU with OpenCL // blur D3D9 surface with OpenCV on GPU with OpenCL
cv::blur(u, u, cv::Size(15, 15), cv::Point(-7, -7)); cv::blur(u, u, cv::Size(15, 15), cv::Point(-7, -7));
...@@ -261,6 +257,11 @@ public: ...@@ -261,6 +257,11 @@ public:
sprintf(buf, "Mode: %s", m_modeStr[mode].c_str()); sprintf(buf, "Mode: %s", m_modeStr[mode].c_str());
::TextOut(hDC, 0, y, buf, (int)strlen(buf)); ::TextOut(hDC, 0, y, buf, (int)strlen(buf));
y += tm.tmHeight;
buf[0] = 0;
sprintf(buf, m_demo_processing ? "blur frame" : "copy frame");
::TextOut(hDC, 0, y, buf, (int)strlen(buf));
y += tm.tmHeight; y += tm.tmHeight;
buf[0] = 0; buf[0] = 0;
sprintf(buf, "FPS: %2.1f", fps); sprintf(buf, "FPS: %2.1f", fps);
......
...@@ -154,10 +154,6 @@ public: ...@@ -154,10 +154,6 @@ public:
switch (m_mode) switch (m_mode)
{ {
case MODE_NOP:
// no processing
break;
case MODE_CPU: case MODE_CPU:
{ {
// process video frame on CPU // process video frame on CPU
...@@ -172,7 +168,7 @@ public: ...@@ -172,7 +168,7 @@ public:
cv::Mat m(m_height, m_width, CV_8UC4, memDesc.pBits, memDesc.Pitch); cv::Mat m(m_height, m_width, CV_8UC4, memDesc.pBits, memDesc.Pitch);
if (!m_disableProcessing) if (m_demo_processing)
{ {
// blur D3D9 surface with OpenCV on CPU // blur D3D9 surface with OpenCV on CPU
cv::blur(m, m, cv::Size(15, 15), cv::Point(-7, -7)); cv::blur(m, m, cv::Size(15, 15), cv::Point(-7, -7));
...@@ -194,7 +190,7 @@ public: ...@@ -194,7 +190,7 @@ public:
cv::directx::convertFromDirect3DSurface9(pSurface, u); cv::directx::convertFromDirect3DSurface9(pSurface, u);
if (!m_disableProcessing) if (m_demo_processing)
{ {
// blur D3D9 surface with OpenCV on GPU with OpenCL // blur D3D9 surface with OpenCV on GPU with OpenCL
cv::blur(u, u, cv::Size(15, 15), cv::Point(-7, -7)); cv::blur(u, u, cv::Size(15, 15), cv::Point(-7, -7));
...@@ -262,6 +258,11 @@ public: ...@@ -262,6 +258,11 @@ public:
sprintf(buf, "Mode: %s", m_modeStr[mode].c_str()); sprintf(buf, "Mode: %s", m_modeStr[mode].c_str());
::TextOut(hDC, 0, y, buf, (int)strlen(buf)); ::TextOut(hDC, 0, y, buf, (int)strlen(buf));
y += tm.tmHeight;
buf[0] = 0;
sprintf(buf, m_demo_processing ? "blur frame" : "copy frame");
::TextOut(hDC, 0, y, buf, (int)strlen(buf));
y += tm.tmHeight; y += tm.tmHeight;
buf[0] = 0; buf[0] = 0;
sprintf(buf, "FPS: %2.1f", fps); sprintf(buf, "FPS: %2.1f", fps);
......
...@@ -22,7 +22,6 @@ class D3DSample : public WinApp ...@@ -22,7 +22,6 @@ class D3DSample : public WinApp
public: public:
enum MODE enum MODE
{ {
MODE_NOP,
MODE_CPU, MODE_CPU,
MODE_GPU MODE_GPU
}; };
...@@ -31,11 +30,10 @@ public: ...@@ -31,11 +30,10 @@ public:
WinApp(width, height, window_name) WinApp(width, height, window_name)
{ {
m_shutdown = false; m_shutdown = false;
m_mode = MODE_NOP; m_mode = MODE_CPU;
m_modeStr[0] = cv::String("No processing"); m_modeStr[0] = cv::String("Processing on CPU");
m_modeStr[1] = cv::String("Processing on CPU"); m_modeStr[1] = cv::String("Processing on GPU");
m_modeStr[2] = cv::String("Processing on GPU"); m_demo_processing = false;
m_disableProcessing = false;
m_cap = cap; m_cap = cap;
} }
...@@ -76,14 +74,19 @@ protected: ...@@ -76,14 +74,19 @@ protected:
switch (message) switch (message)
{ {
case WM_CHAR: case WM_CHAR:
if (wParam >= '0' && wParam <= '2') if (wParam == '1')
{ {
m_mode = static_cast<MODE>((char)wParam - '0'); m_mode = MODE_CPU;
return 0;
}
if (wParam == '2')
{
m_mode = MODE_GPU;
return 0; return 0;
} }
else if (wParam == VK_SPACE) else if (wParam == VK_SPACE)
{ {
m_disableProcessing = !m_disableProcessing; m_demo_processing = !m_demo_processing;
return 0; return 0;
} }
else if (wParam == VK_ESCAPE) else if (wParam == VK_ESCAPE)
...@@ -108,9 +111,9 @@ protected: ...@@ -108,9 +111,9 @@ protected:
protected: protected:
bool m_shutdown; bool m_shutdown;
bool m_disableProcessing; bool m_demo_processing;
MODE m_mode; MODE m_mode;
cv::String m_modeStr[3]; cv::String m_modeStr[2];
cv::VideoCapture m_cap; cv::VideoCapture m_cap;
cv::Mat m_frame_bgr; cv::Mat m_frame_bgr;
cv::Mat m_frame_rgba; cv::Mat m_frame_rgba;
...@@ -122,10 +125,10 @@ static void help() ...@@ -122,10 +125,10 @@ static void help()
printf( printf(
"\nSample demonstrating interoperability of DirectX and OpenCL with OpenCV.\n" "\nSample demonstrating interoperability of DirectX and OpenCL with OpenCV.\n"
"Hot keys: \n" "Hot keys: \n"
" 0 - no processing\n" " SPACE - turn processing on/off\n"
" 1 - blur DX surface on CPU through OpenCV\n" " 1 - process DX surface through OpenCV on CPU\n"
" 2 - blur DX surface on GPU through OpenCV using OpenCL\n" " 2 - process DX surface through OpenCV on GPU (via OpenCL)\n"
" ESC - exit\n\n"); " ESC - exit\n\n");
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment