青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

In my way

On my way

常用鏈接

統(tǒng)計(jì)

最新評論

How To Play a File use DirectShow?


DirectShow application always performs the same basic steps:
  1. Create an instance of the Filter Graph Manager.
  2. Use the Filter Graph Manager to build a filter graph.
  3. Run the graph, causing data to move through the filters.

Start by calling CoInitialize to initialize the COM library:

HRESULT hr = CoInitialize(NULL);
if (FAILED(hr))
{
// Add error-handling code here. (Omitted for clarity.)
}

To keep things simple, this example ignores the return value, but you should always check the HRESULT value from any method call.

Next, call CoCreateInstance to create the Filter Graph Manager:

IGraphBuilder *pGraph;
HRESULT hr = CoCreateInstance(CLSID_FilterGraph, NULL,
CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGraph);

As shown, the class identifier (CLSID) is CLSID_FilterGraph. The Filter Graph Manager is provided by an in-process DLL, so the execution context is CLSCTX_INPROC_SERVER. DirectShow supports the free-threading model, so you can also call CoInitializeEx with the COINIT_MULTITHREADED flag.

The call to CoCreateInstance returns the IGraphBuilder interface, which mostly contains methods for building the filter graph. Two other interfaces are needed for this example:

  • IMediaControl controls streaming. It contains methods for stopping and starting the graph.
  • IMediaEvent has methods for getting events from the Filter Graph Manager. In this example, the interface is used to wait for playback to complete.

Both of these interfaces are exposed by the Filter Graph Manager. Use the returned IGraphBuilder pointer to query for them:

IMediaControl *pControl;
IMediaEvent   *pEvent;
hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
hr = pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);

Now you can build the filter graph. For file playback, this is done by a single method call:

hr = pGraph->RenderFile(L"C:\\Example.avi", NULL);

The IGraphBuilder::RenderFile method builds a filter graph that can play the specified file. The first parameter is the file name, represented as a wide character (2-byte) string. The second parameter is reserved and must equal NULL.

This method can fail if the specified file does not exist, or the file format is not recognized. Assuming that the method succeeds, however, the filter graph is now ready for playback. To run the graph, call the IMediaControl::Run method:

hr = pControl->Run();

When the filter graph runs, data moves through the filters and is rendered as video and audio. Playback occurs on a separate thread. You can wait for playback to complete by calling the IMediaEvent::WaitForCompletion method:

long evCode = 0;
pEvent->WaitForCompletion(INFINITE, &evCode);

This method blocks until the file is done playing, or until the specified time-out interval elapses. The value INFINITE means the application blocks indefinitely until the file is done playing. For a more realistic example of event handling, see Responding to Events.

When the application is finished, release the interface pointers and close the COM library:

pControl->Release();
pEvent->Release();
pGraph->Release();
CoUninitialize();

Sample Code

Here is the complete code for the example described in this article:



#include 
<dshow.h>
void main(void)
{
    IGraphBuilder 
*pGraph = NULL;
    IMediaControl 
*pControl = NULL;
    IMediaEvent   
*pEvent = NULL;

    
// Initialize the COM library.
    HRESULT hr = CoInitialize(NULL);
    
if (FAILED(hr))
    
{
        printf(
"ERROR - Could not initialize COM library");
        
return;
    }


    
// Create the filter graph manager and query for interfaces.
    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);

    
// Build the graph. IMPORTANT: Change this string to a file on your system.
    hr = pGraph->RenderFile(L"C:\\Example.avi", NULL);
    
if (SUCCEEDED(hr))
    
{
        
// Run the graph.
        hr = pControl->Run();
        
if (SUCCEEDED(hr))
        
{
            
// Wait for completion.
            long evCode;
            pEvent
->WaitForCompletion(INFINITE, &evCode);

            
// Note: Do not use INFINITE in a real application, because it
            
// can block indefinitely.
        }

    }

    pControl
->Release();
    pEvent
->Release();
    pGraph
->Release();
    CoUninitialize();
}



