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

隨筆 - 181  文章 - 15  trackbacks - 0
<2008年2月>
272829303112
3456789
10111213141516
17181920212223
2425262728291
2345678

常用鏈接

留言簿(1)

隨筆分類

隨筆檔案

My Tech blog

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

一、 總覽:

Graph、Filter、Pin、Simple

Graph:可以理解為媒體處理的流程圖。

Filter:可以理解為媒體處理流程圖中的一個步驟。

Pin:可以理解為媒體處理各個步驟之間的數(shù)據(jù)流節(jié)點。

Simple:可以理解為各個形態(tài)的數(shù)據(jù)。

Filter的分類:

· source filter:將數(shù)據(jù)從源(比如媒體文件)引入Graph。

· transform filter:數(shù)據(jù)流入、改變、流出。

· Renderer filters:把最終結(jié)果展現(xiàn)給用戶。

· splitter filter:比如把一個媒體流分解為視頻和音頻。

· mux filter:和splitter filter相反。

1. Graph Manager

主要對處于同一個Graph的Filter(s)進行統(tǒng)一的管理。

比如:

· 各個Filter的狀態(tài)切換

· 建立同步時鐘

· 事件回發(fā)

· 創(chuàng)建

為什么要統(tǒng)一管理狀態(tài)切換?

因為處于同一Graph中的各個Filter的狀態(tài)切換往往需要遵循嚴(yán)格的先后順序。所以一般通過發(fā)送命令給Graph Manager的方式進行各Filter的狀態(tài)變更。

為什么要建立同步時鐘?

比如聲像需要同步。

2. Media Types

結(jié)構(gòu)體AM_MEDIA_TYPE定義了媒體類型。

主要包含如下結(jié)構(gòu):

· Major type: 由一個GUID來表示。通常包含音視頻、未知流、MIDI等等。

· Subtype: 由一個GUID來表示。Major type為視頻,則子類型可以包括RGB-24, RGB-32, UYVY

· Format block: 說明圖形尺寸、幀率等信息。如果Major type為視頻,sub type為RGB-24,則Format block的信息會被自動辨識。

3. SampleAllocator

需要注意的是,各個filter之間并不直接傳送它們各自進行處理的數(shù)據(jù)的指針。它們通過一個暴露IMemAllocator接口的Com組件來分配內(nèi)存。填充了數(shù)據(jù)的內(nèi)存被封裝到Sample里面。各個Filter真正使用的是Sample。Sample通常包含:

· 內(nèi)存指針

· 時間戳

· 標(biāo)識

· 媒體類型(可選)

這里當(dāng)一個Filter使用Sample的時候,它同時掌握這個Sample的引用計數(shù),這樣就有效杜絕了資源爭用現(xiàn)象的發(fā)生。

4. Filter Graph中的硬件

硬件被封裝到Filter中,任何與硬件的交互都轉(zhuǎn)化為與Filter的交互。

二、 Graph-Building 組件

Filter Graph Manager.

Capture Graph Builder:設(shè)計的初衷是視頻捕獲,但是可以衍生很多用途。

Filter Mapper and System Device Enumerator:枚舉可用的filter.

DVD Graph Builder

Video Control

1. 智能拼接

1) 如果在Graph里面有一個沒有輸入的Filter,那么Graph在完成自己的時候,就會考慮這個Filter。如果有一個已有的Filter的流出恰好與這個沒有輸入的Filter的流入相匹配,則將這兩個Filter連接。

2) Graph在完成自己的過程中也會查找所有注冊過的Filter與當(dāng)前非終點Filter的流出進行匹配。注冊的Filter會有一個權(quán)值,作為Graph進行連接嘗試的優(yōu)先級依據(jù)。

步驟:

1) 使用IStreamBuilder(如果pin實現(xiàn)了這個接口,但大多數(shù)情況沒有)。(否則2)

2) 查找被緩存的Filter。(否則3)

3) 查找Graph現(xiàn)有的Filter。(否則4)

4) 查找所有注冊了的Filter。

2. 關(guān)鍵方法

IFilterGraph::ConnectDirect:直接連接兩個Filter,如不成功,返回失敗。

IGraphBuilder::Connect:連接兩個Filter,如果可能,直接連接,否則通過中間Filter(s)進行連接。

IGraphBuilder::Render:你自己建立了一系列從源開始的Filter,基于這些Filter(s)完成Graph。

IGraphBuilder::RenderFile:從一個文件開始完成Graph.

IFilterGraph::AddFilter:向Graph中添加一個Filter

通過這些方法,你可以:

1、 由Graph Manager建立整個Graph。(通過RenderFile)

2、 由Graph Manager建立部分Graph。(比如你想自己寫一個AVI文件,當(dāng)然也可以通過Render來生成預(yù)覽)

3、 完全手動建立整個Graph。(需要自己AddFilter,還需要自己Connect)。

三、 Direct Show 數(shù)據(jù)流概述

