HRESULT Trace::Log_ProcessInput(ABI::Windows::Foundation::Diagnostics::ILoggingActivity **ppActivity,DWORD dwInputStreamID, IMFSample *pSample, DWORD dwFlags,REFERENCE_TIME presentationTime) { ComPtr<ILoggingFields> fields; HRESULT hr = CreateLoggingFields(&fields); if (FAILED(hr)) return hr; fields->AddUInt32(HStringReference(L"InputStreamId").Get(), dwInputStreamID); if (pSample != nullptr) { REFERENCE_TIME sampleTime = 0,duration = 0; DWORD dwSampleFlags = 0, dwBufferCount = 0; pSample->GetSampleTime(&sampleTime); pSample->GetSampleDuration(&duration); pSample->GetSampleFlags(&dwSampleFlags); pSample->GetBufferCount(&dwBufferCount); fields->AddTimeSpan(HStringReference(L"Time").Get(), ABI::Windows::Foundation::TimeSpan() = { sampleTime }); fields->AddTimeSpan(HStringReference(L"Duration").Get(), ABI::Windows::Foundation::TimeSpan() = { duration }); fields->AddUInt32(HStringReference(L"SampleFlags").Get(), dwSampleFlags); fields->AddUInt32(HStringReference(L"BufferCount").Get(), dwBufferCount); } else { fields->AddEmpty(HStringReference(L"InputStreamId").Get()); fields->AddEmpty(HStringReference(L"Time").Get()); fields->AddEmpty(HStringReference(L"Duration").Get()); fields->AddEmpty(HStringReference(L"SampleFlags").Get()); } fields->AddTimeSpan(HStringReference(L"PresentationTime").Get(), ABI::Windows::Foundation::TimeSpan() = { presentationTime }); fields->AddUInt32(HStringReference(L"Flags").Get(), dwFlags); hr = g_spLogChannel->StartActivityWithFields(HStringReference(MFT_PROCESS_INPUT).Get(), fields.Get(), ppActivity); return hr; }
HRESULT Trace::Log_FrameFound(REFERENCE_TIME start, REFERENCE_TIME duration) { ComPtr<ILoggingFields> fields; HRESULT hr = CreateLoggingFields(&fields); if (FAILED(hr)) return hr; fields->AddTimeSpan(HStringReference(L"Time").Get(), ABI::Windows::Foundation::TimeSpan() = { start }); fields->AddTimeSpan(HStringReference(L"Duration").Get(), ABI::Windows::Foundation::TimeSpan() = { duration }); return g_spLogChannel->LogEventWithFields(HStringReference(APP_GF_FOUND).Get(), fields.Get()); }
HRESULT Trace::Log_TestFrame(REFERENCE_TIME presentationTime, REFERENCE_TIME frameStart, REFERENCE_TIME frameEnd) { ComPtr<ILoggingFields> fields; HRESULT hr = CreateLoggingFields(&fields); if (FAILED(hr)) return hr; fields->AddTimeSpan(HStringReference(L"Time").Get(), ABI::Windows::Foundation::TimeSpan() = { presentationTime }); fields->AddTimeSpan(HStringReference(L"Start").Get(), ABI::Windows::Foundation::TimeSpan() = { frameStart }); fields->AddTimeSpan(HStringReference(L"End").Get(), ABI::Windows::Foundation::TimeSpan() = { frameEnd }); return g_spLogChannel->LogEventWithFields(HStringReference(APP_GF_TESTFRAME).Get(), fields.Get()); }
HRESULT Trace::Log_ProcessOutput(ABI::Windows::Foundation::Diagnostics::ILoggingActivity **ppActivity,DWORD dwFlags, DWORD cOutputBufferCount,MFT_OUTPUT_DATA_BUFFER *pOutBuffer,REFERENCE_TIME presentationTime) { ComPtr<ILoggingFields> fields; HRESULT hr = CreateLoggingFields(&fields); if (FAILED(hr)) return hr; fields->AddUInt32(HStringReference(L"OutputBufferCount").Get(), cOutputBufferCount); fields->AddTimeSpan(HStringReference(L"PresentationTime").Get(), ABI::Windows::Foundation::TimeSpan() = { presentationTime }); fields->AddUInt32(HStringReference(L"Flags").Get(), dwFlags); hr = g_spLogChannel->StartActivityWithFields(HStringReference(MFT_PROCESS_OUTPUT).Get(), fields.Get(), ppActivity); return hr; }
HRESULT Trace::Log_StopAnalyzerStep(ABI::Windows::Foundation::Diagnostics::ILoggingActivity * pActivity, REFERENCE_TIME time, HRESULT hResult) { ComPtr<ILoggingFields> fields; HRESULT hr = CreateLoggingFields(&fields); if (FAILED(hr)) return hr; fields->AddTimeSpan(HStringReference(L"Time").Get(), ABI::Windows::Foundation::TimeSpan() = { time }); fields->AddUInt32WithFormat(HStringReference(L"Result").Get(), hResult, LoggingFieldFormat::LoggingFieldFormat_HResult); ComPtr<ILoggingActivity> spActivity = pActivity; ComPtr<ILoggingActivity2> spActivity2; spActivity.As(&spActivity2); HSTRING hName; spActivity->get_Name(&hName); return spActivity2->StopActivityWithFields(hName, fields.Get()); }
HRESULT Trace::Log_StartGetFrame(ABI::Windows::Foundation::Diagnostics::ILoggingActivity **ppActivity, REFERENCE_TIME presentationTime,const REFERENCE_TIME *pTimes,size_t queueSize) { ComPtr<ILoggingFields> fields; HRESULT hr = CreateLoggingFields(&fields); if (FAILED(hr)) return hr; fields->AddTimeSpan(HStringReference(L"PresentationTime").Get(), ABI::Windows::Foundation::TimeSpan() = { presentationTime }); if (queueSize > 0) fields->AddTimeSpanArray(HStringReference(L"Queue").Get(), queueSize, (ABI::Windows::Foundation::TimeSpan *) pTimes); else fields->AddEmpty(HStringReference(L"Queue").Get()); fields->AddUInt32(HStringReference(L"Queue.size").Get(),queueSize); return g_spLogChannel->StartActivityWithFields(HStringReference(APP_GETFRAME).Get(), fields.Get(), ppActivity); }
HRESULT Trace::Log_SA_Start_AppendInput(ABI::Windows::Foundation::Diagnostics::ILoggingActivity **ppActivity, REFERENCE_TIME sampleTime, size_t sampleCount,size_t samplesInBuffer, void *pWritePtr, void *pReadPtr, long inputSampleOffset, long expectedOffset) { ComPtr<ILoggingFields> fields; HRESULT hr = CreateLoggingFields(&fields); if (FAILED(hr)) return hr; fields->AddTimeSpan(HStringReference(L"Time").Get(), ABI::Windows::Foundation::TimeSpan() = { sampleTime }); fields->AddUInt32(HStringReference(L"SampleSize").Get(), sampleCount); fields->AddUInt32(HStringReference(L"BufferSize").Get(), samplesInBuffer); fields->AddUInt32WithFormat(HStringReference(L"pWrite").Get(), (UINT32)pWritePtr, LoggingFieldFormat::LoggingFieldFormat_Hexadecimal); fields->AddUInt32WithFormat(HStringReference(L"pRead").Get(), (UINT32)pReadPtr, LoggingFieldFormat::LoggingFieldFormat_Hexadecimal); fields->AddInt64(HStringReference(L"Offset").Get(), inputSampleOffset); fields->AddInt64(HStringReference(L"BufferOffset").Get(), expectedOffset); return g_spLogChannel->StartActivityWithFields(HStringReference(ANALYZER_APPEND_INPUT).Get(), fields.Get(), ppActivity); }
HRESULT Trace::Log_SA_Stop_AppendInput(ABI::Windows::Foundation::Diagnostics::ILoggingActivity *pActivity, REFERENCE_TIME sampleTime, size_t sampleSize, size_t samplesInBuffer, void *pWritePtr, void *pReadPtr, long expectedOffset) { ComPtr<ILoggingFields> fields; HRESULT hr = CreateLoggingFields(&fields); if (FAILED(hr)) return hr; fields->AddTimeSpan(HStringReference(L"Time").Get(), ABI::Windows::Foundation::TimeSpan() = { sampleTime }); fields->AddUInt32(HStringReference(L"SampleLength").Get(), sampleSize); fields->AddUInt32(HStringReference(L"BufferSize").Get(), samplesInBuffer); fields->AddUInt32WithFormat(HStringReference(L"pWrite").Get(), (UINT32)pWritePtr, LoggingFieldFormat::LoggingFieldFormat_Hexadecimal); fields->AddUInt32WithFormat(HStringReference(L"pRead").Get(), (UINT32)pReadPtr, LoggingFieldFormat::LoggingFieldFormat_Hexadecimal); fields->AddInt64(HStringReference(L"BufferOffset").Get(), expectedOffset); ComPtr<ILoggingActivity> spActivity = pActivity; ComPtr<ILoggingActivity2> spActivity2; spActivity.As(&spActivity2); HSTRING hName; spActivity->get_Name(&hName); return spActivity2->StopActivityWithFields(hName, fields.Get()); }