【问题标题】:Retrieving D3D12 Video Decode Status检索 D3D12 视频解码状态
【发布时间】:2020-04-27 13:29:56
【问题描述】:

我正在通过 Direct3D 12 API 实现 H264 视频解码器 - 虽然我对 Direct3D 非常陌生,但我确实有使用其他图形 API 和 H264 的经验。我一直在努力寻找合适的 D3D12 视频解码示例,但似乎成功地将我的作品提交给解码器。

但是,我不知道如何查询解码状态。通过将文档和其他一些代码拼凑在一起,我发现我认为它是这样的——将结果映射到状态结构中——但我得到一个无效的参数错误。谁能指出我正确的方向,任何 D3D12 视频解码的好例子都是很好的资源。

    // decode_commands is a ID3D12VideoDecodeCommandList
    // query_heap is a ID3D12QueryHeap
    // device is a ID3D12Device

    // Make query for decode stats.
    decode_commands->EndQuery(query_heap.Get(), D3D12_QUERY_TYPE::D3D12_QUERY_TYPE_VIDEO_DECODE_STATISTICS, 0);

    // Create buffer for query result.
    ComPtr<ID3D12Resource> query_result;
    D3D12_RESOURCE_DESC query_result_description = CD3DX12_RESOURCE_DESC::Buffer(sizeof(D3D12_QUERY_DATA_VIDEO_DECODE_STATISTICS));
    HRESULT create_query_result = device->CreateCommittedResource(
        &CD3DX12_HEAP_PROPERTIES(D3D12_HEAP_TYPE::D3D12_HEAP_TYPE_DEFAULT),
        D3D12_HEAP_FLAGS::D3D12_HEAP_FLAG_NONE,
        &query_result_description,
        D3D12_RESOURCE_STATES::D3D12_RESOURCE_STATE_COPY_DEST,
        nullptr,
        IID_PPV_ARGS(&query_result));
    if (FAILED(create_query_result)) {
        log("Failed to create query result");
        return false;
    }

    // Resolve query.
    decode_commands->ResolveQueryData(query_heap.Get(), D3D12_QUERY_TYPE::D3D12_QUERY_TYPE_VIDEO_DECODE_STATISTICS, 0, 1, query_result.Get(), 0);

    // Get stats from query result.
    D3D12_RANGE range;
    range.Begin = 0;
    range.End = sizeof(D3D12_QUERY_DATA_VIDEO_DECODE_STATISTICS);
    D3D12_QUERY_DATA_VIDEO_DECODE_STATISTICS stats;
    HRESULT map = query_result->Map(0, &range, reinterpret_cast<void**>(&stats));
    if (FAILED(map)) {
        log("Failed to map query result");
        return false;
    }

【问题讨论】:

    标签: direct3d ms-media-foundation direct3d12


    【解决方案1】:

    也许您应该从 D3D9 API 的工作示例开始:

    H264Dxva2Decoder

    然后,你写一个 D3D12 解码器,这就是我要做的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      • 2014-09-02
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 2010-11-05
      相关资源
      最近更新 更多