我们正在使用SharpDX
.NET包装器使Mediafoundation
将MP4视频解码为DirectX9
纹理。这样可以正常工作,除了它在某些NVIDIA
卡上崩溃,例如940MX
。例如,具有Intel HD图形卡的同一台机器可以很好地解码视频流。
很遗憾,除SharpDX
的E_FAIL /未指定错误外,我们无法获得任何其他详细信息。即使启用了调试层。任何想法如何找出它崩溃的原因?
VideoMediaType outputVideoFormat;
MediaFactory.CreateVideoMediaTypeFromSubtype(mFormatYv12Guid, out outputVideoFormat);
if (outputVideoFormat == null)
{
Trace.WriteLine("Error: create output video format failed.");
return false;
}
outputVideoFormat.Set(MediaTypeAttributeKeys.Subtype, mFormatYv12Guid);
outputVideoFormat.Set(MediaTypeAttributeKeys.FrameSize, size);
sourceReader.SetCurrentMediaType(mVideoStreamIndex, outputVideoFormat);
outputVideoFormat.Dispose();
IntPtr transformPointer = sourceReader.GetServiceForStream(mVideoStreamIndex, Guid.Empty, typeof(Transform).GUID);
if (transformPointer.ToInt64() <= 0)
{
Trace.WriteLine("Error: videoDecoderPointer is null");
return false;
}
Transform videoDecoder = new Transform(transformPointer);
// crashing here with E_FAIL/Unspecified error
videoDecoder.ProcessMessage(TMessageType.SetD3DManager, deviceManager.NativePointer);
videoDecoder.Dispose();
答案 0 :(得分:0)
如果它是MX(移动芯片),它可能是一个优化设置。您需要转到nVidia控制面板并添加一个明确的规则,您的应用程序需要专门使用Intel或nVidia GPU,而不是自动检测。