我从ReadSample调用中收到E_POINTER错误,据我所知,没有一个指针无效。请参阅下面的代码段(注意,它是一个C ++ / CLI应用程序):
IMFSample* sample = NULL;
pin_ptr<IMFSample*> pinnedSample = &sample;
LONGLONG timeStamp;
HRESULT hr = mSourceReader->ReadSample(
(DWORD)MF_SOURCE_READER_FIRST_VIDEO_STREAM,
0,
NULL,
NULL,
&timeStamp,
pinnedSample
);
我怀疑问题在于构造mSourceReader(一个IMFSourceReader实例,从IMFMediaSource创建)。但是,唉,我不知道如何回溯并找到源代码,因为创建mSourceReader的命令链中的所有COM调用都返回了S_OK。
非常感谢任何提示。
答案 0 :(得分:1)
在获取局部变量的地址时不需要pin_ptr
,因为垃圾收集器永远不会移动局部变量。
我猜你传递NULL的其他三个参数中的一个是非可选的,但我需要看看你打算知道什么函数。
您是否在同步或异步模式下创建了IMFSourceReader
?文档说:
此方法可以同步或异步完成。如果在创建源阅读器时提供回调指针,则该方法是异步的。否则,该方法是同步的。
我认为这是你的问题:
在同步模式下:
- pdwStreamFlags和ppSample参数不能为NULL。否则,该方法返回E_POINTER。
您已为pdwStreamFlags
传递了NULL,这是不允许的。