作为DS的新手,我需要一个可以处理VIDEOINFOHEADER2的SampleGrabber,IMediaDet不能这样做。
所以我从DX8.1样本中取出SampleGrabber,与股票抓取器相比,它允许所有类型的媒体。 我完全按原样使用了示例代码,抓住一个单独的框架似乎一切正常:图形构建时没有返回错误代码等。 然后打电话给
hr = pSeeking->SetPositions(
&Seek,
AM_SEEKING_AbsolutePositioning,
NULL,
AM_SEEKING_NoPositioning );
with Seek = 2
调用回调:
HRESULT回调(IMediaSample * pSample,REFERENCE_TIME * StartTime,REFERENCE_TIME * StopTime,BOOL TypeChanged)
问题在于缓冲区: 它的大小合适(GetSize()== 691200 = 3 Byte * 640 * 320) 但它的内容全是" 205",不能(以哪种格式)。
可疑: " Callback"的参数是StartTime = 834168,StopTime = 1251251和TypeChanged = 1.
我尝试在GraphEdit上显示Graph https://msdn.microsoft.com/en-us/library/windows/desktop/dd390650%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396 但是没有成功("应用程序很忙"来自GraphEdit)。
问题可能在哪里?
答案 0 :(得分:1)
在Windows上,内存设置为各种模式以帮助调试无效的内存引用。 205是十六进制的0xCD,这意味着uninitialized heap memory。因此,您没有收到“错误”数据,数据永远不会被写入。
您可能无法寻求。您是否尝试过调用IsFormatSupported
答案 1 :(得分:0)
找到它(最后)。
在回调中,我使用memcpy复制了传递的缓冲区,并混淆了源和目标。非常尴尬。
感谢您的帮助。 (在每个人都阅读之后的几天内会尝试删除这个问题,因为它的使用非常有限)。