9e3f43d27b6a68e03d397daf84c6fd355971601f mediaportal/MediaPortal.sln | 383 +++++++++ .../MiniDisplayLibrary/MiniDisplayLibrary.csproj | 14 + .../API/Soundgraph/iMONDisplay.dll | Bin 0 -> 208896 bytes .../MiniDisplayPlugin/Drivers/ImonBase.cs | 239 ++++++ .../MiniDisplayPlugin/Drivers/ImonLcd.cs | 918 +++++++++++++++++++++ .../Drivers/ImonLcd_AdvancedSetupForm.Designer.cs | 162 ++++ .../Drivers/ImonLcd_AdvancedSetupForm.cs | 41 + .../Drivers/ImonLcd_AdvancedSetupForm.resx | 120 +++ .../MiniDisplayPlugin/Drivers/ImonVfd.cs | 42 + .../Drivers/iMONDisplayWrapper/Event.cpp | 29 + .../Drivers/iMONDisplayWrapper/Event.h | 27 + .../Drivers/iMONDisplayWrapper/IdwApi.cpp | 247 ++++++ .../Drivers/iMONDisplayWrapper/IdwApi.h | 48 ++ .../Drivers/iMONDisplayWrapper/IdwThread.cpp | 745 +++++++++++++++++ .../Drivers/iMONDisplayWrapper/IdwThread.h | 63 ++ .../Drivers/iMONDisplayWrapper/Mutex.cpp | 24 + .../Drivers/iMONDisplayWrapper/Mutex.h | 26 + .../Drivers/iMONDisplayWrapper/Thread.cpp | 41 + .../Drivers/iMONDisplayWrapper/Thread.h | 34 + .../Drivers/iMONDisplayWrapper/iMONDisplay.lib | Bin 0 -> 6146 bytes .../Drivers/iMONDisplayWrapper/iMONDisplayAPI.h | 163 ++++ .../iMONDisplayWrapper/iMONDisplayDefines.h | 114 +++ .../iMONDisplayWrapper/iMONDisplayWrapper.cpp | 106 +++ .../iMONDisplayWrapper/iMONDisplayWrapper.h | 48 ++ .../iMONDisplayWrapper/iMONDisplayWrapper.rc | 103 +++ .../iMONDisplayWrapper/iMONDisplayWrapper.vcproj | 255 ++++++ .../iMONDisplayWrapper/iMONDisplayWrapper.vcxproj | 118 +++ .../iMONDisplayWrapper.vcxproj.filters | 71 ++ .../Drivers/iMONDisplayWrapper/resource.h | 14 + .../MiniDisplayPlugin/Settings.cs | 10 + mediaportal/Setup/setup.nsi | 2 + 31 files changed, 4207 insertions(+) diff --git a/mediaportal/MediaPortal.sln b/mediaportal/MediaPortal.sln index a2c7ec0..cb34bbf 100644 --- a/mediaportal/MediaPortal.sln +++ b/mediaportal/MediaPortal.sln @@ -71,6 +71,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MiniDisplayLibrary", "MiniD {0A234721-1F13-4DF8-9B1E-64D9E3111203} = {0A234721-1F13-4DF8-9B1E-64D9E3111203} {0A234721-1F13-4DF8-9B1E-64D9E3111203} = {0A234721-1F13-4DF8-9B1E-64D9E3111203} {C1BCEC3E-6074-4328-B5D9-391A457C8FFB} = {C1BCEC3E-6074-4328-B5D9-391A457C8FFB} + {E1A2655B-02A2-437A-8270-4AD81DDDC502} = {E1A2655B-02A2-437A-8270-4AD81DDDC502} {5B8BC37B-44EB-4736-8B27-0960F3E03822} = {5B8BC37B-44EB-4736-8B27-0960F3E03822} {2B094D86-DD1A-4DDD-95D2-56A57E714C4E} = {2B094D86-DD1A-4DDD-95D2-56A57E714C4E} {68168FAA-A363-4F64-981C-32629A537900} = {68168FAA-A363-4F64-981C-32629A537900} @@ -102,448 +103,830 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tv Library", "Tv Library", EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TvLibrary.Interfaces", "..\TvEngine3\TVLibrary\TvLibrary.Interfaces\TvLibrary.Interfaces.csproj", "{AE752FB4-7450-4150-9BAD-19EFA9D2AC37}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iMONDisplayWrapper", "MiniDisplayLibrary\MiniDisplayPlugin\Drivers\iMONDisplayWrapper\iMONDisplayWrapper.vcxproj", "{E1A2655B-02A2-437A-8270-4AD81DDDC502}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 Release|x86 = Release|x86 UseCaptureCardDefinitions|Any CPU = UseCaptureCardDefinitions|Any CPU + UseCaptureCardDefinitions|Mixed Platforms = UseCaptureCardDefinitions|Mixed Platforms + UseCaptureCardDefinitions|Win32 = UseCaptureCardDefinitions|Win32 UseCaptureCardDefinitions|x86 = UseCaptureCardDefinitions|x86 UseCaptureDefintionsRelease|Any CPU = UseCaptureDefintionsRelease|Any CPU + UseCaptureDefintionsRelease|Mixed Platforms = UseCaptureDefintionsRelease|Mixed Platforms + UseCaptureDefintionsRelease|Win32 = UseCaptureDefintionsRelease|Win32 UseCaptureDefintionsRelease|x86 = UseCaptureDefintionsRelease|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {02FFFC1F-2555-4B99-8B01-3432D0673855}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {02FFFC1F-2555-4B99-8B01-3432D0673855}.Debug|Any CPU.Build.0 = Debug|Any CPU + {02FFFC1F-2555-4B99-8B01-3432D0673855}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {02FFFC1F-2555-4B99-8B01-3432D0673855}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {02FFFC1F-2555-4B99-8B01-3432D0673855}.Debug|Win32.ActiveCfg = Debug|x86 {02FFFC1F-2555-4B99-8B01-3432D0673855}.Debug|x86.ActiveCfg = Debug|Any CPU {02FFFC1F-2555-4B99-8B01-3432D0673855}.Debug|x86.Build.0 = Debug|Any CPU {02FFFC1F-2555-4B99-8B01-3432D0673855}.Release|Any CPU.ActiveCfg = Release|Any CPU {02FFFC1F-2555-4B99-8B01-3432D0673855}.Release|Any CPU.Build.0 = Release|Any CPU + {02FFFC1F-2555-4B99-8B01-3432D0673855}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {02FFFC1F-2555-4B99-8B01-3432D0673855}.Release|Mixed Platforms.Build.0 = Release|x86 + {02FFFC1F-2555-4B99-8B01-3432D0673855}.Release|Win32.ActiveCfg = Release|x86 {02FFFC1F-2555-4B99-8B01-3432D0673855}.Release|x86.ActiveCfg = Release|Any CPU {02FFFC1F-2555-4B99-8B01-3432D0673855}.Release|x86.Build.0 = Release|Any CPU {02FFFC1F-2555-4B99-8B01-3432D0673855}.UseCaptureCardDefinitions|Any CPU.ActiveCfg = UseCaptureCardDefinitions|Any CPU {02FFFC1F-2555-4B99-8B01-3432D0673855}.UseCaptureCardDefinitions|Any CPU.Build.0 = UseCaptureCardDefinitions|Any CPU + {02FFFC1F-2555-4B99-8B01-3432D0673855}.UseCaptureCardDefinitions|Mixed Platforms.ActiveCfg = UseCaptureCardDefinitions|x86 + {02FFFC1F-2555-4B99-8B01-3432D0673855}.UseCaptureCardDefinitions|Mixed Platforms.Build.0 = UseCaptureCardDefinitions|x86 + {02FFFC1F-2555-4B99-8B01-3432D0673855}.UseCaptureCardDefinitions|Win32.ActiveCfg = UseCaptureCardDefinitions|x86 {02FFFC1F-2555-4B99-8B01-3432D0673855}.UseCaptureCardDefinitions|x86.ActiveCfg = UseCaptureCardDefinitions|x86 {02FFFC1F-2555-4B99-8B01-3432D0673855}.UseCaptureCardDefinitions|x86.Build.0 = UseCaptureCardDefinitions|x86 {02FFFC1F-2555-4B99-8B01-3432D0673855}.UseCaptureDefintionsRelease|Any CPU.ActiveCfg = UseCaptureDefintionsRelease|Any CPU {02FFFC1F-2555-4B99-8B01-3432D0673855}.UseCaptureDefintionsRelease|Any CPU.Build.0 = UseCaptureDefintionsRelease|Any CPU + {02FFFC1F-2555-4B99-8B01-3432D0673855}.UseCaptureDefintionsRelease|Mixed Platforms.ActiveCfg = UseCaptureDefintionsRelease|x86 + {02FFFC1F-2555-4B99-8B01-3432D0673855}.UseCaptureDefintionsRelease|Mixed Platforms.Build.0 = UseCaptureDefintionsRelease|x86 + {02FFFC1F-2555-4B99-8B01-3432D0673855}.UseCaptureDefintionsRelease|Win32.ActiveCfg = UseCaptureDefintionsRelease|x86 {02FFFC1F-2555-4B99-8B01-3432D0673855}.UseCaptureDefintionsRelease|x86.ActiveCfg = UseCaptureDefintionsRelease|x86 {02FFFC1F-2555-4B99-8B01-3432D0673855}.UseCaptureDefintionsRelease|x86.Build.0 = UseCaptureDefintionsRelease|x86 {DFAB8CDD-A6BA-4A87-930F-CB09B30C1C9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DFAB8CDD-A6BA-4A87-930F-CB09B30C1C9D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DFAB8CDD-A6BA-4A87-930F-CB09B30C1C9D}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {DFAB8CDD-A6BA-4A87-930F-CB09B30C1C9D}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {DFAB8CDD-A6BA-4A87-930F-CB09B30C1C9D}.Debug|Win32.ActiveCfg = Debug|x86 {DFAB8CDD-A6BA-4A87-930F-CB09B30C1C9D}.Debug|x86.ActiveCfg = Debug|Any CPU {DFAB8CDD-A6BA-4A87-930F-CB09B30C1C9D}.Debug|x86.Build.0 = Debug|Any CPU {DFAB8CDD-A6BA-4A87-930F-CB09B30C1C9D}.Release|Any CPU.ActiveCfg = Release|Any CPU {DFAB8CDD-A6BA-4A87-930F-CB09B30C1C9D}.Release|Any CPU.Build.0 = Release|Any CPU + {DFAB8CDD-A6BA-4A87-930F-CB09B30C1C9D}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {DFAB8CDD-A6BA-4A87-930F-CB09B30C1C9D}.Release|Mixed Platforms.Build.0 = Release|x86 + {DFAB8CDD-A6BA-4A87-930F-CB09B30C1C9D}.Release|Win32.ActiveCfg = Release|x86 {DFAB8CDD-A6BA-4A87-930F-CB09B30C1C9D}.Release|x86.ActiveCfg = Release|Any CPU {DFAB8CDD-A6BA-4A87-930F-CB09B30C1C9D}.Release|x86.Build.0 = Release|Any CPU {DFAB8CDD-A6BA-4A87-930F-CB09B30C1C9D}.UseCaptureCardDefinitions|Any CPU.ActiveCfg = UseCaptureCardDefinitions|Any CPU {DFAB8CDD-A6BA-4A87-930F-CB09B30C1C9D}.UseCaptureCardDefinitions|Any CPU.Build.0 = UseCaptureCardDefinitions|Any CPU + {DFAB8CDD-A6BA-4A87-930F-CB09B30C1C9D}.UseCaptureCardDefinitions|Mixed Platforms.ActiveCfg = UseCaptureCardDefinitions|x86 + {DFAB8CDD-A6BA-4A87-930F-CB09B30C1C9D}.UseCaptureCardDefinitions|Mixed Platforms.Build.0 = UseCaptureCardDefinitions|x86 + {DFAB8CDD-A6BA-4A87-930F-CB09B30C1C9D}.UseCaptureCardDefinitions|Win32.ActiveCfg = UseCaptureCardDefinitions|x86 {DFAB8CDD-A6BA-4A87-930F-CB09B30C1C9D}.UseCaptureCardDefinitions|x86.ActiveCfg = UseCaptureCardDefinitions|x86 {DFAB8CDD-A6BA-4A87-930F-CB09B30C1C9D}.UseCaptureCardDefinitions|x86.Build.0 = UseCaptureCardDefinitions|x86 {DFAB8CDD-A6BA-4A87-930F-CB09B30C1C9D}.UseCaptureDefintionsRelease|Any CPU.ActiveCfg = UseCaptureDefintionsRelease|Any CPU {DFAB8CDD-A6BA-4A87-930F-CB09B30C1C9D}.UseCaptureDefintionsRelease|Any CPU.Build.0 = UseCaptureDefintionsRelease|Any CPU + {DFAB8CDD-A6BA-4A87-930F-CB09B30C1C9D}.UseCaptureDefintionsRelease|Mixed Platforms.ActiveCfg = UseCaptureDefintionsRelease|x86 + {DFAB8CDD-A6BA-4A87-930F-CB09B30C1C9D}.UseCaptureDefintionsRelease|Mixed Platforms.Build.0 = UseCaptureDefintionsRelease|x86 + {DFAB8CDD-A6BA-4A87-930F-CB09B30C1C9D}.UseCaptureDefintionsRelease|Win32.ActiveCfg = UseCaptureDefintionsRelease|x86 {DFAB8CDD-A6BA-4A87-930F-CB09B30C1C9D}.UseCaptureDefintionsRelease|x86.ActiveCfg = UseCaptureDefintionsRelease|x86 {DFAB8CDD-A6BA-4A87-930F-CB09B30C1C9D}.UseCaptureDefintionsRelease|x86.Build.0 = UseCaptureDefintionsRelease|x86 {5B8BC37B-44EB-4736-8B27-0960F3E03822}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5B8BC37B-44EB-4736-8B27-0960F3E03822}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5B8BC37B-44EB-4736-8B27-0960F3E03822}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {5B8BC37B-44EB-4736-8B27-0960F3E03822}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {5B8BC37B-44EB-4736-8B27-0960F3E03822}.Debug|Win32.ActiveCfg = Debug|x86 {5B8BC37B-44EB-4736-8B27-0960F3E03822}.Debug|x86.ActiveCfg = Debug|Any CPU {5B8BC37B-44EB-4736-8B27-0960F3E03822}.Debug|x86.Build.0 = Debug|Any CPU {5B8BC37B-44EB-4736-8B27-0960F3E03822}.Release|Any CPU.ActiveCfg = Release|Any CPU {5B8BC37B-44EB-4736-8B27-0960F3E03822}.Release|Any CPU.Build.0 = Release|Any CPU + {5B8BC37B-44EB-4736-8B27-0960F3E03822}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {5B8BC37B-44EB-4736-8B27-0960F3E03822}.Release|Mixed Platforms.Build.0 = Release|x86 + {5B8BC37B-44EB-4736-8B27-0960F3E03822}.Release|Win32.ActiveCfg = Release|x86 {5B8BC37B-44EB-4736-8B27-0960F3E03822}.Release|x86.ActiveCfg = Release|Any CPU {5B8BC37B-44EB-4736-8B27-0960F3E03822}.Release|x86.Build.0 = Release|Any CPU {5B8BC37B-44EB-4736-8B27-0960F3E03822}.UseCaptureCardDefinitions|Any CPU.ActiveCfg = UseCaptureCardDefinitions|Any CPU {5B8BC37B-44EB-4736-8B27-0960F3E03822}.UseCaptureCardDefinitions|Any CPU.Build.0 = UseCaptureCardDefinitions|Any CPU + {5B8BC37B-44EB-4736-8B27-0960F3E03822}.UseCaptureCardDefinitions|Mixed Platforms.ActiveCfg = UseCaptureCardDefinitions|x86 + {5B8BC37B-44EB-4736-8B27-0960F3E03822}.UseCaptureCardDefinitions|Mixed Platforms.Build.0 = UseCaptureCardDefinitions|x86 + {5B8BC37B-44EB-4736-8B27-0960F3E03822}.UseCaptureCardDefinitions|Win32.ActiveCfg = UseCaptureCardDefinitions|x86 {5B8BC37B-44EB-4736-8B27-0960F3E03822}.UseCaptureCardDefinitions|x86.ActiveCfg = UseCaptureCardDefinitions|x86 {5B8BC37B-44EB-4736-8B27-0960F3E03822}.UseCaptureCardDefinitions|x86.Build.0 = UseCaptureCardDefinitions|x86 {5B8BC37B-44EB-4736-8B27-0960F3E03822}.UseCaptureDefintionsRelease|Any CPU.ActiveCfg = UseCaptureDefintionsRelease|Any CPU {5B8BC37B-44EB-4736-8B27-0960F3E03822}.UseCaptureDefintionsRelease|Any CPU.Build.0 = UseCaptureDefintionsRelease|Any CPU + {5B8BC37B-44EB-4736-8B27-0960F3E03822}.UseCaptureDefintionsRelease|Mixed Platforms.ActiveCfg = UseCaptureDefintionsRelease|x86 + {5B8BC37B-44EB-4736-8B27-0960F3E03822}.UseCaptureDefintionsRelease|Mixed Platforms.Build.0 = UseCaptureDefintionsRelease|x86 + {5B8BC37B-44EB-4736-8B27-0960F3E03822}.UseCaptureDefintionsRelease|Win32.ActiveCfg = UseCaptureDefintionsRelease|x86 {5B8BC37B-44EB-4736-8B27-0960F3E03822}.UseCaptureDefintionsRelease|x86.ActiveCfg = UseCaptureDefintionsRelease|x86 {5B8BC37B-44EB-4736-8B27-0960F3E03822}.UseCaptureDefintionsRelease|x86.Build.0 = UseCaptureDefintionsRelease|x86 {B282C55B-A37B-4CEC-A4FC-00791069BF00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B282C55B-A37B-4CEC-A4FC-00791069BF00}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B282C55B-A37B-4CEC-A4FC-00791069BF00}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {B282C55B-A37B-4CEC-A4FC-00791069BF00}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {B282C55B-A37B-4CEC-A4FC-00791069BF00}.Debug|Win32.ActiveCfg = Debug|x86 {B282C55B-A37B-4CEC-A4FC-00791069BF00}.Debug|x86.ActiveCfg = Debug|Any CPU {B282C55B-A37B-4CEC-A4FC-00791069BF00}.Debug|x86.Build.0 = Debug|Any CPU {B282C55B-A37B-4CEC-A4FC-00791069BF00}.Release|Any CPU.ActiveCfg = Release|Any CPU {B282C55B-A37B-4CEC-A4FC-00791069BF00}.Release|Any CPU.Build.0 = Release|Any CPU + {B282C55B-A37B-4CEC-A4FC-00791069BF00}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {B282C55B-A37B-4CEC-A4FC-00791069BF00}.Release|Mixed Platforms.Build.0 = Release|x86 + {B282C55B-A37B-4CEC-A4FC-00791069BF00}.Release|Win32.ActiveCfg = Release|x86 {B282C55B-A37B-4CEC-A4FC-00791069BF00}.Release|x86.ActiveCfg = Release|Any CPU {B282C55B-A37B-4CEC-A4FC-00791069BF00}.Release|x86.Build.0 = Release|Any CPU {B282C55B-A37B-4CEC-A4FC-00791069BF00}.UseCaptureCardDefinitions|Any CPU.ActiveCfg = UseCaptureCardDefinitions|Any CPU {B282C55B-A37B-4CEC-A4FC-00791069BF00}.UseCaptureCardDefinitions|Any CPU.Build.0 = UseCaptureCardDefinitions|Any CPU + {B282C55B-A37B-4CEC-A4FC-00791069BF00}.UseCaptureCardDefinitions|Mixed Platforms.ActiveCfg = UseCaptureCardDefinitions|x86 + {B282C55B-A37B-4CEC-A4FC-00791069BF00}.UseCaptureCardDefinitions|Mixed Platforms.Build.0 = UseCaptureCardDefinitions|x86 + {B282C55B-A37B-4CEC-A4FC-00791069BF00}.UseCaptureCardDefinitions|Win32.ActiveCfg = UseCaptureCardDefinitions|x86 {B282C55B-A37B-4CEC-A4FC-00791069BF00}.UseCaptureCardDefinitions|x86.ActiveCfg = UseCaptureCardDefinitions|x86 {B282C55B-A37B-4CEC-A4FC-00791069BF00}.UseCaptureCardDefinitions|x86.Build.0 = UseCaptureCardDefinitions|x86 {B282C55B-A37B-4CEC-A4FC-00791069BF00}.UseCaptureDefintionsRelease|Any CPU.ActiveCfg = UseCaptureDefintionsRelease|Any CPU {B282C55B-A37B-4CEC-A4FC-00791069BF00}.UseCaptureDefintionsRelease|Any CPU.Build.0 = UseCaptureDefintionsRelease|Any CPU + {B282C55B-A37B-4CEC-A4FC-00791069BF00}.UseCaptureDefintionsRelease|Mixed Platforms.ActiveCfg = UseCaptureDefintionsRelease|x86 + {B282C55B-A37B-4CEC-A4FC-00791069BF00}.UseCaptureDefintionsRelease|Mixed Platforms.Build.0 = UseCaptureDefintionsRelease|x86 + {B282C55B-A37B-4CEC-A4FC-00791069BF00}.UseCaptureDefintionsRelease|Win32.ActiveCfg = UseCaptureDefintionsRelease|x86 {B282C55B-A37B-4CEC-A4FC-00791069BF00}.UseCaptureDefintionsRelease|x86.ActiveCfg = UseCaptureDefintionsRelease|x86 {B282C55B-A37B-4CEC-A4FC-00791069BF00}.UseCaptureDefintionsRelease|x86.Build.0 = UseCaptureDefintionsRelease|x86 {C1BCEC3E-6074-4328-B5D9-391A457C8FFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C1BCEC3E-6074-4328-B5D9-391A457C8FFB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C1BCEC3E-6074-4328-B5D9-391A457C8FFB}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {C1BCEC3E-6074-4328-B5D9-391A457C8FFB}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {C1BCEC3E-6074-4328-B5D9-391A457C8FFB}.Debug|Win32.ActiveCfg = Debug|x86 {C1BCEC3E-6074-4328-B5D9-391A457C8FFB}.Debug|x86.ActiveCfg = Debug|Any CPU {C1BCEC3E-6074-4328-B5D9-391A457C8FFB}.Debug|x86.Build.0 = Debug|Any CPU {C1BCEC3E-6074-4328-B5D9-391A457C8FFB}.Release|Any CPU.ActiveCfg = Release|Any CPU {C1BCEC3E-6074-4328-B5D9-391A457C8FFB}.Release|Any CPU.Build.0 = Release|Any CPU + {C1BCEC3E-6074-4328-B5D9-391A457C8FFB}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {C1BCEC3E-6074-4328-B5D9-391A457C8FFB}.Release|Mixed Platforms.Build.0 = Release|x86 + {C1BCEC3E-6074-4328-B5D9-391A457C8FFB}.Release|Win32.ActiveCfg = Release|x86 {C1BCEC3E-6074-4328-B5D9-391A457C8FFB}.Release|x86.ActiveCfg = Release|Any CPU {C1BCEC3E-6074-4328-B5D9-391A457C8FFB}.Release|x86.Build.0 = Release|Any CPU {C1BCEC3E-6074-4328-B5D9-391A457C8FFB}.UseCaptureCardDefinitions|Any CPU.ActiveCfg = UseCaptureCardDefinitions|Any CPU {C1BCEC3E-6074-4328-B5D9-391A457C8FFB}.UseCaptureCardDefinitions|Any CPU.Build.0 = UseCaptureCardDefinitions|Any CPU + {C1BCEC3E-6074-4328-B5D9-391A457C8FFB}.UseCaptureCardDefinitions|Mixed Platforms.ActiveCfg = UseCaptureCardDefinitions|x86 + {C1BCEC3E-6074-4328-B5D9-391A457C8FFB}.UseCaptureCardDefinitions|Mixed Platforms.Build.0 = UseCaptureCardDefinitions|x86 + {C1BCEC3E-6074-4328-B5D9-391A457C8FFB}.UseCaptureCardDefinitions|Win32.ActiveCfg = UseCaptureCardDefinitions|x86 {C1BCEC3E-6074-4328-B5D9-391A457C8FFB}.UseCaptureCardDefinitions|x86.ActiveCfg = UseCaptureCardDefinitions|x86 {C1BCEC3E-6074-4328-B5D9-391A457C8FFB}.UseCaptureCardDefinitions|x86.Build.0 = UseCaptureCardDefinitions|x86 {C1BCEC3E-6074-4328-B5D9-391A457C8FFB}.UseCaptureDefintionsRelease|Any CPU.ActiveCfg = UseCaptureDefintionsRelease|Any CPU {C1BCEC3E-6074-4328-B5D9-391A457C8FFB}.UseCaptureDefintionsRelease|Any CPU.Build.0 = UseCaptureDefintionsRelease|Any CPU + {C1BCEC3E-6074-4328-B5D9-391A457C8FFB}.UseCaptureDefintionsRelease|Mixed Platforms.ActiveCfg = UseCaptureDefintionsRelease|x86 + {C1BCEC3E-6074-4328-B5D9-391A457C8FFB}.UseCaptureDefintionsRelease|Mixed Platforms.Build.0 = UseCaptureDefintionsRelease|x86 + {C1BCEC3E-6074-4328-B5D9-391A457C8FFB}.UseCaptureDefintionsRelease|Win32.ActiveCfg = UseCaptureDefintionsRelease|x86 {C1BCEC3E-6074-4328-B5D9-391A457C8FFB}.UseCaptureDefintionsRelease|x86.ActiveCfg = UseCaptureDefintionsRelease|x86 {C1BCEC3E-6074-4328-B5D9-391A457C8FFB}.UseCaptureDefintionsRelease|x86.Build.0 = UseCaptureDefintionsRelease|x86 {3333B71D-6304-452C-BEA5-D037E7B3AA6B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3333B71D-6304-452C-BEA5-D037E7B3AA6B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3333B71D-6304-452C-BEA5-D037E7B3AA6B}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {3333B71D-6304-452C-BEA5-D037E7B3AA6B}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {3333B71D-6304-452C-BEA5-D037E7B3AA6B}.Debug|Win32.ActiveCfg = Debug|x86 {3333B71D-6304-452C-BEA5-D037E7B3AA6B}.Debug|x86.ActiveCfg = Debug|Any CPU {3333B71D-6304-452C-BEA5-D037E7B3AA6B}.Debug|x86.Build.0 = Debug|Any CPU {3333B71D-6304-452C-BEA5-D037E7B3AA6B}.Release|Any CPU.ActiveCfg = Release|Any CPU {3333B71D-6304-452C-BEA5-D037E7B3AA6B}.Release|Any CPU.Build.0 = Release|Any CPU + {3333B71D-6304-452C-BEA5-D037E7B3AA6B}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {3333B71D-6304-452C-BEA5-D037E7B3AA6B}.Release|Mixed Platforms.Build.0 = Release|x86 + {3333B71D-6304-452C-BEA5-D037E7B3AA6B}.Release|Win32.ActiveCfg = Release|x86 {3333B71D-6304-452C-BEA5-D037E7B3AA6B}.Release|x86.ActiveCfg = Release|Any CPU {3333B71D-6304-452C-BEA5-D037E7B3AA6B}.Release|x86.Build.0 = Release|Any CPU {3333B71D-6304-452C-BEA5-D037E7B3AA6B}.UseCaptureCardDefinitions|Any CPU.ActiveCfg = UseCaptureCardDefinitions|Any CPU {3333B71D-6304-452C-BEA5-D037E7B3AA6B}.UseCaptureCardDefinitions|Any CPU.Build.0 = UseCaptureCardDefinitions|Any CPU + {3333B71D-6304-452C-BEA5-D037E7B3AA6B}.UseCaptureCardDefinitions|Mixed Platforms.ActiveCfg = UseCaptureCardDefinitions|x86 + {3333B71D-6304-452C-BEA5-D037E7B3AA6B}.UseCaptureCardDefinitions|Mixed Platforms.Build.0 = UseCaptureCardDefinitions|x86 + {3333B71D-6304-452C-BEA5-D037E7B3AA6B}.UseCaptureCardDefinitions|Win32.ActiveCfg = UseCaptureCardDefinitions|x86 {3333B71D-6304-452C-BEA5-D037E7B3AA6B}.UseCaptureCardDefinitions|x86.ActiveCfg = UseCaptureCardDefinitions|x86 {3333B71D-6304-452C-BEA5-D037E7B3AA6B}.UseCaptureCardDefinitions|x86.Build.0 = UseCaptureCardDefinitions|x86 {3333B71D-6304-452C-BEA5-D037E7B3AA6B}.UseCaptureDefintionsRelease|Any CPU.ActiveCfg = UseCaptureDefintionsRelease|Any CPU {3333B71D-6304-452C-BEA5-D037E7B3AA6B}.UseCaptureDefintionsRelease|Any CPU.Build.0 = UseCaptureDefintionsRelease|Any CPU + {3333B71D-6304-452C-BEA5-D037E7B3AA6B}.UseCaptureDefintionsRelease|Mixed Platforms.ActiveCfg = UseCaptureDefintionsRelease|x86 + {3333B71D-6304-452C-BEA5-D037E7B3AA6B}.UseCaptureDefintionsRelease|Mixed Platforms.Build.0 = UseCaptureDefintionsRelease|x86 + {3333B71D-6304-452C-BEA5-D037E7B3AA6B}.UseCaptureDefintionsRelease|Win32.ActiveCfg = UseCaptureDefintionsRelease|x86 {3333B71D-6304-452C-BEA5-D037E7B3AA6B}.UseCaptureDefintionsRelease|x86.ActiveCfg = UseCaptureDefintionsRelease|x86 {3333B71D-6304-452C-BEA5-D037E7B3AA6B}.UseCaptureDefintionsRelease|x86.Build.0 = UseCaptureDefintionsRelease|x86 {57137A99-FD0A-4A3C-9B51-0DA10DCDE7A6}.Debug|Any CPU.ActiveCfg = Debug|x86 {57137A99-FD0A-4A3C-9B51-0DA10DCDE7A6}.Debug|Any CPU.Build.0 = Debug|x86 + {57137A99-FD0A-4A3C-9B51-0DA10DCDE7A6}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {57137A99-FD0A-4A3C-9B51-0DA10DCDE7A6}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {57137A99-FD0A-4A3C-9B51-0DA10DCDE7A6}.Debug|Win32.ActiveCfg = Debug|x86 {57137A99-FD0A-4A3C-9B51-0DA10DCDE7A6}.Debug|x86.ActiveCfg = Debug|x86 {57137A99-FD0A-4A3C-9B51-0DA10DCDE7A6}.Debug|x86.Build.0 = Debug|x86 {57137A99-FD0A-4A3C-9B51-0DA10DCDE7A6}.Release|Any CPU.ActiveCfg = Release|x86 {57137A99-FD0A-4A3C-9B51-0DA10DCDE7A6}.Release|Any CPU.Build.0 = Release|x86 + {57137A99-FD0A-4A3C-9B51-0DA10DCDE7A6}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {57137A99-FD0A-4A3C-9B51-0DA10DCDE7A6}.Release|Mixed Platforms.Build.0 = Release|x86 + {57137A99-FD0A-4A3C-9B51-0DA10DCDE7A6}.Release|Win32.ActiveCfg = Release|x86 {57137A99-FD0A-4A3C-9B51-0DA10DCDE7A6}.Release|x86.ActiveCfg = Release|x86 {57137A99-FD0A-4A3C-9B51-0DA10DCDE7A6}.Release|x86.Build.0 = Release|x86 {57137A99-FD0A-4A3C-9B51-0DA10DCDE7A6}.UseCaptureCardDefinitions|Any CPU.ActiveCfg = UseCaptureDefintionsRelease|x86 + {57137A99-FD0A-4A3C-9B51-0DA10DCDE7A6}.UseCaptureCardDefinitions|Mixed Platforms.ActiveCfg = UseCaptureDefintionsRelease|x86 + {57137A99-FD0A-4A3C-9B51-0DA10DCDE7A6}.UseCaptureCardDefinitions|Mixed Platforms.Build.0 = UseCaptureDefintionsRelease|x86 + {57137A99-FD0A-4A3C-9B51-0DA10DCDE7A6}.UseCaptureCardDefinitions|Win32.ActiveCfg = UseCaptureDefintionsRelease|x86 {57137A99-FD0A-4A3C-9B51-0DA10DCDE7A6}.UseCaptureCardDefinitions|x86.ActiveCfg = UseCaptureDefintionsRelease|x86 {57137A99-FD0A-4A3C-9B51-0DA10DCDE7A6}.UseCaptureCardDefinitions|x86.Build.0 = UseCaptureDefintionsRelease|x86 {57137A99-FD0A-4A3C-9B51-0DA10DCDE7A6}.UseCaptureDefintionsRelease|Any CPU.ActiveCfg = UseCaptureDefintionsRelease|Any CPU {57137A99-FD0A-4A3C-9B51-0DA10DCDE7A6}.UseCaptureDefintionsRelease|Any CPU.Build.0 = UseCaptureDefintionsRelease|Any CPU + {57137A99-FD0A-4A3C-9B51-0DA10DCDE7A6}.UseCaptureDefintionsRelease|Mixed Platforms.ActiveCfg = UseCaptureDefintionsRelease|x86 + {57137A99-FD0A-4A3C-9B51-0DA10DCDE7A6}.UseCaptureDefintionsRelease|Mixed Platforms.Build.0 = UseCaptureDefintionsRelease|x86 + {57137A99-FD0A-4A3C-9B51-0DA10DCDE7A6}.UseCaptureDefintionsRelease|Win32.ActiveCfg = UseCaptureDefintionsRelease|x86 {57137A99-FD0A-4A3C-9B51-0DA10DCDE7A6}.UseCaptureDefintionsRelease|x86.ActiveCfg = UseCaptureDefintionsRelease|x86 {57137A99-FD0A-4A3C-9B51-0DA10DCDE7A6}.UseCaptureDefintionsRelease|x86.Build.0 = UseCaptureDefintionsRelease|x86 {68168FAA-A363-4F64-981C-32629A537900}.Debug|Any CPU.ActiveCfg = Debug|x86 {68168FAA-A363-4F64-981C-32629A537900}.Debug|Any CPU.Build.0 = Debug|x86 + {68168FAA-A363-4F64-981C-32629A537900}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {68168FAA-A363-4F64-981C-32629A537900}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {68168FAA-A363-4F64-981C-32629A537900}.Debug|Win32.ActiveCfg = Debug|x86 {68168FAA-A363-4F64-981C-32629A537900}.Debug|x86.ActiveCfg = Debug|x86 {68168FAA-A363-4F64-981C-32629A537900}.Debug|x86.Build.0 = Debug|x86 {68168FAA-A363-4F64-981C-32629A537900}.Release|Any CPU.ActiveCfg = Release|x86 {68168FAA-A363-4F64-981C-32629A537900}.Release|Any CPU.Build.0 = Release|x86 + {68168FAA-A363-4F64-981C-32629A537900}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {68168FAA-A363-4F64-981C-32629A537900}.Release|Mixed Platforms.Build.0 = Release|x86 + {68168FAA-A363-4F64-981C-32629A537900}.Release|Win32.ActiveCfg = Release|x86 {68168FAA-A363-4F64-981C-32629A537900}.Release|x86.ActiveCfg = Release|x86 {68168FAA-A363-4F64-981C-32629A537900}.Release|x86.Build.0 = Release|x86 {68168FAA-A363-4F64-981C-32629A537900}.UseCaptureCardDefinitions|Any CPU.ActiveCfg = UseCaptureCardDefinitions|Any CPU {68168FAA-A363-4F64-981C-32629A537900}.UseCaptureCardDefinitions|Any CPU.Build.0 = UseCaptureCardDefinitions|Any CPU + {68168FAA-A363-4F64-981C-32629A537900}.UseCaptureCardDefinitions|Mixed Platforms.ActiveCfg = UseCaptureCardDefinitions|x86 + {68168FAA-A363-4F64-981C-32629A537900}.UseCaptureCardDefinitions|Mixed Platforms.Build.0 = UseCaptureCardDefinitions|x86 + {68168FAA-A363-4F64-981C-32629A537900}.UseCaptureCardDefinitions|Win32.ActiveCfg = UseCaptureCardDefinitions|x86 {68168FAA-A363-4F64-981C-32629A537900}.UseCaptureCardDefinitions|x86.ActiveCfg = UseCaptureCardDefinitions|x86 {68168FAA-A363-4F64-981C-32629A537900}.UseCaptureCardDefinitions|x86.Build.0 = UseCaptureCardDefinitions|x86 {68168FAA-A363-4F64-981C-32629A537900}.UseCaptureDefintionsRelease|Any CPU.ActiveCfg = UseCaptureDefintionsRelease|Any CPU {68168FAA-A363-4F64-981C-32629A537900}.UseCaptureDefintionsRelease|Any CPU.Build.0 = UseCaptureDefintionsRelease|Any CPU + {68168FAA-A363-4F64-981C-32629A537900}.UseCaptureDefintionsRelease|Mixed Platforms.ActiveCfg = UseCaptureDefintionsRelease|x86 + {68168FAA-A363-4F64-981C-32629A537900}.UseCaptureDefintionsRelease|Mixed Platforms.Build.0 = UseCaptureDefintionsRelease|x86 + {68168FAA-A363-4F64-981C-32629A537900}.UseCaptureDefintionsRelease|Win32.ActiveCfg = UseCaptureDefintionsRelease|x86 {68168FAA-A363-4F64-981C-32629A537900}.UseCaptureDefintionsRelease|x86.ActiveCfg = UseCaptureDefintionsRelease|x86 {68168FAA-A363-4F64-981C-32629A537900}.UseCaptureDefintionsRelease|x86.Build.0 = UseCaptureDefintionsRelease|x86 {CBDFAA0E-01F5-4331-AB55-18A4A037B5AE}.Debug|Any CPU.ActiveCfg = Debug|x86 {CBDFAA0E-01F5-4331-AB55-18A4A037B5AE}.Debug|Any CPU.Build.0 = Debug|x86 + {CBDFAA0E-01F5-4331-AB55-18A4A037B5AE}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {CBDFAA0E-01F5-4331-AB55-18A4A037B5AE}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {CBDFAA0E-01F5-4331-AB55-18A4A037B5AE}.Debug|Win32.ActiveCfg = Debug|Any CPU {CBDFAA0E-01F5-4331-AB55-18A4A037B5AE}.Debug|x86.ActiveCfg = Debug|x86 {CBDFAA0E-01F5-4331-AB55-18A4A037B5AE}.Debug|x86.Build.0 = Debug|x86 {CBDFAA0E-01F5-4331-AB55-18A4A037B5AE}.Release|Any CPU.ActiveCfg = Release|x86 {CBDFAA0E-01F5-4331-AB55-18A4A037B5AE}.Release|Any CPU.Build.0 = Release|x86 + {CBDFAA0E-01F5-4331-AB55-18A4A037B5AE}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {CBDFAA0E-01F5-4331-AB55-18A4A037B5AE}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {CBDFAA0E-01F5-4331-AB55-18A4A037B5AE}.Release|Win32.ActiveCfg = Release|Any CPU {CBDFAA0E-01F5-4331-AB55-18A4A037B5AE}.Release|x86.ActiveCfg = Release|x86 {CBDFAA0E-01F5-4331-AB55-18A4A037B5AE}.Release|x86.Build.0 = Release|x86 {CBDFAA0E-01F5-4331-AB55-18A4A037B5AE}.UseCaptureCardDefinitions|Any CPU.ActiveCfg = UseCaptureCardDefinitions|Any CPU {CBDFAA0E-01F5-4331-AB55-18A4A037B5AE}.UseCaptureCardDefinitions|Any CPU.Build.0 = UseCaptureCardDefinitions|Any CPU + {CBDFAA0E-01F5-4331-AB55-18A4A037B5AE}.UseCaptureCardDefinitions|Mixed Platforms.ActiveCfg = UseCaptureCardDefinitions|Any CPU + {CBDFAA0E-01F5-4331-AB55-18A4A037B5AE}.UseCaptureCardDefinitions|Mixed Platforms.Build.0 = UseCaptureCardDefinitions|Any CPU + {CBDFAA0E-01F5-4331-AB55-18A4A037B5AE}.UseCaptureCardDefinitions|Win32.ActiveCfg = UseCaptureCardDefinitions|Any CPU {CBDFAA0E-01F5-4331-AB55-18A4A037B5AE}.UseCaptureCardDefinitions|x86.ActiveCfg = UseCaptureCardDefinitions|x86 {CBDFAA0E-01F5-4331-AB55-18A4A037B5AE}.UseCaptureCardDefinitions|x86.Build.0 = UseCaptureCardDefinitions|x86 {CBDFAA0E-01F5-4331-AB55-18A4A037B5AE}.UseCaptureDefintionsRelease|Any CPU.ActiveCfg = UseCaptureDefintionsRelease|Any CPU {CBDFAA0E-01F5-4331-AB55-18A4A037B5AE}.UseCaptureDefintionsRelease|Any CPU.Build.0 = UseCaptureDefintionsRelease|Any CPU + {CBDFAA0E-01F5-4331-AB55-18A4A037B5AE}.UseCaptureDefintionsRelease|Mixed Platforms.ActiveCfg = UseCaptureDefintionsRelease|Any CPU + {CBDFAA0E-01F5-4331-AB55-18A4A037B5AE}.UseCaptureDefintionsRelease|Mixed Platforms.Build.0 = UseCaptureDefintionsRelease|Any CPU + {CBDFAA0E-01F5-4331-AB55-18A4A037B5AE}.UseCaptureDefintionsRelease|Win32.ActiveCfg = UseCaptureDefintionsRelease|Any CPU {CBDFAA0E-01F5-4331-AB55-18A4A037B5AE}.UseCaptureDefintionsRelease|x86.ActiveCfg = UseCaptureDefintionsRelease|x86 {CBDFAA0E-01F5-4331-AB55-18A4A037B5AE}.UseCaptureDefintionsRelease|x86.Build.0 = UseCaptureDefintionsRelease|x86 {396C5208-5D46-4A11-92C1-FD0F2F42D7DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {396C5208-5D46-4A11-92C1-FD0F2F42D7DD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {396C5208-5D46-4A11-92C1-FD0F2F42D7DD}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {396C5208-5D46-4A11-92C1-FD0F2F42D7DD}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {396C5208-5D46-4A11-92C1-FD0F2F42D7DD}.Debug|Win32.ActiveCfg = Debug|x86 {396C5208-5D46-4A11-92C1-FD0F2F42D7DD}.Debug|x86.ActiveCfg = Debug|Any CPU {396C5208-5D46-4A11-92C1-FD0F2F42D7DD}.Debug|x86.Build.0 = Debug|Any CPU {396C5208-5D46-4A11-92C1-FD0F2F42D7DD}.Release|Any CPU.ActiveCfg = Release|Any CPU {396C5208-5D46-4A11-92C1-FD0F2F42D7DD}.Release|Any CPU.Build.0 = Release|Any CPU + {396C5208-5D46-4A11-92C1-FD0F2F42D7DD}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {396C5208-5D46-4A11-92C1-FD0F2F42D7DD}.Release|Mixed Platforms.Build.0 = Release|x86 + {396C5208-5D46-4A11-92C1-FD0F2F42D7DD}.Release|Win32.ActiveCfg = Release|x86 {396C5208-5D46-4A11-92C1-FD0F2F42D7DD}.Release|x86.ActiveCfg = Release|Any CPU {396C5208-5D46-4A11-92C1-FD0F2F42D7DD}.Release|x86.Build.0 = Release|Any CPU {396C5208-5D46-4A11-92C1-FD0F2F42D7DD}.UseCaptureCardDefinitions|Any CPU.ActiveCfg = Release|x86 + {396C5208-5D46-4A11-92C1-FD0F2F42D7DD}.UseCaptureCardDefinitions|Mixed Platforms.ActiveCfg = Release|x86 + {396C5208-5D46-4A11-92C1-FD0F2F42D7DD}.UseCaptureCardDefinitions|Mixed Platforms.Build.0 = Release|x86 + {396C5208-5D46-4A11-92C1-FD0F2F42D7DD}.UseCaptureCardDefinitions|Win32.ActiveCfg = Release|x86 {396C5208-5D46-4A11-92C1-FD0F2F42D7DD}.UseCaptureCardDefinitions|x86.ActiveCfg = Release|x86 {396C5208-5D46-4A11-92C1-FD0F2F42D7DD}.UseCaptureCardDefinitions|x86.Build.0 = Release|x86 {396C5208-5D46-4A11-92C1-FD0F2F42D7DD}.UseCaptureDefintionsRelease|Any CPU.ActiveCfg = Release|Any CPU {396C5208-5D46-4A11-92C1-FD0F2F42D7DD}.UseCaptureDefintionsRelease|Any CPU.Build.0 = Release|Any CPU + {396C5208-5D46-4A11-92C1-FD0F2F42D7DD}.UseCaptureDefintionsRelease|Mixed Platforms.ActiveCfg = Release|x86 + {396C5208-5D46-4A11-92C1-FD0F2F42D7DD}.UseCaptureDefintionsRelease|Mixed Platforms.Build.0 = Release|x86 + {396C5208-5D46-4A11-92C1-FD0F2F42D7DD}.UseCaptureDefintionsRelease|Win32.ActiveCfg = Release|x86 {396C5208-5D46-4A11-92C1-FD0F2F42D7DD}.UseCaptureDefintionsRelease|x86.ActiveCfg = Release|x86 {396C5208-5D46-4A11-92C1-FD0F2F42D7DD}.UseCaptureDefintionsRelease|x86.Build.0 = Release|x86 {0A234721-1F13-4DF8-9B1E-64D9E3111203}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0A234721-1F13-4DF8-9B1E-64D9E3111203}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0A234721-1F13-4DF8-9B1E-64D9E3111203}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {0A234721-1F13-4DF8-9B1E-64D9E3111203}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {0A234721-1F13-4DF8-9B1E-64D9E3111203}.Debug|Win32.ActiveCfg = Debug|x86 {0A234721-1F13-4DF8-9B1E-64D9E3111203}.Debug|x86.ActiveCfg = Debug|Any CPU {0A234721-1F13-4DF8-9B1E-64D9E3111203}.Debug|x86.Build.0 = Debug|Any CPU {0A234721-1F13-4DF8-9B1E-64D9E3111203}.Release|Any CPU.ActiveCfg = Release|Any CPU {0A234721-1F13-4DF8-9B1E-64D9E3111203}.Release|Any CPU.Build.0 = Release|Any CPU + {0A234721-1F13-4DF8-9B1E-64D9E3111203}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {0A234721-1F13-4DF8-9B1E-64D9E3111203}.Release|Mixed Platforms.Build.0 = Release|x86 + {0A234721-1F13-4DF8-9B1E-64D9E3111203}.Release|Win32.ActiveCfg = Release|x86 {0A234721-1F13-4DF8-9B1E-64D9E3111203}.Release|x86.ActiveCfg = Release|Any CPU {0A234721-1F13-4DF8-9B1E-64D9E3111203}.Release|x86.Build.0 = Release|Any CPU {0A234721-1F13-4DF8-9B1E-64D9E3111203}.UseCaptureCardDefinitions|Any CPU.ActiveCfg = Release|x86 + {0A234721-1F13-4DF8-9B1E-64D9E3111203}.UseCaptureCardDefinitions|Mixed Platforms.ActiveCfg = Release|x86 + {0A234721-1F13-4DF8-9B1E-64D9E3111203}.UseCaptureCardDefinitions|Mixed Platforms.Build.0 = Release|x86 + {0A234721-1F13-4DF8-9B1E-64D9E3111203}.UseCaptureCardDefinitions|Win32.ActiveCfg = Release|x86 {0A234721-1F13-4DF8-9B1E-64D9E3111203}.UseCaptureCardDefinitions|x86.ActiveCfg = Release|x86 {0A234721-1F13-4DF8-9B1E-64D9E3111203}.UseCaptureCardDefinitions|x86.Build.0 = Release|x86 {0A234721-1F13-4DF8-9B1E-64D9E3111203}.UseCaptureDefintionsRelease|Any CPU.ActiveCfg = Release|Any CPU {0A234721-1F13-4DF8-9B1E-64D9E3111203}.UseCaptureDefintionsRelease|Any CPU.Build.0 = Release|Any CPU + {0A234721-1F13-4DF8-9B1E-64D9E3111203}.UseCaptureDefintionsRelease|Mixed Platforms.ActiveCfg = Release|x86 + {0A234721-1F13-4DF8-9B1E-64D9E3111203}.UseCaptureDefintionsRelease|Mixed Platforms.Build.0 = Release|x86 + {0A234721-1F13-4DF8-9B1E-64D9E3111203}.UseCaptureDefintionsRelease|Win32.ActiveCfg = Release|x86 {0A234721-1F13-4DF8-9B1E-64D9E3111203}.UseCaptureDefintionsRelease|x86.ActiveCfg = Release|x86 {0A234721-1F13-4DF8-9B1E-64D9E3111203}.UseCaptureDefintionsRelease|x86.Build.0 = Release|x86 {6DA0E4DF-6230-4642-98B5-E690BB6942BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6DA0E4DF-6230-4642-98B5-E690BB6942BB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6DA0E4DF-6230-4642-98B5-E690BB6942BB}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {6DA0E4DF-6230-4642-98B5-E690BB6942BB}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {6DA0E4DF-6230-4642-98B5-E690BB6942BB}.Debug|Win32.ActiveCfg = Debug|x86 {6DA0E4DF-6230-4642-98B5-E690BB6942BB}.Debug|x86.ActiveCfg = Debug|Any CPU {6DA0E4DF-6230-4642-98B5-E690BB6942BB}.Debug|x86.Build.0 = Debug|Any CPU {6DA0E4DF-6230-4642-98B5-E690BB6942BB}.Release|Any CPU.ActiveCfg = Release|Any CPU {6DA0E4DF-6230-4642-98B5-E690BB6942BB}.Release|Any CPU.Build.0 = Release|Any CPU + {6DA0E4DF-6230-4642-98B5-E690BB6942BB}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {6DA0E4DF-6230-4642-98B5-E690BB6942BB}.Release|Mixed Platforms.Build.0 = Release|x86 + {6DA0E4DF-6230-4642-98B5-E690BB6942BB}.Release|Win32.ActiveCfg = Release|x86 {6DA0E4DF-6230-4642-98B5-E690BB6942BB}.Release|x86.ActiveCfg = Release|Any CPU {6DA0E4DF-6230-4642-98B5-E690BB6942BB}.Release|x86.Build.0 = Release|Any CPU {6DA0E4DF-6230-4642-98B5-E690BB6942BB}.UseCaptureCardDefinitions|Any CPU.ActiveCfg = Release|x86 + {6DA0E4DF-6230-4642-98B5-E690BB6942BB}.UseCaptureCardDefinitions|Mixed Platforms.ActiveCfg = Release|x86 + {6DA0E4DF-6230-4642-98B5-E690BB6942BB}.UseCaptureCardDefinitions|Mixed Platforms.Build.0 = Release|x86 + {6DA0E4DF-6230-4642-98B5-E690BB6942BB}.UseCaptureCardDefinitions|Win32.ActiveCfg = Release|x86 {6DA0E4DF-6230-4642-98B5-E690BB6942BB}.UseCaptureCardDefinitions|x86.ActiveCfg = Release|x86 {6DA0E4DF-6230-4642-98B5-E690BB6942BB}.UseCaptureCardDefinitions|x86.Build.0 = Release|x86 {6DA0E4DF-6230-4642-98B5-E690BB6942BB}.UseCaptureDefintionsRelease|Any CPU.ActiveCfg = Release|Any CPU {6DA0E4DF-6230-4642-98B5-E690BB6942BB}.UseCaptureDefintionsRelease|Any CPU.Build.0 = Release|Any CPU + {6DA0E4DF-6230-4642-98B5-E690BB6942BB}.UseCaptureDefintionsRelease|Mixed Platforms.ActiveCfg = Release|x86 + {6DA0E4DF-6230-4642-98B5-E690BB6942BB}.UseCaptureDefintionsRelease|Mixed Platforms.Build.0 = Release|x86 + {6DA0E4DF-6230-4642-98B5-E690BB6942BB}.UseCaptureDefintionsRelease|Win32.ActiveCfg = Release|x86 {6DA0E4DF-6230-4642-98B5-E690BB6942BB}.UseCaptureDefintionsRelease|x86.ActiveCfg = Release|x86 {6DA0E4DF-6230-4642-98B5-E690BB6942BB}.UseCaptureDefintionsRelease|x86.Build.0 = Release|x86 {596BDC58-35E0-488F-BED2-FC7A133BC047}.Debug|Any CPU.ActiveCfg = Debug|x86 {596BDC58-35E0-488F-BED2-FC7A133BC047}.Debug|Any CPU.Build.0 = Debug|x86 + {596BDC58-35E0-488F-BED2-FC7A133BC047}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {596BDC58-35E0-488F-BED2-FC7A133BC047}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {596BDC58-35E0-488F-BED2-FC7A133BC047}.Debug|Win32.ActiveCfg = Debug|x86 {596BDC58-35E0-488F-BED2-FC7A133BC047}.Debug|x86.ActiveCfg = Debug|x86 {596BDC58-35E0-488F-BED2-FC7A133BC047}.Debug|x86.Build.0 = Debug|x86 {596BDC58-35E0-488F-BED2-FC7A133BC047}.Release|Any CPU.ActiveCfg = Release|x86 {596BDC58-35E0-488F-BED2-FC7A133BC047}.Release|Any CPU.Build.0 = Release|x86 + {596BDC58-35E0-488F-BED2-FC7A133BC047}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {596BDC58-35E0-488F-BED2-FC7A133BC047}.Release|Mixed Platforms.Build.0 = Release|x86 + {596BDC58-35E0-488F-BED2-FC7A133BC047}.Release|Win32.ActiveCfg = Release|x86 {596BDC58-35E0-488F-BED2-FC7A133BC047}.Release|x86.ActiveCfg = Release|x86 {596BDC58-35E0-488F-BED2-FC7A133BC047}.Release|x86.Build.0 = Release|x86 {596BDC58-35E0-488F-BED2-FC7A133BC047}.UseCaptureCardDefinitions|Any CPU.ActiveCfg = Release|x86 + {596BDC58-35E0-488F-BED2-FC7A133BC047}.UseCaptureCardDefinitions|Mixed Platforms.ActiveCfg = Release|x86 + {596BDC58-35E0-488F-BED2-FC7A133BC047}.UseCaptureCardDefinitions|Mixed Platforms.Build.0 = Release|x86 + {596BDC58-35E0-488F-BED2-FC7A133BC047}.UseCaptureCardDefinitions|Win32.ActiveCfg = Release|x86 {596BDC58-35E0-488F-BED2-FC7A133BC047}.UseCaptureCardDefinitions|x86.ActiveCfg = Release|x86 {596BDC58-35E0-488F-BED2-FC7A133BC047}.UseCaptureCardDefinitions|x86.Build.0 = Release|x86 {596BDC58-35E0-488F-BED2-FC7A133BC047}.UseCaptureDefintionsRelease|Any CPU.ActiveCfg = Release|Any CPU {596BDC58-35E0-488F-BED2-FC7A133BC047}.UseCaptureDefintionsRelease|Any CPU.Build.0 = Release|Any CPU + {596BDC58-35E0-488F-BED2-FC7A133BC047}.UseCaptureDefintionsRelease|Mixed Platforms.ActiveCfg = Release|x86 + {596BDC58-35E0-488F-BED2-FC7A133BC047}.UseCaptureDefintionsRelease|Mixed Platforms.Build.0 = Release|x86 + {596BDC58-35E0-488F-BED2-FC7A133BC047}.UseCaptureDefintionsRelease|Win32.ActiveCfg = Release|x86 {596BDC58-35E0-488F-BED2-FC7A133BC047}.UseCaptureDefintionsRelease|x86.ActiveCfg = Release|x86 {596BDC58-35E0-488F-BED2-FC7A133BC047}.UseCaptureDefintionsRelease|x86.Build.0 = Release|x86 {DF3AC5D1-762E-4807-8642-1AE773B65E07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DF3AC5D1-762E-4807-8642-1AE773B65E07}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DF3AC5D1-762E-4807-8642-1AE773B65E07}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {DF3AC5D1-762E-4807-8642-1AE773B65E07}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {DF3AC5D1-762E-4807-8642-1AE773B65E07}.Debug|Win32.ActiveCfg = Debug|x86 {DF3AC5D1-762E-4807-8642-1AE773B65E07}.Debug|x86.ActiveCfg = Debug|Any CPU {DF3AC5D1-762E-4807-8642-1AE773B65E07}.Debug|x86.Build.0 = Debug|Any CPU {DF3AC5D1-762E-4807-8642-1AE773B65E07}.Release|Any CPU.ActiveCfg = Release|Any CPU {DF3AC5D1-762E-4807-8642-1AE773B65E07}.Release|Any CPU.Build.0 = Release|Any CPU + {DF3AC5D1-762E-4807-8642-1AE773B65E07}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {DF3AC5D1-762E-4807-8642-1AE773B65E07}.Release|Mixed Platforms.Build.0 = Release|x86 + {DF3AC5D1-762E-4807-8642-1AE773B65E07}.Release|Win32.ActiveCfg = Release|x86 {DF3AC5D1-762E-4807-8642-1AE773B65E07}.Release|x86.ActiveCfg = Release|Any CPU {DF3AC5D1-762E-4807-8642-1AE773B65E07}.Release|x86.Build.0 = Release|Any CPU {DF3AC5D1-762E-4807-8642-1AE773B65E07}.UseCaptureCardDefinitions|Any CPU.ActiveCfg = Release|x86 + {DF3AC5D1-762E-4807-8642-1AE773B65E07}.UseCaptureCardDefinitions|Mixed Platforms.ActiveCfg = Release|x86 + {DF3AC5D1-762E-4807-8642-1AE773B65E07}.UseCaptureCardDefinitions|Mixed Platforms.Build.0 = Release|x86 + {DF3AC5D1-762E-4807-8642-1AE773B65E07}.UseCaptureCardDefinitions|Win32.ActiveCfg = Release|x86 {DF3AC5D1-762E-4807-8642-1AE773B65E07}.UseCaptureCardDefinitions|x86.ActiveCfg = Release|x86 {DF3AC5D1-762E-4807-8642-1AE773B65E07}.UseCaptureCardDefinitions|x86.Build.0 = Release|x86 {DF3AC5D1-762E-4807-8642-1AE773B65E07}.UseCaptureDefintionsRelease|Any CPU.ActiveCfg = Release|Any CPU {DF3AC5D1-762E-4807-8642-1AE773B65E07}.UseCaptureDefintionsRelease|Any CPU.Build.0 = Release|Any CPU + {DF3AC5D1-762E-4807-8642-1AE773B65E07}.UseCaptureDefintionsRelease|Mixed Platforms.ActiveCfg = Release|x86 + {DF3AC5D1-762E-4807-8642-1AE773B65E07}.UseCaptureDefintionsRelease|Mixed Platforms.Build.0 = Release|x86 + {DF3AC5D1-762E-4807-8642-1AE773B65E07}.UseCaptureDefintionsRelease|Win32.ActiveCfg = Release|x86 {DF3AC5D1-762E-4807-8642-1AE773B65E07}.UseCaptureDefintionsRelease|x86.ActiveCfg = Release|x86 {DF3AC5D1-762E-4807-8642-1AE773B65E07}.UseCaptureDefintionsRelease|x86.Build.0 = Release|x86 {BD4A3413-C9F9-4299-BB52-ED45027EE7CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BD4A3413-C9F9-4299-BB52-ED45027EE7CC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BD4A3413-C9F9-4299-BB52-ED45027EE7CC}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {BD4A3413-C9F9-4299-BB52-ED45027EE7CC}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {BD4A3413-C9F9-4299-BB52-ED45027EE7CC}.Debug|Win32.ActiveCfg = Debug|x86 {BD4A3413-C9F9-4299-BB52-ED45027EE7CC}.Debug|x86.ActiveCfg = Debug|Any CPU {BD4A3413-C9F9-4299-BB52-ED45027EE7CC}.Debug|x86.Build.0 = Debug|Any CPU {BD4A3413-C9F9-4299-BB52-ED45027EE7CC}.Release|Any CPU.ActiveCfg = Release|Any CPU {BD4A3413-C9F9-4299-BB52-ED45027EE7CC}.Release|Any CPU.Build.0 = Release|Any CPU + {BD4A3413-C9F9-4299-BB52-ED45027EE7CC}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {BD4A3413-C9F9-4299-BB52-ED45027EE7CC}.Release|Mixed Platforms.Build.0 = Release|x86 + {BD4A3413-C9F9-4299-BB52-ED45027EE7CC}.Release|Win32.ActiveCfg = Release|x86 {BD4A3413-C9F9-4299-BB52-ED45027EE7CC}.Release|x86.ActiveCfg = Release|Any CPU {BD4A3413-C9F9-4299-BB52-ED45027EE7CC}.Release|x86.Build.0 = Release|Any CPU {BD4A3413-C9F9-4299-BB52-ED45027EE7CC}.UseCaptureCardDefinitions|Any CPU.ActiveCfg = Release|x86 + {BD4A3413-C9F9-4299-BB52-ED45027EE7CC}.UseCaptureCardDefinitions|Mixed Platforms.ActiveCfg = Release|x86 + {BD4A3413-C9F9-4299-BB52-ED45027EE7CC}.UseCaptureCardDefinitions|Mixed Platforms.Build.0 = Release|x86 + {BD4A3413-C9F9-4299-BB52-ED45027EE7CC}.UseCaptureCardDefinitions|Win32.ActiveCfg = Release|x86 {BD4A3413-C9F9-4299-BB52-ED45027EE7CC}.UseCaptureCardDefinitions|x86.ActiveCfg = Release|x86 {BD4A3413-C9F9-4299-BB52-ED45027EE7CC}.UseCaptureCardDefinitions|x86.Build.0 = Release|x86 {BD4A3413-C9F9-4299-BB52-ED45027EE7CC}.UseCaptureDefintionsRelease|Any CPU.ActiveCfg = Release|Any CPU {BD4A3413-C9F9-4299-BB52-ED45027EE7CC}.UseCaptureDefintionsRelease|Any CPU.Build.0 = Release|Any CPU + {BD4A3413-C9F9-4299-BB52-ED45027EE7CC}.UseCaptureDefintionsRelease|Mixed Platforms.ActiveCfg = Release|x86 + {BD4A3413-C9F9-4299-BB52-ED45027EE7CC}.UseCaptureDefintionsRelease|Mixed Platforms.Build.0 = Release|x86 + {BD4A3413-C9F9-4299-BB52-ED45027EE7CC}.UseCaptureDefintionsRelease|Win32.ActiveCfg = Release|x86 {BD4A3413-C9F9-4299-BB52-ED45027EE7CC}.UseCaptureDefintionsRelease|x86.ActiveCfg = Release|x86 {BD4A3413-C9F9-4299-BB52-ED45027EE7CC}.UseCaptureDefintionsRelease|x86.Build.0 = Release|x86 {C6564AA7-976B-43EF-9E35-7E607EE1DD12}.Debug|Any CPU.ActiveCfg = Debug|x86 {C6564AA7-976B-43EF-9E35-7E607EE1DD12}.Debug|Any CPU.Build.0 = Debug|x86 + {C6564AA7-976B-43EF-9E35-7E607EE1DD12}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {C6564AA7-976B-43EF-9E35-7E607EE1DD12}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {C6564AA7-976B-43EF-9E35-7E607EE1DD12}.Debug|Win32.ActiveCfg = Debug|x86 {C6564AA7-976B-43EF-9E35-7E607EE1DD12}.Debug|x86.ActiveCfg = Debug|x86 {C6564AA7-976B-43EF-9E35-7E607EE1DD12}.Debug|x86.Build.0 = Debug|x86 {C6564AA7-976B-43EF-9E35-7E607EE1DD12}.Release|Any CPU.ActiveCfg = Release|x86 {C6564AA7-976B-43EF-9E35-7E607EE1DD12}.Release|Any CPU.Build.0 = Release|x86 + {C6564AA7-976B-43EF-9E35-7E607EE1DD12}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {C6564AA7-976B-43EF-9E35-7E607EE1DD12}.Release|Mixed Platforms.Build.0 = Release|x86 + {C6564AA7-976B-43EF-9E35-7E607EE1DD12}.Release|Win32.ActiveCfg = Release|x86 {C6564AA7-976B-43EF-9E35-7E607EE1DD12}.Release|x86.ActiveCfg = Release|x86 {C6564AA7-976B-43EF-9E35-7E607EE1DD12}.Release|x86.Build.0 = Release|x86 {C6564AA7-976B-43EF-9E35-7E607EE1DD12}.UseCaptureCardDefinitions|Any CPU.ActiveCfg = Release|x86 + {C6564AA7-976B-43EF-9E35-7E607EE1DD12}.UseCaptureCardDefinitions|Mixed Platforms.ActiveCfg = Release|x86 + {C6564AA7-976B-43EF-9E35-7E607EE1DD12}.UseCaptureCardDefinitions|Mixed Platforms.Build.0 = Release|x86 + {C6564AA7-976B-43EF-9E35-7E607EE1DD12}.UseCaptureCardDefinitions|Win32.ActiveCfg = Release|x86 {C6564AA7-976B-43EF-9E35-7E607EE1DD12}.UseCaptureCardDefinitions|x86.ActiveCfg = Release|x86 {C6564AA7-976B-43EF-9E35-7E607EE1DD12}.UseCaptureCardDefinitions|x86.Build.0 = Release|x86 {C6564AA7-976B-43EF-9E35-7E607EE1DD12}.UseCaptureDefintionsRelease|Any CPU.ActiveCfg = Release|Any CPU {C6564AA7-976B-43EF-9E35-7E607EE1DD12}.UseCaptureDefintionsRelease|Any CPU.Build.0 = Release|Any CPU + {C6564AA7-976B-43EF-9E35-7E607EE1DD12}.UseCaptureDefintionsRelease|Mixed Platforms.ActiveCfg = Release|x86 + {C6564AA7-976B-43EF-9E35-7E607EE1DD12}.UseCaptureDefintionsRelease|Mixed Platforms.Build.0 = Release|x86 + {C6564AA7-976B-43EF-9E35-7E607EE1DD12}.UseCaptureDefintionsRelease|Win32.ActiveCfg = Release|x86 {C6564AA7-976B-43EF-9E35-7E607EE1DD12}.UseCaptureDefintionsRelease|x86.ActiveCfg = Release|x86 {C6564AA7-976B-43EF-9E35-7E607EE1DD12}.UseCaptureDefintionsRelease|x86.Build.0 = Release|x86 {1CCD6A99-B59F-42B2-8A6B-A5BCE57FF3F1}.Debug|Any CPU.ActiveCfg = Debug|x86 {1CCD6A99-B59F-42B2-8A6B-A5BCE57FF3F1}.Debug|Any CPU.Build.0 = Debug|x86 + {1CCD6A99-B59F-42B2-8A6B-A5BCE57FF3F1}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {1CCD6A99-B59F-42B2-8A6B-A5BCE57FF3F1}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {1CCD6A99-B59F-42B2-8A6B-A5BCE57FF3F1}.Debug|Win32.ActiveCfg = Debug|x86 {1CCD6A99-B59F-42B2-8A6B-A5BCE57FF3F1}.Debug|x86.ActiveCfg = Debug|x86 {1CCD6A99-B59F-42B2-8A6B-A5BCE57FF3F1}.Debug|x86.Build.0 = Debug|x86 {1CCD6A99-B59F-42B2-8A6B-A5BCE57FF3F1}.Release|Any CPU.ActiveCfg = Release|x86 {1CCD6A99-B59F-42B2-8A6B-A5BCE57FF3F1}.Release|Any CPU.Build.0 = Release|x86 + {1CCD6A99-B59F-42B2-8A6B-A5BCE57FF3F1}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {1CCD6A99-B59F-42B2-8A6B-A5BCE57FF3F1}.Release|Mixed Platforms.Build.0 = Release|x86 + {1CCD6A99-B59F-42B2-8A6B-A5BCE57FF3F1}.Release|Win32.ActiveCfg = Release|x86 {1CCD6A99-B59F-42B2-8A6B-A5BCE57FF3F1}.Release|x86.ActiveCfg = Release|x86 {1CCD6A99-B59F-42B2-8A6B-A5BCE57FF3F1}.Release|x86.Build.0 = Release|x86 {1CCD6A99-B59F-42B2-8A6B-A5BCE57FF3F1}.UseCaptureCardDefinitions|Any CPU.ActiveCfg = Release|x86 + {1CCD6A99-B59F-42B2-8A6B-A5BCE57FF3F1}.UseCaptureCardDefinitions|Mixed Platforms.ActiveCfg = Release|x86 + {1CCD6A99-B59F-42B2-8A6B-A5BCE57FF3F1}.UseCaptureCardDefinitions|Mixed Platforms.Build.0 = Release|x86 + {1CCD6A99-B59F-42B2-8A6B-A5BCE57FF3F1}.UseCaptureCardDefinitions|Win32.ActiveCfg = Release|x86 {1CCD6A99-B59F-42B2-8A6B-A5BCE57FF3F1}.UseCaptureCardDefinitions|x86.ActiveCfg = Release|x86 {1CCD6A99-B59F-42B2-8A6B-A5BCE57FF3F1}.UseCaptureCardDefinitions|x86.Build.0 = Release|x86 {1CCD6A99-B59F-42B2-8A6B-A5BCE57FF3F1}.UseCaptureDefintionsRelease|Any CPU.ActiveCfg = Release|Any CPU {1CCD6A99-B59F-42B2-8A6B-A5BCE57FF3F1}.UseCaptureDefintionsRelease|Any CPU.Build.0 = Release|Any CPU + {1CCD6A99-B59F-42B2-8A6B-A5BCE57FF3F1}.UseCaptureDefintionsRelease|Mixed Platforms.ActiveCfg = Release|x86 + {1CCD6A99-B59F-42B2-8A6B-A5BCE57FF3F1}.UseCaptureDefintionsRelease|Mixed Platforms.Build.0 = Release|x86 + {1CCD6A99-B59F-42B2-8A6B-A5BCE57FF3F1}.UseCaptureDefintionsRelease|Win32.ActiveCfg = Release|x86 {1CCD6A99-B59F-42B2-8A6B-A5BCE57FF3F1}.UseCaptureDefintionsRelease|x86.ActiveCfg = Release|x86 {1CCD6A99-B59F-42B2-8A6B-A5BCE57FF3F1}.UseCaptureDefintionsRelease|x86.Build.0 = Release|x86 {2B094D86-DD1A-4DDD-95D2-56A57E714C4E}.Debug|Any CPU.ActiveCfg = Debug|x86 {2B094D86-DD1A-4DDD-95D2-56A57E714C4E}.Debug|Any CPU.Build.0 = Debug|x86 + {2B094D86-DD1A-4DDD-95D2-56A57E714C4E}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {2B094D86-DD1A-4DDD-95D2-56A57E714C4E}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {2B094D86-DD1A-4DDD-95D2-56A57E714C4E}.Debug|Win32.ActiveCfg = Debug|x86 {2B094D86-DD1A-4DDD-95D2-56A57E714C4E}.Debug|x86.ActiveCfg = Debug|x86 {2B094D86-DD1A-4DDD-95D2-56A57E714C4E}.Debug|x86.Build.0 = Debug|x86 {2B094D86-DD1A-4DDD-95D2-56A57E714C4E}.Release|Any CPU.ActiveCfg = Release|x86 {2B094D86-DD1A-4DDD-95D2-56A57E714C4E}.Release|Any CPU.Build.0 = Release|x86 + {2B094D86-DD1A-4DDD-95D2-56A57E714C4E}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {2B094D86-DD1A-4DDD-95D2-56A57E714C4E}.Release|Mixed Platforms.Build.0 = Release|x86 + {2B094D86-DD1A-4DDD-95D2-56A57E714C4E}.Release|Win32.ActiveCfg = Release|x86 {2B094D86-DD1A-4DDD-95D2-56A57E714C4E}.Release|x86.ActiveCfg = Release|x86 {2B094D86-DD1A-4DDD-95D2-56A57E714C4E}.Release|x86.Build.0 = Release|x86 {2B094D86-DD1A-4DDD-95D2-56A57E714C4E}.UseCaptureCardDefinitions|Any CPU.ActiveCfg = Release|x86 + {2B094D86-DD1A-4DDD-95D2-56A57E714C4E}.UseCaptureCardDefinitions|Mixed Platforms.ActiveCfg = Release|x86 + {2B094D86-DD1A-4DDD-95D2-56A57E714C4E}.UseCaptureCardDefinitions|Mixed Platforms.Build.0 = Release|x86 + {2B094D86-DD1A-4DDD-95D2-56A57E714C4E}.UseCaptureCardDefinitions|Win32.ActiveCfg = Release|x86 {2B094D86-DD1A-4DDD-95D2-56A57E714C4E}.UseCaptureCardDefinitions|x86.ActiveCfg = Release|x86 {2B094D86-DD1A-4DDD-95D2-56A57E714C4E}.UseCaptureCardDefinitions|x86.Build.0 = Release|x86 {2B094D86-DD1A-4DDD-95D2-56A57E714C4E}.UseCaptureDefintionsRelease|Any CPU.ActiveCfg = Release|Any CPU {2B094D86-DD1A-4DDD-95D2-56A57E714C4E}.UseCaptureDefintionsRelease|Any CPU.Build.0 = Release|Any CPU + {2B094D86-DD1A-4DDD-95D2-56A57E714C4E}.UseCaptureDefintionsRelease|Mixed Platforms.ActiveCfg = Release|x86 + {2B094D86-DD1A-4DDD-95D2-56A57E714C4E}.UseCaptureDefintionsRelease|Mixed Platforms.Build.0 = Release|x86 + {2B094D86-DD1A-4DDD-95D2-56A57E714C4E}.UseCaptureDefintionsRelease|Win32.ActiveCfg = Release|x86 {2B094D86-DD1A-4DDD-95D2-56A57E714C4E}.UseCaptureDefintionsRelease|x86.ActiveCfg = Release|x86 {2B094D86-DD1A-4DDD-95D2-56A57E714C4E}.UseCaptureDefintionsRelease|x86.Build.0 = Release|x86 {8635D515-A5D4-4FB7-BD30-71770651E18B}.Debug|Any CPU.ActiveCfg = Debug|x86 {8635D515-A5D4-4FB7-BD30-71770651E18B}.Debug|Any CPU.Build.0 = Debug|x86 + {8635D515-A5D4-4FB7-BD30-71770651E18B}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {8635D515-A5D4-4FB7-BD30-71770651E18B}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {8635D515-A5D4-4FB7-BD30-71770651E18B}.Debug|Win32.ActiveCfg = Debug|x86 {8635D515-A5D4-4FB7-BD30-71770651E18B}.Debug|x86.ActiveCfg = Debug|x86 {8635D515-A5D4-4FB7-BD30-71770651E18B}.Debug|x86.Build.0 = Debug|x86 {8635D515-A5D4-4FB7-BD30-71770651E18B}.Release|Any CPU.ActiveCfg = Release|x86 {8635D515-A5D4-4FB7-BD30-71770651E18B}.Release|Any CPU.Build.0 = Release|x86 + {8635D515-A5D4-4FB7-BD30-71770651E18B}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {8635D515-A5D4-4FB7-BD30-71770651E18B}.Release|Mixed Platforms.Build.0 = Release|x86 + {8635D515-A5D4-4FB7-BD30-71770651E18B}.Release|Win32.ActiveCfg = Release|x86 {8635D515-A5D4-4FB7-BD30-71770651E18B}.Release|x86.ActiveCfg = Release|x86 {8635D515-A5D4-4FB7-BD30-71770651E18B}.Release|x86.Build.0 = Release|x86 {8635D515-A5D4-4FB7-BD30-71770651E18B}.UseCaptureCardDefinitions|Any CPU.ActiveCfg = Release|x86 + {8635D515-A5D4-4FB7-BD30-71770651E18B}.UseCaptureCardDefinitions|Mixed Platforms.ActiveCfg = Release|x86 + {8635D515-A5D4-4FB7-BD30-71770651E18B}.UseCaptureCardDefinitions|Mixed Platforms.Build.0 = Release|x86 + {8635D515-A5D4-4FB7-BD30-71770651E18B}.UseCaptureCardDefinitions|Win32.ActiveCfg = Release|x86 {8635D515-A5D4-4FB7-BD30-71770651E18B}.UseCaptureCardDefinitions|x86.ActiveCfg = Release|Any CPU {8635D515-A5D4-4FB7-BD30-71770651E18B}.UseCaptureDefintionsRelease|Any CPU.ActiveCfg = Release|Any CPU {8635D515-A5D4-4FB7-BD30-71770651E18B}.UseCaptureDefintionsRelease|Any CPU.Build.0 = Release|Any CPU + {8635D515-A5D4-4FB7-BD30-71770651E18B}.UseCaptureDefintionsRelease|Mixed Platforms.ActiveCfg = Release|x86 + {8635D515-A5D4-4FB7-BD30-71770651E18B}.UseCaptureDefintionsRelease|Mixed Platforms.Build.0 = Release|x86 + {8635D515-A5D4-4FB7-BD30-71770651E18B}.UseCaptureDefintionsRelease|Win32.ActiveCfg = Release|x86 {8635D515-A5D4-4FB7-BD30-71770651E18B}.UseCaptureDefintionsRelease|x86.ActiveCfg = Release|Any CPU {7701AA79-18D4-4A18-BB52-16774FB7943D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7701AA79-18D4-4A18-BB52-16774FB7943D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7701AA79-18D4-4A18-BB52-16774FB7943D}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {7701AA79-18D4-4A18-BB52-16774FB7943D}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {7701AA79-18D4-4A18-BB52-16774FB7943D}.Debug|Win32.ActiveCfg = Debug|x86 {7701AA79-18D4-4A18-BB52-16774FB7943D}.Debug|x86.ActiveCfg = Debug|Any CPU {7701AA79-18D4-4A18-BB52-16774FB7943D}.Debug|x86.Build.0 = Debug|Any CPU {7701AA79-18D4-4A18-BB52-16774FB7943D}.Release|Any CPU.ActiveCfg = Release|Any CPU {7701AA79-18D4-4A18-BB52-16774FB7943D}.Release|Any CPU.Build.0 = Release|Any CPU + {7701AA79-18D4-4A18-BB52-16774FB7943D}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {7701AA79-18D4-4A18-BB52-16774FB7943D}.Release|Mixed Platforms.Build.0 = Release|x86 + {7701AA79-18D4-4A18-BB52-16774FB7943D}.Release|Win32.ActiveCfg = Release|x86 {7701AA79-18D4-4A18-BB52-16774FB7943D}.Release|x86.ActiveCfg = Release|Any CPU {7701AA79-18D4-4A18-BB52-16774FB7943D}.Release|x86.Build.0 = Release|Any CPU {7701AA79-18D4-4A18-BB52-16774FB7943D}.UseCaptureCardDefinitions|Any CPU.ActiveCfg = Release|x86 + {7701AA79-18D4-4A18-BB52-16774FB7943D}.UseCaptureCardDefinitions|Mixed Platforms.ActiveCfg = Release|x86 + {7701AA79-18D4-4A18-BB52-16774FB7943D}.UseCaptureCardDefinitions|Mixed Platforms.Build.0 = Release|x86 + {7701AA79-18D4-4A18-BB52-16774FB7943D}.UseCaptureCardDefinitions|Win32.ActiveCfg = Release|x86 {7701AA79-18D4-4A18-BB52-16774FB7943D}.UseCaptureCardDefinitions|x86.ActiveCfg = Release|x86 {7701AA79-18D4-4A18-BB52-16774FB7943D}.UseCaptureCardDefinitions|x86.Build.0 = Release|x86 {7701AA79-18D4-4A18-BB52-16774FB7943D}.UseCaptureDefintionsRelease|Any CPU.ActiveCfg = Release|Any CPU {7701AA79-18D4-4A18-BB52-16774FB7943D}.UseCaptureDefintionsRelease|Any CPU.Build.0 = Release|Any CPU + {7701AA79-18D4-4A18-BB52-16774FB7943D}.UseCaptureDefintionsRelease|Mixed Platforms.ActiveCfg = Release|x86 + {7701AA79-18D4-4A18-BB52-16774FB7943D}.UseCaptureDefintionsRelease|Mixed Platforms.Build.0 = Release|x86 + {7701AA79-18D4-4A18-BB52-16774FB7943D}.UseCaptureDefintionsRelease|Win32.ActiveCfg = Release|x86 {7701AA79-18D4-4A18-BB52-16774FB7943D}.UseCaptureDefintionsRelease|x86.ActiveCfg = Release|x86 {7701AA79-18D4-4A18-BB52-16774FB7943D}.UseCaptureDefintionsRelease|x86.Build.0 = Release|x86 {CC77F438-DBD3-4D9C-80B1-C86BA50CF635}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CC77F438-DBD3-4D9C-80B1-C86BA50CF635}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CC77F438-DBD3-4D9C-80B1-C86BA50CF635}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {CC77F438-DBD3-4D9C-80B1-C86BA50CF635}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {CC77F438-DBD3-4D9C-80B1-C86BA50CF635}.Debug|Win32.ActiveCfg = Debug|x86 {CC77F438-DBD3-4D9C-80B1-C86BA50CF635}.Debug|x86.ActiveCfg = Debug|Any CPU {CC77F438-DBD3-4D9C-80B1-C86BA50CF635}.Debug|x86.Build.0 = Debug|Any CPU {CC77F438-DBD3-4D9C-80B1-C86BA50CF635}.Release|Any CPU.ActiveCfg = Release|Any CPU {CC77F438-DBD3-4D9C-80B1-C86BA50CF635}.Release|Any CPU.Build.0 = Release|Any CPU + {CC77F438-DBD3-4D9C-80B1-C86BA50CF635}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {CC77F438-DBD3-4D9C-80B1-C86BA50CF635}.Release|Mixed Platforms.Build.0 = Release|x86 + {CC77F438-DBD3-4D9C-80B1-C86BA50CF635}.Release|Win32.ActiveCfg = Release|x86 {CC77F438-DBD3-4D9C-80B1-C86BA50CF635}.Release|x86.ActiveCfg = Release|Any CPU {CC77F438-DBD3-4D9C-80B1-C86BA50CF635}.Release|x86.Build.0 = Release|Any CPU {CC77F438-DBD3-4D9C-80B1-C86BA50CF635}.UseCaptureCardDefinitions|Any CPU.ActiveCfg = Release|x86 + {CC77F438-DBD3-4D9C-80B1-C86BA50CF635}.UseCaptureCardDefinitions|Mixed Platforms.ActiveCfg = Release|x86 + {CC77F438-DBD3-4D9C-80B1-C86BA50CF635}.UseCaptureCardDefinitions|Mixed Platforms.Build.0 = Release|x86 + {CC77F438-DBD3-4D9C-80B1-C86BA50CF635}.UseCaptureCardDefinitions|Win32.ActiveCfg = Release|x86 {CC77F438-DBD3-4D9C-80B1-C86BA50CF635}.UseCaptureCardDefinitions|x86.ActiveCfg = Release|x86 {CC77F438-DBD3-4D9C-80B1-C86BA50CF635}.UseCaptureCardDefinitions|x86.Build.0 = Release|x86 {CC77F438-DBD3-4D9C-80B1-C86BA50CF635}.UseCaptureDefintionsRelease|Any CPU.ActiveCfg = Release|Any CPU {CC77F438-DBD3-4D9C-80B1-C86BA50CF635}.UseCaptureDefintionsRelease|Any CPU.Build.0 = Release|Any CPU + {CC77F438-DBD3-4D9C-80B1-C86BA50CF635}.UseCaptureDefintionsRelease|Mixed Platforms.ActiveCfg = Release|x86 + {CC77F438-DBD3-4D9C-80B1-C86BA50CF635}.UseCaptureDefintionsRelease|Mixed Platforms.Build.0 = Release|x86 + {CC77F438-DBD3-4D9C-80B1-C86BA50CF635}.UseCaptureDefintionsRelease|Win32.ActiveCfg = Release|x86 {CC77F438-DBD3-4D9C-80B1-C86BA50CF635}.UseCaptureDefintionsRelease|x86.ActiveCfg = Release|x86 {CC77F438-DBD3-4D9C-80B1-C86BA50CF635}.UseCaptureDefintionsRelease|x86.Build.0 = Release|x86 {F42B1A87-4CC6-4D2F-BDC6-1C90AF52D488}.Debug|Any CPU.ActiveCfg = Debug|x86 {F42B1A87-4CC6-4D2F-BDC6-1C90AF52D488}.Debug|Any CPU.Build.0 = Debug|x86 + {F42B1A87-4CC6-4D2F-BDC6-1C90AF52D488}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {F42B1A87-4CC6-4D2F-BDC6-1C90AF52D488}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {F42B1A87-4CC6-4D2F-BDC6-1C90AF52D488}.Debug|Win32.ActiveCfg = Debug|x86 {F42B1A87-4CC6-4D2F-BDC6-1C90AF52D488}.Debug|x86.ActiveCfg = Debug|x86 {F42B1A87-4CC6-4D2F-BDC6-1C90AF52D488}.Debug|x86.Build.0 = Debug|x86 {F42B1A87-4CC6-4D2F-BDC6-1C90AF52D488}.Release|Any CPU.ActiveCfg = Release|x86 {F42B1A87-4CC6-4D2F-BDC6-1C90AF52D488}.Release|Any CPU.Build.0 = Release|x86 + {F42B1A87-4CC6-4D2F-BDC6-1C90AF52D488}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {F42B1A87-4CC6-4D2F-BDC6-1C90AF52D488}.Release|Mixed Platforms.Build.0 = Release|x86 + {F42B1A87-4CC6-4D2F-BDC6-1C90AF52D488}.Release|Win32.ActiveCfg = Release|x86 {F42B1A87-4CC6-4D2F-BDC6-1C90AF52D488}.Release|x86.ActiveCfg = Release|x86 {F42B1A87-4CC6-4D2F-BDC6-1C90AF52D488}.Release|x86.Build.0 = Release|x86 {F42B1A87-4CC6-4D2F-BDC6-1C90AF52D488}.UseCaptureCardDefinitions|Any CPU.ActiveCfg = Release|x86 + {F42B1A87-4CC6-4D2F-BDC6-1C90AF52D488}.UseCaptureCardDefinitions|Mixed Platforms.ActiveCfg = Release|x86 + {F42B1A87-4CC6-4D2F-BDC6-1C90AF52D488}.UseCaptureCardDefinitions|Mixed Platforms.Build.0 = Release|x86 + {F42B1A87-4CC6-4D2F-BDC6-1C90AF52D488}.UseCaptureCardDefinitions|Win32.ActiveCfg = Release|x86 {F42B1A87-4CC6-4D2F-BDC6-1C90AF52D488}.UseCaptureCardDefinitions|x86.ActiveCfg = Release|Any CPU {F42B1A87-4CC6-4D2F-BDC6-1C90AF52D488}.UseCaptureDefintionsRelease|Any CPU.ActiveCfg = Release|Any CPU {F42B1A87-4CC6-4D2F-BDC6-1C90AF52D488}.UseCaptureDefintionsRelease|Any CPU.Build.0 = Release|Any CPU + {F42B1A87-4CC6-4D2F-BDC6-1C90AF52D488}.UseCaptureDefintionsRelease|Mixed Platforms.ActiveCfg = Release|x86 + {F42B1A87-4CC6-4D2F-BDC6-1C90AF52D488}.UseCaptureDefintionsRelease|Mixed Platforms.Build.0 = Release|x86 + {F42B1A87-4CC6-4D2F-BDC6-1C90AF52D488}.UseCaptureDefintionsRelease|Win32.ActiveCfg = Release|x86 {F42B1A87-4CC6-4D2F-BDC6-1C90AF52D488}.UseCaptureDefintionsRelease|x86.ActiveCfg = Release|Any CPU {4458F642-6022-4A3F-996F-E8AA510FB7E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4458F642-6022-4A3F-996F-E8AA510FB7E8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4458F642-6022-4A3F-996F-E8AA510FB7E8}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {4458F642-6022-4A3F-996F-E8AA510FB7E8}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {4458F642-6022-4A3F-996F-E8AA510FB7E8}.Debug|Win32.ActiveCfg = Debug|x86 {4458F642-6022-4A3F-996F-E8AA510FB7E8}.Debug|x86.ActiveCfg = Debug|Any CPU {4458F642-6022-4A3F-996F-E8AA510FB7E8}.Debug|x86.Build.0 = Debug|Any CPU {4458F642-6022-4A3F-996F-E8AA510FB7E8}.Release|Any CPU.ActiveCfg = Release|Any CPU {4458F642-6022-4A3F-996F-E8AA510FB7E8}.Release|Any CPU.Build.0 = Release|Any CPU + {4458F642-6022-4A3F-996F-E8AA510FB7E8}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {4458F642-6022-4A3F-996F-E8AA510FB7E8}.Release|Mixed Platforms.Build.0 = Release|x86 + {4458F642-6022-4A3F-996F-E8AA510FB7E8}.Release|Win32.ActiveCfg = Release|x86 {4458F642-6022-4A3F-996F-E8AA510FB7E8}.Release|x86.ActiveCfg = Release|Any CPU {4458F642-6022-4A3F-996F-E8AA510FB7E8}.Release|x86.Build.0 = Release|Any CPU {4458F642-6022-4A3F-996F-E8AA510FB7E8}.UseCaptureCardDefinitions|Any CPU.ActiveCfg = Release|x86 + {4458F642-6022-4A3F-996F-E8AA510FB7E8}.UseCaptureCardDefinitions|Mixed Platforms.ActiveCfg = Release|x86 + {4458F642-6022-4A3F-996F-E8AA510FB7E8}.UseCaptureCardDefinitions|Mixed Platforms.Build.0 = Release|x86 + {4458F642-6022-4A3F-996F-E8AA510FB7E8}.UseCaptureCardDefinitions|Win32.ActiveCfg = Release|x86 {4458F642-6022-4A3F-996F-E8AA510FB7E8}.UseCaptureCardDefinitions|x86.ActiveCfg = Release|Any CPU {4458F642-6022-4A3F-996F-E8AA510FB7E8}.UseCaptureDefintionsRelease|Any CPU.ActiveCfg = Release|Any CPU {4458F642-6022-4A3F-996F-E8AA510FB7E8}.UseCaptureDefintionsRelease|Any CPU.Build.0 = Release|Any CPU + {4458F642-6022-4A3F-996F-E8AA510FB7E8}.UseCaptureDefintionsRelease|Mixed Platforms.ActiveCfg = Release|x86 + {4458F642-6022-4A3F-996F-E8AA510FB7E8}.UseCaptureDefintionsRelease|Mixed Platforms.Build.0 = Release|x86 + {4458F642-6022-4A3F-996F-E8AA510FB7E8}.UseCaptureDefintionsRelease|Win32.ActiveCfg = Release|x86 {4458F642-6022-4A3F-996F-E8AA510FB7E8}.UseCaptureDefintionsRelease|x86.ActiveCfg = Release|Any CPU {7A626CB9-0660-4F47-B059-7AC7F68EDB0A}.Debug|Any CPU.ActiveCfg = Debug|x86 {7A626CB9-0660-4F47-B059-7AC7F68EDB0A}.Debug|Any CPU.Build.0 = Debug|x86 + {7A626CB9-0660-4F47-B059-7AC7F68EDB0A}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {7A626CB9-0660-4F47-B059-7AC7F68EDB0A}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {7A626CB9-0660-4F47-B059-7AC7F68EDB0A}.Debug|Win32.ActiveCfg = Debug|x86 {7A626CB9-0660-4F47-B059-7AC7F68EDB0A}.Debug|x86.ActiveCfg = Debug|x86 {7A626CB9-0660-4F47-B059-7AC7F68EDB0A}.Debug|x86.Build.0 = Debug|x86 {7A626CB9-0660-4F47-B059-7AC7F68EDB0A}.Release|Any CPU.ActiveCfg = Release|x86 {7A626CB9-0660-4F47-B059-7AC7F68EDB0A}.Release|Any CPU.Build.0 = Release|x86 + {7A626CB9-0660-4F47-B059-7AC7F68EDB0A}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {7A626CB9-0660-4F47-B059-7AC7F68EDB0A}.Release|Mixed Platforms.Build.0 = Release|x86 + {7A626CB9-0660-4F47-B059-7AC7F68EDB0A}.Release|Win32.ActiveCfg = Release|x86 {7A626CB9-0660-4F47-B059-7AC7F68EDB0A}.Release|x86.ActiveCfg = Release|x86 {7A626CB9-0660-4F47-B059-7AC7F68EDB0A}.Release|x86.Build.0 = Release|x86 {7A626CB9-0660-4F47-B059-7AC7F68EDB0A}.UseCaptureCardDefinitions|Any CPU.ActiveCfg = Release|x86 + {7A626CB9-0660-4F47-B059-7AC7F68EDB0A}.UseCaptureCardDefinitions|Mixed Platforms.ActiveCfg = Release|x86 + {7A626CB9-0660-4F47-B059-7AC7F68EDB0A}.UseCaptureCardDefinitions|Mixed Platforms.Build.0 = Release|x86 + {7A626CB9-0660-4F47-B059-7AC7F68EDB0A}.UseCaptureCardDefinitions|Win32.ActiveCfg = Release|x86 {7A626CB9-0660-4F47-B059-7AC7F68EDB0A}.UseCaptureCardDefinitions|x86.ActiveCfg = Release|Any CPU {7A626CB9-0660-4F47-B059-7AC7F68EDB0A}.UseCaptureDefintionsRelease|Any CPU.ActiveCfg = Release|Any CPU {7A626CB9-0660-4F47-B059-7AC7F68EDB0A}.UseCaptureDefintionsRelease|Any CPU.Build.0 = Release|Any CPU + {7A626CB9-0660-4F47-B059-7AC7F68EDB0A}.UseCaptureDefintionsRelease|Mixed Platforms.ActiveCfg = Release|x86 + {7A626CB9-0660-4F47-B059-7AC7F68EDB0A}.UseCaptureDefintionsRelease|Mixed Platforms.Build.0 = Release|x86 + {7A626CB9-0660-4F47-B059-7AC7F68EDB0A}.UseCaptureDefintionsRelease|Win32.ActiveCfg = Release|x86 {7A626CB9-0660-4F47-B059-7AC7F68EDB0A}.UseCaptureDefintionsRelease|x86.ActiveCfg = Release|Any CPU {74FB430C-6F41-434B-B9C3-F93BEE56E5FF}.Debug|Any CPU.ActiveCfg = Debug|x86 {74FB430C-6F41-434B-B9C3-F93BEE56E5FF}.Debug|Any CPU.Build.0 = Debug|x86 + {74FB430C-6F41-434B-B9C3-F93BEE56E5FF}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {74FB430C-6F41-434B-B9C3-F93BEE56E5FF}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {74FB430C-6F41-434B-B9C3-F93BEE56E5FF}.Debug|Win32.ActiveCfg = Debug|x86 {74FB430C-6F41-434B-B9C3-F93BEE56E5FF}.Debug|x86.ActiveCfg = Debug|x86 {74FB430C-6F41-434B-B9C3-F93BEE56E5FF}.Debug|x86.Build.0 = Debug|x86 {74FB430C-6F41-434B-B9C3-F93BEE56E5FF}.Release|Any CPU.ActiveCfg = Release|x86 {74FB430C-6F41-434B-B9C3-F93BEE56E5FF}.Release|Any CPU.Build.0 = Release|x86 + {74FB430C-6F41-434B-B9C3-F93BEE56E5FF}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {74FB430C-6F41-434B-B9C3-F93BEE56E5FF}.Release|Mixed Platforms.Build.0 = Release|x86 + {74FB430C-6F41-434B-B9C3-F93BEE56E5FF}.Release|Win32.ActiveCfg = Release|x86 {74FB430C-6F41-434B-B9C3-F93BEE56E5FF}.Release|x86.ActiveCfg = Release|x86 {74FB430C-6F41-434B-B9C3-F93BEE56E5FF}.Release|x86.Build.0 = Release|x86 {74FB430C-6F41-434B-B9C3-F93BEE56E5FF}.UseCaptureCardDefinitions|Any CPU.ActiveCfg = Release|x86 + {74FB430C-6F41-434B-B9C3-F93BEE56E5FF}.UseCaptureCardDefinitions|Mixed Platforms.ActiveCfg = Release|x86 + {74FB430C-6F41-434B-B9C3-F93BEE56E5FF}.UseCaptureCardDefinitions|Mixed Platforms.Build.0 = Release|x86 + {74FB430C-6F41-434B-B9C3-F93BEE56E5FF}.UseCaptureCardDefinitions|Win32.ActiveCfg = Release|x86 {74FB430C-6F41-434B-B9C3-F93BEE56E5FF}.UseCaptureCardDefinitions|x86.ActiveCfg = Release|x86 {74FB430C-6F41-434B-B9C3-F93BEE56E5FF}.UseCaptureDefintionsRelease|Any CPU.ActiveCfg = Release|x86 + {74FB430C-6F41-434B-B9C3-F93BEE56E5FF}.UseCaptureDefintionsRelease|Mixed Platforms.ActiveCfg = Release|x86 + {74FB430C-6F41-434B-B9C3-F93BEE56E5FF}.UseCaptureDefintionsRelease|Mixed Platforms.Build.0 = Release|x86 + {74FB430C-6F41-434B-B9C3-F93BEE56E5FF}.UseCaptureDefintionsRelease|Win32.ActiveCfg = Release|x86 {74FB430C-6F41-434B-B9C3-F93BEE56E5FF}.UseCaptureDefintionsRelease|x86.ActiveCfg = Release|x86 {CE009BFA-5EF6-4153-B2A1-2FA79698A9AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CE009BFA-5EF6-4153-B2A1-2FA79698A9AE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CE009BFA-5EF6-4153-B2A1-2FA79698A9AE}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {CE009BFA-5EF6-4153-B2A1-2FA79698A9AE}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {CE009BFA-5EF6-4153-B2A1-2FA79698A9AE}.Debug|Win32.ActiveCfg = Debug|x86 {CE009BFA-5EF6-4153-B2A1-2FA79698A9AE}.Debug|x86.ActiveCfg = Debug|Any CPU {CE009BFA-5EF6-4153-B2A1-2FA79698A9AE}.Debug|x86.Build.0 = Debug|Any CPU {CE009BFA-5EF6-4153-B2A1-2FA79698A9AE}.Release|Any CPU.ActiveCfg = Release|Any CPU {CE009BFA-5EF6-4153-B2A1-2FA79698A9AE}.Release|Any CPU.Build.0 = Release|Any CPU + {CE009BFA-5EF6-4153-B2A1-2FA79698A9AE}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {CE009BFA-5EF6-4153-B2A1-2FA79698A9AE}.Release|Mixed Platforms.Build.0 = Release|x86 + {CE009BFA-5EF6-4153-B2A1-2FA79698A9AE}.Release|Win32.ActiveCfg = Release|x86 {CE009BFA-5EF6-4153-B2A1-2FA79698A9AE}.Release|x86.ActiveCfg = Release|Any CPU {CE009BFA-5EF6-4153-B2A1-2FA79698A9AE}.Release|x86.Build.0 = Release|Any CPU {CE009BFA-5EF6-4153-B2A1-2FA79698A9AE}.UseCaptureCardDefinitions|Any CPU.ActiveCfg = Release|x86 + {CE009BFA-5EF6-4153-B2A1-2FA79698A9AE}.UseCaptureCardDefinitions|Mixed Platforms.ActiveCfg = Release|x86 + {CE009BFA-5EF6-4153-B2A1-2FA79698A9AE}.UseCaptureCardDefinitions|Mixed Platforms.Build.0 = Release|x86 + {CE009BFA-5EF6-4153-B2A1-2FA79698A9AE}.UseCaptureCardDefinitions|Win32.ActiveCfg = Release|x86 {CE009BFA-5EF6-4153-B2A1-2FA79698A9AE}.UseCaptureCardDefinitions|x86.ActiveCfg = Release|x86 {CE009BFA-5EF6-4153-B2A1-2FA79698A9AE}.UseCaptureCardDefinitions|x86.Build.0 = Release|x86 {CE009BFA-5EF6-4153-B2A1-2FA79698A9AE}.UseCaptureDefintionsRelease|Any CPU.ActiveCfg = Release|Any CPU {CE009BFA-5EF6-4153-B2A1-2FA79698A9AE}.UseCaptureDefintionsRelease|Any CPU.Build.0 = Release|Any CPU + {CE009BFA-5EF6-4153-B2A1-2FA79698A9AE}.UseCaptureDefintionsRelease|Mixed Platforms.ActiveCfg = Release|x86 + {CE009BFA-5EF6-4153-B2A1-2FA79698A9AE}.UseCaptureDefintionsRelease|Mixed Platforms.Build.0 = Release|x86 + {CE009BFA-5EF6-4153-B2A1-2FA79698A9AE}.UseCaptureDefintionsRelease|Win32.ActiveCfg = Release|x86 {CE009BFA-5EF6-4153-B2A1-2FA79698A9AE}.UseCaptureDefintionsRelease|x86.ActiveCfg = Release|x86 {CE009BFA-5EF6-4153-B2A1-2FA79698A9AE}.UseCaptureDefintionsRelease|x86.Build.0 = Release|x86 {F6EDA1F3-3DCD-43F4-8A90-E32DA70C8227}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F6EDA1F3-3DCD-43F4-8A90-E32DA70C8227}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F6EDA1F3-3DCD-43F4-8A90-E32DA70C8227}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {F6EDA1F3-3DCD-43F4-8A90-E32DA70C8227}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {F6EDA1F3-3DCD-43F4-8A90-E32DA70C8227}.Debug|Win32.ActiveCfg = Debug|x86 {F6EDA1F3-3DCD-43F4-8A90-E32DA70C8227}.Debug|x86.ActiveCfg = Debug|Any CPU {F6EDA1F3-3DCD-43F4-8A90-E32DA70C8227}.Debug|x86.Build.0 = Debug|Any CPU {F6EDA1F3-3DCD-43F4-8A90-E32DA70C8227}.Release|Any CPU.ActiveCfg = Release|Any CPU {F6EDA1F3-3DCD-43F4-8A90-E32DA70C8227}.Release|Any CPU.Build.0 = Release|Any CPU + {F6EDA1F3-3DCD-43F4-8A90-E32DA70C8227}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {F6EDA1F3-3DCD-43F4-8A90-E32DA70C8227}.Release|Mixed Platforms.Build.0 = Release|x86 + {F6EDA1F3-3DCD-43F4-8A90-E32DA70C8227}.Release|Win32.ActiveCfg = Release|x86 {F6EDA1F3-3DCD-43F4-8A90-E32DA70C8227}.Release|x86.ActiveCfg = Release|Any CPU {F6EDA1F3-3DCD-43F4-8A90-E32DA70C8227}.Release|x86.Build.0 = Release|Any CPU {F6EDA1F3-3DCD-43F4-8A90-E32DA70C8227}.UseCaptureCardDefinitions|Any CPU.ActiveCfg = Release|x86 + {F6EDA1F3-3DCD-43F4-8A90-E32DA70C8227}.UseCaptureCardDefinitions|Mixed Platforms.ActiveCfg = Release|x86 + {F6EDA1F3-3DCD-43F4-8A90-E32DA70C8227}.UseCaptureCardDefinitions|Mixed Platforms.Build.0 = Release|x86 + {F6EDA1F3-3DCD-43F4-8A90-E32DA70C8227}.UseCaptureCardDefinitions|Win32.ActiveCfg = Release|x86 {F6EDA1F3-3DCD-43F4-8A90-E32DA70C8227}.UseCaptureCardDefinitions|x86.ActiveCfg = Release|x86 {F6EDA1F3-3DCD-43F4-8A90-E32DA70C8227}.UseCaptureCardDefinitions|x86.Build.0 = Release|x86 {F6EDA1F3-3DCD-43F4-8A90-E32DA70C8227}.UseCaptureDefintionsRelease|Any CPU.ActiveCfg = Release|Any CPU {F6EDA1F3-3DCD-43F4-8A90-E32DA70C8227}.UseCaptureDefintionsRelease|Any CPU.Build.0 = Release|Any CPU + {F6EDA1F3-3DCD-43F4-8A90-E32DA70C8227}.UseCaptureDefintionsRelease|Mixed Platforms.ActiveCfg = Release|x86 + {F6EDA1F3-3DCD-43F4-8A90-E32DA70C8227}.UseCaptureDefintionsRelease|Mixed Platforms.Build.0 = Release|x86 + {F6EDA1F3-3DCD-43F4-8A90-E32DA70C8227}.UseCaptureDefintionsRelease|Win32.ActiveCfg = Release|x86 {F6EDA1F3-3DCD-43F4-8A90-E32DA70C8227}.UseCaptureDefintionsRelease|x86.ActiveCfg = Release|x86 {F6EDA1F3-3DCD-43F4-8A90-E32DA70C8227}.UseCaptureDefintionsRelease|x86.Build.0 = Release|x86 {49DFF256-09FD-4598-A3E8-855753E2A1FC}.Debug|Any CPU.ActiveCfg = Debug|x86 {49DFF256-09FD-4598-A3E8-855753E2A1FC}.Debug|Any CPU.Build.0 = Debug|x86 + {49DFF256-09FD-4598-A3E8-855753E2A1FC}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {49DFF256-09FD-4598-A3E8-855753E2A1FC}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {49DFF256-09FD-4598-A3E8-855753E2A1FC}.Debug|Win32.ActiveCfg = Debug|x86 {49DFF256-09FD-4598-A3E8-855753E2A1FC}.Debug|x86.ActiveCfg = Debug|x86 {49DFF256-09FD-4598-A3E8-855753E2A1FC}.Debug|x86.Build.0 = Debug|x86 {49DFF256-09FD-4598-A3E8-855753E2A1FC}.Release|Any CPU.ActiveCfg = Release|x86 {49DFF256-09FD-4598-A3E8-855753E2A1FC}.Release|Any CPU.Build.0 = Release|x86 + {49DFF256-09FD-4598-A3E8-855753E2A1FC}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {49DFF256-09FD-4598-A3E8-855753E2A1FC}.Release|Mixed Platforms.Build.0 = Release|x86 + {49DFF256-09FD-4598-A3E8-855753E2A1FC}.Release|Win32.ActiveCfg = Release|x86 {49DFF256-09FD-4598-A3E8-855753E2A1FC}.Release|x86.ActiveCfg = Release|x86 {49DFF256-09FD-4598-A3E8-855753E2A1FC}.Release|x86.Build.0 = Release|x86 {49DFF256-09FD-4598-A3E8-855753E2A1FC}.UseCaptureCardDefinitions|Any CPU.ActiveCfg = Release|x86 + {49DFF256-09FD-4598-A3E8-855753E2A1FC}.UseCaptureCardDefinitions|Mixed Platforms.ActiveCfg = Release|x86 + {49DFF256-09FD-4598-A3E8-855753E2A1FC}.UseCaptureCardDefinitions|Mixed Platforms.Build.0 = Release|x86 + {49DFF256-09FD-4598-A3E8-855753E2A1FC}.UseCaptureCardDefinitions|Win32.ActiveCfg = Release|x86 {49DFF256-09FD-4598-A3E8-855753E2A1FC}.UseCaptureCardDefinitions|x86.ActiveCfg = Release|x86 {49DFF256-09FD-4598-A3E8-855753E2A1FC}.UseCaptureDefintionsRelease|Any CPU.ActiveCfg = Release|Any CPU {49DFF256-09FD-4598-A3E8-855753E2A1FC}.UseCaptureDefintionsRelease|Any CPU.Build.0 = Release|Any CPU + {49DFF256-09FD-4598-A3E8-855753E2A1FC}.UseCaptureDefintionsRelease|Mixed Platforms.ActiveCfg = Release|x86 + {49DFF256-09FD-4598-A3E8-855753E2A1FC}.UseCaptureDefintionsRelease|Mixed Platforms.Build.0 = Release|x86 + {49DFF256-09FD-4598-A3E8-855753E2A1FC}.UseCaptureDefintionsRelease|Win32.ActiveCfg = Release|x86 {49DFF256-09FD-4598-A3E8-855753E2A1FC}.UseCaptureDefintionsRelease|x86.ActiveCfg = Release|x86 {AE752FB4-7450-4150-9BAD-19EFA9D2AC37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AE752FB4-7450-4150-9BAD-19EFA9D2AC37}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AE752FB4-7450-4150-9BAD-19EFA9D2AC37}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {AE752FB4-7450-4150-9BAD-19EFA9D2AC37}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {AE752FB4-7450-4150-9BAD-19EFA9D2AC37}.Debug|Win32.ActiveCfg = Debug|x86 {AE752FB4-7450-4150-9BAD-19EFA9D2AC37}.Debug|x86.ActiveCfg = Debug|x86 {AE752FB4-7450-4150-9BAD-19EFA9D2AC37}.Debug|x86.Build.0 = Debug|x86 {AE752FB4-7450-4150-9BAD-19EFA9D2AC37}.Release|Any CPU.ActiveCfg = Release|Any CPU {AE752FB4-7450-4150-9BAD-19EFA9D2AC37}.Release|Any CPU.Build.0 = Release|Any CPU + {AE752FB4-7450-4150-9BAD-19EFA9D2AC37}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {AE752FB4-7450-4150-9BAD-19EFA9D2AC37}.Release|Mixed Platforms.Build.0 = Release|x86 + {AE752FB4-7450-4150-9BAD-19EFA9D2AC37}.Release|Win32.ActiveCfg = Release|x86 {AE752FB4-7450-4150-9BAD-19EFA9D2AC37}.Release|x86.ActiveCfg = Release|x86 {AE752FB4-7450-4150-9BAD-19EFA9D2AC37}.Release|x86.Build.0 = Release|x86 {AE752FB4-7450-4150-9BAD-19EFA9D2AC37}.UseCaptureCardDefinitions|Any CPU.ActiveCfg = Release|x86 + {AE752FB4-7450-4150-9BAD-19EFA9D2AC37}.UseCaptureCardDefinitions|Mixed Platforms.ActiveCfg = Release|x86 + {AE752FB4-7450-4150-9BAD-19EFA9D2AC37}.UseCaptureCardDefinitions|Mixed Platforms.Build.0 = Release|x86 + {AE752FB4-7450-4150-9BAD-19EFA9D2AC37}.UseCaptureCardDefinitions|Win32.ActiveCfg = Release|x86 {AE752FB4-7450-4150-9BAD-19EFA9D2AC37}.UseCaptureCardDefinitions|x86.ActiveCfg = Release|x86 {AE752FB4-7450-4150-9BAD-19EFA9D2AC37}.UseCaptureCardDefinitions|x86.Build.0 = Release|x86 {AE752FB4-7450-4150-9BAD-19EFA9D2AC37}.UseCaptureDefintionsRelease|Any CPU.ActiveCfg = Release|Any CPU {AE752FB4-7450-4150-9BAD-19EFA9D2AC37}.UseCaptureDefintionsRelease|Any CPU.Build.0 = Release|Any CPU + {AE752FB4-7450-4150-9BAD-19EFA9D2AC37}.UseCaptureDefintionsRelease|Mixed Platforms.ActiveCfg = Release|x86 + {AE752FB4-7450-4150-9BAD-19EFA9D2AC37}.UseCaptureDefintionsRelease|Mixed Platforms.Build.0 = Release|x86 + {AE752FB4-7450-4150-9BAD-19EFA9D2AC37}.UseCaptureDefintionsRelease|Win32.ActiveCfg = Release|x86 {AE752FB4-7450-4150-9BAD-19EFA9D2AC37}.UseCaptureDefintionsRelease|x86.ActiveCfg = Release|x86 {AE752FB4-7450-4150-9BAD-19EFA9D2AC37}.UseCaptureDefintionsRelease|x86.Build.0 = Release|x86 + {E1A2655B-02A2-437A-8270-4AD81DDDC502}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {E1A2655B-02A2-437A-8270-4AD81DDDC502}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {E1A2655B-02A2-437A-8270-4AD81DDDC502}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {E1A2655B-02A2-437A-8270-4AD81DDDC502}.Debug|Win32.ActiveCfg = Debug|Win32 + {E1A2655B-02A2-437A-8270-4AD81DDDC502}.Debug|Win32.Build.0 = Debug|Win32 + {E1A2655B-02A2-437A-8270-4AD81DDDC502}.Debug|x86.ActiveCfg = Debug|Win32 + {E1A2655B-02A2-437A-8270-4AD81DDDC502}.Release|Any CPU.ActiveCfg = Release|Win32 + {E1A2655B-02A2-437A-8270-4AD81DDDC502}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {E1A2655B-02A2-437A-8270-4AD81DDDC502}.Release|Mixed Platforms.Build.0 = Release|Win32 + {E1A2655B-02A2-437A-8270-4AD81DDDC502}.Release|Win32.ActiveCfg = Release|Win32 + {E1A2655B-02A2-437A-8270-4AD81DDDC502}.Release|Win32.Build.0 = Release|Win32 + {E1A2655B-02A2-437A-8270-4AD81DDDC502}.Release|x86.ActiveCfg = Release|Win32 + {E1A2655B-02A2-437A-8270-4AD81DDDC502}.UseCaptureCardDefinitions|Any CPU.ActiveCfg = Release|Win32 + {E1A2655B-02A2-437A-8270-4AD81DDDC502}.UseCaptureCardDefinitions|Mixed Platforms.ActiveCfg = Release|Win32 + {E1A2655B-02A2-437A-8270-4AD81DDDC502}.UseCaptureCardDefinitions|Mixed Platforms.Build.0 = Release|Win32 + {E1A2655B-02A2-437A-8270-4AD81DDDC502}.UseCaptureCardDefinitions|Win32.ActiveCfg = Release|Win32 + {E1A2655B-02A2-437A-8270-4AD81DDDC502}.UseCaptureCardDefinitions|Win32.Build.0 = Release|Win32 + {E1A2655B-02A2-437A-8270-4AD81DDDC502}.UseCaptureCardDefinitions|x86.ActiveCfg = Release|Win32 + {E1A2655B-02A2-437A-8270-4AD81DDDC502}.UseCaptureDefintionsRelease|Any CPU.ActiveCfg = Release|Win32 + {E1A2655B-02A2-437A-8270-4AD81DDDC502}.UseCaptureDefintionsRelease|Mixed Platforms.ActiveCfg = Release|Win32 + {E1A2655B-02A2-437A-8270-4AD81DDDC502}.UseCaptureDefintionsRelease|Mixed Platforms.Build.0 = Release|Win32 + {E1A2655B-02A2-437A-8270-4AD81DDDC502}.UseCaptureDefintionsRelease|Win32.ActiveCfg = Release|Win32 + {E1A2655B-02A2-437A-8270-4AD81DDDC502}.UseCaptureDefintionsRelease|Win32.Build.0 = Release|Win32 + {E1A2655B-02A2-437A-8270-4AD81DDDC502}.UseCaptureDefintionsRelease|x86.ActiveCfg = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/mediaportal/MiniDisplayLibrary/MiniDisplayLibrary.csproj b/mediaportal/MiniDisplayLibrary/MiniDisplayLibrary.csproj index f511782..131315e 100644 --- a/mediaportal/MiniDisplayLibrary/MiniDisplayLibrary.csproj +++ b/mediaportal/MiniDisplayLibrary/MiniDisplayLibrary.csproj @@ -107,6 +107,15 @@ Code + + + + Form + + + ImonLcd_AdvancedSetupForm.cs + + @@ -345,6 +354,11 @@ iMONLCDg_AdvancedSetupForm.cs + + + PreserveNewest + + diff --git a/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/API/Soundgraph/iMONDisplay.dll b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/API/Soundgraph/iMONDisplay.dll new file mode 100644 index 0000000..aed34b7 Binary files /dev/null and b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/API/Soundgraph/iMONDisplay.dll differ diff --git a/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/ImonBase.cs b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/ImonBase.cs new file mode 100644 index 0000000..be812a1 --- /dev/null +++ b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/ImonBase.cs @@ -0,0 +1,239 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Runtime.InteropServices; +using System.Text; +using MediaPortal.GUI.Library; + +namespace MediaPortal.ProcessPlugins.MiniDisplayPlugin.Drivers +{ + /// + /// Base Class for iMON Display API in iMON Manager >= 8.01.0419 + /// + public abstract class ImonBase : IDisplay + { + public ImonBase() + { + Disabled = null; + ImonErrorMessage = string.Empty; + Initialized = false; + Line1 = string.Empty; + Line2 = string.Empty; + } + + protected bool? Disabled { get; set; } + + protected string ImonErrorMessage { get; set;} + + protected bool Initialized { get; set; } + + protected string Line1 { get; set; } + + protected string Line2 { get; set; } + + public string Description { get; protected set; } + + protected string ClassErrorName { get; set; } + + protected string UnsupportedDeviceErrorMessage { get; set; } + + protected int DisplayType { get; set; } + + public string ErrorMessage + { + get + { + if (IsDisabled) + { + return ImonErrorMessage; + } + return string.Empty; + } + } + + public bool IsDisabled + { + get + { + if (!Disabled.HasValue) + { + IDWINITRESULT initResult = new IDWINITRESULT(); + int ret = IDW_Init(initResult); + if (ret != DSP_SUCCEEDED) + { + ImonErrorMessage = DSPResult2String(ret); + Disabled = true; + Log.Error(string.Format("{0}.IsDisabled: {1}", ClassErrorName, ImonErrorMessage)); + } + else if (initResult.initResult != DSPN_SUCCEEDED) + { + ImonErrorMessage = DSPNResult2String(initResult.initResult); + Disabled = true; + Log.Error(string.Format("{0}.IsDisabled: {1}", ClassErrorName, ImonErrorMessage)); + } + else if (initResult.dspType != DisplayType) + { + ImonErrorMessage = UnsupportedDeviceErrorMessage; + Disabled = true; + IDW_Uninit(); + Log.Error(string.Format("{0}.IsDisabled: {1}", ClassErrorName, ImonErrorMessage)); + } + else + { + Disabled = false; + IDW_Uninit(); + } + + } + return Disabled.Value; + } + } + + public string Name { get; protected set; } + + public bool SupportsGraphics { get { return false; } } + + public bool SupportsText { get { return true; } } + + public virtual void Dispose() + { + CleanUp(); + } + + public virtual void Initialize() + { + Log.Info("(IDisplay) ImonBase.Initialize(): called"); + if (Initialized) + { + Log.Info("(IDisplay) ImonBase.Initialize(): already initialized, skipping"); + return; + } + if (IsDisabled) + { + Log.Info("(IDisplay) ImonBase.Initialize(): driver disabled, cannot initialize"); + return; + } + IDWINITRESULT initResult = new IDWINITRESULT(); + IDW_Init(initResult); + Initialized = true; + Log.Info("(IDisplay) ImonBase.Initialize(): completed"); + } + + public virtual void CleanUp() + { + Log.Info("(IDisplay) ImonBase.CleanUp(): called"); + if (!Initialized) + { + return; + } + IDW_Uninit(); + Initialized = false; + Log.Info("(IDisplay) ImonBase.CleanUp(): completed"); + } + + public abstract void SetLine(int line, string message); + + public virtual void Configure() + { + // No configuration possible/necessary + } + + public void DrawImage(Bitmap bitmap) + { + // Not supported + } + + public void SetCustomCharacters(int[][] customCharacters) + { + // Not supported + } + + public void Setup(string port, + int lines, int cols, int delay, + int linesG, int colsG, int timeG, + bool backLight, int backLightLevel, + bool contrast, int contrastLevel, + bool BlankOnExit) + { + // iMON VFD/LCD cannot be setup + } + + protected string DSPResult2String(int result) + { + switch (result) + { + case DSP_SUCCEEDED: + return "Success"; + case DSP_E_FAIL: + return "An unknown error occurred"; + case DSP_E_OUTOFMEMORY: + return "Out of memory"; + case DSP_E_INVALIDARG: + return "One or more arguments are invalid"; + case DSP_E_NOT_INITED: + return "API is not initialized"; + case DSP_E_POINTER: + return "Pointer is invalid"; + default: + return "An unknown error occurred"; + } + } + + protected string DSPNResult2String(int result) + { + switch (result) + { + case DSPN_SUCCEEDED: + return "Success"; + case DSPN_ERR_IN_USING: + return "Display plug-in is already used by another application"; + case DSPN_ERR_HW_DISCONNECTED: + return "iMON hardware is not connected"; + case DSPN_ERR_NOT_SUPPORTED_HW: + return "The connected hardware does not support the plug-in mode"; + case DSPN_ERR_PLUGIN_DISABLED: + return "The plug-in mode option is disabled"; + case DSPN_ERR_IMON_NO_REPLY: + return "The latest iMON is not installed or iMON is not running"; + default: + return "An unknown error occurred"; + } + } + + protected const int DSP_SUCCEEDED = 0; + protected const int DSP_E_FAIL = 1; + protected const int DSP_E_OUTOFMEMORY = 2; + protected const int DSP_E_INVALIDARG = 3; + protected const int DSP_E_NOT_INITED = 4; + protected const int DSP_E_POINTER = 5; + protected const int DSP_S_INITED = 0x1000; + protected const int DSP_S_NOT_INITED = 0x1001; + protected const int DSP_S_IN_PLUGIN_MODE = 0x1002; + protected const int DSP_S_NOT_IN_PLUGIN_MODE = 0x1003; + + protected const int DSPN_SUCCEEDED = 0; + protected const int DSPN_ERR_IN_USING = 0x0100; + protected const int DSPN_ERR_HW_DISCONNECTED = 0x0101; + protected const int DSPN_ERR_NOT_SUPPORTED_HW = 0x0102; + protected const int DSPN_ERR_PLUGIN_DISABLED = 0x0103; + protected const int DSPN_ERR_IMON_NO_REPLY = 0x0104; + protected const int DSPN_ERR_UNKNOWN = 0x0200; + + protected const int DSPN_DSP_NONE = 0; + protected const int DSPN_DSP_VFD = 0x01; + protected const int DSPN_DSP_LCD = 0x02; + + [StructLayout(LayoutKind.Sequential)] + protected class IDWINITRESULT + { + public int initResult; + public int dspType; + } + + [DllImport("iMONDisplayWrapper.dll")] + protected static extern int IDW_Init(IDWINITRESULT initResult); + + [DllImport("iMONDisplayWrapper.dll")] + protected static extern int IDW_Uninit(); + } +} diff --git a/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/ImonLcd.cs b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/ImonLcd.cs new file mode 100644 index 0000000..e4794de --- /dev/null +++ b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/ImonLcd.cs @@ -0,0 +1,918 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading; +using System.Windows.Forms; +using System.Xml; +using System.Xml.Serialization; +using MediaPortal.Configuration; +using MediaPortal.GUI.Library; +using MediaPortal.Player; +using Microsoft.Win32; + +namespace MediaPortal.ProcessPlugins.MiniDisplayPlugin.Drivers +{ + /// + /// iMON LCD Driver for iMON Manager >= 8.01.0419 + /// + public class ImonLcd : ImonBase + { + Thread _monitorMediaThread; + volatile bool _stopMonitorMediaThread = false; + MediaTypes _currentMediaTypes; + const int MediaTotalTime = 100; + int _currentMediaCurrentPosition = 0; + byte _currentSpeakers = 0; + byte _currentSpeakerRR = 0; + byte _currentVideoCodecs = 0; + byte _currentAudioCodecs = 0; + byte _currentAspectRatioIcons = 0; + ImonMediaInfo _videoMediaInfo = new ImonMediaInfo(); + ImonMediaInfo _audioMediaInfo = new ImonMediaInfo(); + ActiveWindowInfo _activeWindowInfo = new ActiveWindowInfo(); + private AdvancedSettings AdvSettings; + bool _preferLine1General; + bool _preferLine1Playback; + + public ImonLcd() + { + UnsupportedDeviceErrorMessage = "Only LCDs are supported"; + Description = "iMON LCD for iMON Manager >= 8.01.0419"; + Name = "iMONLCD"; + DisplayType = DSPN_DSP_LCD; + + LoadAdvancedSettings(); + AdvancedSettings.OnSettingsChanged += + AdvancedSettings_OnSettingsChanged; + + SystemEvents.PowerModeChanged += + SystemEvents_PowerModeChanged; + } + + private void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e) + { + Log.Info("(IDisplay) ImonLcd.SystemEvents_PowerModeChanged() called, power mode is now " + e.Mode.ToString()); + SetDefaults(); + Log.Info("(IDisplay) ImonLcd.SystemEvents_PowerModeChanged() completed"); + } + + private void SetDefaults() + { + Log.Info("(IDisplay) ImonLcd.SetDefaults() called"); + _stopMonitorMediaThread = false; + _currentMediaCurrentPosition = 0; + _currentSpeakers = 0; + _currentSpeakerRR = 0; + _currentVideoCodecs = 0; + _currentAudioCodecs = 0; + _currentAspectRatioIcons = 0; + Log.Info("(IDisplay) ImonLcd.SetDefaults() completed"); + } + + [Flags] + enum OrangeDiskPieces : byte + { + Piece1 = 0x80, // top piece + Piece2 = 0x40, // next piece counter-clockwise + Piece3 = 0x20, // and so on... + Piece4 = 0x10, + Piece5 = 0x8, + Piece6 = 0x4, + Piece7 = 0x2, + Piece8 = 0x1, + None = 0x0 + } + + enum OrangeDiskIcon : byte + { + On = 0x80, + Off = 0x0 + } + + [Flags] + enum MediaTypes : byte + { + Music = 0x80, + Movie = 0x40, + Photo = 0x20, + Cd_Dvd = 0x10, + Tv = 0x8, + WebCasting = 0x4, + News_Weather = 0x2, + None = 0x0 + } + + [Flags] + enum Speakers : byte + { + L = 0x80, + C = 0x40, + R = 0x20, + SL = 0x10, + LFE = 0x8, + SR = 0x4, + RL = 0x2, + SPDIF = 0x1, + None = 0x0 + } + + enum SpeakersRR : byte + { + RR = 0x80, + Off = 0x0 + } + + [Flags] + enum VideoCodecs : byte + { + MPG = 0x80, + DIVX = 0x40, + XVID = 0x20, + WMV = 0x10, + MPG2 = 0x8, + AC3 = 0x4, + DTS = 0x2, + WMA = 0x1, + None = 0x0 + } + + [Flags] + enum AudioCodecs : byte + { + MP3 = 0x80, + OGG = 0x40, + WMA = 0x20, + WAV = 0x10, + None = 0x0 + } + + [Flags] + enum AspectRatios : byte + { + SRC = 0x80, + FIT = 0x40, + TV = 0x20, + HDTV = 0x10, + SCR1 = 0x8, + SCR2 = 0x4, + None = 0x0 + } + + [Flags] + enum EtcIcons : byte + { + Repeat = 0x80, + Shuffle = 0x40, + Alarm = 0x20, + Recording = 0x10, + Volume = 0x8, + Time = 0x4, + None = 0x0 + } + + public override void Configure() + { + Log.Info("(IDisplay) ImonLcd.Configure() called"); + Form form = new ImonLcd_AdvancedSetupForm(); + form.ShowDialog(); + form.Dispose(); + Log.Info("(IDisplay) ImonLcd.Configure() completed"); + } + + public override void SetLine(int line, string message) + { + Log.Info("(IDisplay) ImonLcd.SetLine() called"); + if (message == null) + { + Log.Info("(IDisplay) ImonLcd.SetDefaults(): empty message, return"); + return; + } + + int lineToCheckFirst, lineToCheckSecond; + if (g_Player.Player != null && g_Player.Player.Playing) + { + Log.Info("(IDisplay) ImonLcd.SetLine(): determing line to display during playback"); + if (_preferLine1Playback) + { + lineToCheckFirst = 0; + lineToCheckSecond = 1; + } + else + { + lineToCheckFirst = 1; + lineToCheckSecond = 0; + } + } + else + { + Log.Info("(IDisplay) ImonLcd.SetLine(): determine line to display during general use"); + if (_preferLine1General) + { + lineToCheckFirst = 0; + lineToCheckSecond = 1; + } + else + { + lineToCheckFirst = 1; + lineToCheckSecond = 0; + } + } + Log.Info("(IDisplay) ImonLcd.SetLine(): preferred 0-based line: " + lineToCheckFirst); + + if (line == lineToCheckFirst) + { + Line1 = message; + IDW_SetLcdText(Line1); + Log.Info("(IDisplay) ImonLcd.SetLine(): displaying 0-based line (first choice): " + line + ", message: " + Line1); + } + else if (line == lineToCheckSecond) + { + if (Line1.Trim().Length == 0 && message.Length > 0) + { + Line1 = message; + IDW_SetLcdText(Line1); + Log.Info("(IDisplay) ImonLcd.SetLine(): displaying 0-based line (second choice): " + line + ", message: " + Line1); + } + } + Log.Info("(IDisplay) ImonLcd.SetDefaults() completed"); + } + + private void MonitorMedia() + { + Log.Info("(IDisplay) ImonLcd.MonitorMedia() called"); + while (true) + { + Log.Info("(IDisplay) ImonLcd.MonitorMedia() thread loop begin"); + if (_stopMonitorMediaThread) + { + IDW_SetLcdAllIcons(false); + return; + } + + SetMediaTypeIcons(); + SetCodecs(); + SetMediaProgress(); + SetSpeakerConfig(); + SetAspectRatio(); + + Thread.Sleep(300); + Log.Info("(IDisplay) ImonLcd.MonitorMedia() thread loop end"); + } + Log.Info("(IDisplay) ImonLcd.MonitorMedia() complete"); + } + + private void SetAspectRatio() + { + Log.Info("(IDisplay) ImonLcd.SetAspectRatio() called"); + byte newAspectRatioIcons = 0; + + if (g_Player.Player != null && g_Player.Player.Playing && + g_Player.MediaInfo != null && g_Player.IsVideo) + { + int videoHeight = g_Player.MediaInfo.Height; + + if (videoHeight >= 720) + { + newAspectRatioIcons |= (byte)AspectRatios.HDTV; + } + else if (videoHeight > 0) + { + newAspectRatioIcons |= (byte)AspectRatios.TV; + } + Log.Info("(IDisplay) ImonLcd.SetAspectRatio(): determined video height: " + videoHeight); + + if (g_Player.ARType == Geometry.Type.Original) + { + newAspectRatioIcons |= (byte)AspectRatios.SRC; + } + else + { + newAspectRatioIcons |= (byte)AspectRatios.FIT; + } + Log.Info("(IDisplay) ImonLcd.SetAspectRatio(): determined ARType: " + g_Player.ARType.ToString()); + } + else + { + newAspectRatioIcons = 0; + } + + if (newAspectRatioIcons != _currentAspectRatioIcons) + { + Log.Info("(IDisplay) ImonLcd.SetAspectRatio(): new settings found, call API"); + IDW_SetLcdAspectRatioIcon(newAspectRatioIcons); + _currentAspectRatioIcons = newAspectRatioIcons; + } + Log.Info("(IDisplay) ImonLcd.SetAspectRatio() completed"); + } + + private void SetSpeakerConfig() + { + Log.Info("(IDisplay) ImonLcd.SetSpeakerConfig() called"); + byte newSpeakers = 0, newSpeakerRR = 0; + + if (g_Player.Player != null && g_Player.Player.Playing && g_Player.MediaInfo != null) + { + switch (g_Player.MediaInfo.AudioChannels) + { + case 1: // mono + case 2: // stereo + newSpeakers |= (byte)Speakers.L; + newSpeakers |= (byte)Speakers.R; + break; + case 3: // 2.1 + newSpeakers |= (byte)Speakers.L; + newSpeakers |= (byte)Speakers.R; + newSpeakers |= (byte)Speakers.LFE; + break; + case 4: // quad + newSpeakers |= (byte)Speakers.L; + newSpeakers |= (byte)Speakers.R; + newSpeakers |= (byte)Speakers.SL; + newSpeakers |= (byte)Speakers.SR; + break; + case 5: // surround + newSpeakers |= (byte)Speakers.L; + newSpeakers |= (byte)Speakers.R; + newSpeakers |= (byte)Speakers.SL; + newSpeakers |= (byte)Speakers.SR; + newSpeakers |= (byte)Speakers.C; + break; + case 6: // 5.1 + newSpeakers |= (byte)Speakers.L; + newSpeakers |= (byte)Speakers.R; + newSpeakers |= (byte)Speakers.RL; + newSpeakers |= (byte)Speakers.C; + newSpeakers |= (byte)Speakers.LFE; + newSpeakerRR |= (byte)SpeakersRR.RR; + break; + case 7: // 6.1 + newSpeakers |= (byte)Speakers.L; + newSpeakers |= (byte)Speakers.R; + newSpeakers |= (byte)Speakers.SL; + newSpeakers |= (byte)Speakers.SR; + newSpeakers |= (byte)Speakers.C; + newSpeakers |= (byte)Speakers.LFE; + newSpeakers |= (byte)Speakers.RL; + break; + case 8: // 7.1 + newSpeakers |= (byte)Speakers.L; + newSpeakers |= (byte)Speakers.R; + newSpeakers |= (byte)Speakers.SL; + newSpeakers |= (byte)Speakers.SR; + newSpeakers |= (byte)Speakers.C; + newSpeakers |= (byte)Speakers.LFE; + newSpeakers |= (byte)Speakers.RL; + newSpeakerRR |= (byte)SpeakersRR.RR; + break; + default: // no audio/unknown + newSpeakers = newSpeakerRR = 0; + break; + } + Log.Info("(IDisplay) ImonLcd.SetSpeakerConfig(): determined speaker config, speakers: " + newSpeakers + ", speakerRR: " + newSpeakerRR); + } + else + { + newSpeakers = newSpeakerRR = 0; + } + if (newSpeakers != _currentSpeakers || newSpeakerRR != _currentSpeakerRR) + { + Log.Info("(IDisplay) ImonLcd.SetSpeakerConfig(): new settings found, call API"); + IDW_SetLcdSpeakerIcon(newSpeakers, newSpeakerRR); + _currentSpeakers = newSpeakers; + _currentSpeakerRR = newSpeakerRR; + } + Log.Info("(IDisplay) ImonLcd.SetSpeakerConfig() completed"); + } + + private void SetCodecs() + { + Log.Info("(IDisplay) ImonLcd.SetCodecs() called"); + byte newVideoCodecs = 0; + byte newAudioCodecs = 0; + if (g_Player.Player != null && g_Player.Player.Playing) + { + if (g_Player.MediaInfo != null && g_Player.IsVideo) + { + // video playback + _videoMediaInfo.Format = g_Player.MediaInfo.VideoCodec; + _audioMediaInfo.Format = g_Player.MediaInfo.AudioCodec; + + // video stream + if (_videoMediaInfo.IsMpg) + { + newVideoCodecs |= (byte)VideoCodecs.MPG; + } + else if (_videoMediaInfo.IsMpg2) + { + newVideoCodecs |= (byte)VideoCodecs.MPG2; + } + else if (_videoMediaInfo.IsDivx) + { + newVideoCodecs |= (byte)VideoCodecs.DIVX; + } + else if (_videoMediaInfo.IsXvid) + { + newVideoCodecs |= (byte)VideoCodecs.XVID; + } + else if (_videoMediaInfo.IsWmv) + { + newVideoCodecs |= (byte)VideoCodecs.WMV; + } + + // audio stream + if (_audioMediaInfo.IsMp3) + { + newAudioCodecs |= (byte)AudioCodecs.MP3; + } + else if (_audioMediaInfo.IsWma) + { + newVideoCodecs |= (byte)VideoCodecs.WMA; + } + else if (_audioMediaInfo.IsDts) + { + newVideoCodecs |= (byte)VideoCodecs.DTS; + } + else if (_audioMediaInfo.IsAc3) + { + newVideoCodecs |= (byte)VideoCodecs.AC3; + } + else if (_audioMediaInfo.IsOgg) + { + newAudioCodecs |= (byte)AudioCodecs.OGG; + } + Log.Info("(IDisplay) ImonLcd.SetCodecs(): determined video codec: " + newVideoCodecs); + Log.Info("(IDisplay) ImonLcd.SetCodecs(): determined audio codec: " + newAudioCodecs); + } + else if (g_Player.IsMusic) + { + // music playback + string currentFile = GUIPropertyManager.GetProperty("#Play.Current.File"); + Log.Info("(IDisplay) ImonLcd.SetCodecs(): determined current music file: " + currentFile); + if (currentFile != null && currentFile.Length > 0) + { + string extension = System.IO.Path.GetExtension(currentFile).ToUpper(); + + switch (extension) + { + case ".MP3": + newAudioCodecs |= (byte)AudioCodecs.MP3; + break; + case ".OGG": + newAudioCodecs |= (byte)AudioCodecs.OGG; + break; + case ".WMA": + newAudioCodecs |= (byte)AudioCodecs.WMA; + break; + case ".WAV": + newAudioCodecs |= (byte)AudioCodecs.WAV; + break; + default: + break; + } + Log.Info("(IDisplay) ImonLcd.SetCodecs(): determined music codec by extension: " + newAudioCodecs); + } + } + } + else + { + newVideoCodecs = 0; + } + + if (newVideoCodecs != _currentVideoCodecs) + { + Log.Info("(IDisplay) ImonLcd.SetCodecs(): new video settings found, call API"); + IDW_SetLcdVideoCodecIcon(newVideoCodecs); + _currentVideoCodecs = newVideoCodecs; + } + + if (newAudioCodecs != _currentAudioCodecs) + { + Log.Info("(IDisplay) ImonLcd.SetCodecs(): new audio settings found, call API"); + IDW_SetLcdAudioCodecIcon(newAudioCodecs); + _currentAudioCodecs = newAudioCodecs; + } + Log.Info("(IDisplay) ImonLcd.SetCodecs() completed"); + } + + private void SetMediaProgress() + { + Log.Info("(IDisplay) ImonLcd.SetMediaProgress() called"); + int newMediaCurrentPosition = 0; + + if (g_Player.Player != null && g_Player.Player.Playing) + { + double duration = g_Player.Duration; + double currentPosition = g_Player.CurrentPosition; + if (duration == 0) + { + newMediaCurrentPosition = 0; + } + else + { + newMediaCurrentPosition = + (int)((g_Player.CurrentPosition / g_Player.Duration) * MediaTotalTime); + } + Log.Info("(IDisplay) ImonLcd.SetMediaProgress(): determined media position: " + newMediaCurrentPosition); + } + else + { + newMediaCurrentPosition = 0; + } + + if (newMediaCurrentPosition != _currentMediaCurrentPosition) + { + Log.Info("(IDisplay) ImonLcd.SetMediaProgress(): new settings found, call API"); + IDW_SetLcdProgress(newMediaCurrentPosition, MediaTotalTime); + _currentMediaCurrentPosition = newMediaCurrentPosition; + } + Log.Info("(IDisplay) ImonLcd.SetMediaProgress() completed"); + } + + private void SetMediaTypeIcons() + { + Log.Info("(IDisplay) ImonLcd.SetMediaTypeIcons() called"); + MediaTypes newMediaTypes = MediaTypes.None; + + _activeWindowInfo.ActiveWindow = GUIWindowManager.ActiveWindow; + if (_activeWindowInfo.IsWeather) + { + newMediaTypes |= MediaTypes.News_Weather; + Log.Info("(IDisplay) ImonLcd.SetMediaTypeIcons(): in weather plugin"); + } + + if (g_Player.Player != null && g_Player.Player.Playing) + { + if (g_Player.IsCDA) + { + newMediaTypes |= MediaTypes.Cd_Dvd; + newMediaTypes |= MediaTypes.Music; + } + if (g_Player.IsDVD || g_Player.IsDVDMenu) + { + newMediaTypes |= MediaTypes.Cd_Dvd; + newMediaTypes |= MediaTypes.Movie; + } + if (g_Player.IsMusic) + { + newMediaTypes |= MediaTypes.Music; + } + if (g_Player.IsTV || g_Player.IsTVRecording) + { + newMediaTypes |= MediaTypes.Tv; + } + if (g_Player.IsVideo) + { + newMediaTypes |= MediaTypes.Movie; + } + if (_activeWindowInfo.IsWebCasting) + { + newMediaTypes |= MediaTypes.WebCasting; + } + Log.Info("(IDisplay) ImonLcd.SetMediaTypeIcons(): determined media type: " + newMediaTypes); + } + + if (_currentMediaTypes != newMediaTypes) + { + Log.Info("(IDisplay) ImonLcd.SetMediaTypeIcons(): new settings found, call API"); + IDW_SetLcdMediaTypeIcon((byte)newMediaTypes); + _currentMediaTypes = newMediaTypes; + } + Log.Info("(IDisplay) ImonLcd.SetMediaTypeIcons() completed"); + } + + public override void Initialize() + { + Log.Info("(IDisplay) ImonLcd.Initialize() called"); + base.Initialize(); + _monitorMediaThread = new Thread(new ThreadStart(MonitorMedia)); + _monitorMediaThread.Start(); + Log.Info("(IDisplay) ImonLcd.Initialize() completed"); + } + + public override void CleanUp() + { + Log.Info("(IDisplay) ImonLcd.CleanUp(): called"); + if (!Initialized) + { + return; + } + + _stopMonitorMediaThread = true; + int maxWaitTime = 10000; // 10 seconds + int waitTime = 0; + while (_monitorMediaThread.IsAlive) + { + waitTime += 200; + Thread.Sleep(200); + if (waitTime >= maxWaitTime) + { + try + { + _monitorMediaThread.Abort(); + } + catch (ThreadAbortException ex) + { + Log.Error( + "(IDisplay) ImonLcd.CleanUp(): unable to exit mediaMonitorThread cleanly: " + + ex.Message + "\n" + ex.StackTrace); + } + break; + } + } + + IDW_Uninit(); + Initialized = false; + Log.Info("(IDisplay) ImonLcd.CleanUp(): completed"); + } + + public override void Dispose() + { + base.Dispose(); + + AdvancedSettings.OnSettingsChanged -= + AdvancedSettings_OnSettingsChanged; + SystemEvents.PowerModeChanged -= + SystemEvents_PowerModeChanged; + } + + private void LoadAdvancedSettings() + { + AdvSettings = AdvancedSettings.Load(); + _preferLine1General = AdvSettings.PreferFirstLineGeneral; + _preferLine1Playback = AdvSettings.PreferFirstLinePlayback; + } + + private void AdvancedSettings_OnSettingsChanged() + { + Log.Info("ImonLcd.AdvancedSettings_OnSettingsChanged(): RELOADING SETTINGS"); + + CleanUp(); + Thread.Sleep(100); + LoadAdvancedSettings(); + + Initialize(); + } + + [DllImport("iMONDisplayWrapper.dll")] + private static extern int IDW_SetLcdText( + [MarshalAs(UnmanagedType.LPWStr)] string line); + + [DllImport("iMONDisplayWrapper.dll")] + private static extern int IDW_SetLcdAllIcons( + [MarshalAs(UnmanagedType.Bool)] bool on); + + [DllImport("iMONDisplayWrapper.dll")] + private static extern int IDW_SetLcdOrangeIcon( + byte iconData1, byte iconData2); + + [DllImport("iMONDisplayWrapper.dll")] + private static extern int IDW_SetLcdMediaTypeIcon(byte iconData); + + [DllImport("iMONDisplayWrapper.dll")] + private static extern int IDW_SetLcdSpeakerIcon( + byte iconData1, byte iconData2); + + [DllImport("iMONDisplayWrapper.dll")] + private static extern int IDW_SetLcdVideoCodecIcon(byte iconData); + + [DllImport("iMONDisplayWrapper.dll")] + private static extern int IDW_SetLcdAudioCodecIcon(byte iconData); + + [DllImport("iMONDisplayWrapper.dll")] + private static extern int IDW_SetLcdAspectRatioIcon(byte iconData); + + [DllImport("iMONDisplayWrapper.dll")] + private static extern int IDW_SetLcdEtcIcon(byte iconData); + + [DllImport("iMONDisplayWrapper.dll")] + private static extern int IDW_SetLcdProgress( + int currentPosition, int total); + + private class ImonMediaInfo + { + const string _mpgCodec = "MPEG VIDEO"; + readonly string[] _divxCodecs = { "DX50", "DIVX", "DIV3", "3IV" }; + const string _xvidCodec = "XVID"; + const string _wmvCodec = "VC-1"; + const string _mpg2Codec = "AVC"; + const string _dtsCodec = "DTS"; + const string _wmaCodec = "WMA"; + const string _ac3Codec = "AC-3"; + const string _mp3Codec = "LAYER 3"; + const string _oggCodec = "VORBIS"; + private string _format; + + public string Format + { + get { return _format; } + set + { + _format = value; + if (_format != null && _format.Length > 0) + { + _format = _format.ToUpper(); + } + } + } + + public bool IsMpg + { + get { return IsCodec(_mpgCodec); } + } + + public bool IsDivx + { + get + { + if (Format != null && Format.Length > 0) + { + foreach (string codec in _divxCodecs) + { + if (Format.IndexOf(codec) >= 0) + { + return true; + } + } + return false; + } + return false; + } + } + + public bool IsXvid + { + get { return IsCodec(_xvidCodec); } + } + + public bool IsWmv + { + get { return IsCodec(_wmvCodec); } + } + + public bool IsMpg2 + { + get { return IsCodec(_mpg2Codec); } + } + + public bool IsWma + { + get { return IsCodec(_wmaCodec); } + } + + public bool IsDts + { + get { return IsCodec(_dtsCodec); } + } + + public bool IsAc3 + { + get { return IsCodec(_ac3Codec); } + } + + public bool IsMp3 + { + get { return IsCodec(_mp3Codec); } + } + + public bool IsOgg + { + get { return IsCodec(_oggCodec); } + } + + private bool IsCodec(string codec) + { + if (Format != null && Format.Length > 0) + { + if (Format.IndexOf(codec) >= 0) + { + return true; + } + return false; + } + return false; + } + } + + private class ActiveWindowInfo + { + const int Weather = (int)GUIWindow.Window.WINDOW_WEATHER; + readonly int[] MyNetflix = { 10099 }; + readonly int[] MyOnlineVideos = { 4755, 4757, 4758, 4759 }; + readonly int[] MyTrailers = { 5900 }; + + readonly List OnlineStreamingPluginWindows; + + public int ActiveWindow { get; set; } + + public bool IsWeather + { + get { return ActiveWindow == Weather; } + } + + public bool IsWebCasting + { + get { return OnlineStreamingPluginWindows.Contains(ActiveWindow); } + } + + public ActiveWindowInfo() + { + OnlineStreamingPluginWindows = new List(); + OnlineStreamingPluginWindows.AddRange(MyNetflix); + OnlineStreamingPluginWindows.AddRange(MyOnlineVideos); + OnlineStreamingPluginWindows.AddRange(MyTrailers); + } + } + + [Serializable] + public class AdvancedSettings + { + #region Delegates + + public delegate void OnSettingsChangedHandler(); + + #endregion + + private static AdvancedSettings m_Instance; + public const string m_Filename = "MiniDisplay_ImonLcd.xml"; + + public static AdvancedSettings Instance + { + get + { + if (m_Instance == null) + { + m_Instance = Load(); + } + return m_Instance; + } + set { m_Instance = value; } + } + + [XmlAttribute] + public bool PreferFirstLineGeneral { get; set; } + + [XmlAttribute] + public bool PreferFirstLinePlayback { get; set; } + + public static event OnSettingsChangedHandler OnSettingsChanged; + + private static void Default(AdvancedSettings _settings) + { + _settings.PreferFirstLineGeneral = true; + _settings.PreferFirstLinePlayback = true; + } + + public static AdvancedSettings Load() + { + AdvancedSettings settings; + Log.Info("ImonLcd.AdvancedSettings.Load(): started"); + if (File.Exists(Config.GetFile(Config.Dir.Config, m_Filename))) + { + Log.Info("ImonLcd.AdvancedSettings.Load(): Loading settings from XML file"); + var serializer = new XmlSerializer(typeof(AdvancedSettings)); + var xmlReader = new XmlTextReader(Config.GetFile(Config.Dir.Config, m_Filename)); + settings = (AdvancedSettings)serializer.Deserialize(xmlReader); + xmlReader.Close(); + } + else + { + Log.Info("ImonLcd.AdvancedSettings.Load(): Loading settings from defaults"); + settings = new AdvancedSettings(); + Default(settings); + Log.Info("ImonLcd.AdvancedSettings.Load(): Loaded settings from defaults"); + } + Log.Info("ImonLcd.AdvancedSettings.Load(): completed"); + return settings; + } + + public static void NotifyDriver() + { + if (OnSettingsChanged != null) + { + OnSettingsChanged(); + } + } + + public static void Save() + { + Save(Instance); + } + + public static void Save(AdvancedSettings ToSave) + { + var serializer = new XmlSerializer(typeof(AdvancedSettings)); + var writer = new XmlTextWriter(Config.GetFile(Config.Dir.Config, m_Filename), + Encoding.UTF8) { Formatting = Formatting.Indented, Indentation = 2 }; + serializer.Serialize(writer, ToSave); + writer.Close(); + } + + public static void SetDefaults() + { + Default(Instance); + } + } + } +} diff --git a/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/ImonLcd_AdvancedSetupForm.Designer.cs b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/ImonLcd_AdvancedSetupForm.Designer.cs new file mode 100644 index 0000000..64ef381 --- /dev/null +++ b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/ImonLcd_AdvancedSetupForm.Designer.cs @@ -0,0 +1,162 @@ +namespace MediaPortal.ProcessPlugins.MiniDisplayPlugin.Drivers +{ + partial class ImonLcd_AdvancedSetupForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.btnOK = new MediaPortal.UserInterface.Controls.MPButton(); + this.gbxLineOptions = new System.Windows.Forms.GroupBox(); + this.gbxPlayback = new System.Windows.Forms.GroupBox(); + this.rbtnPlaybackSecondLine = new System.Windows.Forms.RadioButton(); + this.rbtnPlaybackFirstLine = new System.Windows.Forms.RadioButton(); + this.gbxGeneral = new System.Windows.Forms.GroupBox(); + this.rbtnGeneralSecondLine = new System.Windows.Forms.RadioButton(); + this.rbtnGeneralFirstLine = new System.Windows.Forms.RadioButton(); + this.gbxLineOptions.SuspendLayout(); + this.gbxPlayback.SuspendLayout(); + this.gbxGeneral.SuspendLayout(); + this.SuspendLayout(); + // + // btnOK + // + this.btnOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.btnOK.Location = new System.Drawing.Point(244, 141); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(78, 23); + this.btnOK.TabIndex = 7; + this.btnOK.Text = "&OK"; + this.btnOK.UseVisualStyleBackColor = true; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // gbxLineOptions + // + this.gbxLineOptions.Controls.Add(this.gbxPlayback); + this.gbxLineOptions.Controls.Add(this.gbxGeneral); + this.gbxLineOptions.Location = new System.Drawing.Point(13, 13); + this.gbxLineOptions.Name = "gbxLineOptions"; + this.gbxLineOptions.Size = new System.Drawing.Size(309, 123); + this.gbxLineOptions.TabIndex = 8; + this.gbxLineOptions.TabStop = false; + this.gbxLineOptions.Text = "Line Options"; + // + // gbxPlayback + // + this.gbxPlayback.Controls.Add(this.rbtnPlaybackSecondLine); + this.gbxPlayback.Controls.Add(this.rbtnPlaybackFirstLine); + this.gbxPlayback.Location = new System.Drawing.Point(7, 69); + this.gbxPlayback.Name = "gbxPlayback"; + this.gbxPlayback.Size = new System.Drawing.Size(296, 43); + this.gbxPlayback.TabIndex = 1; + this.gbxPlayback.TabStop = false; + this.gbxPlayback.Text = "During Playback"; + // + // rbtnPlaybackSecondLine + // + this.rbtnPlaybackSecondLine.AutoSize = true; + this.rbtnPlaybackSecondLine.Location = new System.Drawing.Point(145, 18); + this.rbtnPlaybackSecondLine.Name = "rbtnPlaybackSecondLine"; + this.rbtnPlaybackSecondLine.Size = new System.Drawing.Size(116, 17); + this.rbtnPlaybackSecondLine.TabIndex = 3; + this.rbtnPlaybackSecondLine.TabStop = true; + this.rbtnPlaybackSecondLine.Text = "Prefer Second Line"; + this.rbtnPlaybackSecondLine.UseVisualStyleBackColor = true; + // + // rbtnPlaybackFirstLine + // + this.rbtnPlaybackFirstLine.AutoSize = true; + this.rbtnPlaybackFirstLine.Location = new System.Drawing.Point(7, 19); + this.rbtnPlaybackFirstLine.Name = "rbtnPlaybackFirstLine"; + this.rbtnPlaybackFirstLine.Size = new System.Drawing.Size(98, 17); + this.rbtnPlaybackFirstLine.TabIndex = 2; + this.rbtnPlaybackFirstLine.TabStop = true; + this.rbtnPlaybackFirstLine.Text = "Prefer First Line"; + this.rbtnPlaybackFirstLine.UseVisualStyleBackColor = true; + // + // gbxGeneral + // + this.gbxGeneral.Controls.Add(this.rbtnGeneralSecondLine); + this.gbxGeneral.Controls.Add(this.rbtnGeneralFirstLine); + this.gbxGeneral.Location = new System.Drawing.Point(7, 20); + this.gbxGeneral.Name = "gbxGeneral"; + this.gbxGeneral.Size = new System.Drawing.Size(296, 43); + this.gbxGeneral.TabIndex = 0; + this.gbxGeneral.TabStop = false; + this.gbxGeneral.Text = "General"; + // + // rbtnGeneralSecondLine + // + this.rbtnGeneralSecondLine.AutoSize = true; + this.rbtnGeneralSecondLine.Location = new System.Drawing.Point(145, 19); + this.rbtnGeneralSecondLine.Name = "rbtnGeneralSecondLine"; + this.rbtnGeneralSecondLine.Size = new System.Drawing.Size(116, 17); + this.rbtnGeneralSecondLine.TabIndex = 1; + this.rbtnGeneralSecondLine.TabStop = true; + this.rbtnGeneralSecondLine.Text = "Prefer Second Line"; + this.rbtnGeneralSecondLine.UseVisualStyleBackColor = true; + // + // rbtnGeneralFirstLine + // + this.rbtnGeneralFirstLine.AutoSize = true; + this.rbtnGeneralFirstLine.Location = new System.Drawing.Point(7, 20); + this.rbtnGeneralFirstLine.Name = "rbtnGeneralFirstLine"; + this.rbtnGeneralFirstLine.Size = new System.Drawing.Size(98, 17); + this.rbtnGeneralFirstLine.TabIndex = 0; + this.rbtnGeneralFirstLine.TabStop = true; + this.rbtnGeneralFirstLine.Text = "Prefer First Line"; + this.rbtnGeneralFirstLine.UseVisualStyleBackColor = true; + // + // ImonLcd_AdvancedSetupForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(334, 176); + this.Controls.Add(this.gbxLineOptions); + this.Controls.Add(this.btnOK); + this.Name = "ImonLcd_AdvancedSetupForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "MiniDisplay - Setup - Advanced Settings"; + this.gbxLineOptions.ResumeLayout(false); + this.gbxPlayback.ResumeLayout(false); + this.gbxPlayback.PerformLayout(); + this.gbxGeneral.ResumeLayout(false); + this.gbxGeneral.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private UserInterface.Controls.MPButton btnOK; + private System.Windows.Forms.GroupBox gbxLineOptions; + private System.Windows.Forms.GroupBox gbxPlayback; + private System.Windows.Forms.RadioButton rbtnPlaybackSecondLine; + private System.Windows.Forms.RadioButton rbtnPlaybackFirstLine; + private System.Windows.Forms.GroupBox gbxGeneral; + private System.Windows.Forms.RadioButton rbtnGeneralSecondLine; + private System.Windows.Forms.RadioButton rbtnGeneralFirstLine; + } +} \ No newline at end of file diff --git a/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/ImonLcd_AdvancedSetupForm.cs b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/ImonLcd_AdvancedSetupForm.cs new file mode 100644 index 0000000..8956650 --- /dev/null +++ b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/ImonLcd_AdvancedSetupForm.cs @@ -0,0 +1,41 @@ +using System; +using MediaPortal.UserInterface.Controls; + +namespace MediaPortal.ProcessPlugins.MiniDisplayPlugin.Drivers +{ + public partial class ImonLcd_AdvancedSetupForm : MPConfigForm + { + public ImonLcd_AdvancedSetupForm() + { + InitializeComponent(); + + if (ImonLcd.AdvancedSettings.Instance.PreferFirstLineGeneral) + { + rbtnGeneralFirstLine.Checked = true; + } + else + { + rbtnGeneralSecondLine.Checked = true; + } + + if (ImonLcd.AdvancedSettings.Instance.PreferFirstLinePlayback) + { + rbtnPlaybackFirstLine.Checked = true; + } + else + { + rbtnPlaybackSecondLine.Checked = true; + } + } + + private void btnOK_Click(object sender, EventArgs e) + { + ImonLcd.AdvancedSettings.Instance.PreferFirstLineGeneral = + rbtnGeneralFirstLine.Checked; + ImonLcd.AdvancedSettings.Instance.PreferFirstLinePlayback = + rbtnPlaybackFirstLine.Checked; + ImonLcd.AdvancedSettings.Save(); + Close(); + } + } +} diff --git a/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/ImonLcd_AdvancedSetupForm.resx b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/ImonLcd_AdvancedSetupForm.resx new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/ImonLcd_AdvancedSetupForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/ImonVfd.cs b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/ImonVfd.cs new file mode 100644 index 0000000..89a6423 --- /dev/null +++ b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/ImonVfd.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Runtime.InteropServices; +using System.Text; +using MediaPortal.GUI.Library; + +namespace MediaPortal.ProcessPlugins.MiniDisplayPlugin.Drivers +{ + /// + /// iMON VFD Driver for iMON Manager >= 8.01.0419 + /// + public class ImonVfd : ImonBase + { + public ImonVfd() + { + UnsupportedDeviceErrorMessage = "Only VFDs are supported"; + Description = "iMON VFD for iMON Manager >= 8.01.0419"; + Name = "iMONVFD"; + DisplayType = DSPN_DSP_VFD; + } + + public override void SetLine(int line, string message) + { + if (line == 0) + { + Line1 = message; + } + else if (line == 1) + { + Line2 = message; + IDW_SetVfdText(Line1, Line2); + } + } + + [DllImport("iMONDisplayWrapper.dll")] + private static extern int IDW_SetVfdText( + [MarshalAs(UnmanagedType.LPWStr)] string line1, + [MarshalAs(UnmanagedType.LPWStr)] string line2); + + } +} diff --git a/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/Event.cpp b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/Event.cpp new file mode 100644 index 0000000..d0f66fd --- /dev/null +++ b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/Event.cpp @@ -0,0 +1,29 @@ +//------------------------------------------------------------------------------ +#include "Event.h" +//------------------------------------------------------------------------------ +Event::Event() +{ + m_hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); +} +//------------------------------------------------------------------------------ +Event::~Event() +{ + if (m_hEvent) + CloseHandle(m_hEvent); +} +//------------------------------------------------------------------------------ +void Event::Signal() const +{ + SetEvent(m_hEvent); +} +//------------------------------------------------------------------------------ +void Event::Reset() const +{ + ResetEvent(m_hEvent); +} +//------------------------------------------------------------------------------ +void Event::Await() const +{ + WaitForSingleObject(m_hEvent, INFINITE); +} +//------------------------------------------------------------------------------ diff --git a/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/Event.h b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/Event.h new file mode 100644 index 0000000..d5c1b68 --- /dev/null +++ b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/Event.h @@ -0,0 +1,27 @@ +//------------------------------------------------------------------------------ +#ifndef EVENT_H_INCLUDED +#define EVENT_H_INCLUDED +//------------------------------------------------------------------------------ +#include +//------------------------------------------------------------------------------ +class Event +{ +public: + Event(); + virtual ~Event(); + +private: + Event(const Event& other) {} + Event& operator=(const Event& other) { return *this; } + +public: + void Signal() const; + void Reset() const; + void Await() const; + +private: + HANDLE m_hEvent; +}; +//------------------------------------------------------------------------------ +#endif +//------------------------------------------------------------------------------ diff --git a/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/IdwApi.cpp b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/IdwApi.cpp new file mode 100644 index 0000000..5244191 --- /dev/null +++ b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/IdwApi.cpp @@ -0,0 +1,247 @@ +//------------------------------------------------------------------------------ +#include "IdwApi.h" +#include +//------------------------------------------------------------------------------ +IdwApi::IdwApi(HINSTANCE hInstance) +: m_hInstance(hInstance) +, m_pIdwThread(NULL) +, m_nInitCount(0) +{ +} +//------------------------------------------------------------------------------ +IdwApi::~IdwApi() +{ +} +//------------------------------------------------------------------------------ +DSPResult IdwApi::Init(IDW_INITRESULT* pInitResult) +{ + m_mutex.Request(); + if (m_nInitCount == 0) + { + m_pIdwThread = new IdwThread(m_hInstance); + m_pIdwThread->Start(); + } + ++m_nInitCount; + DSPResult ret = m_pIdwThread->Init(pInitResult); + m_mutex.Release(); + return ret; +} +//------------------------------------------------------------------------------ +DSPResult IdwApi::Uninit() +{ + m_mutex.Request(); + if (m_nInitCount == 0) + { + m_mutex.Release(); + return DSP_E_NOT_INITED; + } + DSPResult ret = m_pIdwThread->Uninit(); + if (ret == DSP_SUCCEEDED) + { + --m_nInitCount; + if (m_nInitCount == 0) + { + m_pIdwThread->Interrupt(); + m_pIdwThread->Join(); + delete m_pIdwThread; + } + } + m_mutex.Release(); + return ret; +} +//------------------------------------------------------------------------------ +DSPResult IdwApi::IsInited() +{ + m_mutex.Request(); + if (m_nInitCount == 0) + { + m_mutex.Release(); + return DSP_S_NOT_INITED; + } + DSPResult ret = m_pIdwThread->IsInited(); + m_mutex.Release(); + return ret; +} +//------------------------------------------------------------------------------ +DSPResult IdwApi::IsPluginModeEnabled() +{ + m_mutex.Request(); + if (m_nInitCount == 0) + { + m_mutex.Release(); + return DSP_S_NOT_IN_PLUGIN_MODE; + } + DSPResult ret = m_pIdwThread->IsPluginModeEnabled(); + m_mutex.Release(); + return ret; +} +//------------------------------------------------------------------------------ +DSPResult IdwApi::SetVfdText(LPCWSTR lpszLine1, LPCWSTR lpszLine2) +{ + m_mutex.Request(); + if (m_nInitCount == 0) + { + m_mutex.Release(); + return DSP_E_NOT_INITED; + } + DSPResult ret = m_pIdwThread->SetVfdText(lpszLine1, lpszLine2); + m_mutex.Release(); + return ret; +} +//------------------------------------------------------------------------------ +DSPResult IdwApi::SetVfdEqData(PDSPEQDATA pEqData) +{ + m_mutex.Request(); + if (m_nInitCount == 0) + { + m_mutex.Release(); + return DSP_E_NOT_INITED; + } + DSPResult ret = m_pIdwThread->SetVfdEqData(pEqData); + m_mutex.Release(); + return ret; +} +//------------------------------------------------------------------------------ +DSPResult IdwApi::SetLcdText(LPCWSTR lpszLine1) +{ + m_mutex.Request(); + if (m_nInitCount == 0) + { + m_mutex.Release(); + return DSP_E_NOT_INITED; + } + DSPResult ret = m_pIdwThread->SetLcdText(lpszLine1); + m_mutex.Release(); + return ret; +} +//------------------------------------------------------------------------------ +DSPResult IdwApi::SetLcdEqData(PDSPEQDATA pEqDataL, PDSPEQDATA pEqDataR) +{ + m_mutex.Request(); + if (m_nInitCount == 0) + { + m_mutex.Release(); + return DSP_E_NOT_INITED; + } + DSPResult ret = m_pIdwThread->SetLcdEqData(pEqDataL, pEqDataR); + m_mutex.Release(); + return ret; +} +//------------------------------------------------------------------------------ +DSPResult IdwApi::SetLcdAllIcons(BOOL bOn) +{ + m_mutex.Request(); + if (m_nInitCount == 0) + { + m_mutex.Release(); + return DSP_E_NOT_INITED; + } + DSPResult ret = m_pIdwThread->SetLcdAllIcons(bOn); + m_mutex.Release(); + return ret; +} +//------------------------------------------------------------------------------ +DSPResult IdwApi::SetLcdOrangeIcon(BYTE btIconData1, BYTE btIconData2) +{ + m_mutex.Request(); + if (m_nInitCount == 0) + { + m_mutex.Release(); + return DSP_E_NOT_INITED; + } + DSPResult ret = m_pIdwThread->SetLcdOrangeIcon(btIconData1, btIconData2); + m_mutex.Release(); + return ret; +} +//------------------------------------------------------------------------------ +DSPResult IdwApi::SetLcdMediaTypeIcon(BYTE btIconData) +{ + m_mutex.Request(); + if (m_nInitCount == 0) + { + m_mutex.Release(); + return DSP_E_NOT_INITED; + } + DSPResult ret = m_pIdwThread->SetLcdMediaTypeIcon(btIconData); + m_mutex.Release(); + return ret; +} +//------------------------------------------------------------------------------ +DSPResult IdwApi::SetLcdSpeakerIcon(BYTE btIconData1, BYTE btIconData2) +{ + m_mutex.Request(); + if (m_nInitCount == 0) + { + m_mutex.Release(); + return DSP_E_NOT_INITED; + } + DSPResult ret = m_pIdwThread->SetLcdSpeakerIcon(btIconData1, btIconData2); + m_mutex.Release(); + return ret; +} +//------------------------------------------------------------------------------ +DSPResult IdwApi::SetLcdVideoCodecIcon(BYTE btIconData) +{ + m_mutex.Request(); + if (m_nInitCount == 0) + { + m_mutex.Release(); + return DSP_E_NOT_INITED; + } + DSPResult ret = m_pIdwThread->SetLcdVideoCodecIcon(btIconData); + m_mutex.Release(); + return ret; +} +//------------------------------------------------------------------------------ +DSPResult IdwApi::SetLcdAudioCodecIcon(BYTE btIconData) +{ + m_mutex.Request(); + if (m_nInitCount == 0) + { + m_mutex.Release(); + return DSP_E_NOT_INITED; + } + DSPResult ret = m_pIdwThread->SetLcdAudioCodecIcon(btIconData); + m_mutex.Release(); + return ret; +} +//------------------------------------------------------------------------------ +DSPResult IdwApi::SetLcdAspectRatioIcon(BYTE btIconData) +{ + m_mutex.Request(); + if (m_nInitCount == 0) + { + m_mutex.Release(); + return DSP_E_NOT_INITED; + } + DSPResult ret = m_pIdwThread->SetLcdAspectRatioIcon(btIconData); + m_mutex.Release(); + return ret; +} +//------------------------------------------------------------------------------ +DSPResult IdwApi::SetLcdEtcIcon(BYTE btIconData) +{ + m_mutex.Request(); + if (m_nInitCount == 0) + { + m_mutex.Release(); + return DSP_E_NOT_INITED; + } + DSPResult ret = m_pIdwThread->SetLcdEtcIcon(btIconData); + m_mutex.Release(); + return ret; +} +//------------------------------------------------------------------------------ +DSPResult IdwApi::SetLcdProgress(int nCurPos, int nTotal) +{ + m_mutex.Request(); + if (m_nInitCount == 0) + { + m_mutex.Release(); + return DSP_E_NOT_INITED; + } + DSPResult ret = m_pIdwThread->SetLcdProgress(nCurPos, nTotal); + m_mutex.Release(); + return ret; +} +//------------------------------------------------------------------------------ \ No newline at end of file diff --git a/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/IdwApi.h b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/IdwApi.h new file mode 100644 index 0000000..460d1ca --- /dev/null +++ b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/IdwApi.h @@ -0,0 +1,48 @@ +//------------------------------------------------------------------------------ +#ifndef IDWAPI_H_INCLUDED +#define IDWAPI_H_INCLUDED +//------------------------------------------------------------------------------ +#include +#include "Mutex.h" +#include "iMONDisplayDefines.h" +#include "iMONDisplayWrapper.h" +#include "IdwThread.h" +//------------------------------------------------------------------------------ +class IdwApi +{ +public: + IdwApi(HINSTANCE hInstance); + ~IdwApi(); + +public: + DSPResult Init(IDW_INITRESULT* pInitResult); + DSPResult Uninit(); + DSPResult IsInited(); + DSPResult IsPluginModeEnabled(); + DSPResult SetVfdText(LPCWSTR lpszLine1, LPCWSTR lpszLine2); + DSPResult SetVfdEqData(PDSPEQDATA pEqData); + DSPResult SetLcdText(LPCWSTR lpszText); + DSPResult SetLcdEqData(PDSPEQDATA pEqDataL, PDSPEQDATA pEqDataR); + DSPResult SetLcdAllIcons(BOOL bOn); + DSPResult SetLcdOrangeIcon(BYTE btIconData1, BYTE btIconData2); + DSPResult SetLcdMediaTypeIcon(BYTE btIconData); + DSPResult SetLcdSpeakerIcon(BYTE btIconData1, BYTE btIconData2); + DSPResult SetLcdVideoCodecIcon(BYTE btIconData); + DSPResult SetLcdAudioCodecIcon(BYTE btIconData); + DSPResult SetLcdAspectRatioIcon(BYTE btIconData); + DSPResult SetLcdEtcIcon(BYTE btIconData); + DSPResult SetLcdProgress(int nCurPos, int nTotal); + +private: + IdwApi(const IdwApi& other) {} + IdwApi& operator=(const IdwApi& other) { return *this; } + +private: + HINSTANCE m_hInstance; + Mutex m_mutex; + int m_nInitCount; + IdwThread* m_pIdwThread; +}; +//------------------------------------------------------------------------------ +#endif +//------------------------------------------------------------------------------ diff --git a/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/IdwThread.cpp b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/IdwThread.cpp new file mode 100644 index 0000000..ac40c43 --- /dev/null +++ b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/IdwThread.cpp @@ -0,0 +1,745 @@ +//------------------------------------------------------------------------------ +#include "IdwThread.h" +#include "iMONDisplayAPI.h" +//------------------------------------------------------------------------------ +#define CLASSNAME TEXT("IDW_IMON_COM_WNDCLASS") +//------------------------------------------------------------------------------ +#define WM_IDW_IMON (WM_USER + 1) +#define WM_IDW_INIT (WM_USER + 2) +#define WM_IDW_UNINIT (WM_USER + 3) +#define WM_IDW_ISINITED (WM_USER + 4) +#define WM_IDW_ISPLUGINMODEENABLED (WM_USER + 5) +#define WM_IDW_SETVFDTEXT (WM_USER + 6) +#define WM_IDW_SETVFDEQ (WM_USER + 7) +#define WM_IDW_SETLCDTEXT (WM_USER + 8) +#define WM_IDW_SETLCDEQ (WM_USER + 9) +#define WM_IDW_SETLCDALLICONS (WM_USER + 10) +#define WM_IDW_SETLCDORANGEICON (WM_USER + 11) +#define WM_IDW_SETLCDMEDIATYPEICON (WM_USER + 12) +#define WM_IDW_SETLCDSPEAKERICON (WM_USER + 13) +#define WM_IDW_SETLCDVIDEOCODEC (WM_USER + 14) +#define WM_IDW_SETLCDAUDIOCODEC (WM_USER + 15) +#define WM_IDW_SETLCDASPECTRATIO (WM_USER + 16) +#define WM_IDW_SETLCDETCICON (WM_USER + 17) +#define WM_IDW_SETLCDPROGRESS (WM_USER + 18) +#define WM_IDW_INTERRUPT (WM_USER + 100) +//------------------------------------------------------------------------------ +struct IdwImonInitResult +{ + DSPResult result; + DSPNInitResult initResult; + DSPType dspType; +}; +struct IdwSetVfdText +{ + DSPResult result; + LPCWSTR pszLine1; + LPCWSTR pszLine2; +}; +struct IdwSetVfdEq +{ + DSPResult result; + PDSPEQDATA pEqData; +}; +struct IdwSetLcdText +{ + DSPResult result; + LPCWSTR pszLine1; +}; +struct IdwSetLcdEq +{ + DSPResult result; + PDSPEQDATA pEqDataL; + PDSPEQDATA pEqDataR; +}; +struct IdwSetLcdAllIcons +{ + DSPResult result; + BOOL bOn; +}; +struct IdwSetLcdIcons +{ + DSPResult result; + BYTE btIconData; +}; +struct IdwSetLcdIcons2 +{ + DSPResult result; + BYTE btIconData1; + BYTE btIconData2; +}; +struct IdwSetLcdProgress +{ + DSPResult result; + int nCurPos; + int nTotal; +}; +//------------------------------------------------------------------------------ +IdwThread::IdwThread(HINSTANCE hInstance) +: m_hInstance(hInstance) +, m_hWnd(NULL) +{ +} +//------------------------------------------------------------------------------ +IdwThread::~IdwThread() +{ +} +//------------------------------------------------------------------------------ +void IdwThread::Interrupt() +{ + if (!WaitForWindow()) + return; + PostMessage(m_hWnd, WM_IDW_INTERRUPT, 0, 0); +} +//------------------------------------------------------------------------------ +DSPResult IdwThread::Init(IDW_INITRESULT* pInitResult) +{ + if (!WaitForWindow()) + return DSP_E_FAIL; + + IdwImonInitResult result; + Event finished; + PostMessage(m_hWnd, WM_IDW_INIT, (WPARAM)&result, (LPARAM)&finished); + finished.Await(); + if (pInitResult != NULL) + { + pInitResult->initResult = result.initResult; + pInitResult->dspType = result.dspType; + } + + return result.result; +} +//------------------------------------------------------------------------------ +DSPResult IdwThread::Uninit() +{ + if (!WaitForWindow()) + return DSP_E_FAIL; + + DSPResult result; + Event finished; + PostMessage(m_hWnd, WM_IDW_UNINIT, (WPARAM)&result, (LPARAM)&finished); + finished.Await(); + + return result; +} +//------------------------------------------------------------------------------ +DSPResult IdwThread::IsInited() +{ + if (!WaitForWindow()) + return DSP_E_FAIL; + + DSPResult result; + Event finished; + PostMessage(m_hWnd, WM_IDW_ISINITED, (WPARAM)&result, (LPARAM)&finished); + finished.Await(); + + return result; +} +//------------------------------------------------------------------------------ +DSPResult IdwThread::IsPluginModeEnabled() +{ + if (!WaitForWindow()) + return DSP_E_FAIL; + + DSPResult result; + Event finished; + PostMessage(m_hWnd, WM_IDW_ISPLUGINMODEENABLED, (WPARAM)&result, + (LPARAM)&finished); + finished.Await(); + + return result; +} +//------------------------------------------------------------------------------ +DSPResult IdwThread::SetVfdText(LPCWSTR lpszLine1, LPCWSTR lpszLine2) +{ + if (!WaitForWindow()) + return DSP_E_FAIL; + + IdwSetVfdText text; + text.pszLine1 = lpszLine1; + text.pszLine2 = lpszLine2; + Event finished; + PostMessage(m_hWnd, WM_IDW_SETVFDTEXT, (WPARAM)&text, (LPARAM)&finished); + finished.Await(); + + return text.result; +} +//------------------------------------------------------------------------------ +DSPResult IdwThread::SetVfdEqData(PDSPEQDATA pEqData) +{ + if (!WaitForWindow()) + return DSP_E_FAIL; + + IdwSetVfdEq eq; + eq.pEqData = pEqData; + Event finished; + PostMessage(m_hWnd, WM_IDW_SETVFDEQ, (WPARAM)&eq, (LPARAM)&finished); + finished.Await(); + + return eq.result; +} +//------------------------------------------------------------------------------ +DSPResult IdwThread::SetLcdText(LPCWSTR lpszLine1) +{ + if (!WaitForWindow()) + return DSP_E_FAIL; + + IdwSetLcdText text; + text.pszLine1 = lpszLine1; + Event finished; + PostMessage(m_hWnd, WM_IDW_SETLCDTEXT, (WPARAM)&text, (LPARAM)&finished); + finished.Await(); + + return text.result; +} +//------------------------------------------------------------------------------ +DSPResult IdwThread::SetLcdEqData(PDSPEQDATA pEqDataL, PDSPEQDATA pEqDataR) +{ + if (!WaitForWindow()) + return DSP_E_FAIL; + + IdwSetLcdEq eq; + eq.pEqDataL = pEqDataL; + eq.pEqDataR = pEqDataR; + Event finished; + PostMessage(m_hWnd, WM_IDW_SETLCDEQ, (WPARAM)&eq, (LPARAM)&finished); + finished.Await(); + + return eq.result; +} +//------------------------------------------------------------------------------ +DSPResult IdwThread::SetLcdAllIcons(BOOL bOn) +{ + if (!WaitForWindow()) + return DSP_E_FAIL; + + IdwSetLcdAllIcons allIcons; + allIcons.bOn = bOn; + Event finished; + PostMessage(m_hWnd, WM_IDW_SETLCDALLICONS, + (WPARAM)&allIcons, (LPARAM)&finished); + finished.Await(); + + return allIcons.result; +} +//------------------------------------------------------------------------------ +DSPResult IdwThread::SetLcdOrangeIcon(BYTE btIconData1, BYTE btIconData2) +{ + if (!WaitForWindow()) + return DSP_E_FAIL; + + IdwSetLcdIcons2 iconData; + iconData.btIconData1 = btIconData1; + iconData.btIconData2 = btIconData2; + Event finished; + PostMessage(m_hWnd, WM_IDW_SETLCDORANGEICON, + (WPARAM)&iconData, (LPARAM)&finished); + finished.Await(); + + return iconData.result; +} +//------------------------------------------------------------------------------ +DSPResult IdwThread::SetLcdMediaTypeIcon(BYTE btIconData) +{ + if (!WaitForWindow()) + return DSP_E_FAIL; + + IdwSetLcdIcons iconData; + iconData.btIconData = btIconData; + Event finished; + PostMessage(m_hWnd, WM_IDW_SETLCDMEDIATYPEICON, + (WPARAM)&iconData, (LPARAM)&finished); + finished.Await(); + + return iconData.result; +} +//------------------------------------------------------------------------------ +DSPResult IdwThread::SetLcdSpeakerIcon(BYTE btIconData1, BYTE btIconData2) +{ + if (!WaitForWindow()) + return DSP_E_FAIL; + + IdwSetLcdIcons2 iconData; + iconData.btIconData1 = btIconData1; + iconData.btIconData2 = btIconData2; + Event finished; + PostMessage(m_hWnd, WM_IDW_SETLCDSPEAKERICON, + (WPARAM)&iconData, (LPARAM)&finished); + finished.Await(); + + return iconData.result; +} +//------------------------------------------------------------------------------ +DSPResult IdwThread::SetLcdVideoCodecIcon(BYTE btIconData) +{ + if (!WaitForWindow()) + return DSP_E_FAIL; + + IdwSetLcdIcons iconData; + iconData.btIconData = btIconData; + Event finished; + PostMessage(m_hWnd, WM_IDW_SETLCDVIDEOCODEC, + (WPARAM)&iconData, (LPARAM)&finished); + finished.Await(); + + return iconData.result; +} +//------------------------------------------------------------------------------ +DSPResult IdwThread::SetLcdAudioCodecIcon(BYTE btIconData) +{ + if (!WaitForWindow()) + return DSP_E_FAIL; + + IdwSetLcdIcons iconData; + iconData.btIconData = btIconData; + Event finished; + PostMessage(m_hWnd, WM_IDW_SETLCDAUDIOCODEC, + (WPARAM)&iconData, (LPARAM)&finished); + finished.Await(); + + return iconData.result; +} +//------------------------------------------------------------------------------ +DSPResult IdwThread::SetLcdAspectRatioIcon(BYTE btIconData) +{ + if (!WaitForWindow()) + return DSP_E_FAIL; + + IdwSetLcdIcons iconData; + iconData.btIconData = btIconData; + Event finished; + PostMessage(m_hWnd, WM_IDW_SETLCDASPECTRATIO, + (WPARAM)&iconData, (LPARAM)&finished); + finished.Await(); + + return iconData.result; +} +//------------------------------------------------------------------------------ +DSPResult IdwThread::SetLcdEtcIcon(BYTE btIconData) +{ + if (!WaitForWindow()) + return DSP_E_FAIL; + + IdwSetLcdIcons iconData; + iconData.btIconData = btIconData; + Event finished; + PostMessage(m_hWnd, WM_IDW_SETLCDETCICON, + (WPARAM)&iconData, (LPARAM)&finished); + finished.Await(); + + return iconData.result; +} +//------------------------------------------------------------------------------ +DSPResult IdwThread::SetLcdProgress(int nCurPos, int nTotal) +{ + if (!WaitForWindow()) + return DSP_E_FAIL; + + IdwSetLcdProgress progressData; + progressData.nCurPos = nCurPos; + progressData.nTotal = nTotal; + Event finished; + PostMessage(m_hWnd, WM_IDW_SETLCDPROGRESS, + (WPARAM)&progressData, (LPARAM)&finished); + finished.Await(); + + return progressData.result; +} +//------------------------------------------------------------------------------ +void IdwThread::Run() +{ + if (!RegisterClass()) + { + m_eventWindowCreationDone.Signal(); + return; + } + if (!CreateMessageWindow()) + { + m_eventWindowCreationDone.Signal(); + return; + } + AllowImonMessages(); + + m_eventWindowCreationDone.Signal(); + + MSG msg; + BOOL fGotMessage; + while ((fGotMessage = GetMessage(&msg, (HWND) NULL, 0, 0)) != 0 + && fGotMessage != -1) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } +} +//------------------------------------------------------------------------------ +bool IdwThread::RegisterClass() +{ + WNDCLASSEX wc; + if (GetClassInfoEx(m_hInstance, CLASSNAME, &wc)) + { + return true; + } + + wc.cbSize = sizeof(wc); + wc.style = CS_HREDRAW | CS_VREDRAW; + wc.lpfnWndProc = IdwThread::WndProc; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hInstance = m_hInstance; + wc.hIcon = NULL; + wc.hCursor = NULL; + wc.hbrBackground = NULL; + wc.lpszMenuName = NULL; + wc.lpszClassName = CLASSNAME; + wc.hIconSm = NULL; + if (::RegisterClassEx(&wc)) + { + return true; + } + return false; +} +//------------------------------------------------------------------------------ +bool IdwThread::CreateMessageWindow() +{ + m_hWnd = CreateWindow( + CLASSNAME, + TEXT("MP iMON MessageWindow"), + 0, + 0, 0, 0, 0, + HWND_MESSAGE, + NULL, + m_hInstance, + NULL); + + if (!m_hWnd) + return false; + return true; +} +//------------------------------------------------------------------------------ +void IdwThread::AllowImonMessages() +{ + // Determine OS + OSVERSIONINFO version; + version.dwOSVersionInfoSize = sizeof(version); + GetVersionEx(&version); + if (version.dwMajorVersion < 6) + { + return; + } + + // Determine and allow iMON message number + UINT iMonMsg = + RegisterWindowMessage( + TEXT("iMonMessage-431F1DC6-F31A-4AC6-A1FA-A4BB9C44FF10")); + ChangeWindowMessageFilter(iMonMsg, MSGFLT_ADD); +} +//------------------------------------------------------------------------------ +bool IdwThread::WaitForWindow() +{ + m_eventWindowCreationDone.Await(); + if (m_hWnd == NULL) + return false; + return true; +} +//------------------------------------------------------------------------------ +LRESULT CALLBACK IdwThread::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, + LPARAM lParam) +{ + static bool initing = false; + static IdwImonInitResult* pInitResult = NULL; + static Event* pInitFinished = NULL; + + DSPResult* pResult; + Event* pFinished; + + switch (uMsg) + { + case WM_CREATE: + return 0; + + case WM_DESTROY: + PostQuitMessage(0); + return 0; + + case WM_IDW_IMON: + if (initing) + { + initing = false; + pInitResult->initResult = (DSPNInitResult)wParam; + pInitResult->dspType = (DSPType)lParam; + pInitFinished->Signal(); + } + return 0; + + case WM_IDW_INIT: + initing = true; + pInitResult = (IdwImonInitResult*)wParam; + pInitFinished = (Event*)lParam; + pInitResult->result = IMON_Display_Init(hwnd, WM_IDW_IMON); + if (pInitResult->result != DSP_SUCCEEDED) + { + initing = false; + pInitResult->initResult = DSPN_ERR_UNKNOWN; + pInitResult->dspType = DSPN_DSP_NONE; + pInitFinished->Signal(); + } + return 0; + + case WM_IDW_UNINIT: + pResult = (DSPResult*)wParam; + pFinished = (Event*)lParam; + *pResult = IMON_Display_Uninit(); + pFinished->Signal(); + return 0; + + case WM_IDW_ISINITED: + pResult = (DSPResult*)wParam; + pFinished = (Event*)lParam; + *pResult = IMON_Display_IsInited(); + pFinished->Signal(); + return 0; + + case WM_IDW_ISPLUGINMODEENABLED: + pResult = (DSPResult*)wParam; + pFinished = (Event*)lParam; + *pResult = IMON_Display_IsPluginModeEnabled(); + pFinished->Signal(); + return 0; + + case WM_IDW_SETVFDTEXT: + { + IdwSetVfdText* pSetVfdText = (IdwSetVfdText*)wParam; + WCHAR szLine1[20]; + WCHAR szLine2[20]; + pFinished = (Event*)lParam; + MapChars(szLine1, pSetVfdText->pszLine1, 16); + MapChars(szLine2, pSetVfdText->pszLine2, 16); + pSetVfdText->result = IMON_Display_SetVfdText(szLine1, szLine2); + pFinished->Signal(); + return 0; + } + + case WM_IDW_SETVFDEQ: + { + IdwSetVfdEq* pSetVfdEq = (IdwSetVfdEq*)wParam; + pFinished = (Event*)lParam; + pSetVfdEq->result = IMON_Display_SetVfdEqData(pSetVfdEq->pEqData); + pFinished->Signal(); + return 0; + } + + case WM_IDW_SETLCDTEXT: + { + IdwSetLcdText* pSetLcdText = (IdwSetLcdText*)wParam; + pFinished = (Event*)lParam; + pSetLcdText->result = IMON_Display_SetLcdText(pSetLcdText->pszLine1); + pFinished->Signal(); + return 0; + } + + case WM_IDW_SETLCDEQ: + { + IdwSetLcdEq* pSetLcdEq = (IdwSetLcdEq*)wParam; + pFinished = (Event*)lParam; + pSetLcdEq->result = + IMON_Display_SetLcdEqData(pSetLcdEq->pEqDataL, pSetLcdEq->pEqDataR); + pFinished->Signal(); + return 0; + } + + case WM_IDW_SETLCDALLICONS: + { + IdwSetLcdAllIcons* pSetLcdAllIcons = (IdwSetLcdAllIcons*)wParam; + pFinished = (Event*)lParam; + pSetLcdAllIcons->result = + IMON_Display_SetLcdAllIcons(pSetLcdAllIcons->bOn); + pFinished->Signal(); + return 0; + } + + case WM_IDW_SETLCDORANGEICON: + { + IdwSetLcdIcons2* pSetLcdIcons2 = (IdwSetLcdIcons2*)wParam; + pFinished = (Event*)lParam; + pSetLcdIcons2->result = IMON_Display_SetLcdOrangeIcon( + pSetLcdIcons2->btIconData1, pSetLcdIcons2->btIconData2); + pFinished->Signal(); + return 0; + } + + case WM_IDW_SETLCDMEDIATYPEICON: + { + IdwSetLcdIcons* pSetLcdIcons = (IdwSetLcdIcons*)wParam; + pFinished = (Event*)lParam; + pSetLcdIcons->result = + IMON_Display_SetLcdMediaTypeIcon(pSetLcdIcons->btIconData); + pFinished->Signal(); + return 0; + } + + case WM_IDW_SETLCDSPEAKERICON: + { + IdwSetLcdIcons2* pSetLcdIcons2 = (IdwSetLcdIcons2*)wParam; + pFinished = (Event*)lParam; + pSetLcdIcons2->result = IMON_Display_SetLcdSpeakerIcon( + pSetLcdIcons2->btIconData1, pSetLcdIcons2->btIconData2); + pFinished->Signal(); + return 0; + } + + case WM_IDW_SETLCDVIDEOCODEC: + { + IdwSetLcdIcons* pSetLcdIcons = (IdwSetLcdIcons*)wParam; + pFinished = (Event*)lParam; + pSetLcdIcons->result = + IMON_Display_SetLcdVideoCodecIcon(pSetLcdIcons->btIconData); + pFinished->Signal(); + return 0; + } + + case WM_IDW_SETLCDAUDIOCODEC: + { + IdwSetLcdIcons* pSetLcdIcons = (IdwSetLcdIcons*)wParam; + pFinished = (Event*)lParam; + pSetLcdIcons->result = + IMON_Display_SetLcdAudioCodecIcon(pSetLcdIcons->btIconData); + pFinished->Signal(); + return 0; + } + + case WM_IDW_SETLCDASPECTRATIO: + { + IdwSetLcdIcons* pSetLcdIcons = (IdwSetLcdIcons*)wParam; + pFinished = (Event*)lParam; + pSetLcdIcons->result = + IMON_Display_SetLcdAspectRatioIcon(pSetLcdIcons->btIconData); + pFinished->Signal(); + return 0; + } + + case WM_IDW_SETLCDETCICON: + { + IdwSetLcdIcons* pSetLcdIcons = (IdwSetLcdIcons*)wParam; + pFinished = (Event*)lParam; + pSetLcdIcons->result = + IMON_Display_SetLcdEtcIcon(pSetLcdIcons->btIconData); + pFinished->Signal(); + return 0; + } + + case WM_IDW_SETLCDPROGRESS: + { + IdwSetLcdProgress* pSetLcdProgress = (IdwSetLcdProgress*)wParam; + pFinished = (Event*)lParam; + pSetLcdProgress->result = IMON_Display_SetLcdProgress( + pSetLcdProgress->nCurPos, pSetLcdProgress->nTotal); + pFinished->Signal(); + return 0; + } + + case WM_IDW_INTERRUPT: + DestroyWindow(hwnd); + return 0; + } + return DefWindowProc(hwnd, uMsg, wParam, lParam); +} +//------------------------------------------------------------------------------ +void IdwThread::MapChars(LPWSTR lpszTarget, LPCWSTR lpszSource, + int nMaxLength) +{ + int len = (int)wcslen(lpszSource); + if ((nMaxLength > 0) && (len > nMaxLength)) + len = nMaxLength; + lpszTarget[len] = 0; + for (int i = 0; i < len; ++i) + { + wchar_t ch = lpszSource[i]; + lpszTarget[i] = MapChar(ch); + } +} +//------------------------------------------------------------------------------ +#define IN_RANGE(ch, s, e) ((ch >= s) && (ch <= e)) +#define IS(ch, c) (ch == c) +wchar_t IdwThread::MapChar(wchar_t ch) +{ + if (IN_RANGE(ch, 0x0020, 0x005B) + || IN_RANGE(ch, 0x005D, 0x007D) + || IS(ch, 0x0401) + || IS(ch, 0x0404) + || IN_RANGE(ch, 0x0406, 0x0407) + || IN_RANGE(ch, 0x0410, 0x044F) + || IS(ch, 0x0451) + || IS(ch, 0x0454) + || IN_RANGE(ch, 0x0456, 0x0457) + || IN_RANGE(ch, 0x0490, 0x0491)) + return ch; + + switch (ch) + { + case 0x5C: + return 0x8C; + case 0x7E: + return 0x8E; + case 0x7F: + return 0x20; + case 0xA2: + return 0xEC; + case 0xA3: + return 0x92; + case 0xA5: + return 0x5C; + case 0xA6: + return 0x98; + case 0xA7: + return 0x8F; + case 0xB0: + return 0xDF; + case 0xB5: + return 0xE4; + case 0xC2: + return 0x82; + case 0xC4: + return 0x80; + case 0xC5: + return 0x81; + case 0xC6: + return 0x90; + case 0xC7: + return 0x99; + case 0xD1: + return 0xEE; + case 0xD6: + return 0x86; + case 0xD8: + return 0x88; + case 0xDC: + return 0x8A; + case 0xDE: + return 0xF0; + case 0xDF: + return 0xE2; + case 0xE1: + return 0x83; + case 0xE4: + return 0xE1; + case 0xE5: + return 0x84; + case 0xE7: + return 0x99; + case 0xF1: + return 0xD1; + case 0xF6: + return 0x87; + case 0xF7: + return 0xFD; + case 0xF8: + return 0x89; + case 0xFC: + return 0x8B; + case 0xFE: + return 0xF0; + default: + return L'#'; + } +} +//------------------------------------------------------------------------------ diff --git a/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/IdwThread.h b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/IdwThread.h new file mode 100644 index 0000000..199bbbe --- /dev/null +++ b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/IdwThread.h @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +#ifndef IDWTHREAD_H_INCLUDED +#define IDWTHREAD_H_INCLUDED +//------------------------------------------------------------------------------ +#include +#include "Thread.h" +#include "Event.h" +#include "Mutex.h" +#include "iMONDisplayDefines.h" +#include "iMONDisplayWrapper.h" +//------------------------------------------------------------------------------ +class IdwThread : public Thread +{ +public: + IdwThread(HINSTANCE hInstance); + virtual ~IdwThread(); + +private: + IdwThread(const IdwThread& other) {} + IdwThread& operator=(const IdwThread& other) { return *this; } + +public: + virtual void Interrupt(); + DSPResult Init(IDW_INITRESULT* pInitResult); + DSPResult Uninit(); + DSPResult IsInited(); + DSPResult IsPluginModeEnabled(); + DSPResult SetVfdText(LPCWSTR lpszLine1, LPCWSTR lpszLine2); + DSPResult SetVfdEqData(PDSPEQDATA pEqData); + DSPResult SetLcdText(LPCWSTR lpszText); + DSPResult SetLcdEqData(PDSPEQDATA pEqDataL, PDSPEQDATA pEqDataR); + DSPResult SetLcdAllIcons(BOOL bOn); + DSPResult SetLcdOrangeIcon(BYTE btIconData1, BYTE btIconData2); + DSPResult SetLcdMediaTypeIcon(BYTE btIconData); + DSPResult SetLcdSpeakerIcon(BYTE btIconData1, BYTE btIconData2); + DSPResult SetLcdVideoCodecIcon(BYTE btIconData); + DSPResult SetLcdAudioCodecIcon(BYTE btIconData); + DSPResult SetLcdAspectRatioIcon(BYTE btIconData); + DSPResult SetLcdEtcIcon(BYTE btIconData); + DSPResult SetLcdProgress(int nCurPos, int nTotal); + +protected: + virtual void Run(); + +private: + bool RegisterClass(); + bool CreateMessageWindow(); + void AllowImonMessages(); + bool WaitForWindow(); + static LRESULT CALLBACK WndProc( + HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); + static void MapChars( + LPWSTR lpszTarget, LPCWSTR lpszSource, int nMaxLength); + static wchar_t MapChar(wchar_t ch); + +private: + HINSTANCE m_hInstance; + HWND m_hWnd; + Event m_eventWindowCreationDone; +}; +//------------------------------------------------------------------------------ +#endif +//------------------------------------------------------------------------------ diff --git a/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/Mutex.cpp b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/Mutex.cpp new file mode 100644 index 0000000..1de142c --- /dev/null +++ b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/Mutex.cpp @@ -0,0 +1,24 @@ +//------------------------------------------------------------------------------ +#include "Mutex.h" +//------------------------------------------------------------------------------ +Mutex::Mutex() +{ + m_hMutex = CreateMutex(NULL, FALSE, NULL); +} +//------------------------------------------------------------------------------ +Mutex::~Mutex() +{ + if (m_hMutex) + CloseHandle(m_hMutex); +} +//------------------------------------------------------------------------------ +void Mutex::Request() const +{ + WaitForSingleObject(m_hMutex, INFINITE); +} +//------------------------------------------------------------------------------ +void Mutex::Release() const +{ + ReleaseMutex(m_hMutex); +} +//------------------------------------------------------------------------------ diff --git a/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/Mutex.h b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/Mutex.h new file mode 100644 index 0000000..aab8da3 --- /dev/null +++ b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/Mutex.h @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +#ifndef MUTEX_H_INCLUDED +#define MUTEX_H_INCLUDED +//------------------------------------------------------------------------------ +#include +//------------------------------------------------------------------------------ +class Mutex +{ +public: + Mutex(); + virtual ~Mutex(); + +private: + Mutex(const Mutex& other) {} + Mutex& operator=(const Mutex& other) { return *this; } + +public: + void Request() const; + void Release() const; + +private: + HANDLE m_hMutex; +}; +//------------------------------------------------------------------------------ +#endif +//------------------------------------------------------------------------------ diff --git a/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/Thread.cpp b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/Thread.cpp new file mode 100644 index 0000000..8ac81d5 --- /dev/null +++ b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/Thread.cpp @@ -0,0 +1,41 @@ +//------------------------------------------------------------------------------ +#include "Thread.h" +//------------------------------------------------------------------------------ +Thread::Thread() : m_hThread(NULL), m_dwThreadId(0) +{ +} +//------------------------------------------------------------------------------ +Thread::~Thread() +{ + if (m_hThread != NULL) + { + TerminateThread(m_hThread, -1); + m_hThread = NULL; + } +} +//------------------------------------------------------------------------------ +void Thread::Start() +{ + if (m_hThread != NULL) + return; + m_hThread = CreateThread( + NULL, + 0, + Thread::ThreadProc, + this, + 0, + &m_dwThreadId); +} +//------------------------------------------------------------------------------ +void Thread::Join() const +{ + WaitForSingleObject(m_hThread, INFINITE); +} +//------------------------------------------------------------------------------ +DWORD WINAPI Thread::ThreadProc(LPVOID lpParam) +{ + Thread* pThread = (Thread*)lpParam; + pThread->Run(); + return 0; +} +//------------------------------------------------------------------------------ diff --git a/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/Thread.h b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/Thread.h new file mode 100644 index 0000000..baaef5e --- /dev/null +++ b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/Thread.h @@ -0,0 +1,34 @@ +//------------------------------------------------------------------------------ +#ifndef THREAD_H_INCLUDED +#define THREAD_H_INCLUDED +//------------------------------------------------------------------------------ +#include +//------------------------------------------------------------------------------ +class Thread +{ +protected: + Thread(); + virtual ~Thread(); + +private: + Thread(const Thread& other) {} + Thread& operator=(const Thread& other) { *this; } + +public: + void Start(); + virtual void Interrupt() = 0; + void Join() const; + +protected: + virtual void Run() = 0; + +private: + static DWORD WINAPI ThreadProc(LPVOID lpParam); + +private: + HANDLE m_hThread; + DWORD m_dwThreadId; +}; +//------------------------------------------------------------------------------ +#endif +//------------------------------------------------------------------------------ diff --git a/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/iMONDisplay.lib b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/iMONDisplay.lib new file mode 100644 index 0000000..f143020 Binary files /dev/null and b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/iMONDisplay.lib differ diff --git a/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/iMONDisplayAPI.h b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/iMONDisplayAPI.h new file mode 100644 index 0000000..8ddbb16 --- /dev/null +++ b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/iMONDisplayAPI.h @@ -0,0 +1,163 @@ +#ifndef __IMON_DISPLAY_API_H__ +#define __IMON_DISPLAY_API_H__ + +//////////////////////////////////// +// includes +/** iMONDisplayDefines.h +This header file defines several enumerations. Open this file and check the definition and usage of enumerations and structures*/ +#include +#include "iMONDisplayDefines.h" + +#ifdef IMON_DISPLAY_API_EXPORT +#define IMONDSPAPI __declspec(dllexport) +#else +#define IMONDSPAPI __declspec(dllimport) +#endif + +#ifdef __cplusplus +extern "C" +{ +#endif //__cplusplus + + ///////////////////////////////////// + ///// Interfaces + /**DSPResult IMON_Display_Init(HWND hwndNoti, UINT uMsgNotification) + @brief This function should be called to use other functions in iMON Display API.\n + When the caller application calls this function, API tries to request Display Plug-in Mode to iMON. + @param [in] hwndNoti API will send/post message to this handle. + @param [in] uMsgNotification API will send/post message to hwndNoti with this message identifier. + @return This function will return one of DSPResult enumeration value.\n + DSP_SUCCEEDED will be returned if succeeded. DSP_E_INVALIDARG or DSP_E_OUTOFMEMORY can be returned when error occurs.*/ + IMONDSPAPI DSPResult IMON_Display_Init(HWND hwndNoti, UINT uMsgNotification); + + /**DSPResult IMON_Display_Uninit() + @brief This function should be called when the caller application need not use this API any more.\n + If this function call is missed, iMON can't display other information.\n + @return This function will return one of DSPResult enumeration value.\n + DSP_SUCCEEDED will be returned if succeeded.*/ + IMONDSPAPI DSPResult IMON_Display_Uninit(); + + /**DSPResult IMON_Display_IsInited() + @brief This function can be used when the caller application wants to know if API is initialized.\n + @return This function will return one of DSPResult enumeration value.\n + If API is initialized, this call will return DSP_S_INITED. Otherwise DSP_S_NOT_INITED will be returned.*/ + IMONDSPAPI DSPResult IMON_Display_IsInited(); + + /**DSPResult IMON_Display_IsPluginModeEnabled() + @brief This function can be used when the caller application wants to know if API can control iMON display.\n + @return This function will return one of DSPResult enumeration value.\n + If API can control iMON display, this call will return DSP_S_IN_PLUGIN_MODE. Otherwise DSP_S_NOT_IN_PLUGIN_MODE will be returned.*/ + IMONDSPAPI DSPResult IMON_Display_IsPluginModeEnabled(); + + + /**DSPResult IMON_Display_SetVfdText(LPCTSTR lpsz1stLine, LPCTSTR lpsz2ndLine) + @brief This function can be used when the caller application wants to display text data on VFD module.\n + @param [in] lpsz1stLine This string data will be displayed on the 1st line of VFD module.\n + It doesn't support multi-byte character and if string data is longer than 16 characters, it displays 16 characters from the first.\n + @param [in] lpsz2ndLine This string data will be displayed on the 2nd line of VFD module.\n + It doesn't support multi-byte character and if string data is longer than 16 characters, it displays 16 characters from the first.\n + @return This function will return one of DSPResult enumeration value.\n + DSP_SUCCEEDED will be returned if succeeded. DSP_E_POINTER, DSP_E_NOT_INITED or DSP_E_FAIL can be returned if failed.*/ + IMONDSPAPI DSPResult IMON_Display_SetVfdText(LPCTSTR lpsz1stLine, LPCTSTR lpsz2ndLine); + + /**DSPResult IMON_Display_SetVfdEqData(PDSPEQDATA pEqData) + @brief This function can be used when the caller application wants to display equalizer data on VFD module.\n + @param [in] pEqData Pointer of DSPEQDATA structure. The caller application should fill this structure with the equalizer data for 16 bands.\n + @return This function will return one of DSPResult enumeration value.\n + DSP_SUCCEEDED will be returned if succeeded. DSP_E_POINTER, DSP_E_NOT_INITED or DSP_E_FAIL can be returned if failed.*/ + IMONDSPAPI DSPResult IMON_Display_SetVfdEqData(PDSPEQDATA pEqData); + + + /**DSPResult IMON_Display_SetLcdText(LPCTSTR lpszText) + @brief This function can be used when the caller application wants to display text data on LCD module.\n + @param [in] lpszText This string data will be displayed on the LCD module.\n + It supports multi-byte character and if string data is longer than display area, it will start to scroll.\n + When text scrolling is finished, API will notify it with DSPNotifyCode enumeration value, DSPNM_LCD_TEXT_SCROLL_DONE.\n + @return This function will return one of DSPResult enumeration value.\n + DSP_SUCCEEDED will be returned if succeeded. DSP_E_POINTER, DSP_E_NOT_INITED or DSP_E_FAIL can be returned if failed.*/ + IMONDSPAPI DSPResult IMON_Display_SetLcdText(LPCTSTR lpszText); + + /**DSPResult IMON_Display_SetLcdEqData(PDSPEQDATA pEqDataL, PDSPEQDATA pEqDataR) + @brief This function can be used when the caller application wants to display equalizer data on LCD module.\n + @param [in] pEqDataL Pointer of DSPEQDATA structure. This parameter represents equalizer data of left channel.\n + The caller application should fill this structure with the equalizer data of left channel for 16 bands.\n + @param [in] pEqDataR Pointer of DSPEQDATA structure. This parameter represents equalizer data of right channel.\n + The caller application should fill this structure with the equalizer data of right channel for 16 bands.\n + @return This function will return one of DSPResult enumeration value.\n + DSP_SUCCEEDED will be returned if succeeded. DSP_E_POINTER, DSP_E_NOT_INITED or DSP_E_FAIL can be returned if failed.*/ + IMONDSPAPI DSPResult IMON_Display_SetLcdEqData(PDSPEQDATA pEqDataL, PDSPEQDATA pEqDataR); + + + /**DSPResult IMON_Display_SetLcdAllIcons(BOOL bOn) + @brief This function can be used when the caller application wants to turn on/off all icons on LCD module.\n + @param [in] bOn If this value is TRUE, iMON will turn on all icons. Otherwise, iMON will turn off all icons.\n + @return This function will return one of DSPResult enumeration value.\n + DSP_SUCCEEDED will be returned if succeeded. DSP_E_NOT_INITED or DSP_E_FAIL can be returned if failed.*/ + IMONDSPAPI DSPResult IMON_Display_SetLcdAllIcons(BOOL bOn); + + /**DSPResult IMON_Display_SetLcdOrangeIcon(BYTE btIconData1, BYTE btIconData2) + @brief This function can be used when the caller application wants to turn on/off orange shaped disk icons on the upper left part of LCD module.\n + Disk icons consist of 8 pieces of orange and orange peel.\n + @param [in] btIconData1 Each bit represents one of icons shaped the piece of orange.\n + MSB is used for the piece placed on top and the remaining bits are for the piece placed in CCW from top.\n + @param [in] btIconData2 MSB represents the orange peel shaped icon. Other bits are not used.\n + @return This function will return one of DSPResult enumeration value.\n + DSP_SUCCEEDED will be returned if succeeded. DSP_E_NOT_INITED or DSP_E_FAIL can be returned if failed.*/ + IMONDSPAPI DSPResult IMON_Display_SetLcdOrangeIcon(BYTE btIconData1, BYTE btIconData2); + + /**DSPResult IMON_Display_SetLcdMediaTypeIcon(BYTE btIconData) + @brief This function can be used when the caller application wants to turn on/off media type icons on the upper part of LCD module.\n + @param [in] btIconData Each bit represents one of media type icons. From MSB each bit represents MUSIC, MOVIE, PHOTO, CD/DVD, TV, WEBCASTING and NEWS/WEATHER icon.\n + @return This function will return one of DSPResult enumeration value.\n + DSP_SUCCEEDED will be returned if succeeded. DSP_E_NOT_INITED or DSP_E_FAIL can be returned if failed.*/ + IMONDSPAPI DSPResult IMON_Display_SetLcdMediaTypeIcon(BYTE btIconData); + + /**DSPResult IMON_Display_SetLcdSpeakerIcon(BYTE btIconData1, BYTE btIconData2) + @brief This function can be used when the caller application wants to turn on/off speaker icons on the upper right part of LCD module.\n + @param [in] btIconData1 Each bit represents one of speaker icons.\nFrom MSB each bit represents L, C, R, SL, LFE, SR, RL and SPDIF icon. + @param [in] btIconData2 MSB represents RR icon. Other bits are not used.\n + @return This function will return one of DSPResult enumeration value.\n + DSP_SUCCEEDED will be returned if succeeded. DSP_E_NOT_INITED or DSP_E_FAIL can be returned if failed.*/ + IMONDSPAPI DSPResult IMON_Display_SetLcdSpeakerIcon(BYTE btIconData1, BYTE btIconData2); + + /**DSPResult IMON_Display_SetLcdVideoCodecIcon(BYTE btIconData) + @brief This function can be used when the caller application wants to turn on/off codec icons for video file on the lower part of LCD module.\n + @param [in] btIconData Each bit represents one of video codec icons. From MSB each bit represents MPG, DIVX, XVID, WMV, MPG, AC3, DTS and WMA icon.\n + @return This function will return one of DSPResult enumeration value.\n + DSP_SUCCEEDED will be returned if succeeded. DSP_E_NOT_INITED or DSP_E_FAIL can be returned if failed.*/ + IMONDSPAPI DSPResult IMON_Display_SetLcdVideoCodecIcon(BYTE btIconData); + + /**DSPResult IMON_Display_SetLcdAudioCodecIcon(BYTE btIconData) + @brief This function can be used when the caller application wants to turn on/off codec icons for audio file on the lower part of LCD module.\n + @param [in] btIconData Each bit represents one of audio codec icons. From MSB each bit represents MP3, OGG, WMA and WAV icon.\n + @return This function will return one of DSPResult enumeration value.\n + DSP_SUCCEEDED will be returned if succeeded. DSP_E_NOT_INITED or DSP_E_FAIL can be returned if failed.*/ + IMONDSPAPI DSPResult IMON_Display_SetLcdAudioCodecIcon(BYTE btIconData); + + /**DSPResult IMON_Display_SetLcdAspectRatioIcon(BYTE btIconData) + @brief This function can be used when the caller application wants to turn on/off aspect ratio icons on the lower right part of LCD module.\n + @param [in] btIconData Each bit represents one of aspect ratio icons. From MSB each bit represents SRC, FIT, TV, HDTV, SCR1 and SCR2 icon.\n + @return This function will return one of DSPResult enumeration value.\n + DSP_SUCCEEDED will be returned if succeeded. DSP_E_NOT_INITED or DSP_E_FAIL can be returned if failed.*/ + IMONDSPAPI DSPResult IMON_Display_SetLcdAspectRatioIcon(BYTE btIconData); + + /**DSPResult IMON_Display_SetLcdEtcIcon(BYTE btIconData) + @brief This function can be used when the caller application wants to turn on/off icons on the lower left part of LCD module.\n + @param [in] btIconData Each bit represents icon. From MSB each bit represents REPEAT, SHUFFLE, ALARM, REC, VOL and TIME icon.\n + @return This function will return one of DSPResult enumeration value.\n + DSP_SUCCEEDED will be returned if succeeded. DSP_E_NOT_INITED or DSP_E_FAIL can be returned if failed.*/ + IMONDSPAPI DSPResult IMON_Display_SetLcdEtcIcon(BYTE btIconData); + + /**DSPResult IMON_Display_SetLcdProgress(int nCurPos, int nTotal) + @brief This function can be used when the caller application wants to display progress bar on the upper and lower left part of text area of LCD module.\n + @param [in] nCurPos It represents the current position of progress bar.\n + @param [in] nTotal It represents the total length of progress bar.\n + @return This function will return one of DSPResult enumeration value.\n + DSP_SUCCEEDED will be returned if succeeded. DSP_E_NOT_INITED or DSP_E_FAIL can be returned if failed.*/ + IMONDSPAPI DSPResult IMON_Display_SetLcdProgress(int nCurPos, int nTotal); + +#ifdef __cplusplus +} +#endif //__cplusplus + +#endif //__IMON_DISPLAY_API_H__ \ No newline at end of file diff --git a/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/iMONDisplayDefines.h b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/iMONDisplayDefines.h new file mode 100644 index 0000000..8555904 --- /dev/null +++ b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/iMONDisplayDefines.h @@ -0,0 +1,114 @@ +#ifndef __IMON_DISPLAY_API_DEFINES_H__ +#define __IMON_DISPLAY_API_DEFINES_H__ + +////////////////////////////////////////////////// +////////////////////////////////////////////////// +// Enumerations + +/**DSPResult +@brief These enumeration values represent the returned result for iMON Display API function calls.\n + All iMON Display API function calls return one of this result values.\n + For meaning of each result, refer the comment of each line below*/ +enum DSPResult +{ + DSP_SUCCEEDED = 0, //// Function Call Succeeded Without Error + DSP_E_FAIL, //// Unspecified Failure + DSP_E_OUTOFMEMORY, //// Failed to Allocate Necessary Memory + DSP_E_INVALIDARG, //// One or More Arguments Are Not Valid + DSP_E_NOT_INITED, //// API is Not Initialized + DSP_E_POINTER, //// Pointer is Not Valid + + DSP_S_INITED = 0x1000, //// API is Initialized + DSP_S_NOT_INITED, //// API is Not Initialized + DSP_S_IN_PLUGIN_MODE, //// API Can Control iMON Display (Display Plug-in Mode) + DSP_S_NOT_IN_PLUGIN_MODE, //// API Can't Control iMON Display +}; + + +/**DSPNInitResult +@brief These enumeration values represent the result status for requesting Display Plug-in Mode to iMON.\n + iMON Display API notifies one of this result values to the caller application after requesting Display Plug-in Mode to iMON.\n + For more information, refer the comment of each line below*/ +enum DSPNInitResult +{ + DSPN_SUCCEEDED = 0, //// Display Plug-in Mode is Initialized Successfully + DSPN_ERR_IN_USED = 0x0100, //// Display Plug-in is Already Used by Other Application + DSPN_ERR_HW_DISCONNECTED, //// iMON HW is Not Connected + DSPN_ERR_NOT_SUPPORTED_HW, //// The Connected iMON HW doesn't Support Display Plug-in + DSPN_ERR_PLUGIN_DISABLED, //// Display Plug-in Mode Option is Disabled + DSPN_ERR_IMON_NO_REPLY, //// The Latest iMON is Not Installed or iMON Not Running + DSPN_ERR_UNKNOWN = 0x0200, //// Unknown Failure +}; + + +/**DSPType +@brief These enumeration values represent display type.\n + Currently iMON Display API supports VFD and LCD products.*/ +enum DSPType +{ + DSPN_DSP_NONE = 0, + DSPN_DSP_VFD = 0x01, //// VFD products + DSPN_DSP_LCD = 0x02, //// LCD products +}; + + +/**DSPNotifyCode +@brief These enumeration values represent the notification codes.\n + iMON Display API will send or post message to the caller application.\n + The caller application should assign the message and the winodw handle to receivce message with IMON_Display_Init fucntion.\n + These enumeration values are used with WPARAM parameter of the message.\n + For more information, see the explanation of each notification code below*/ +enum DSPNotifyCode +{ + /**DSPNM_PLUGIN_SUCCEED + @brief When API succeeds to get the control for the display, API will post caller-specified message with DSPNM_PLUGIN_SUCCEED as WPARAM parameter.\n + LPARAM represents DSPType. This value can be 0x01 (VFD), 0x02 (LCD) or 0x03 (VFD+LCD).*/ + DSPNM_PLUGIN_SUCCEED = 0, + + /**DSPNM_PLUGIN_FAILED + @brief When API fails to get the control for the display, API will post caller-specified message with DSPNM_PLUGIN_FAILED as WPARAM parameter.\n + LPARAM represents error code with DSPNResult.*/ + DSPNM_PLUGIN_FAILED, + + /**DSPNM_IMON_RESTARTED + @brief When iMON starts, API will post caller-specified message with DSPNM_IMON_RESTARTED as WPARAM parameter.\n + LPARAM represents DSPType. This value can be 0 (No Display), 0x01 (VFD), 0x02 (LCD) or 0x03 (VFD+LCD).*/ + DSPNM_IMON_RESTARTED, + + /**DSPNM_IMON_CLOSED + @brief When iMON closed, API will post caller-specified message with DSPNM_IMON_CLOSED as WPARAM parameter.\n + LPARAM is not used.*/ + DSPNM_IMON_CLOSED, + + /**DSPNM_HW_CONNECTED + @brief When iMON HW newly connected, API will post caller-specified message with DSPNM_HW_CONNECTED as WPARAM parameter.\n + LPARAM represents DSPType. This value can be 0 (No Display), 0x01 (VFD), 0x02 (LCD) or 0x03 (VFD+LCD).*/ + DSPNM_HW_CONNECTED, + + /**DSPNM_HW_DISCONNECTED + @brief When iMON HW disconnected, API will post caller-specified message with DSPNM_HW_DISCONNECTED as WPARAM parameter.\n + LPARAM is DSPNResult value, DSPN_ERR_HW_DISCONNECTED.*/ + DSPNM_HW_DISCONNECTED, + + + /**DSPNM_LCD_TEXT_SCROLL_DONE + @brief When iMON LCD finishes scrolling Text, API will post caller-specified message with DSPNM_LCD_TEXT_SCROLL_DONE as WPARAM parameter.\n + The caller application may need to know when text scroll is finished, for sending next text.\n + LPARAM is not used.*/ + DSPNM_LCD_TEXT_SCROLL_DONE = 0x1000, +}; + +////////////////////////////////////////////////// +////////////////////////////////////////////////// +// Structure + +/**DspEqData +@brief This structure contains Equalizer data for 16 bands. +@param BandData It represents Equalizer data for 16 bands. Its range is from 0 to 100.*/ +typedef struct DspEqData +{ + int BandData[16]; + +} DSPEQDATA, *PDSPEQDATA; + +#endif //__IMON_DISPLAY_API_DEFINES_H__ \ No newline at end of file diff --git a/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/iMONDisplayWrapper.cpp b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/iMONDisplayWrapper.cpp new file mode 100644 index 0000000..3cee5aa --- /dev/null +++ b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/iMONDisplayWrapper.cpp @@ -0,0 +1,106 @@ +//------------------------------------------------------------------------------ +#include +#include "iMONDisplayWrapper.h" +#include "IdwApi.h" +//------------------------------------------------------------------------------ +IdwApi* pIdwApi = NULL; +//------------------------------------------------------------------------------ +BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) +{ + switch (fdwReason) + { + case DLL_PROCESS_ATTACH: + pIdwApi = new IdwApi(hinstDLL); + break; + case DLL_PROCESS_DETACH: + delete pIdwApi; + break; + } + return TRUE; +} +//------------------------------------------------------------------------------ +DSPResult IDW_Init(IDW_INITRESULT* pInitResult) +{ + return pIdwApi->Init(pInitResult); +} +//------------------------------------------------------------------------------ +DSPResult IDW_Uninit() +{ + return pIdwApi->Uninit(); +} +//------------------------------------------------------------------------------ +DSPResult IDW_IsInited() +{ + return pIdwApi->IsInited(); +} +//------------------------------------------------------------------------------ +DSPResult IDW_IsPluginModeEnabled() +{ + return pIdwApi->IsPluginModeEnabled(); +} +//------------------------------------------------------------------------------ +DSPResult IDW_SetVfdText(LPCWSTR lpszLine1, LPCWSTR lpszLine2) +{ + return pIdwApi->SetVfdText(lpszLine1, lpszLine2); +} +//------------------------------------------------------------------------------ +DSPResult IDW_SetVfdEqData(PDSPEQDATA pEqData) +{ + return pIdwApi->SetVfdEqData(pEqData); +} +//------------------------------------------------------------------------------ +DSPResult IDW_SetLcdText(LPCWSTR lpszLine1) +{ + return pIdwApi->SetLcdText(lpszLine1); +} +//------------------------------------------------------------------------------ +DSPResult IDW_SetLcdEqData(PDSPEQDATA pEqDataL, PDSPEQDATA pEqDataR) +{ + return pIdwApi->SetLcdEqData(pEqDataL, pEqDataR); +} +//------------------------------------------------------------------------------ +DSPResult IDW_SetLcdAllIcons(BOOL bOn) +{ + return pIdwApi->SetLcdAllIcons(bOn); +} +//------------------------------------------------------------------------------ +DSPResult IDW_SetLcdOrangeIcon(BYTE btIconData1, BYTE btIconData2) +{ + return pIdwApi->SetLcdOrangeIcon(btIconData1, btIconData2); +} +//------------------------------------------------------------------------------ +DSPResult IDW_SetLcdMediaTypeIcon(BYTE btIconData) +{ + return pIdwApi->SetLcdMediaTypeIcon(btIconData); +} +//------------------------------------------------------------------------------ +DSPResult IDW_SetLcdSpeakerIcon(BYTE btIconData1, BYTE btIconData2) +{ + return pIdwApi->SetLcdSpeakerIcon(btIconData1, btIconData2); +} +//------------------------------------------------------------------------------ +DSPResult IDW_SetLcdVideoCodecIcon(BYTE btIconData) +{ + return pIdwApi->SetLcdVideoCodecIcon(btIconData); +} +//------------------------------------------------------------------------------ +DSPResult IDW_SetLcdAudioCodecIcon(BYTE btIconData) +{ + return pIdwApi->SetLcdAudioCodecIcon(btIconData); +} +//------------------------------------------------------------------------------ +DSPResult IDW_SetLcdAspectRatioIcon(BYTE btIconData) +{ + return pIdwApi->SetLcdAspectRatioIcon(btIconData); +} +//------------------------------------------------------------------------------ +DSPResult IDW_SetLcdEtcIcon(BYTE btIconData) +{ + return pIdwApi->SetLcdEtcIcon(btIconData); +} +//------------------------------------------------------------------------------ +DSPResult IDW_SetLcdProgress(int nCurPos, int nTotal) +{ + return pIdwApi->SetLcdProgress(nCurPos, nTotal); +} +//------------------------------------------------------------------------------ \ No newline at end of file diff --git a/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/iMONDisplayWrapper.h b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/iMONDisplayWrapper.h new file mode 100644 index 0000000..568c493 --- /dev/null +++ b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/iMONDisplayWrapper.h @@ -0,0 +1,48 @@ +//------------------------------------------------------------------------------ +#ifndef IMONDISPLAYWRAPPER_H_INCLUDED +#define IMONDISPLAYWRAPPER_H_INCLUDED +//------------------------------------------------------------------------------ +#include "iMONDisplayDefines.h" +#include +//------------------------------------------------------------------------------ +#ifdef IMONDISPLAYWRAPPER_EXPORTS +#define IMONDSPWRAPPER __declspec(dllexport) +#else +#define IMONDSPWRAPPER __declspec(dllimport) +#endif +//------------------------------------------------------------------------------ +typedef struct _IDW_INITRESULT +{ + DSPNInitResult initResult; + DSPType dspType; +} IDW_INITRESULT; +//------------------------------------------------------------------------------ +#ifdef __cplusplus +extern "C" +{ +#endif +//------------------------------------------------------------------------------ +IMONDSPWRAPPER DSPResult IDW_Init(IDW_INITRESULT* pInitResult); +IMONDSPWRAPPER DSPResult IDW_Uninit(); +IMONDSPWRAPPER DSPResult IDW_IsInited(); +IMONDSPWRAPPER DSPResult IDW_IsPluginModeEnabled(); +IMONDSPWRAPPER DSPResult IDW_SetVfdText(LPCWSTR lpszLine1, LPCWSTR lpszLine2); +IMONDSPWRAPPER DSPResult IDW_SetVfdEqData(PDSPEQDATA pEqData); +IMONDSPWRAPPER DSPResult IDW_SetLcdText(LPCWSTR lpszLine1); +IMONDSPWRAPPER DSPResult IDW_SetLcdEqData(PDSPEQDATA pEqDataL, PDSPEQDATA pEqDataR); +IMONDSPWRAPPER DSPResult IDW_SetLcdAllIcons(BOOL bOn); +IMONDSPWRAPPER DSPResult IDW_SetLcdOrangeIcon(BYTE btIconData1, BYTE btIconData2); +IMONDSPWRAPPER DSPResult IDW_SetLcdMediaTypeIcon(BYTE btIconData); +IMONDSPWRAPPER DSPResult IDW_SetLcdSpeakerIcon(BYTE btIconData1, BYTE btIconData2); +IMONDSPWRAPPER DSPResult IDW_SetLcdVideoCodecIcon(BYTE btIconData); +IMONDSPWRAPPER DSPResult IDW_SetLcdAudioCodecIcon(BYTE btIconData); +IMONDSPWRAPPER DSPResult IDW_SetLcdAspectRatioIcon(BYTE btIconData); +IMONDSPWRAPPER DSPResult IDW_SetLcdEtcIcon(BYTE btIconData); +IMONDSPWRAPPER DSPResult IDW_SetLcdProgress(int nCurPos, int nTotal); +//------------------------------------------------------------------------------ +#ifdef __cplusplus +} +#endif +//------------------------------------------------------------------------------ +#endif +//------------------------------------------------------------------------------ diff --git a/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/iMONDisplayWrapper.rc b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/iMONDisplayWrapper.rc new file mode 100644 index 0000000..467caf1 --- /dev/null +++ b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/iMONDisplayWrapper.rc @@ -0,0 +1,103 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// German (Germany) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU) +#ifdef _WIN32 +LANGUAGE LANG_GERMAN, SUBLANG_GERMAN +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 0,2,3,1 + PRODUCTVERSION 0,2,3,1 + FILEFLAGSMASK 0x17L +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000004b0" + BEGIN + VALUE "Comments", "Use with iMON Manager 8.01.0419 or later" + VALUE "CompanyName", "Team MediaPortal" + VALUE "FileDescription", "iMONDisplayAPI Wrapper" + VALUE "FileVersion", "0, 2, 3, 1" + VALUE "InternalName", "iMONDisp" + VALUE "LegalCopyright", "Copyright (C) 2011 Team MediaPortal" + VALUE "OriginalFilename", "iMONDisplayWrapper.dll" + VALUE "ProductName", "iMONDisplayAPI Wrapper" + VALUE "ProductVersion", "0, 2, 3, 1" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0, 1200 + END +END + +#endif // German (Germany) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/iMONDisplayWrapper.vcproj b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/iMONDisplayWrapper.vcproj new file mode 100644 index 0000000..9663112 --- /dev/null +++ b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/iMONDisplayWrapper.vcproj @@ -0,0 +1,255 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/iMONDisplayWrapper.vcxproj b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/iMONDisplayWrapper.vcxproj new file mode 100644 index 0000000..6d57fb4 --- /dev/null +++ b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/iMONDisplayWrapper.vcxproj @@ -0,0 +1,118 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {E1A2655B-02A2-437A-8270-4AD81DDDC502} + iMONDisplayWrapper + Win32Proj + + + + DynamicLibrary + Unicode + true + + + DynamicLibrary + Unicode + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)\MiniDisplayLibrary\bin\$(Configuration)\ + $(SolutionDir)\MiniDisplayLibrary\obj\$(PlatformShortName)$(Configuration)\ + true + $(SolutionDir)\MiniDisplayLibrary\bin\$(Configuration)\ + $(SolutionDir)\MiniDisplayLibrary\obj\$(PlatformShortName)\$(Configuration) + false + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;IMONDISPLAYWRAPPER_EXPORTS;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + EditAndContinue + + + iMONDisplay.lib;%(AdditionalDependencies) + true + Windows + MachineX86 + + + + + MaxSpeed + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;IMONDISPLAYWRAPPER_EXPORTS;%(PreprocessorDefinitions) + MultiThreaded + true + + + Level3 + ProgramDatabase + + + iMONDisplay.lib;%(AdditionalDependencies) + true + Windows + true + true + MachineX86 + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/iMONDisplayWrapper.vcxproj.filters b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/iMONDisplayWrapper.vcxproj.filters new file mode 100644 index 0000000..d1119f9 --- /dev/null +++ b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/iMONDisplayWrapper.vcxproj.filters @@ -0,0 +1,71 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Resource Files + + + \ No newline at end of file diff --git a/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/resource.h b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/resource.h new file mode 100644 index 0000000..43a625f --- /dev/null +++ b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Drivers/iMONDisplayWrapper/resource.h @@ -0,0 +1,14 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by iMONDisplayWrapper.rc + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Settings.cs b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Settings.cs index 464ef96..72e541d 100644 --- a/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Settings.cs +++ b/mediaportal/MiniDisplayLibrary/MiniDisplayPlugin/Settings.cs @@ -319,6 +319,16 @@ namespace MediaPortal.ProcessPlugins.MiniDisplayPlugin list.Add(new ShuttlePF27()); if (this.ExtensiveLogging) { + Log.Info("MiniDisplay.Settings.LoadDrivers(): Loading iMON VFD..."); + } + list.Add(new ImonVfd()); + if (this.ExtensiveLogging) + { + Log.Info("MiniDisplay.Settings.LoadDrivers(): Loading iMON LCD..."); + } + list.Add(new ImonLcd()); + if (this.ExtensiveLogging) + { Log.Info("MiniDisplay.Settings.LoadDrivers(): Loading Debug Display..."); } list.Add(new DebugForm()); diff --git a/mediaportal/Setup/setup.nsi b/mediaportal/Setup/setup.nsi index f29aad2..0e7f74e 100644 --- a/mediaportal/Setup/setup.nsi +++ b/mediaportal/Setup/setup.nsi @@ -443,6 +443,8 @@ Section "MediaPortal core files (required)" SecCore File "${git_DirectShowFilters}\mpc-hc_subs\bin\${BUILD_TYPE}\mpcSubs.dll" File "${git_DirectShowFilters}\DXErr9\bin\${BUILD_TYPE}\Dxerr9.dll" File "${git_MP}\MiniDisplayLibrary\bin\${BUILD_TYPE}\MiniDisplayLibrary.dll" + File "${git_MP}\MiniDisplayLibrary\bin\${BUILD_TYPE}\iMONDisplayWrapper.dll" + File "${git_MP}\MiniDisplayLibrary\bin\${BUILD_TYPE}\MiniDisplayPlugin\API\Soundgraph\iMONDisplay.dll" ; Utils File "${git_MP}\Utils\bin\${BUILD_TYPE}\Utils.dll" ; Common Utils