在 IMFMediaSource::ReadSample 中追踪 E_POINTER 的来源

发布于 2024-11-05 12:25:22 字数 538 浏览 1 评论 0原文

我从 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。

非常感谢您的任何提示。

I'm getting an E_POINTER error from the ReadSample call, and as far as I can tell, none of the pointers are invalid. See snippet below (note, it's a C++/CLI app):

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
    );

I suspect the problem lies in the construction of the mSourceReader (an IMFSourceReader instance, created from an IMFMediaSource). But, alas, I've no idea how to backtrack and find the source, as all the COM calls in the chain of commands that created mSourceReader returned S_OK.

Much thanks for any tips.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

暮年慕年 2024-11-12 12:25:22

获取局部变量的地址时不需要 pin_ptr,因为垃圾收集器无论如何都不会移动局部变量。

我猜想您传递 NULL 的其他三个参数之一是非可选的,但我需要查看您正在调用哪个函数才能确定。

您是在同步还是异步模式下创建 IMFSourceReader 吗?文档说:

该方法可以同步或异步完成。如果您在创建源读取器时提供回调指针,则该方法是异步的。否则,该方法是同步的。

我认为这是你的问题:

在同步模式下:

  • pdwStreamFlags 和 ppSample 参数不能为 NULL。否则,该方法返回 E_POINTER。

您已为 pdwStreamFlags 传递了 NULL,这是不允许的。

文档链接: http://msdn.microsoft.com/en-us/library /dd374665.aspx

You don't need pin_ptr when taking the address of a local variable, since the garbage collector never moves local variables around anyway.

I'd guess that one of the other three parameters you're passing NULL to is non-optional, but I need to see what function you're calling to know for sure.

Did you create the IMFSourceReader in synchronous or asynchronous mode? The docs say:

This method can complete synchronously or asynchronously. If you provide a callback pointer when you create the source reader, the method is asynchronous. Otherwise, the method is synchronous.

I think this is your problem:

In synchronous mode:

  • The pdwStreamFlags and ppSample parameters cannot be NULL. Otherwise, the method returns E_POINTER.

You've passed NULL for pdwStreamFlags, which is not allowed.

Doc link: http://msdn.microsoft.com/en-us/library/dd374665.aspx

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文