1. 關(guān)鍵接口(方法)

IMediaSample:對Filter之間使用的內(nèi)存的封裝。

IMemAllocator::GetBuffer:從allocator獲取Buffer(即ImediaSimple的實現(xiàn)對象)

摘要:

由于Render會按照時間戳來Render數(shù)據(jù),所以它會一直占用它的上一級Filter流入的Simple,直到時間戳所標(biāo)識的時間到達。所以當(dāng)上一級Filter用完了allocator的Simple池中的Simple時,會阻塞而不處理,進而反向影響到更上一級的Filters,從而使它們變?yōu)榈却臓顟B(tài)。同時由于時間戳對于Render的時間上的要求,所有上級Render都必須在Simple的時間戳標(biāo)識的時間到達之前處理完自己對于該Simple的動作。

2. Transport(傳送)

· Push Model(推送模型):上層filter(pin-out)將處理好的數(shù)據(jù)推送給下層filter(pin-in)。下層filter在需要數(shù)據(jù)的時候通過IMemInputPin::Receive來獲取數(shù)據(jù)。

· Pull Model(抓取模型):下層filter(pin-in)在需要數(shù)據(jù)的時候,通過IAsyncReader異步向上層filter請求數(shù)據(jù)。(通常用于視頻文件的回放)

3. Samples and Allocators

1) 引用計數(shù)

上層Filter(pin-out)通過IMemAllocator::GetBuffer向Allocator申請Simple,如果此時沒有Simple的引用計數(shù)為0,則說明Allocator的Simple池中沒有可用的Simple,則GetBuffer的調(diào)用會被阻塞。一旦Simple池中出現(xiàn)可用的Simple,則先前阻塞的GetBuffer放行,并獲取一個引用計數(shù)變?yōu)?的Simple。此Simple處理后,傳遞給下層Filter(pin-in),下層Filter如果在Receive方法中處理Simple,則它與上層Filter的處理處于同一線程中,Simple的引用計數(shù)不會變化,如果下層Filter需要通過創(chuàng)建線程異步使用上層推入的Simple進行處理,則該Simple的引用計數(shù)會加1,變?yōu)?.之后如果上層Filter的推送線程結(jié)束,則Simple的引用計數(shù)減1,變?yōu)?.

2) 提交和撤銷Allocator

IMemAllocator::Commit,在被調(diào)用之前,所有的GetBuffer無效,

調(diào)用IMemAllocator::Decommit之后,所有的GetBuffer調(diào)用無效.

4. Filter 狀態(tài)變化

Filter狀態(tài)的變化由Graph Manager進行控制。

所有的狀態(tài)變化都是自低(Render Filter)向上(Source Filter)進行的。比如暫停的時候,Render Filter會首先暫停,這時候Render之上的Filter中都會存有未能推送的Simple,此時相當(dāng)于在各個Filter之前都堆積了一些等待處理的數(shù)據(jù)。沿著Render向上的Filter逐個暫停,直到Source。當(dāng)狀態(tài)從暫停變化為開始的時候,Render會首先變化為開始狀態(tài),處理在它之前堆積的數(shù)據(jù),并釋放那些被占用的Simple。然后逐步向上直到Source,Source在能夠獲取Simple之后,數(shù)據(jù)繼續(xù)流入Graph,整個Graph進入開始狀態(tài)。

