From e077880ab5ec534ca430568e46278516c7bfdbea Mon Sep 17 00:00:00 2001 From: jp9000 Date: Thu, 17 Sep 2015 17:41:03 -0700 Subject: [PATCH] win-mf: Clean up encoder logging --- plugins/win-mf/mf-common.cpp | 58 ++++++++++++++++-------- plugins/win-mf/mf-encoder-descriptor.hpp | 7 +++ plugins/win-mf/mf-h264-encoder.cpp | 7 ++- 3 files changed, 52 insertions(+), 20 deletions(-) diff --git a/plugins/win-mf/mf-common.cpp b/plugins/win-mf/mf-common.cpp index b0698bb5..e97f4f54 100644 --- a/plugins/win-mf/mf-common.cpp +++ b/plugins/win-mf/mf-common.cpp @@ -6,6 +6,10 @@ #include #include +#include + +using namespace std; + static void DBGMSG(PCWSTR format, ...) { va_list args; @@ -181,7 +185,7 @@ static float OffsetToFloat(const MFOffset& offset) return offset.value + (static_cast(offset.fract) / 65536.0f); } -static HRESULT LogVideoArea(const PROPVARIANT& var) +static HRESULT LogVideoArea(wstring &str, const PROPVARIANT& var) { if (var.caub.cElems < sizeof(MFVideoArea)) { return MF_E_BUFFERTOOSMALL; @@ -189,8 +193,15 @@ static HRESULT LogVideoArea(const PROPVARIANT& var) MFVideoArea *pArea = (MFVideoArea*)var.caub.pElems; - DBGMSG(L"(%f,%f) (%d,%d)", OffsetToFloat(pArea->OffsetX), OffsetToFloat(pArea->OffsetY), - pArea->Area.cx, pArea->Area.cy); + str += L"("; + str += to_wstring(OffsetToFloat(pArea->OffsetX)); + str += L","; + str += to_wstring(OffsetToFloat(pArea->OffsetY)); + str += L") ("; + str += to_wstring(pArea->Area.cx); + str += L","; + str += to_wstring(pArea->Area.cy); + str += L")"; return S_OK; } @@ -234,30 +245,33 @@ done: return hr; } -static void LogUINT32AsUINT64(const PROPVARIANT& var) +static void LogUINT32AsUINT64(wstring &str, const PROPVARIANT& var) { UINT32 uHigh = 0, uLow = 0; Unpack2UINT32AsUINT64(var.uhVal.QuadPart, &uHigh, &uLow); - DBGMSG(L"%d x %d", uHigh, uLow); + str += to_wstring(uHigh); + str += L" x "; + str += to_wstring(uLow); } // Handle certain known special cases. -static HRESULT SpecialCaseAttributeValue(GUID guid, const PROPVARIANT& var) +static HRESULT SpecialCaseAttributeValue(wstring &str, GUID guid, + const PROPVARIANT& var) { if ((guid == MF_MT_FRAME_RATE) || (guid == MF_MT_FRAME_RATE_RANGE_MAX) || (guid == MF_MT_FRAME_RATE_RANGE_MIN) || (guid == MF_MT_FRAME_SIZE) || (guid == MF_MT_PIXEL_ASPECT_RATIO)) { // Attributes that contain two packed 32-bit values. - LogUINT32AsUINT64(var); + LogUINT32AsUINT64(str, var); } else if ((guid == MF_MT_GEOMETRIC_APERTURE) || (guid == MF_MT_MINIMUM_DISPLAY_APERTURE) || (guid == MF_MT_PAN_SCAN_APERTURE)) { // Attributes that an MFVideoArea structure. - return LogVideoArea(var); + return LogVideoArea(str, var); } else { return S_FALSE; @@ -267,6 +281,8 @@ static HRESULT SpecialCaseAttributeValue(GUID guid, const PROPVARIANT& var) static HRESULT LogAttributeValueByIndex(IMFAttributes *pAttr, DWORD index) { + wstring str; + WCHAR *pGuidName = NULL; WCHAR *pGuidValName = NULL; @@ -285,52 +301,58 @@ static HRESULT LogAttributeValueByIndex(IMFAttributes *pAttr, DWORD index) goto done; } - DBGMSG(L"%s", pGuidName); + str += L" "; + str += pGuidName; + str += L": "; - hr = SpecialCaseAttributeValue(guid, var); + hr = SpecialCaseAttributeValue(str, guid, var); if (FAILED(hr)) { goto done; } if (hr == S_FALSE) { switch (var.vt) { case VT_UI4: - DBGMSG(L"%d", var.ulVal); + str += to_wstring(var.ulVal); break; case VT_UI8: - DBGMSG(L"%I64d", var.uhVal); + str += to_wstring(var.uhVal.QuadPart); break; case VT_R8: - DBGMSG(L"%f", var.dblVal); + str += to_wstring(var.dblVal); break; case VT_CLSID: hr = GetGUIDName(*var.puuid, &pGuidValName); if (SUCCEEDED(hr)) { - DBGMSG(pGuidValName); + str += pGuidValName; } break; case VT_LPWSTR: - DBGMSG(var.pwszVal); + str += var.pwszVal; break; case VT_VECTOR | VT_UI1: - DBGMSG(L"<>"); + str += L"<>"; break; case VT_UNKNOWN: - DBGMSG(L"IUnknown"); + str += L"IUnknown"; break; default: - DBGMSG(L"Unexpected attribute type (vt = %d)", var.vt); + str += L"Unexpected attribute type (vt = "; + str += to_wstring(var.vt); + str += L")"; break; } } + DBGMSG(L"%s", str.c_str()); + done: CoTaskMemFree(pGuidName); CoTaskMemFree(pGuidValName); diff --git a/plugins/win-mf/mf-encoder-descriptor.hpp b/plugins/win-mf/mf-encoder-descriptor.hpp index 6768dd8c..5b3db86a 100644 --- a/plugins/win-mf/mf-encoder-descriptor.hpp +++ b/plugins/win-mf/mf-encoder-descriptor.hpp @@ -21,6 +21,13 @@ enum class EncoderType { H264_VCE, }; +static const char *typeNames[] = { + "Software", + "Quicksync", + "NVENC", + "AMD VCE", +}; + class EncoderDescriptor { public: static std::vector> EncoderDescriptor::Enumerate(); diff --git a/plugins/win-mf/mf-h264-encoder.cpp b/plugins/win-mf/mf-h264-encoder.cpp index 9229a466..0cc8c6e8 100644 --- a/plugins/win-mf/mf-h264-encoder.cpp +++ b/plugins/win-mf/mf-h264-encoder.cpp @@ -440,11 +440,14 @@ bool H264Encoder::Initialize(std::function func) goto fail; } - MF_LOG(LOG_INFO, "Setting output type to transform"); + MF_LOG(LOG_INFO, "Activating encoder: %s", + typeNames[(int)descriptor->Type()]); + + MF_LOG(LOG_INFO, " Setting output type to transform:"); LogMediaType(outputType.Get()); HRC(transform->SetOutputType(0, outputType.Get(), 0)); - MF_LOG(LOG_INFO, "Setting input type to transform"); + MF_LOG(LOG_INFO, " Setting input type to transform:"); LogMediaType(inputType.Get()); HRC(transform->SetInputType(0, inputType.Get(), 0)); -- GitLab