尝试使用 CoCreateInstance() 创建 H.264 解码器时出现链接器错误

问题描述 投票:0回答:1

问题

我正在尝试使用 H.264 视频解码器 创建 MP4 解码器。我无法在对

CLSID_CMSH264DecoderMFT
的调用中使用
CoCreateInstance()
,因为我收到链接器错误:

无法解析的外部符号CLSID_CMSH264DecoderMFT

里面

C:\Windows\System32
我确实有
msmpeg2vdec.dll
。我尝试从这里下载另一个,但我无法替换原来的,它不允许我。

这些是我链接的库:

Urlmon.lib
Mfreadwrite.lib
mf.lib
mfplat.lib
mfuuid.lib
strmiids.lib
Ole32.lib
Uuid.lib

这些是我的内容:

#include <windows.h>
#include <mfapi.h>
#include <mfplay.h>
#include <mfobjects.h>
#include <mfidl.h>
#include <mfreadwrite.h>
#include <d3d9.h>
#include <objbase.h>
#include <iostream>
#include <vector>
#include <dshow.h>
#include <initguid.h>
#include <wmcodecdsp.h> // <- contains CLSID_CMSH264DecoderMFT
#include <stdio.h>

我尝试了什么

  • regsvr32 MSMPEG2VDEC.DLL
  • 修改我的链接库
  • 使用 MFTEnum 查找解码器,但在
    IMFTransform::SetOutputType
  • 上失败

这是使用

MFTEnum
时的代码,在最后一个
cout
上失败:

MFT_REGISTER_TYPE_INFO tyin = {};
tyin.guidMajorType = MFMediaType_Video;
tyin.guidSubtype = MFVideoFormat_H264;

MFT_REGISTER_TYPE_INFO tyout = {};
tyout.guidMajorType = MFMediaType_Video;
tyout.guidSubtype = MFVideoFormat_NV12;

CLSID* clsid_arr=0;
UINT32 clsid_arr_count;
hr = MFTEnum(
    MFT_CATEGORY_VIDEO_DECODER,
    0,
    &tyin,
    &tyout,
    0,
    &clsid_arr,
    &clsid_arr_count
); // finds 1
IMFTransform* pDecoder=0;
CoCreateInstance(clsid_arr[0], NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pDecoder));

IMFMediaType* type = 0;
MFCreateMediaType(&type);
type->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video);
type->SetGUID(MF_MT_SUBTYPE, MFVideoFormat_H264);
hr = pDecoder->SetInputType(0, type, 0);

IMFMediaType* pOutputAttributes = 0;
MFCreateMediaType(&pOutputAttributes);
pOutputAttributes->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video);
pOutputAttributes->SetGUID(MF_MT_SUBTYPE, MFVideoFormat_NV12);
hr = pDecoder->SetOutputType(0, pOutputAttributes, 0);
if (FAILED(hr)) {
    std::cout << "Failed SetOutputType\n";
}
winapi dll
1个回答
0
投票

CLSID_CMSH264DecoderMFT
extern
中声明为
wmcodecdsp.h
。 链接器抱怨它在任何地方都找不到
CLSID
值的定义,例如在
.lib
文件中,因此出现错误。 如果你没有这样的
.lib
文件,那么直接在自己的代码中定义该值即可,例如:

const CLSID CLSID_CMSH264DecoderMFT = {0x62CE7E72, 0x4C71, 0x4d20, {0xB1, 0x5D, 0x45, 0x28, 0x31, 0xA8, 0x7D, 0x9D}};
© www.soinside.com 2019 - 2024. All rights reserved.