win-mf: Clean up encoder logging
parent
8280dbc596
commit
e077880ab5
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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));
|
||||
|
||||
|
|
Loading…
Reference in New Issue