【发布时间】:2022-01-10 23:54:20
【问题描述】:
我正在尝试从媒体基金会获得硬件解码器。我确定我的 gpu 支持 nvdec 硬件解码。我在 github 上找到了一个示例,它可以毫无问题地获取编码器 nvenc。但是当我将参数切换到解码器时,我要么得到一个糟糕的 hresult 要么崩溃。我什至尝试通过更改硬件标志来获得软件解码器,但结果仍然很糟糕。有人知道出了什么问题吗?我想不出还有什么可以让我尝试或改变的
HRESULT get_decoder(CComPtr<IMFTransform>& out_transform, CComPtr<IMFActivate>& out_activate,
CComPtr<IMFAttributes>& out_attributes)
{
HRESULT hr = S_OK;
// Find the decoder
CComHeapPtr<IMFActivate*> activate_raw;
uint32_t activateCount = 0;
// Input & output types
const MFT_REGISTER_TYPE_INFO in_info = { MFMediaType_Video, MFVideoFormat_H264 };
const MFT_REGISTER_TYPE_INFO out_info = { MFMediaType_Video, MFVideoFormat_NV12 };
// Get decoders matching the specified attributes
if (FAILED(hr = MFTEnum2(MFT_CATEGORY_VIDEO_DECODER, MFT_ENUM_FLAG_SYNCMFT | MFT_ENUM_FLAG_SORTANDFILTER, &in_info, &out_info,
nullptr, &activate_raw, &activateCount)))
return hr;
// Choose the first returned decoder
out_activate = activate_raw[0];
// Memory management
for (int i = 1; i < activateCount; i++)
activate_raw[i]->Release();
// Activate
if (FAILED(hr = out_activate->ActivateObject(IID_PPV_ARGS(&out_transform))))
return hr;
// Get attributes
if (FAILED(hr = out_transform->GetAttributes(&out_attributes)))
return hr;
std::cout << "- get_decoder() Found " << activateCount << " decoders" << std::endl;
return hr;
}
【问题讨论】:
标签: c++ winapi video h.264 ms-media-foundation