Enhance WASAPI thread affinity and logging functionality

- Implemented validation in `SetWasapiThreadAffinityMask_X` to manage thread affinity masks.
- Added `FormatString` method in `Logger.h` for printf-style logging.
- Refactored `SetWindow` in `FrameworkViewWrapper.cpp` to use `ComPtr` and improved exception handling in `Run`.
- Included logging in `NetworkInformationWrapperX` for `QueryInterface`.
- Updated `mfplat.def` for clearer export definitions.
- Enhanced event handling in `Windows.Xbox.System.User` for sign-in and sign-out events.
This commit is contained in:
Serenity
2025-07-12 12:06:05 -04:00
parent e814593291
commit deb9ce74a5
8 changed files with 222 additions and 164 deletions
+14 -1
View File
@@ -65,6 +65,19 @@ MMDEVAPI_EXPORT_ORDINAL(DllUnregisterServer, 38)
void DisableBitstreamOut_X( ) {}
HRESULT EnableSpatialAudio_X( ) { return S_OK; }
void RestoreBitstreamOut_X( ) {}
DWORD_PTR SetWasapiThreadAffinityMask_X(DWORD_PTR dwThreadAffinityMask) { return 0; }
DWORD_PTR __stdcall SetWasapiThreadAffinityMask_X(DWORD_PTR dwThreadAffinityMask)
{
// Make sure the requested mask is valid for this process.
DWORD_PTR processMask = 0, systemMask = 0;
if (!GetProcessAffinityMask(GetCurrentProcess( ), &processMask, &systemMask))
return 0; // unexpected failure
if ((dwThreadAffinityMask & processMask) == 0)
dwThreadAffinityMask &= processMask;
// Apply and return the previous affinity mask (0 on failure).
return SetThreadAffinityMask(GetCurrentThread( ), dwThreadAffinityMask);
}
void RefreshWasapiDeviceList_X() {}
-1
View File
@@ -424,7 +424,6 @@ LSTATUS __fastcall XblRegReadValue_X(HKEY hKey, LPCWSTR valueName, int expectedT
}
__int64 __fastcall XblRegReadModuleTitleInfo_X(HINSTANCE a1, const unsigned __int16* a2, void* a3, unsigned int a4)
{
LOG_DEBUG("XblRegReadModuleTitleInfo_X called with a1: %p, a2: %s, a3: %p, a4: %u", a1, a2 ? a2 : L"nullptr", a3, a4);
unsigned int result;
HKEY hKey = nullptr;
int useSystemTitleId = 0;
+31 -10
View File
@@ -70,6 +70,12 @@ private:
}
static inline std::ofstream logFile{ GenerateLogFileName( ), std::ios::app };
static inline std::string FormatString(const char* fmt, va_list args) {
char buffer[ 1024 ];
vsnprintf(buffer, sizeof(buffer), fmt, args);
return std::string(buffer);
}
static const char* ToString(LogLevel level) {
switch (level) {
case LogLevel::Debug: return "DEBUG";
@@ -110,7 +116,7 @@ private:
static void PrintWithContext(int line, const char* file, const char* function, const char* fmt, va_list args) {
char formatted[ 1024 ];
vsnprintf(formatted, sizeof(formatted), fmt, args);
Log(LogLevel::NotImplemented, formatted, file, line, function);
Logf(LogLevel::NotImplemented, formatted, file, line, function);
}
public:
static void NotImplemented(const char* file, int line, const char* function, const char* fmt = "", ...) {
@@ -119,11 +125,17 @@ public:
PrintWithContext(line, file, function, fmt, args);
va_end(args);
}
static void Log(LogLevel level, const char* file, int line, const char* function, const char* fmt, ...) {
va_list args;
va_start(args, fmt);
std::string message = FormatString(fmt, args);
va_end(args);
Logf(level, message, file, line, function);
}
// -------------------------------
// Narrow logging (std::string)
// -------------------------------
static void Log(LogLevel level, const std::string& message, const char* file, int line, const char* function) {
static void Logf(LogLevel level, const std::string& message, const char* file, int line, const char* function) {
std::lock_guard<std::mutex> lock(logMutex);
std::string timeStr = CurrentTime( );
std::string func = ExtractFunctionName(function);
@@ -303,11 +315,11 @@ public:
// ------------------------------------------------------------------------------------------------
// Macro-based log wrappers (captures callsite info)
// ------------------------------------------------------------------------------------------------
#define LOG_DEBUG(msg) Logger::Log(LogLevel::Debug, msg, __FILE__, __LINE__, FUNCTION_NAME)
#define LOG_INFO(msg) Logger::Log(LogLevel::Info, msg, __FILE__, __LINE__, FUNCTION_NAME)
#define LOG_WARNING(msg) Logger::Log(LogLevel::Warning, msg, __FILE__, __LINE__, FUNCTION_NAME)
#define LOG_ERROR(msg) Logger::Log(LogLevel::Error, msg, __FILE__, __LINE__, FUNCTION_NAME)
#define LOG_FATAL(msg) Logger::Log(LogLevel::Fatal, msg, __FILE__, __LINE__, FUNCTION_NAME)
#define LOG_DEBUG(fmt, ...) Logger::Log(LogLevel::Debug, __FILE__, __LINE__, FUNCTION_NAME, fmt, ##__VA_ARGS__)
#define LOG_INFO(fmt, ...) Logger::Log(LogLevel::Info, __FILE__, __LINE__, FUNCTION_NAME, fmt, ##__VA_ARGS__)
#define LOG_WARNING(fmt, ...) Logger::Log(LogLevel::Warning, __FILE__, __LINE__, FUNCTION_NAME, fmt, ##__VA_ARGS__)
#define LOG_ERROR(fmt, ...) Logger::Log(LogLevel::Error, __FILE__, __LINE__, FUNCTION_NAME, fmt, ##__VA_ARGS__)
#define LOG_FATAL(fmt, ...) Logger::Log(LogLevel::Fatal, __FILE__, __LINE__, FUNCTION_NAME, fmt, ##__VA_ARGS__)
#define LOG_NOT_IMPLEMENTED(...) Logger::NotImplemented(__FILE__, __LINE__, FUNCTION_NAME, ##__VA_ARGS__)
// ------------------------------------------------------------------------------------------------
@@ -319,12 +331,21 @@ public:
#define LOG_ERROR_W(msg) Logger::Log(LogLevel::Error, msg, _CRT_WIDE(__FILE__), __LINE__, _CRT_WIDE(FUNCTION_NAME))
#define LOG_FATAL_W(msg) Logger::Log(LogLevel::Fatal, msg, _CRT_WIDE(__FILE__), __LINE__, _CRT_WIDE(FUNCTION_NAME))
#define LOG_NOT_IMPLEMENTED_W(...) Logger::NotImplementedW(_CRT_WIDE(__FILE__), __LINE__, _CRT_WIDE(FUNCTION_NAME), ##__VA_ARGS__)
// ------------------------------------------------------------------------------------------------
// printf-style logging macros (captures callsite info)
// ------------------------------------------------------------------------------------------------
#define LOGF_DEBUG(fmt, ...) Logger::Log(LogLevel::Debug, __FILE__, __LINE__, FUNCTION_NAME, fmt, ##__VA_ARGS__)
#define LOGF_INFO(fmt, ...) Logger::Log(LogLevel::Info, __FILE__, __LINE__, FUNCTION_NAME, fmt, ##__VA_ARGS__)
#define LOGF_WARNING(fmt, ...) Logger::Log(LogLevel::Warning, __FILE__, __LINE__, FUNCTION_NAME, fmt, ##__VA_ARGS__)
#define LOGF_ERROR(fmt, ...) Logger::Log(LogLevel::Error, __FILE__, __LINE__, FUNCTION_NAME, fmt, ##__VA_ARGS__)
#define LOGF_FATAL(fmt, ...) Logger::Log(LogLevel::Fatal, __FILE__, __LINE__, FUNCTION_NAME, fmt, ##__VA_ARGS__)
// ------------------------------------------------------------------------------------------------
// Debug-only short macros (auto-disables in Release)
// ------------------------------------------------------------------------------------------------
#ifdef _DEBUG
#define DEBUG_PRINT() Logger::Debug()
#define DEBUGPRINT(fmt, ...) Logger::Debug(fmt, ##__VA_ARGS__)
#define DEBUG_PRINT() printf("Line: %d --> %s --> %s \r\n", __LINE__,ExtractProjectName(__FILE__) ,ExtractFunctionName(FUNCTION_NAME) )
#define DEBUGPRINT(fmt, ...) printf("Line: %d --> %s --> %s " fmt "\r\n", __LINE__ , ExtractProjectName(__FILE__), __FUNCTION__ , ##__VA_ARGS__)
#else
#define DEBUG_PRINT()
#define DEBUGPRINT(fmt, ...)
+29 -7
View File
@@ -9,23 +9,45 @@ HRESULT __stdcall FrameworkViewWrapper::Initialize(ABI::Windows::ApplicationMode
return m_realView->Initialize(applicationView);
}
HRESULT __stdcall FrameworkViewWrapper::SetWindow(ABI::Windows::UI::Core::ICoreWindow* window)
HRESULT STDMETHODCALLTYPE FrameworkViewWrapper::SetWindow(ABI::Windows::UI::Core::ICoreWindow* window)
{
// Finally Wraps the coreWindow with xbox CoreWindow
window = reinterpret_cast<ICoreWindow*>(new CoreWindowWrapperX((CoreWindow*)window));
return m_realView->SetWindow(window);
Microsoft::WRL::ComPtr<ABI::Windows::UI::Core::ICoreWindow> original(window);
Microsoft::WRL::ComPtr<ABI::Windows::UI::Core::ICoreWindow> wrapped;
// Create the wrapper using MakeAndInitialize
HRESULT hr = Microsoft::WRL::MakeAndInitialize<CoreWindowWrapperX>(&wrapped, original);
if (FAILED(hr))
{
return hr;
}
// Forward to the real view with the wrapped ICoreWindow
return m_realView->SetWindow(wrapped.Get());
}
HRESULT __stdcall FrameworkViewWrapper::Load(HSTRING entryPoint)
{
return m_realView->Load(entryPoint);
}
HRESULT __stdcall FrameworkViewWrapper::Run(void)
{
return m_realView->Run();
#include <winrt/Windows.Foundation.h> // Include necessary namespace for Platform::COMException
HRESULT __stdcall FrameworkViewWrapper::Run()
{
try
{
wprintf(L"Entering Run()\n");
return m_realView->Run();
}
catch (winrt::hresult_error const& ex) // Replace Platform::COMException with winrt::hresult_error
{
wprintf(L"COMException caught in Run: HRESULT=0x%08X\n", ex.code());
throw; // Re-throw for debugger, or return E_FAIL
}
}
HRESULT __stdcall FrameworkViewWrapper::Uninitialize(void)
{
return m_realView->Uninitialize();
@@ -1,5 +1,6 @@
#include "pch.h"
#include "NetworkInformationWrapperX.h"
#include "../common/Logger.h"
NetworkInformationWrapperX::NetworkInformationWrapperX(INetworkInformationStatics* realNetworkInfo)
: m_realNetworkInfo(realNetworkInfo)
@@ -11,6 +12,7 @@ NetworkInformationWrapperX::NetworkInformationWrapperX(INetworkInformationStatic
HRESULT __stdcall NetworkInformationWrapperX::QueryInterface(REFIID riid, void** ppvObject)
{
LOG_DEBUG("[NetworkInformationWrapperX] QueryInterface called");
LPOLESTR str = nullptr;
StringFromIID(riid, &str);
//wprintf(L"[NetworkInformationWrapperX] QueryInterface called for IID: %ls\n", str);
+140 -140
View File
@@ -1,142 +1,142 @@
LIBRARY mfplat
EXPORTS
CopyPropVariant=fCopyPropVariant @1
CreatePropVariant=fCreatePropVariant @2
CreatePropertyStore=fCreatePropertyStore @3
DestroyPropVariant=fDestroyPropVariant @4
GetAMSubtypeFromD3DFormat=fGetAMSubtypeFromD3DFormat @5
GetD3DFormatFromMFSubtype=fGetD3DFormatFromMFSubtype @6
LFGetGlobalPool=fLFGetGlobalPool @7
MFAddPeriodicCallback=fMFAddPeriodicCallback @8
MFAllocateSerialWorkQueue=fMFAllocateSerialWorkQueue @9
MFAllocateWorkQueue=fMFAllocateWorkQueue @10
MFAllocateWorkQueueEx=fMFAllocateWorkQueueEx @11
MFAppendCollection=fMFAppendCollection @12
MFAverageTimePerFrameToFrameRate=fMFAverageTimePerFrameToFrameRate @13
MFBeginCreateFile=fMFBeginCreateFile @14
MFBlockThread=fMFBlockThread @15
MFCalculateBitmapImageSize=fMFCalculateBitmapImageSize @16
MFCalculateImageSize=fMFCalculateImageSize @17
MFCancelCreateFile=fMFCancelCreateFile @18
MFCancelWorkItem=fMFCancelWorkItem @19
MFConvertColorInfoFromDXVA=fMFConvertColorInfoFromDXVA @20
MFConvertColorInfoToDXVA=fMFConvertColorInfoToDXVA @21
MFConvertFromFP16Array=fMFConvertFromFP16Array @22
MFConvertToFP16Array=fMFConvertToFP16Array @23
MFCopyImage=fMFCopyImage @24
MFCreate2DMediaBuffer=fMFCreate2DMediaBuffer @25
MFCreateAMMediaTypeFromMFMediaType=fMFCreateAMMediaTypeFromMFMediaType @26
MFCreateAlignedMemoryBuffer=fMFCreateAlignedMemoryBuffer @27
MFCreateAsyncResult=fMFCreateAsyncResult @28
MFCreateAttributes=fMFCreateAttributes @29
MFCreateAudioMediaType=fMFCreateAudioMediaType @30
MFCreateCollection=fMFCreateCollection @31
MFCreateDXGIDeviceManager=fMFCreateDXGIDeviceManager @32
MFCreateDXGISurfaceBufferX=fMFCreateDXGISurfaceBufferX @33
MFCreateDxvaSampleRendererX=fMFCreateDxvaSampleRendererX @34
MFCreateEventQueue=fMFCreateEventQueue @35
MFCreateFile=fMFCreateFile @36
MFCreateFileFromHandle=fMFCreateFileFromHandle @37
MFCreateLegacyMediaBufferOnMFMediaBuffer=fMFCreateLegacyMediaBufferOnMFMediaBuffer @38
MFCreateMFByteStreamOnStream=fMFCreateMFByteStreamOnStream @39
MFCreateMFVideoFormatFromMFMediaType=fMFCreateMFVideoFormatFromMFMediaType @40
MFCreateMediaBufferFromMediaType=fMFCreateMediaBufferFromMediaType @41
MFCreateMediaBufferWrapper=fMFCreateMediaBufferWrapper @42
MFCreateMediaEvent=fMFCreateMediaEvent @43
MFCreateMediaEventResult=fMFCreateMediaEventResult @44
MFCreateMediaType=fMFCreateMediaType @45
MFCreateMediaTypeFromRepresentation=fMFCreateMediaTypeFromRepresentation @46
MFCreateMemoryBuffer=fMFCreateMemoryBuffer @47
MFCreateMemoryStream=fMFCreateMemoryStream @48
MFCreateNV12ToRGB32ConverterX=fMFCreateNV12ToRGB32ConverterX @49
MFCreatePathFromURL=fMFCreatePathFromURL @50
MFCreatePresentationDescriptor=fMFCreatePresentationDescriptor @51
MFCreateRGB32ToNV12ConverterX=fMFCreateRGB32ToNV12ConverterX @52
MFCreateSample=fMFCreateSample @53
MFCreateSourceResolver=fMFCreateSourceResolver @54
MFCreateSourceResolverInternal=fMFCreateSourceResolverInternal @55
MFCreateStreamDescriptor=fMFCreateStreamDescriptor @56
MFCreateSystemTimeSource=fMFCreateSystemTimeSource @57
MFCreateTempFile=fMFCreateTempFile @58
MFCreateTrackedSample=fMFCreateTrackedSample @59
MFCreateURLFromPath=fMFCreateURLFromPath @60
MFCreateVideoMediaType=fMFCreateVideoMediaType @61
MFCreateVideoMediaTypeFromBitMapInfoHeader=fMFCreateVideoMediaTypeFromBitMapInfoHeader @62
MFCreateVideoMediaTypeFromBitMapInfoHeaderEx=fMFCreateVideoMediaTypeFromBitMapInfoHeaderEx @63
MFCreateVideoMediaTypeFromSubtype=fMFCreateVideoMediaTypeFromSubtype @64
MFCreateVideoMediaTypeFromVideoInfoHeader=fMFCreateVideoMediaTypeFromVideoInfoHeader @65
MFCreateVideoMediaTypeFromVideoInfoHeader2=fMFCreateVideoMediaTypeFromVideoInfoHeader2 @66
MFCreateVideoSampleAllocatorEx=fMFCreateVideoSampleAllocatorEx @67
MFCreateWaveFormatExFromMFMediaType=fMFCreateWaveFormatExFromMFMediaType @68
MFDeserializeAttributesFromStream=fMFDeserializeAttributesFromStream @69
MFDeserializeEvent=fMFDeserializeEvent @70
MFDeserializeMediaTypeFromStream=fMFDeserializeMediaTypeFromStream @71
MFDeserializePresentationDescriptor=fMFDeserializePresentationDescriptor @72
MFEndCreateFile=fMFEndCreateFile @73
MFFrameRateToAverageTimePerFrame=fMFFrameRateToAverageTimePerFrame @74
MFGetAttributesAsBlob=fMFGetAttributesAsBlob @75
MFGetAttributesAsBlobSize=fMFGetAttributesAsBlobSize @76
MFGetConfigurationDWORD=fMFGetConfigurationDWORD @77
MFGetConfigurationPolicy=fMFGetConfigurationPolicy @78
MFGetConfigurationStore=fMFGetConfigurationStore @79
MFGetConfigurationString=fMFGetConfigurationString @80
MFGetPlaneSize=fMFGetPlaneSize @81
MFGetPlatform=fMFGetPlatform @82
MFGetPrivateWorkqueues=fMFGetPrivateWorkqueues @83
MFGetStrideForBitmapInfoHeader=fMFGetStrideForBitmapInfoHeader @84
MFGetSupportedMimeTypes=fMFGetSupportedMimeTypes @85
MFGetSupportedSchemes=fMFGetSupportedSchemes @86
MFGetSystemTime=fMFGetSystemTime @87
MFGetTimerPeriodicity=fMFGetTimerPeriodicity @88
MFGetUncompressedVideoFormat=fMFGetUncompressedVideoFormat @89
MFGetWorkQueueMMCSSTaskId=fMFGetWorkQueueMMCSSTaskId @90
MFHeapAlloc=fMFHeapAlloc @91
MFHeapFree=fMFHeapFree @92
MFInitAMMediaTypeFromMFMediaType=fMFInitAMMediaTypeFromMFMediaType @93
MFInitAttributesFromBlob=fMFInitAttributesFromBlob @94
MFInitMediaTypeFromAMMediaType=fMFInitMediaTypeFromAMMediaType @95
MFInitMediaTypeFromMFVideoFormat=fMFInitMediaTypeFromMFVideoFormat @96
MFInitMediaTypeFromVideoInfoHeader=fMFInitMediaTypeFromVideoInfoHeader @97
MFInitMediaTypeFromVideoInfoHeader2=fMFInitMediaTypeFromVideoInfoHeader2 @98
MFInitMediaTypeFromWaveFormatEx=fMFInitMediaTypeFromWaveFormatEx @99
MFInitVideoFormat=fMFInitVideoFormat @100
MFInitVideoFormat_RGB=fMFInitVideoFormat_RGB @101
MFInvokeCallback=fMFInvokeCallback @102
MFJoinIoPort=fMFJoinIoPort @103
MFJoinWorkQueue=fMFJoinWorkQueue @104
MFLockDXGIDeviceManager=fMFLockDXGIDeviceManager @105
MFLockPlatform=fMFLockPlatform @106
MFLockSharedWorkQueue=fMFLockSharedWorkQueue @107
MFLockWorkQueue=fMFLockWorkQueue @108
MFMapDX9FormatToDXGIFormat=fMFMapDX9FormatToDXGIFormat @109
MFMapDXGIFormatToDX9Format=fMFMapDXGIFormatToDX9Format @110
MFPutWaitingWorkItem=fMFPutWaitingWorkItem @111
MFPutWorkItem=fMFPutWorkItem @112
MFPutWorkItem2=fMFPutWorkItem2 @113
MFPutWorkItemEx=fMFPutWorkItemEx @114
MFPutWorkItemEx2=fMFPutWorkItemEx2 @115
MFRemovePeriodicCallback=fMFRemovePeriodicCallback @116
MFResetDXGIDeviceManagerX= MFResetDXGIDeviceManager_X @117
MFScheduleWorkItem=fMFScheduleWorkItem @118
MFScheduleWorkItemEx=fMFScheduleWorkItemEx @119
MFSerializeAttributesToStream=fMFSerializeAttributesToStream @120
MFSerializeEvent=fMFSerializeEvent @121
MFSerializeMediaTypeToStream=fMFSerializeMediaTypeToStream @122
MFSerializePresentationDescriptor=fMFSerializePresentationDescriptor @123
MFShutdown=fMFShutdown @124
MFStartup=fMFStartup @125
MFTEnumEx=fMFTEnumEx @126
MFTraceError=fMFTraceError @127
MFTraceFuncEnter=fMFTraceFuncEnter @128
MFUnblockThread=fMFUnblockThread @129
MFUnjoinWorkQueue=fMFUnjoinWorkQueue @130
MFUnlockDXGIDeviceManager=fMFUnlockDXGIDeviceManager @131
MFUnlockPlatform=fMFUnlockPlatform @132
MFUnlockWorkQueue=fMFUnlockWorkQueue @133
MFUnwrapMediaType=fMFUnwrapMediaType @134
MFValidateMediaTypeSize=fMFValidateMediaTypeSize @135
MFWrapMediaType=fMFWrapMediaType @136
MFllMulDiv=fMFllMulDiv @137
PropVariantFromStream=fPropVariantFromStream @138
PropVariantToStream=fPropVariantToStream @139
ValidateWaveFormat=fValidateWaveFormat @140
CopyPropVariant = fCopyPropVariant @1
CreatePropVariant = fCreatePropVariant @2
CreatePropertyStore = fCreatePropertyStore @3
DestroyPropVariant = fDestroyPropVariant @4
GetAMSubtypeFromD3DFormat = fGetAMSubtypeFromD3DFormat @5
GetD3DFormatFromMFSubtype = fGetD3DFormatFromMFSubtype @6
LFGetGlobalPool = fLFGetGlobalPool @7
MFAddPeriodicCallback = fMFAddPeriodicCallback @8
MFAllocateSerialWorkQueue = fMFAllocateSerialWorkQueue @9
MFAllocateWorkQueue = fMFAllocateWorkQueue @10
MFAllocateWorkQueueEx = fMFAllocateWorkQueueEx @11
MFAppendCollection = fMFAppendCollection @12
MFAverageTimePerFrameToFrameRate = fMFAverageTimePerFrameToFrameRate @13
MFBeginCreateFile = fMFBeginCreateFile @14
MFBlockThread = fMFBlockThread @15
MFCalculateBitmapImageSize = fMFCalculateBitmapImageSize @16
MFCalculateImageSize = fMFCalculateImageSize @17
MFCancelCreateFile = fMFCancelCreateFile @18
MFCancelWorkItem = fMFCancelWorkItem @19
MFConvertColorInfoFromDXVA = fMFConvertColorInfoFromDXVA @20
MFConvertColorInfoToDXVA = fMFConvertColorInfoToDXVA @21
MFConvertFromFP16Array = fMFConvertFromFP16Array @22
MFConvertToFP16Array = fMFConvertToFP16Array @23
MFCopyImage = fMFCopyImage @24
MFCreate2DMediaBuffer = fMFCreate2DMediaBuffer @25
MFCreateAMMediaTypeFromMFMediaType = fMFCreateAMMediaTypeFromMFMediaType @26
MFCreateAlignedMemoryBuffer = fMFCreateAlignedMemoryBuffer @27
MFCreateAsyncResult = fMFCreateAsyncResult @28
MFCreateAttributes = fMFCreateAttributes @29
MFCreateAudioMediaType = fMFCreateAudioMediaType @30
MFCreateCollection = fMFCreateCollection @31
MFCreateDXGIDeviceManager = fMFCreateDXGIDeviceManager @32
MFCreateDXGISurfaceBufferX = fMFCreateDXGISurfaceBufferX @33
MFCreateDxvaSampleRendererX = fMFCreateDxvaSampleRendererX @34
MFCreateEventQueue = fMFCreateEventQueue @35
MFCreateFile = fMFCreateFile @36
MFCreateFileFromHandle = fMFCreateFileFromHandle @37
MFCreateLegacyMediaBufferOnMFMediaBuffer = fMFCreateLegacyMediaBufferOnMFMediaBuffer @38
MFCreateMFByteStreamOnStream = fMFCreateMFByteStreamOnStream @39
MFCreateMFVideoFormatFromMFMediaType = fMFCreateMFVideoFormatFromMFMediaType @40
MFCreateMediaBufferFromMediaType = fMFCreateMediaBufferFromMediaType @41
MFCreateMediaBufferWrapper = fMFCreateMediaBufferWrapper @42
MFCreateMediaEvent = fMFCreateMediaEvent @43
MFCreateMediaEventResult = fMFCreateMediaEventResult @44
MFCreateMediaType = fMFCreateMediaType @45
MFCreateMediaTypeFromRepresentation = fMFCreateMediaTypeFromRepresentation @46
MFCreateMemoryBuffer = fMFCreateMemoryBuffer @47
MFCreateMemoryStream = fMFCreateMemoryStream @48
MFCreateNV12ToRGB32ConverterX = fMFCreateNV12ToRGB32ConverterX @49
MFCreatePathFromURL = fMFCreatePathFromURL @50
MFCreatePresentationDescriptor = fMFCreatePresentationDescriptor @51
MFCreateRGB32ToNV12ConverterX = fMFCreateRGB32ToNV12ConverterX @52
MFCreateSample = fMFCreateSample @53
MFCreateSourceResolver = fMFCreateSourceResolver @54
MFCreateSourceResolverInternal = fMFCreateSourceResolverInternal @55
MFCreateStreamDescriptor = fMFCreateStreamDescriptor @56
MFCreateSystemTimeSource = fMFCreateSystemTimeSource @57
MFCreateTempFile = fMFCreateTempFile @58
MFCreateTrackedSample = fMFCreateTrackedSample @59
MFCreateURLFromPath = fMFCreateURLFromPath @60
MFCreateVideoMediaType = fMFCreateVideoMediaType @61
MFCreateVideoMediaTypeFromBitMapInfoHeader = fMFCreateVideoMediaTypeFromBitMapInfoHeader @62
MFCreateVideoMediaTypeFromBitMapInfoHeaderEx = fMFCreateVideoMediaTypeFromBitMapInfoHeaderEx @63
MFCreateVideoMediaTypeFromSubtype = fMFCreateVideoMediaTypeFromSubtype @64
MFCreateVideoMediaTypeFromVideoInfoHeader = fMFCreateVideoMediaTypeFromVideoInfoHeader @65
MFCreateVideoMediaTypeFromVideoInfoHeader2 = fMFCreateVideoMediaTypeFromVideoInfoHeader2 @66
MFCreateVideoSampleAllocatorEx = fMFCreateVideoSampleAllocatorEx @67
MFCreateWaveFormatExFromMFMediaType = fMFCreateWaveFormatExFromMFMediaType @68
MFDeserializeAttributesFromStream = fMFDeserializeAttributesFromStream @69
MFDeserializeEvent = fMFDeserializeEvent @70
MFDeserializeMediaTypeFromStream = fMFDeserializeMediaTypeFromStream @71
MFDeserializePresentationDescriptor = fMFDeserializePresentationDescriptor @72
MFEndCreateFile = fMFEndCreateFile @73
MFFrameRateToAverageTimePerFrame = fMFFrameRateToAverageTimePerFrame @74
MFGetAttributesAsBlob = fMFGetAttributesAsBlob @75
MFGetAttributesAsBlobSize = fMFGetAttributesAsBlobSize @76
MFGetConfigurationDWORD = fMFGetConfigurationDWORD @77
MFGetConfigurationPolicy = fMFGetConfigurationPolicy @78
MFGetConfigurationStore = fMFGetConfigurationStore @79
MFGetConfigurationString = fMFGetConfigurationString @80
MFGetPlaneSize = fMFGetPlaneSize @81
MFGetPlatform = fMFGetPlatform @82
MFGetPrivateWorkqueues = fMFGetPrivateWorkqueues @83
MFGetStrideForBitmapInfoHeader = fMFGetStrideForBitmapInfoHeader @84
MFGetSupportedMimeTypes = fMFGetSupportedMimeTypes @85
MFGetSupportedSchemes = fMFGetSupportedSchemes @86
MFGetSystemTime = fMFGetSystemTime @87
MFGetTimerPeriodicity = fMFGetTimerPeriodicity @88
MFGetUncompressedVideoFormat = fMFGetUncompressedVideoFormat @89
MFGetWorkQueueMMCSSTaskId = fMFGetWorkQueueMMCSSTaskId @90
MFHeapAlloc = fMFHeapAlloc @91
MFHeapFree = fMFHeapFree @92
MFInitAMMediaTypeFromMFMediaType = fMFInitAMMediaTypeFromMFMediaType @93
MFInitAttributesFromBlob = fMFInitAttributesFromBlob @94
MFInitMediaTypeFromAMMediaType = fMFInitMediaTypeFromAMMediaType @95
MFInitMediaTypeFromMFVideoFormat = fMFInitMediaTypeFromMFVideoFormat @96
MFInitMediaTypeFromVideoInfoHeader = fMFInitMediaTypeFromVideoInfoHeader @97
MFInitMediaTypeFromVideoInfoHeader2 = fMFInitMediaTypeFromVideoInfoHeader2 @98
MFInitMediaTypeFromWaveFormatEx = fMFInitMediaTypeFromWaveFormatEx @99
MFInitVideoFormat = fMFInitVideoFormat @100
MFInitVideoFormat_RGB = fMFInitVideoFormat_RGB @101
MFInvokeCallback = fMFInvokeCallback @102
MFJoinIoPort = fMFJoinIoPort @103
MFJoinWorkQueue = fMFJoinWorkQueue @104
MFLockDXGIDeviceManager = fMFLockDXGIDeviceManager @105
MFLockPlatform = fMFLockPlatform @106
MFLockSharedWorkQueue = fMFLockSharedWorkQueue @107
MFLockWorkQueue = fMFLockWorkQueue @108
MFMapDX9FormatToDXGIFormat = fMFMapDX9FormatToDXGIFormat @109
MFMapDXGIFormatToDX9Format = fMFMapDXGIFormatToDX9Format @110
MFPutWaitingWorkItem = fMFPutWaitingWorkItem @111
MFPutWorkItem = fMFPutWorkItem @112
MFPutWorkItem2 = fMFPutWorkItem2 @113
MFPutWorkItemEx = fMFPutWorkItemEx @114
MFPutWorkItemEx2 = fMFPutWorkItemEx2 @115
MFRemovePeriodicCallback = fMFRemovePeriodicCallback @116
MFResetDXGIDeviceManagerX = MFResetDXGIDeviceManager_X @117
MFScheduleWorkItem = fMFScheduleWorkItem @118
MFScheduleWorkItemEx = fMFScheduleWorkItemEx @119
MFSerializeAttributesToStream = fMFSerializeAttributesToStream @120
MFSerializeEvent = fMFSerializeEvent @121
MFSerializeMediaTypeToStream = fMFSerializeMediaTypeToStream @122
MFSerializePresentationDescriptor = fMFSerializePresentationDescriptor @123
MFShutdown = fMFShutdown @124
MFStartup = fMFStartup @125
MFTEnumEx = fMFTEnumEx @126
MFTraceError = fMFTraceError @127
MFTraceFuncEnter = fMFTraceFuncEnter @128
MFUnblockThread = fMFUnblockThread @129
MFUnjoinWorkQueue = fMFUnjoinWorkQueue @130
MFUnlockDXGIDeviceManager = fMFUnlockDXGIDeviceManager @131
MFUnlockPlatform = fMFUnlockPlatform @132
MFUnlockWorkQueue = fMFUnlockWorkQueue @133
MFUnwrapMediaType = fMFUnwrapMediaType @134
MFValidateMediaTypeSize = fMFValidateMediaTypeSize @135
MFWrapMediaType = fMFWrapMediaType @136
MFllMulDiv = fMFllMulDiv @137
PropVariantFromStream = fPropVariantFromStream @138
PropVariantToStream = fPropVariantToStream @139
ValidateWaveFormat = fValidateWaveFormat @140
@@ -5,7 +5,6 @@
namespace winrt::Windows::Xbox::System::implementation
{
//winrt::event<winrt::Windows::Foundation::EventHandler<winrt::Windows::Xbox::System::UserAddedEventArgs>> m_userAddedEvent;
UserOnlineState User::OnlineState()
{
@@ -95,11 +94,11 @@ namespace winrt::Windows::Xbox::System::implementation
}
winrt::event_token User::SignInCompleted(winrt::Windows::Foundation::EventHandler<winrt::Windows::Xbox::System::SignInCompletedEventArgs> const& handler)
{
LOG_NOT_IMPLEMENTED(); return {};
return m_signInCompletedEvent.add(handler);
}
void User::SignInCompleted(winrt::event_token const& token) noexcept
{
LOG_NOT_IMPLEMENTED(); throw hresult_not_implemented();
m_signInCompletedEvent.remove(token);
}
winrt::event_token User::SignOutStarted(winrt::Windows::Foundation::EventHandler<winrt::Windows::Xbox::System::SignOutStartedEventArgs> const& handler)
{
@@ -111,11 +110,11 @@ namespace winrt::Windows::Xbox::System::implementation
}
winrt::event_token User::SignOutCompleted(winrt::Windows::Foundation::EventHandler<winrt::Windows::Xbox::System::SignOutCompletedEventArgs> const& handler)
{
LOG_NOT_IMPLEMENTED(); return {};
return m_signOutCompletedEvent.add(handler);
}
void User::SignOutCompleted(winrt::event_token const& token) noexcept
{
LOG_NOT_IMPLEMENTED(); return;
m_signOutCompletedEvent.remove(token);
}
winrt::event_token User::UserDisplayInfoChanged(winrt::Windows::Foundation::EventHandler<winrt::Windows::Xbox::System::UserDisplayInfoChangedEventArgs> const& handler)
{
@@ -54,6 +54,8 @@ namespace winrt::Windows::Xbox::System::implementation
inline static winrt::event<winrt::Windows::Foundation::EventHandler<winrt::Windows::Xbox::System::UserRemovedEventArgs>> m_userRemovedEvent;
inline static winrt::event<winrt::Windows::Foundation::EventHandler<winrt::Windows::Xbox::System::SignOutStartedEventArgs>> m_signOutStartedEvent;
inline static winrt::event<winrt::Windows::Foundation::EventHandler<winrt::Windows::Xbox::System::OnlineStateChangedEventArgs>> m_onlineStateChangedEvent;
inline static winrt::event<winrt::Windows::Foundation::EventHandler<winrt::Windows::Xbox::System::SignInCompletedEventArgs>> m_signInCompletedEvent;
inline static winrt::event<winrt::Windows::Foundation::EventHandler<winrt::Windows::Xbox::System::SignOutCompletedEventArgs>> m_signOutCompletedEvent;
inline static winrt::Windows::Xbox::System::User staticUser = {nullptr};
inline static winrt::Windows::Foundation::Collections::IVector<winrt::Windows::Xbox::System::User> staticUsers = {nullptr};
};