mirror of
https://github.com/gnif/LookingGlass.git
synced 2024-11-10 00:28:20 +00:00
[host] added initial framework for DXGI capture
This commit is contained in:
parent
fc192c0016
commit
44d7e9e77c
71
host/Capture/DXGI.cpp
Normal file
71
host/Capture/DXGI.cpp
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
/*
|
||||||
|
KVMGFX Client - A KVM Client for VGA Passthrough
|
||||||
|
Copyright (C) 2017 Geoffrey McRae <geoff@hostfission.com>
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it under
|
||||||
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
|
Foundation; either version 2 of the License, or (at your option) any later
|
||||||
|
version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along with
|
||||||
|
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
||||||
|
Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "DXGI.h"
|
||||||
|
using namespace Capture;
|
||||||
|
|
||||||
|
DXGI::DXGI() :
|
||||||
|
m_initialized(false)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
DXGI::~DXGI()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DXGI::Initialize()
|
||||||
|
{
|
||||||
|
if (m_initialized)
|
||||||
|
DeInitialize();
|
||||||
|
|
||||||
|
m_initialized = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DXGI::DeInitialize()
|
||||||
|
{
|
||||||
|
m_initialized = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
FrameType DXGI::GetFrameType()
|
||||||
|
{
|
||||||
|
if (!m_initialized)
|
||||||
|
return FRAME_TYPE_INVALID;
|
||||||
|
|
||||||
|
return FrameType();
|
||||||
|
}
|
||||||
|
|
||||||
|
FrameComp DXGI::GetFrameCompression()
|
||||||
|
{
|
||||||
|
if (!m_initialized)
|
||||||
|
return FRAME_COMP_NONE;
|
||||||
|
|
||||||
|
return FrameComp();
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t DXGI::GetMaxFrameSize()
|
||||||
|
{
|
||||||
|
return size_t();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DXGI::GrabFrame(FrameInfo & frame)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
40
host/Capture/DXGI.h
Normal file
40
host/Capture/DXGI.h
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
KVMGFX Client - A KVM Client for VGA Passthrough
|
||||||
|
Copyright (C) 2017 Geoffrey McRae <geoff@hostfission.com>
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it under
|
||||||
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
|
Foundation; either version 2 of the License, or (at your option) any later
|
||||||
|
version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along with
|
||||||
|
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
||||||
|
Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ICapture.h"
|
||||||
|
|
||||||
|
namespace Capture
|
||||||
|
{
|
||||||
|
class DXGI : public ICapture
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DXGI();
|
||||||
|
~DXGI();
|
||||||
|
bool Initialize();
|
||||||
|
void DeInitialize();
|
||||||
|
enum FrameType GetFrameType();
|
||||||
|
enum FrameComp GetFrameCompression();
|
||||||
|
size_t GetMaxFrameSize();
|
||||||
|
bool GrabFrame(struct FrameInfo & frame);
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool m_initialized;
|
||||||
|
};
|
||||||
|
};
|
@ -21,14 +21,37 @@ Place, Suite 330, Boston, MA 02111-1307 USA
|
|||||||
#define W32_LEAN_AND_MEAN
|
#define W32_LEAN_AND_MEAN
|
||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
|
|
||||||
|
#include "common\debug.h"
|
||||||
#include "ICapture.h"
|
#include "ICapture.h"
|
||||||
#include "Capture\NvFBC.h"
|
#include "Capture\NvFBC.h"
|
||||||
|
#include "Capture\DXGI.h"
|
||||||
|
|
||||||
class CaptureFactory
|
class CaptureFactory
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static ICapture * GetCaptureDevice()
|
static ICapture * GetCaptureDevice()
|
||||||
{
|
{
|
||||||
return new Capture::NvFBC();
|
ICapture *dev;
|
||||||
|
|
||||||
|
dev = new Capture::NvFBC();
|
||||||
|
if (dev->Initialize())
|
||||||
|
{
|
||||||
|
DEBUG_INFO("Using NvFBC");
|
||||||
|
return dev;
|
||||||
|
}
|
||||||
|
dev->DeInitialize();
|
||||||
|
delete dev;
|
||||||
|
|
||||||
|
dev = new Capture::DXGI();
|
||||||
|
if (dev->Initialize())
|
||||||
|
{
|
||||||
|
DEBUG_INFO("Using DXGI");
|
||||||
|
return dev;
|
||||||
|
}
|
||||||
|
dev->DeInitialize();
|
||||||
|
delete dev;
|
||||||
|
|
||||||
|
DEBUG_ERROR("Failed to initialize a compatible capture device");
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
};
|
};
|
@ -45,7 +45,7 @@ bool Service::Initialize()
|
|||||||
DeInitialize();
|
DeInitialize();
|
||||||
|
|
||||||
m_capture = CaptureFactory::GetCaptureDevice();
|
m_capture = CaptureFactory::GetCaptureDevice();
|
||||||
if (!m_capture || !m_capture->Initialize())
|
if (!m_capture)
|
||||||
{
|
{
|
||||||
DEBUG_ERROR("Failed to initialize capture interface");
|
DEBUG_ERROR("Failed to initialize capture interface");
|
||||||
DeInitialize();
|
DeInitialize();
|
||||||
|
@ -160,6 +160,7 @@
|
|||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ClCompile Include="Capture\DXGI.cpp" />
|
||||||
<ClCompile Include="Capture\NvFBC.cpp" />
|
<ClCompile Include="Capture\NvFBC.cpp" />
|
||||||
<ClCompile Include="ivshmem.cpp" />
|
<ClCompile Include="ivshmem.cpp" />
|
||||||
<ClCompile Include="main.cpp" />
|
<ClCompile Include="main.cpp" />
|
||||||
@ -168,6 +169,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="CaptureFactory.h" />
|
<ClInclude Include="CaptureFactory.h" />
|
||||||
|
<ClInclude Include="Capture\DXGI.h" />
|
||||||
<ClInclude Include="Capture\NvFBC.h" />
|
<ClInclude Include="Capture\NvFBC.h" />
|
||||||
<ClInclude Include="ICapture.h" />
|
<ClInclude Include="ICapture.h" />
|
||||||
<ClInclude Include="ivshmem.h" />
|
<ClInclude Include="ivshmem.h" />
|
||||||
|
@ -36,6 +36,9 @@
|
|||||||
<ClCompile Include="MTMemcpy.cpp">
|
<ClCompile Include="MTMemcpy.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="Capture\DXGI.cpp">
|
||||||
|
<Filter>Source Files\Capture</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="ivshmem.h">
|
<ClInclude Include="ivshmem.h">
|
||||||
@ -59,5 +62,8 @@
|
|||||||
<ClInclude Include="MTMemcpy.h">
|
<ClInclude Include="MTMemcpy.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="Capture\DXGI.h">
|
||||||
|
<Filter>Header Files\Capture</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
Loading…
Reference in New Issue
Block a user