• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 关于DirectShow的问题,DirectX编程高手请帮忙

关于DirectShow的问题,DirectX编程高手请帮忙

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了directshow,directshow9.0下载,directshow9官方下载,directshow开发指南,directshow下载等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 关于DirectShow的问题,DirectX编程高手请帮忙
描述:

下面的代码我下载的一个源代码的片段,源程序目的是从视频中提取一帧,下面代码片段创建了IGraphBuilder和ISampleGrabber接口的实例,利用ISampleGrabber实现帧的抓取。源程序我已经在 Windows XP + Visual C++ 6.0 + DirectX 9.0b SDK 下编译通过,可是实际运行,却无法抓取视频的帧,调试后,发现错误在下面代码片段的末尾 pMediaControl->Run() 这句话上,他的返回值是1,而不是调用成功了以后的0,我很奇怪,检查自己电脑的DirectX版本为9.0b,我将编译后的执行文件又分别放到了DX版本分别为8.1和6.4的另外两台电脑上,结果DX版本为8.1的电脑可以正常运行程序并成功将视频帧提取出来,而DX版本为6.4的电脑和我那DX版本为9的电脑一样无法实现程序功能,请问是什么原因造成的?如何解决?
PS:我所使用的视频采用MPEG-1标准压缩。
// Create graph builder
   CComPtr<IGraphBuilder> pGraphBuilder;
   HRESULT hr = ::CoCreateInstance(CLSID_FilterGraph, NULL, 
                       CLSCTX_INPROC_SERVER, IID_IGraphBuilder, 
                       (void**)&pGraphBuilder);
   if (FAILED(hr))  return hr;
   ASSERT(pGraphBuilder != NULL);
// Create Grabber filter
   CComPtr<IBaseFilter>    pGrabberBaseFilter;
   CComPtr<ISampleGrabber> pSampleGrabber;
   AM_MEDIA_TYPE   mt;
   hr = ::CoCreateInstance(CLSID_SampleGrabber, NULL, 
          CLSCTX_INPROC_SERVER, IID_IBaseFilter, 
          (LPVOID *)&pGrabberBaseFilter);
   if (FAILED(hr))  return hr;
   pGrabberBaseFilter->QueryInterface(IID_ISampleGrabber, 
                                     (void**)&pSampleGrabber);
   if (pSampleGrabber == NULL)  return E_NOINTERFACE;
   hr = pGraphBuilder->AddFilter(pGrabberBaseFilter,L"Grabber");
   if (FAILED(hr))  return hr;
// Set media type
   ZeroMemory(&mt, sizeof(AM_MEDIA_TYPE));
   mt.majortype = MEDIATYPE_Video;
   mt.subtype = MEDIASUBTYPE_RGB24;
   mt.formattype = FORMAT_VideoInfo; 
   hr = pSampleGrabber->SetMediaType(&mt);        
   if (FAILED(hr))  return hr;
   hr = pGraphBuilder->RenderFile(wFile,NULL);
   if (FAILED(hr))  return hr;
        
   CComPtr<IMediaControl> pMediaControl;
   CComPtr<IMediaEvent> pMediaEventEx;
// QueryInterface for some basic interfaces
   pGraphBuilder->QueryInterface(IID_IMediaControl, 
                                (void **)&pMediaControl);
   pGraphBuilder->QueryInterface(IID_IMediaEvent, 
                                (void **)&pMediaEventEx);
   if (pMediaControl == NULL || pMediaEventEx == NULL)
    return E_NOINTERFACE;
// Set up one-shot mode.
   hr = pSampleGrabber->SetBufferSamples(TRUE);
   if (FAILED(hr))  return hr;
   hr = pSampleGrabber->SetOneShot(TRUE);
   if (FAILED(hr))  return hr;
   CComQIPtr<IMediaSeeking> pSeek = pMediaControl;
   if (pSeek == NULL)
    return E_NOINTERFACE;
   LONGLONG Duration;
   hr = pSeek->GetDuration(&Duration);
   if (FAILED(hr))  return hr;
   int NumSecs = int(Duration/10000000);
   REFERENCE_TIME rtStart = 1 * 10000000;
   if (NumSecs < 1)
    rtStart = 0;
   REFERENCE_TIME rtStop = rtStart; 
            
   hr = pSeek->SetPositions(&rtStart, AM_SEEKING_AbsolutePositioning,
                            &rtStop, AM_SEEKING_AbsolutePositioning);
   if (FAILED(hr))  return hr;
   CComQIPtr<IVideoWindow> pVideoWindow = pGraphBuilder;
   hr = pVideoWindow->put_AutoShow(OAFALSE);
   if (FAILED(hr))  return hr;
// Run the graph and wait for completion.
   hr = pMediaControl->Run();
   if (FAILED(hr))  return hr;


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 关于directshow和directmusic部分问题
  • 关于使用directshow中的playcap例子改写成ocx中出现的问题
  • 用Directshow如何得到视频文件如avi、asf中视频的宽和高?
  • 请教用过DIRECTSHOW的各位!急!
  • 急。。。。。。。。。。。通过directshow开发多媒体播放器中,如何实现后退功能,以及退回一帧图片功能
  • directshow的显示问题
  • DirectX里怎么没有DirectShow
  • 关于音轨和声道的问题DirectShow?
  • directShow编译的问题,小弟在编译一个例子,通不过!请大家帮忙
  • 在directshow中如何做一个可以提供一个有序流的renderfitler,一有新数据来就让外面取走

相关文章

  • 2017-06-04 有人知道上海挑战和江西金格的电子签章的透明是怎么做的吗?
  • 2017-06-05 WMI遇到了个小问题。。wcout竟然输出不了信息
  • 2017-06-04 向导中AtlComAppWizard和MFCActiveXConctrlWizard有什么区别?
  • 2017-06-05 没有好用的调试器。。。
  • 2017-06-05 关于CWinThread
  • 2017-06-04 ATL中暴露相同的方法,不同的参数怎么办?
  • 2017-06-05 如何在vc中链接bcb产生的dll
  • 2017-06-04 activex的可见和不可见是怎么实现的
  • 2017-06-04 DCOM连接问题???
  • 2017-06-04 用vc编的activex控件如何获取ie的接口?请大家帮忙!

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 使用IHTMLDocument2接口操作IE里的网页
    • 请教高人,开发一个插件给某种原有的windows程序增加额外的功能是怎么实现的?
    • 多线程同时写队列问题,在线等,一定结贴,顶者有分!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    • ?????100分
    • 如何调用dll,为什么出错
    • 如何跨网段搜索设备啊
    • 谁给一个使用safearray的例子,要求能在vb里调用
    • VC6要写给ASP能调用的dll要注意什么?
    • VC中如何调用脚本接口执行脚本!(分不够可以再加)
    • 窗口过程重载-“不同进程“?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有