DirectShow播放视频

本来想用VMR9绘制到D3D的Texture上的, 试着弄了一下, 慢得真够可以的, 还是直接全屏(窗口)放得了

代码也懒得写了, 直接拿SDK里的VMRPlayer中CMovie类用就行

 1: CMovie* g_movie = NULL;
 2: //初始化
 3:  g_movie = new CMovie(g_hWnd);
 4: //载入文件
 5: g_movie->OpenMovie("D://TDDOWNLOAD//Movie//回梦游仙-千年缘.avi");
 6: //播放
 7: g_movie->PlayMovie();
 8: //绘制
 9: RECT rc;
10: ::GetClientRect(g_hWnd, &rc);
11: g_movie->PutMoviePosition(rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top);
12: g_movie->RepaintVideo(g_hWnd, ::GetDC(g_hWnd));

其实这个类一看就明白怎么用....

 1: /* -------------------------------------------------------------------------
 2: ** CMovie - a DirectShow movie playback class.
 3: ** -------------------------------------------------------------------------
 4: */
 5: enum EMovieMode
 6: {
 7: 	MOVIE_NOTOPENED = 0x00,
 8: 	MOVIE_OPENED    = 0x01,
 9: 	MOVIE_PLAYING   = 0x02,
10: 	MOVIE_STOPPED   = 0x03,
11: 	MOVIE_PAUSED    = 0x04
12: };
13: 
14: struct IMpegAudioDecoder;
15: struct IMpegVideoDecoder;
16: struct IQualProp;
17: 
18: class CMovie
19: {
20: private:
21: 	// Our state variable - records whether we are opened, playing etc.
22: 	EMovieMode       m_Mode;
23: 	HANDLE           m_MediaEvent;
24: 	HWND             m_hwndApp;
25: 	GUID             m_TimeFormat;
26: 
27: 	IFilterGraph            *m_Fg;
28: 	IGraphBuilder           *m_Gb;
29: 	IMediaControl           *m_Mc;
30: 	IMediaSeeking           *m_Ms;
31: 	IMediaEvent             *m_Me;
32: 	IVMRWindowlessControl9   *m_Wc;
33: 
34: 	HRESULT AddVideoMixingRendererToFG();
35: 	HRESULT FindInterfaceFromFilterGraph(
36: 		REFIID iid, // interface to look for
37: 		LPVOID *lp  // place to return interface pointer in
38: 		);
39: 
40: public:
41: 	CMovie(HWND hwndApplication);
42: 	~CMovie();
43: 
44: 	HRESULT         OpenMovie(TCHAR *lpFileName);
45: 	DWORD           CloseMovie();
46: 
47: 	BOOL            PlayMovie();
48: 	BOOL            PauseMovie();
49: 	BOOL            StopMovie();
50: 
51: 	OAFilterState   GetStateMovie();
52: 	HANDLE          GetMovieEventHandle();
53: 	long            GetMovieEventCode();
54: 
55: 	BOOL            PutMoviePosition(LONG x, LONG y, LONG cx, LONG cy);
56: 	BOOL            GetMoviePosition(LONG *x, LONG *y, LONG *cx, LONG *cy);
57: 	BOOL            GetNativeMovieSize(LONG *cx, LONG *cy);
58: 	BOOL            CanMovieFrameStep();
59: 	BOOL            FrameStepMovie();
60: 
61: 	REFTIME         GetDuration();
62: 	REFTIME         GetCurrentPosition();
63: 	EMovieMode      StatusMovie();
64: 
65: 	BOOL            SeekToPosition(REFTIME rt,BOOL bFlushData);
66: 	BOOL            IsTimeFormatSupported(GUID Format);
67: 	BOOL            IsTimeSupported();
68: 	BOOL            SetTimeFormat(GUID Format);
69: 
70: 	GUID            GetTimeFormat();
71: 	void            SetFocus();
72: 	BOOL            ConfigDialog(HWND hwnd);
73: 	BOOL            RepaintVideo(HWND hwnd, HDC hdc);
74: 
75: 	HRESULT         SetAppImage(VMR9AlphaBitmap* lpBmpInfo);
76: 	HRESULT         UpdateAppImage(VMR9AlphaBitmap* lpBmpInfo);
77: 	void            SetBorderClr(COLORREF clr);
78: 
79: 	void            DisplayModeChanged();
80: 
81: 	HRESULT         GetCurrentImage(LPBYTE* lplpDib);
82: 
83: 	IVMRMixerControl9 *m_pMixControl;
84: };

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值