posted on 2009-04-09 10:26 谷主 閱讀(569) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品久99| 久久婷婷国产综合精品青草 | 国产精品二区三区四区| 日韩视频在线观看免费| 久久国产手机看片| 91久久精品国产91久久性色tv| 99国产精品久久久久久久成人热| 欧美 亚欧 日韩视频在线| 亚洲免费电影在线观看| 久久精品视频在线播放| 欧美日韩国产不卡在线看| 国产一区二区精品久久91| 亚洲一区二区三区高清| 亚洲电影第三页| 久久av一区二区三区| 国产精品二区二区三区| 久久成人免费日本黄色| 亚洲午夜激情网站| 欧美精品系列| 日韩视频在线观看| 亚洲一区免费看| 国产精品久久久久久久久久直播 | 亚洲在线播放电影| 亚洲国产精品久久久久秋霞蜜臀 | 久久久免费精品视频| 国产精品一区久久久| 91久久在线视频| 久久嫩草精品久久久精品一| 亚洲欧美成人一区二区在线电影| 牛牛影视久久网| 在线观看一区欧美| 欧美成年人网站| 国产精品播放| 亚洲欧美国产高清| 亚洲一区二区三区免费在线观看| 黄色成人av在线| 欧美99久久| 国产精品美女主播在线观看纯欲| 欧美a级理论片| 国产精品视频免费观看www| 午夜久久久久| 欧美一区免费视频| 亚洲国产mv| 欧美激情中文字幕在线| 欧美福利一区| 亚洲性视频网站| 男人的天堂亚洲| 久久精品视频在线| 国产精品萝li| 99综合视频| 国产一区二区三区电影在线观看| 亚洲美女av网站| 国产精品99一区| 亚洲级视频在线观看免费1级| 韩国三级电影一区二区| 亚洲欧美综合国产精品一区| 国产综合色一区二区三区| 欧美电影免费观看| 欧美深夜影院| 久久漫画官网| 国产日韩欧美综合在线| 欧美激情1区2区| 亚洲第一久久影院| 久久久久久国产精品一区| 久久精品夜色噜噜亚洲aⅴ| 久久综合色天天久久综合图片| 亚洲免费观看高清完整版在线观看熊| 艳女tv在线观看国产一区| 日韩一区二区精品视频| 麻豆精品一区二区综合av | 国产亚洲高清视频| 午夜在线成人av| 99精品免费| 欧美日韩国产综合新一区| 亚洲九九九在线观看| 一本色道久久88综合亚洲精品ⅰ| 亚洲影视在线播放| 羞羞色国产精品| 欧美日韩成人免费| 夜夜嗨av一区二区三区四季av | 亚洲制服少妇| 国产精品永久免费观看| 亚洲欧美在线看| 久久综合久久美利坚合众国| 欧美日韩亚洲激情| 欧美高清视频在线观看| 亚洲精品影视在线观看| 欧美日韩国产黄| 亚洲欧美另类综合偷拍| 久久婷婷国产综合精品青草| 亚洲经典一区| 久久久国产视频91| 亚洲国产成人不卡| 一区二区三区视频免费在线观看 | 91久久中文| 亚洲一区二区三区中文字幕| 国产欧美日韩专区发布| 日韩一区二区电影网| 欧美一级专区| 国产精品综合视频| 久久青青草原一区二区| 亚洲免费激情| 久久久五月婷婷| 99精品欧美一区二区三区| 国产人成一区二区三区影院| 久久综合国产精品台湾中文娱乐网| 亚洲精品久久| 一本色道久久综合亚洲精品小说| 国产精品每日更新| 免费亚洲一区| 校园春色综合网| 99视频精品全部免费在线| 久久久久久亚洲精品杨幂换脸| 亚洲精选一区| 国内精品写真在线观看| 欧美日韩一区二区视频在线观看| 欧美一区亚洲二区| 亚洲少妇中出一区| 欧美综合激情网| 一本色道久久加勒比精品 | 欧美精品www在线观看| 欧美一区二区三区电影在线观看| 亚洲精品视频在线观看免费| 久久久91精品国产一区二区三区 | 亚洲欧洲日产国产综合网| 国产精品中文字幕在线观看| 欧美承认网站| 亚洲久色影视| 欧美高清视频免费观看| 久久精品亚洲一区二区| 亚洲欧美日韩成人| 艳妇臀荡乳欲伦亚洲一区| 永久555www成人免费| 欧美黄在线观看| 美国十次成人| 久久精品五月| 久久成人精品无人区| 亚洲人成毛片在线播放| 欧美福利一区| 欧美成人精品高清在线播放| 久久亚洲二区| 久久深夜福利| 久久视频一区| 麻豆精品传媒视频| 亚洲一二三四久久| 亚洲性感美女99在线| aa成人免费视频| 一区二区三区四区国产精品| 亚洲美洲欧洲综合国产一区| 亚洲精品日韩久久| 国产日韩精品视频一区二区三区| 国产精品久久久久久亚洲调教| 欧美日韩亚洲免费| 国产精品女主播| 国产伦理一区| 狠狠色丁香婷婷综合影院| 一区二区三区在线看| 欧美日韩综合另类| 国产精品高潮在线| 国产亚洲综合精品| 在线电影国产精品| 亚洲精品一区二区三区蜜桃久| 亚洲精品日韩欧美| 亚洲一区二区黄| 欧美一二区视频| 久久综合精品一区| 欧美激情视频在线播放| 日韩视频在线永久播放| 亚洲女女女同性video| 欧美中文字幕在线| 欧美高清视频在线播放| 国产精品久久久久久久浪潮网站| 国产日产精品一区二区三区四区的观看方式 | 午夜亚洲视频| 久久一区二区三区超碰国产精品| 免费欧美在线视频| 久久九九国产| 欧美激情一区二区三区高清视频 | 亚洲线精品一区二区三区八戒| 亚洲香蕉网站| 久久亚洲高清| 欧美系列精品| 在线欧美日韩国产| 亚洲一区二区在线免费观看| 久久久久在线| 日韩视频在线观看免费| 久久xxxx| 国产精品sm| 亚洲日本电影| 久久九九有精品国产23| 日韩视频在线观看免费| 久久九九国产精品| 国产精品久久久亚洲一区 | 欧美日韩直播| 伊人激情综合| 欧美中文在线字幕| 99pao成人国产永久免费视频| 久久久久网站| 国产午夜精品在线| 亚洲男女自偷自拍|