全手动连接Filter Graph

博主在Vista环境下,使用VS2008和DX9.0开发了一个全手动连接的filter graph程序,用于视频播放。通过在GraphEdit中模拟视频播放过程,构建了包含MPEG Layer-3 Decoder的graph图,尽管过程简单但颇费精力。
摘要由CSDN通过智能技术生成

 

昨天努了一天,终于搞完了一个全手动连接的filter graph 程序,虽然很简单,但是还是费了老大的劲。不扯了,上菜……

 

开发环境:Vista+VS2008+DX9.0,控制台应用程序(便于调试)

 

第一步:在GraphEdit中模拟视频播放过程。

我的graph图如下,如果不能正常播放,先要注册需要的filter,我就注册了MPEG Layer-3 Decoder:

 
第二步:动手编程吧。
 
1、包含文件:
#include "stdafx.h"
#include <dshow.h>
#pragma comment(lib, "strmiids.lib")
2、定义自己注册的filter,在main()函数前进行定义:
static const GUID CLSID_AudioDecoder=
 { 0x38BE3000,0xDBF4,0x11D0,{0x86,0x0e,0x00,0xa0,0x24,0xcf,0xef,0x6d}};
 
3、定义需要用到的COM组件:
 
IGraphBuilder *pGraph = NULL;
 IMediaControl *pControl = NULL;
 IMediaEvent *pEvent = NULL;
 IBaseFilter *pInputFileFilter = NULL;
 IBaseFilter *pAviSplitter= NULL;
 IBaseFilter *pVideoDecoder= NULL;
 IBaseFilter *pVideoColour= NULL;
 IBaseFilter *pAudioDecoder= NULL;
 IBaseFilter *pDVideoRenderer=NULL;
 IBaseFilter *pDSoundRenderer = NULL;
 IPin *pFileOut = NULL, *pSplitterIn=NULL,
   *pSplitterOut1=NULL,*pSplitterOut2=NULL,
   *pVideoDecIn = NULL,*pVideoDecOut = NULL,*pVideoColIn = NULL,*pVideoColOut = NULL,
   *pVideoRenIn = NULL,*pAudioDecIn = NULL,*pAudioDecOut = NULL,*pAudioRenIn = NULL;
4、COM库初始化:
 HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
 if (FAILED(hr))
 {
  printf("ERROR - Could not initialize COM library");
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值