Pārlūkot izejas kodu

win-mf: Clean up encoder logging

jp9000 10 gadi atpakaļ
vecāks
revīzija
e077880ab5

+ 40 - 18
plugins/win-mf/mf-common.cpp

@@ -6,6 +6,10 @@
 #include <strsafe.h>
 #include <wrl/client.h>
 
+#include <string>
+
+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<float>(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"<<byte array>>");
+			str += L"<<byte array>>";
 			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);

+ 7 - 0
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<std::shared_ptr<EncoderDescriptor>> EncoderDescriptor::Enumerate();

+ 5 - 2
plugins/win-mf/mf-h264-encoder.cpp

@@ -440,11 +440,14 @@ bool H264Encoder::Initialize(std::function<bool(void)> 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));