首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SetPosition得到错误的结果

SetPosition得到错误的结果
EN

Stack Overflow用户
提问于 2009-06-15 16:29:38
回答 2查看 648关注 0票数 2

任务:从mpeg2视频文件中抓取任意帧。现在我使用自定义渲染过滤器来抓取,但在所需的帧上定位视频有问题。

我使用SetPosition(),在Pause()通过图传递帧之后,等待过滤器接收第一帧并停止()。

如果我逐帧得到,首先我收到这个时间帧的精确,然后这个帧重复几次,然后再收到确切的帧。

为什么SetPosition会得到错误的结果?

EN

回答 2

Stack Overflow用户

发布于 2009-06-15 18:37:14

解码器需要从前一I帧开始解码。通常,多路分解器将在此之前至少一秒开始推送数据。当您开始接收帧时,您应该检查时间戳,看看它们是否是您想要的帧。您的过滤器将收到一个"NewSegment“调用,该调用给出了在文件中查找的开始位置。如果将此开始时间添加到帧上的采样时间,则将获得帧在文件中的绝对位置,并可以将该位置与请求的位置进行比较。

G

票数 3
EN

Stack Overflow用户

发布于 2009-10-27 20:29:26

渲染完图形后,需要暂停图形。在此之后,您可以使用SetPositions更改要显示的框架。

如下所示:

代码语言:javascript
复制
int ShowFrame(long lFrame)
{
    if (FAILED(m_pMC->Pause()))
       return -1;
    LONGLONG llUnknown = 0;
    LONGLONG  llTime = LONGLONG(m_lFrameTime) * lFrame + m_lFrameTime / 2;
    GUID TimeFormat;
    if (FAILED(m_pMS->GetTimeFormat(&TimeFormat))) return -1;
    if (TimeFormat == TIME_FORMAT_MEDIA_TIME)
    {
       llUnknown = llTime;
    }
    else
    {
       if (FAILED(m_pMS->ConvertTimeFormat(&llUnknown, &TimeFormat, llTime, &TIME_FORMAT_MEDIA_TIME))) return -1;
    }
    if (FAILED(m_pMS->SetPositions(&llUnknown, AM_SEEKING_AbsolutePositioning, 0, AM_SEEKING_NoPositioning))) return -1;
    return 0;
}

m_lFrameTime是每帧的时间,你可以在你的自定义渲染器中获得。当视频渲染器引脚连接时,您可以在该引脚上获得VIDEOINFO::AvgTimePerFrame。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/997062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档