首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >H.264视频解码器MFT的获取

H.264视频解码器MFT的获取
EN

Stack Overflow用户
提问于 2022-01-10 14:06:16
回答 1查看 351关注 0票数 2

我正试图从媒体基金会得到一个硬件解码器。我确信我的gpu支持nvdec硬件解码。我在github上找到了一个示例,它可以获得编码器nvenc,没有任何问题。但是当我切换到译码器时,我要么得到一个坏的结果,要么崩溃。我甚至试图通过改变硬件标志来获得一个软件解码器,结果仍然很糟糕。谁知道怎么回事?我想不出还有什么东西留给我去尝试或改变

代码语言:javascript
运行
复制
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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-10 15:24:27

可能没有专门用于硬件解码的译码器MFT (尽管有些供应商提供这些译码器)。与编码不同的是,硬件视频解码是通过DXVA2API提供的,并且--反过来--是由微软H264视频解码器覆盖的。

该股票MFT能够使用硬件进行解码,并与启用D3D9和D3D11的管道兼容。

微软H264视频解码器 6个属性:

  • MFT_TRANSFORM_CLSID_Attribute:{62CE7E72-4C71-4D20-B15D-452831A87D9D} ( VT_CLSID,CLSID_CMSH264DecoderMFT型)
  • MF_TRANSFORM_FLAGS_Attribute: MFT_ENUM_FLAG_SYNCMFT
  • MFT_INPUT_TYPES_Attributes: MFVideoFormat_H264,MFVideoFormat_H264_ES
  • MFT_OUTPUT_TYPES_Attributes: MFVideoFormat_NV12,MFVideoFormat_YV12,MFVideoFormat_IYUV,MFVideoFormat_I420,MFVideoFormat_YUY2

属性

  • MF_SA_D3D_AWARE: 1(VT_UI4型)
  • MF_SA_D3D11_AWARE: 1(VT_UI4型)
  • CODECAPI_AVDecVideoThumbnailGenerationMode: 0(VT_UI4型)
  • CODECAPI_AVDecVideoMaxCodedWidth: 7680 (VT_UI4型)
  • CODECAPI_AVDecVideoMaxCodedHeight: 4320 (VT_UI4型)
  • CODECAPI_AVDecNumWorkerThreads: 4294967295 ( VT_UI4,-1型)
  • CODECAPI_AVDecVideoAcceleration_H264: 1(VT_UI4型).

来自MSDN

CODECAPI_AVDecVideoAcceleration_H264启用或禁用硬件加速。 ..。 最大分辨率4096×2304像素DXVA加速的最大保证分辨率为1920×1088像素;在分辨率较高的情况下,采用DXVA进行解码,如果得到底层硬件的支持,则用软件进行解码。 ..。 译码器支持DXVA版本2,但不支持DXVA版本1。DXVA解码只支持与主兼容的基线、主位流和高配置文件比特流。(与主兼容的基线比特流定义为profile_idc=66和constrained_set1_flag=1。)

要使用硬件加速进行解码,只需使用微软H264视频解码器MFT。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70653670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档