mirror of
https://github.com/gnif/LookingGlass.git
synced 2024-11-25 06:47:19 +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
|
||||
#include <Windows.h>
|
||||
|
||||
#include "common\debug.h"
|
||||
#include "ICapture.h"
|
||||
#include "Capture\NvFBC.h"
|
||||
#include "Capture\DXGI.h"
|
||||
|
||||
class CaptureFactory
|
||||
{
|
||||
public:
|
||||
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();
|
||||
|
||||
m_capture = CaptureFactory::GetCaptureDevice();
|
||||
if (!m_capture || !m_capture->Initialize())
|
||||
if (!m_capture)
|
||||
{
|
||||
DEBUG_ERROR("Failed to initialize capture interface");
|
||||
DeInitialize();
|
||||
|
@ -160,6 +160,7 @@
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="Capture\DXGI.cpp" />
|
||||
<ClCompile Include="Capture\NvFBC.cpp" />
|
||||
<ClCompile Include="ivshmem.cpp" />
|
||||
<ClCompile Include="main.cpp" />
|
||||
@ -168,6 +169,7 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="CaptureFactory.h" />
|
||||
<ClInclude Include="Capture\DXGI.h" />
|
||||
<ClInclude Include="Capture\NvFBC.h" />
|
||||
<ClInclude Include="ICapture.h" />
|
||||
<ClInclude Include="ivshmem.h" />
|
||||
|
@ -36,6 +36,9 @@
|
||||
<ClCompile Include="MTMemcpy.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Capture\DXGI.cpp">
|
||||
<Filter>Source Files\Capture</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="ivshmem.h">
|
||||
@ -59,5 +62,8 @@
|
||||
<ClInclude Include="MTMemcpy.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Capture\DXGI.h">
|
||||
<Filter>Header Files\Capture</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</Project>
|
Loading…
Reference in New Issue
Block a user