硬件加速SinkWriter示例 [英] Hardware accelerated SinkWriter Example

查看:96
本文介绍了硬件加速SinkWriter示例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


有没有人知道,或者他们将分享他们自己的样本,这说明如何使用MF创建和使用SinkWriter来硬件编码NV12输入到h264?


我可以让我的代码在软件中工作,但我需要利用硬件编码资源来降低我的CPU使用率。 我正在使用戴尔Latitude E6450,配备AMD Radeon HD 8790M和Intel Core I7-4800MQ CPU。两者都应该支持
硬件编码,并且有MFT。 


我非常感谢提示/建议/代码示例来解决这个问题。


  mftrace显示以下内容:


对于amd gpu:


11308,EB0 15:22:09.34586 COle32ExportDetours :: CoCreateInstance @无法创建{ADC9BC80-0F41-46C6-AB75-D693D793597D} AMD H .264硬件MFT编码器(C:\Program Files \Common Files \ ATI Technologies \Multimedia \ AMDh264Enc32.dll)hr = 0x80004005 E_FAIL

11308,EB0 15:22:09.34587 COle32ExportDetours :: CoCreateInstance @调用'hr'失败(hr = 0x80004005)at avcore\mf\samples\mf360\mftrace\mfdetours\otherdetours\ole32exportdetours.cpp:116

11308,EB0 15:22:09.34587 COle32ExportDetours :: CoCreateInstance @ - 退出(失败hr = 0x80004005 E_FAIL)

11308,EB0 15:22:09.34587 CMFActivateDetours :: ActivateObject @ 0078D1C0调用'FindDetouredVtbl(这 - > lpVtbl) - > ActivateObject(This,riid,ppv)'失败(hr = 0x80004005)at avcore \mf\samples\mf360\mftrace\mfdetours\interfacedetours\mfactivatedetours.cpp:440

11308,EB0 15:22:09.34587 CMFActivateDetours :: ActivateObject @ 0078D1C0 - 退出(失败hr = 0x80004005 E_FAIL)


对于Intel cpu / gpu:


6332,CA4 15:24:04.14466 COle32ExportDetours :: CoCreateInstance @ Created { 4BE8D3C0-0515-4A37-AD55-E4BAE19AF471}英特尔®快速同步视频H.264编码器MFT(C:\Program Files \ Intel \ Media SDK \ mfx_mft_h264ve_w7_32.dll)@ 07AD3A00 - 跟踪接口:IMFTransform
@ 07AD3A00,

6332,CA4 15:24:04.14466 COle32ExportDetours :: CoCreateInstance @ - 退出

6332,CA4 15:24:04.14466 CMFActivateDetours :: GetGUID @ 0040D218 - 输入

6332,CA4 15:24:04.14466 CMFActivateDetours :: GetGUID @ 0040D218 - 退出

6332,CA4 15:24:04.14466 CMFActivateDetours :: GetUnknown @ 0040D218 - 输入

6332,CA4 15:24:04.14466 CMFActivateDetours :: GetUnknown @ 0040D218属性未找到guidKey = MFT_FIELDOFUSE_UNLOCK_Attribute

6332,CA4 15:24:04.14611 CMFActivateDetours :: GetUnknown @ 0040D218 - 退出(失败hr = 0xC00D36E6 MF_E_ATTRIBUTENOTFOUND)

6332,CA4 15:24:04.14611 CMFActivateDetours :: GetGUID @ 0040D218 - 输入

6332,CA4 15:24:04.14611 CMFActivateDetours :: GetGUID @ 0040D218 - 退出

6332,CA4 15:24:04.14611 CMFActivateDetours :: GetUnknown @ 0040D218 - 输入

6332,CA4 15:24:04.14611 CMFActivateDetours :: GetUnknown @ 0040D218未找到属性guidKey = MFT_PREFERRED_ENCODER_PROFILE

6332,CA4 15:24:04.14611 CMFActivateDetours :: GetUnknown @ 0040D218 - 退出(失败hr = 0xC00D36E6 MF_E_ATTRIBUTENOTFOUND)

6332,CA4 15:24:04.14611 CMFActivateDetours :: GetUnknown @ 0040D218 - 输入

6332,CA4 15 :24:04.14612 CMFActivateDetours :: GetUnknown @0040D218属性未找到guidKey = MFT_PREFERRED_OUTPUTTYPE_Attribute