posted on 2008-02-22 22:10 littlegai 閱讀(1095) 評論(0)  編輯 收藏 引用 所屬分類: 我的讀書筆記
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            日韩午夜在线观看视频| 亚洲精品欧美激情| 欧美视频二区36p| 欧美国产日韩一区二区| 国产欧美成人| 亚洲视频一区在线| av成人免费在线| 免费人成精品欧美精品| 久久久久欧美精品| 国产精品稀缺呦系列在线| 亚洲精品中文在线| 亚洲日本一区二区三区| 久久久久综合网| 久久人人爽人人| 国产精品亚发布| 亚洲社区在线观看| 亚洲综合99| 国产精品久久久久天堂| 一区二区三区国产在线观看| 一本大道久久a久久综合婷婷| 久久久天天操| 免费看成人av| 亚洲电影有码| 欧美激情国产精品| 亚洲卡通欧美制服中文| 日韩午夜视频在线观看| 欧美精品日韩综合在线| 亚洲免费av片| 亚洲在线网站| 国产日产高清欧美一区二区三区| 亚洲少妇中出一区| 欧美中文在线字幕| 国产在线精品成人一区二区三区| 欧美在线黄色| 免费试看一区| 亚洲另类一区二区| 欧美视频国产精品| 亚洲免费视频一区二区| 久久久中精品2020中文| 亚洲高清av在线| 欧美日本一区二区高清播放视频| 日韩午夜三级在线| 欧美一区2区三区4区公司二百| 国产午夜精品美女视频明星a级 | 欧美成人一品| 日韩视频二区| 久久成人免费日本黄色| 在线国产欧美| 欧美精品激情在线观看| 亚洲亚洲精品在线观看| 久久在线免费观看视频| 亚洲精品婷婷| 国产日韩精品视频一区二区三区| 久久久久久久精| 亚洲日韩欧美视频| 性做久久久久久久免费看| 国语自产精品视频在线看一大j8 | 亚洲精品视频中文字幕| 欧美色图天堂网| 欧美在线视频免费观看| 亚洲国产91| 欧美一区91| 亚洲乱码国产乱码精品精| 国产精品久久一区二区三区| 久久久精品tv| 一本综合精品| 欧美成人蜜桃| 亚欧成人精品| 一级日韩一区在线观看| 黑人一区二区三区四区五区| 欧美区一区二| 玖玖综合伊人| 午夜精品视频在线观看一区二区| 91久久国产综合久久蜜月精品 | 一区二区三区国产精华| 免费久久99精品国产自| 欧美伊人久久久久久午夜久久久久 | 亚洲精品国久久99热| 国产日韩欧美不卡在线| 欧美日韩精品免费看| 久久天堂成人| 午夜精品视频在线观看一区二区| 亚洲精品一二| 亚洲国产成人av好男人在线观看| 久久国产免费看| 亚洲一区二区三区成人在线视频精品| 伊人男人综合视频网| 国产午夜亚洲精品理论片色戒| 欧美日韩国产探花| 欧美第十八页| 久久综合电影一区| 久久视频国产精品免费视频在线| 午夜精品视频在线| 亚洲一卡久久| 亚洲视频欧洲视频| 中国成人亚色综合网站| 亚洲精品视频一区二区三区| 欧美黄污视频| 欧美成人免费全部| 欧美承认网站| 欧美高清在线| 欧美激情片在线观看| 欧美国产高清| 欧美成人一区二区三区片免费| 老色批av在线精品| 免费成人av资源网| 欧美国产日韩视频| 亚洲国产成人精品女人久久久 | 亚洲福利免费| 亚洲高清不卡一区| 最新日韩欧美| 一本久久综合亚洲鲁鲁| 日韩视频免费大全中文字幕| 一本色道久久88综合日韩精品| 亚洲精品视频在线播放| 日韩手机在线导航| 亚洲一区二区在线免费观看视频| 亚洲女爱视频在线| 欧美一区二区在线看| 久久久久一区| 欧美激情视频一区二区三区免费 | 午夜日韩激情| 久久天天躁夜夜躁狠狠躁2022| 毛片av中文字幕一区二区| 欧美国产日本韩| 欧美三级电影网| 国产精品色婷婷久久58| 国产在线精品二区| 91久久亚洲| 亚洲女人小视频在线观看| 久久久999国产| 欧美国产一区在线| 亚洲视频免费在线| 久久精品国产69国产精品亚洲 | 亚洲天堂偷拍| 欧美在线播放一区| 欧美国产欧美综合| 中文精品视频| 欧美一区二区三区在| 欧美大片一区二区三区| 国产精品欧美激情| 樱桃成人精品视频在线播放| 9人人澡人人爽人人精品| 午夜精品美女自拍福到在线| 久久综合精品一区| 99在线|亚洲一区二区| 欧美在线视频免费播放| 欧美激情精品久久久久| 国产精品网站视频| 亚洲激情黄色| 欧美在线视频播放| 亚洲精品日产精品乱码不卡| 欧美一区二区私人影院日本| 欧美日韩a区| 1024国产精品| 欧美在线视频观看免费网站| 欧美激情亚洲一区| 欧美在线视频a| 国产精品电影网站| 亚洲国产综合在线看不卡| 性欧美大战久久久久久久免费观看| 欧美成人69| 久久av资源网站| 国产精品视区| 中国成人黄色视屏| 亚洲国产精品va在线看黑人动漫| 欧美一区二区三区久久精品| 欧美午夜不卡视频| 亚洲免费观看在线观看| 免费不卡在线视频| 久久国产精品久久久久久电车| 国产精品白丝jk黑袜喷水| 亚洲精品国产精品国自产在线| 老色批av在线精品| 新67194成人永久网站| 国产精品久久影院| 中文在线一区| 亚洲免费av电影| 欧美精品一区二区三区四区| 亚洲高清电影| 欧美mv日韩mv国产网站| 久久久久五月天| 黄色成人av网站| 久久看片网站| 久久国产精品毛片| 国内精品久久久久久 | 亚洲国产裸拍裸体视频在线观看乱了| 久久精品99国产精品| 亚洲永久免费观看| 欧美午夜视频在线观看| 亚洲一区国产视频| 亚洲午夜精品一区二区三区他趣| 欧美视频在线一区| 亚洲一区在线视频| 久久免费午夜影院| 欧美一区三区三区高中清蜜桃| 欧美亚男人的天堂| 亚洲欧美福利一区二区| 亚洲制服av| 国产女主播一区二区三区|