A simple DirectShow example

来源:互联网 发布:工资管理系统数据库 编辑:程序博客网 时间:2024/05/16 11:02
#include <dshow.h>
#include 
"stdio.h"
#pragma comment(lib,"strmiids.lib")
void main(void)
{
    IGraphBuilder 
*pGraph = NULL;
    IMediaControl 
*pControl = NULL;
    IMediaEvent   
*pEvent = NULL;
    
// 初始化COM库
    HRESULT hr = CoInitialize(NULL);
    
if (FAILED(hr))
    
{
        printf(
"ERROR - Could not initialize COM library");
        
return;
    }

    
// 创建筛选器表管理器,并查询接口
    hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, 
        IID_IGraphBuilder, (
void **)&pGraph);
    
if (FAILED(hr))
    
{
        printf(
"ERROR - Could not create the Filter Graph Manager.");
        
return;
    }

    hr 
= pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
    hr 
= pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);
    
// 创建表。
    hr = pGraph->RenderFile(L"C:/aa.mp3", NULL);
    
if (SUCCEEDED(hr))
    
{
        
// 运行表
        hr = pControl->Run();
        
if (SUCCEEDED(hr))
        
{
            
// 等待结束
            long evCode;
            pEvent
->WaitForCompletion(INFINITE, &evCode);
            
// 注意:在实际应用程序中不要使用INFINITE
            
// 因为它对应用程序的阻塞很不确定
        }

    }

    pControl
->Release();
    pEvent
->Release();
    pGraph
->Release();
    CoUninitialize();
}
原创粉丝点击