6332,CA4 15:24:04.14612 CMFActivateDetours :: GetUnknown @ 0040D218 - 退出(失败hr = 0xC00D36E6 MF_E_A TTRIBUTENOTFOUND)
$
6332,CA4 15:24:04.14612 CMFActivateDetours :: GetUINT32 @ 0040D218 - 输入

6332,CA4 15:24:04.14612 CMFActivateDetours :: GetUINT32 @ 0040D218 - 退出

6332,CA4 15:24:04.14612 CMFPlatExportDetours :: MFGetMFTMerit @ - 输入

6332,CA4 15:24:04.19958 CMFPlatExportDetours :: MFGetMFTMerit @MIT的Merit验证失败@ 07AD3A00(hr = 80004005 E_FAIL)

6332,CA4 15:24:04.19958 CMFPlatExportDetours :: MFGetMFTMerit @ - 退出(失败hr = 0x80004005 E_FAIL)

6332,CA4 15: 24:04.20529 CMEActivateDetours :: ActivateObject @ 0040D218调用'FindDetouredVtbl(This-> lpVtbl) - > ActivateObject(This,riid,ppv)'失败(hr = 0x80004005)at avcore\mf\samples\mf360 \\ \\ _mftrace\mfdetours\interfacedetours\mfactivatedetours.cpp:440

6332,CA4 15:24:04.20529 CMFActivateDetours :: ActivateObject @ 0040D218 - 退出(失败hr = 0x80004005 E_FAIL)



解决方案


我设法让AMD和英特尔快速同步工作,但请注意:


- 您无法使用MFTrace工具,因为这将始终发生:  MFGetMFTMerit @ Merit验证
MFT @ 07AD3A00失败(hr = 80004005 E_FAIL)。提示:调试打印自己。


- 我只是设法让快速同步MFT与Win8.1一起使用,
Win7(不处理样本)


尝试使用IClassFactory做一些事情,在此主题中描述:


https://social.msdn.microsoft.com/Forums/windowshardware / en-US / 6da521e9-7bb3-4b79-a2b6-b31509224638 / win7-h264-encoder-imfsinkwriter-cant-use-quality-vbr-encoding?forum = mediafoundationdevelopment


 要更好地控制MFT创建。


// Carl


Does anyone know of, or have a sample of their own they will share, that illustrates how to use MF to create and use a SinkWriter to hardware encode NV12 input to h264?

I can get my code working in software, but I need to utilize hardware encoding resources to lower my cpu usage.  I am working on a Dell Latitude E6450 with both an AMD Radeon HD 8790M, and an Intel Core I7-4800MQ CPU. Both are supposed to support hardware encoding, and have MFTs. 

I would greatly appreciate tips/advice/code samples to correct this problem.

 mftrace shows the following:

For the amd gpu:

11308,EB0 15:22:09.34586 COle32ExportDetours::CoCreateInstance @ Failed to create {ADC9BC80-0F41-46C6-AB75-D693D793597D} AMD H.264 Hardware MFT Encoder (C:\Program Files\Common Files\ATI Technologies\Multimedia\AMDh264Enc32.dll) hr=0x80004005 E_FAIL
11308,EB0 15:22:09.34587 COle32ExportDetours::CoCreateInstance @ call to 'hr' failed (hr=0x80004005) at avcore\mf\samples\mf360\mftrace\mfdetours\otherdetours\ole32exportdetours.cpp:116
11308,EB0 15:22:09.34587 COle32ExportDetours::CoCreateInstance @ - exit (failed hr=0x80004005 E_FAIL)
11308,EB0 15:22:09.34587 CMFActivateDetours::ActivateObject @0078D1C0 call to 'FindDetouredVtbl( This->lpVtbl )->ActivateObject( This, riid, ppv )' failed (hr=0x80004005) at avcore\mf\samples\mf360\mftrace\mfdetours\interfacedetours\mfactivatedetours.cpp:440
11308,EB0 15:22:09.34587 CMFActivateDetours::ActivateObject @0078D1C0 - exit (failed hr=0x80004005 E_FAIL)

For the Intel cpu/gpu:

6332,CA4 15:24:04.14466 COle32ExportDetours::CoCreateInstance @ Created {4BE8D3C0-0515-4A37-AD55-E4BAE19AF471} Intel® Quick Sync Video H.264 Encoder MFT (C:\Program Files\Intel\Media SDK\mfx_mft_h264ve_w7_32.dll) @07AD3A00 - traced interfaces: IMFTransform @07AD3A00,
6332,CA4 15:24:04.14466 COle32ExportDetours::CoCreateInstance @ - exit
6332,CA4 15:24:04.14466 CMFActivateDetours::GetGUID @0040D218 - enter
6332,CA4 15:24:04.14466 CMFActivateDetours::GetGUID @0040D218 - exit
6332,CA4 15:24:04.14466 CMFActivateDetours::GetUnknown @0040D218 - enter
6332,CA4 15:24:04.14466 CMFActivateDetours::GetUnknown @0040D218 attribute not found guidKey = MFT_FIELDOFUSE_UNLOCK_Attribute
6332,CA4 15:24:04.14611 CMFActivateDetours::GetUnknown @0040D218 - exit (failed hr=0xC00D36E6 MF_E_ATTRIBUTENOTFOUND)
6332,CA4 15:24:04.14611 CMFActivateDetours::GetGUID @0040D218 - enter
6332,CA4 15:24:04.14611 CMFActivateDetours::GetGUID @0040D218 - exit
6332,CA4 15:24:04.14611 CMFActivateDetours::GetUnknown @0040D218 - enter
6332,CA4 15:24:04.14611 CMFActivateDetours::GetUnknown @0040D218 attribute not found guidKey = MFT_PREFERRED_ENCODER_PROFILE
6332,CA4 15:24:04.14611 CMFActivateDetours::GetUnknown @0040D218 - exit (failed hr=0xC00D36E6 MF_E_ATTRIBUTENOTFOUND)
6332,CA4 15:24:04.14611 CMFActivateDetours::GetUnknown @0040D218 - enter
6332,CA4 15:24:04.14612 CMFActivateDetours::GetUnknown @0040D218 attribute not found guidKey = MFT_PREFERRED_OUTPUTTYPE_Attribute
6332,CA4 15:24:04.14612 CMFActivateDetours::GetUnknown @0040D218 - exit (failed hr=0xC00D36E6 MF_E_ATTRIBUTENOTFOUND)
6332,CA4 15:24:04.14612 CMFActivateDetours::GetUINT32 @0040D218 - enter
6332,CA4 15:24:04.14612 CMFActivateDetours::GetUINT32 @0040D218 - exit
6332,CA4 15:24:04.14612 CMFPlatExportDetours::MFGetMFTMerit @ - enter
6332,CA4 15:24:04.19958 CMFPlatExportDetours::MFGetMFTMerit @ Merit validation failed for MFT @07AD3A00 (hr=80004005 E_FAIL)
6332,CA4 15:24:04.19958 CMFPlatExportDetours::MFGetMFTMerit @ - exit (failed hr=0x80004005 E_FAIL)
6332,CA4 15:24:04.20529 CMFActivateDetours::ActivateObject @0040D218 call to 'FindDetouredVtbl( This->lpVtbl )->ActivateObject( This, riid, ppv )' failed (hr=0x80004005) at avcore\mf\samples\mf360\mftrace\mfdetours\interfacedetours\mfactivatedetours.cpp:440
6332,CA4 15:24:04.20529 CMFActivateDetours::ActivateObject @0040D218 - exit (failed hr=0x80004005 E_FAIL)

解决方案

Hi,

I have managed to get both AMD and Intel Quick Sync to work, but be aware:

- You can't use the MFTrace tool because then this will always happen: MFGetMFTMerit @ Merit validation failed for MFT @07AD3A00 (hr=80004005 E_FAIL). Tip: Debug print by yourself instead.

- I have only managed to get the Quick sync MFT to work with Win8.1, not Win7 (does not process samples)

Try doing something with the IClassFactory, described in this thread:

https://social.msdn.microsoft.com/Forums/windowshardware/en-US/6da521e9-7bb3-4b79-a2b6-b31509224638/win7-h264-encoder-imfsinkwriter-cant-use-quality-vbr-encoding?forum=mediafoundationdevelopment

 To get more control over the MFT creation.

// Carl


这篇关于硬件加速SinkWriter示例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