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

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

常用鏈接

留言簿(1)

隨筆分類

隨筆檔案

My Tech blog

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

一、 總覽:

Graph、Filter、Pin、Simple

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

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

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

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

Filter的分類:

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

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

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

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

· mux filter:和splitter filter相反。

1. Graph Manager

主要對(duì)處于同一個(gè)Graph的Filter(s)進(jìn)行統(tǒng)一的管理。

比如:

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

· 建立同步時(shí)鐘

· 事件回發(fā)

· 創(chuàng)建

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

因?yàn)樘幱谕籊raph中的各個(gè)Filter的狀態(tài)切換往往需要遵循嚴(yán)格的先后順序。所以一般通過(guò)發(fā)送命令給Graph Manager的方式進(jìn)行各Filter的狀態(tài)變更。

為什么要建立同步時(shí)鐘?

比如聲像需要同步。

2. Media Types

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

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

· Major type: 由一個(gè)GUID來(lái)表示。通常包含音視頻、未知流、MIDI等等。

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

· Format block: 說(shuō)明圖形尺寸、幀率等信息。如果Major type為視頻,sub type為RGB-24,則Format block的信息會(huì)被自動(dòng)辨識(shí)。

3. SampleAllocator

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

· 內(nèi)存指針

· 時(shí)間戳

· 標(biāo)識(shí)

· 媒體類型(可選)

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

4. Filter Graph中的硬件

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

二、 Graph-Building 組件

Filter Graph Manager.

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

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

DVD Graph Builder

Video Control

1. 智能拼接

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

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

步驟:

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

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

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

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

2. 關(guān)鍵方法

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

IGraphBuilder::Connect:連接兩個(gè)Filter,如果可能,直接連接,否則通過(guò)中間Filter(s)進(jìn)行連接。

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

IGraphBuilder::RenderFile:從一個(gè)文件開(kāi)始完成Graph.

IFilterGraph::AddFilter:向Graph中添加一個(gè)Filter

通過(guò)這些方法,你可以:

1、 由Graph Manager建立整個(gè)Graph。(通過(guò)RenderFile)

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

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

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

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

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

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

摘要:

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

2. Transport(傳送)

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

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

3. Samples and Allocators

1) 引用計(jì)數(shù)

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

2) 提交和撤銷Allocator

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

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

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

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

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

posted on 2008-02-22 22:10 littlegai 閱讀(1094) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 我的讀書(shū)筆記
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            一本到高清视频免费精品| 亚洲在线不卡| 亚洲精品视频一区| 国产精品三区www17con| 久久午夜精品一区二区| 99精品视频免费| 亚洲免费伊人电影在线观看av| 在线看国产日韩| 亚洲一区免费看| 一区二区免费在线观看| 日韩图片一区| 亚洲国产三级在线| 久久免费精品日本久久中文字幕| 欧美一区二区三区久久精品| 久久精品一区四区| 午夜精品久久久久久久久久久久| 99国产精品国产精品毛片| 精品白丝av| 欧美日韩在线直播| 欧美三区在线| 国产精品一区二区a| 欧美激情影音先锋| 欧美日韩视频一区二区| 久热精品在线视频| 欧美国产日韩亚洲一区| 在线亚洲激情| 美国十次了思思久久精品导航| 欧美三区美女| 一区二区三区我不卡| 日韩视频专区| 久久综合成人精品亚洲另类欧美| 亚洲精品视频在线| 久久国产精品72免费观看| 欧美精品xxxxbbbb| 国内精品久久久久久影视8| 日韩一级在线| 六月婷婷一区| 亚洲欧美国产另类| 欧美日本一区二区三区| 在线观看日韩专区| 久久久www成人免费无遮挡大片| 亚洲日本无吗高清不卡| 久久久久久噜噜噜久久久精品| 欧美日韩免费高清| 99视频日韩| 亚洲高清在线精品| 久久精品亚洲乱码伦伦中文| 国产精品人成在线观看免费 | 在线看欧美视频| 亚洲欧美日本国产有色| 亚洲人成人一区二区在线观看| 性色av一区二区三区在线观看| 国产精品成人观看视频免费| 日韩视频不卡中文| 亚洲高清视频一区| 欧美阿v一级看视频| 尤物视频一区二区| 老牛嫩草一区二区三区日本| 欧美在线免费观看亚洲| 国产日韩欧美在线观看| 午夜精品久久久久| 亚洲男人av电影| 国产欧美成人| 久久久人人人| 老司机精品视频一区二区三区| 红桃视频一区| 美国十次成人| 欧美成人午夜免费视在线看片| 亚洲在线播放电影| 欧美激情视频网站| 国产日韩欧美一区在线| 欧美一区二区黄色| 欧美一区二区视频免费观看| 在线观看日产精品| 亚洲国产99精品国自产| 欧美精品一区二区三区很污很色的| 亚洲精品亚洲人成人网| 91久久在线播放| 欧美午夜不卡| 久久久亚洲国产美女国产盗摄| 久久午夜国产精品| 日韩视频在线一区二区三区| 亚洲美女诱惑| 国产日产欧美精品| 欧美3dxxxxhd| 欧美私人啪啪vps| 久久久久久久一区二区三区| 老司机午夜精品视频| 一区二区三区四区五区精品视频| 亚洲网站在线观看| 极品少妇一区二区三区精品视频| 亚洲国产导航| 国产精品人人爽人人做我的可爱| 久久夜色撩人精品| 欧美三日本三级少妇三2023| 久久久精品一区| 欧美交受高潮1| 久久久久久精| 欧美性色综合| 欧美成ee人免费视频| 欧美日韩一区二区三区视频 | 久久免费国产| 亚洲天天影视| 久久美女艺术照精彩视频福利播放| 一本色道久久综合狠狠躁的推荐| 亚洲一二三区精品| 亚洲精品一二三| 亚洲女ⅴideoshd黑人| 亚洲国产清纯| 久久精品99国产精品日本| 在线亚洲观看| 欧美电影在线播放| 久久精品国产一区二区电影| 欧美黄色aa电影| 免费国产自线拍一欧美视频| 国产精品视频一二三| 亚洲精品社区| 亚洲高清自拍| 久久久www成人免费精品| 亚洲欧美卡通另类91av| 欧美久久视频| 亚洲国产一成人久久精品| 红桃视频一区| 欧美一区二区观看视频| 亚洲欧美在线另类| 国产精品白丝黑袜喷水久久久 | 日韩午夜在线电影| 亚洲国产日韩在线| 久久久久网站| 国内精品写真在线观看| 亚洲免费在线观看| 欧美午夜欧美| 亚洲精品免费观看| 亚洲精品国产系列| 男女激情久久| 欧美国产在线电影| 亚洲国产高清一区| 老牛国产精品一区的观看方式| 久久精品99国产精品酒店日本| 国产欧美一区二区精品忘忧草| 亚洲性色视频| 久久成人18免费观看| 国产精品入口夜色视频大尺度 | 久久精品综合网| 久久久一本精品99久久精品66| 国产日本欧美一区二区三区| 午夜久久电影网| 久久九九久精品国产免费直播| 国内精品免费在线观看| 久久在线观看视频| 亚洲电影专区| 一本色道综合亚洲| 国产精品日日做人人爱| 欧美在线亚洲一区| 欧美电影在线观看完整版| 亚洲国产另类 国产精品国产免费| 免费欧美视频| 日韩午夜在线电影| 午夜电影亚洲| 在线播放日韩欧美| 欧美久久九九| 亚洲女同同性videoxma| 玖玖精品视频| 亚洲一区二区免费看| 国产亚洲成人一区| 欧美fxxxxxx另类| 在线一区二区视频| 久久只精品国产| 一本大道av伊人久久综合| 国产精品爽爽ⅴa在线观看| 久久精品九九| 一区二区三区视频在线看| 久久综合狠狠| 亚洲一区二区三区四区中文 | **性色生活片久久毛片| 欧美日韩一区二区在线播放| 亚洲一区二区三区激情| 欧美大片网址| 久久国产加勒比精品无码| 亚洲精品偷拍| 国产亚洲欧洲997久久综合| 欧美高清视频在线| 欧美影视一区| 亚洲社区在线观看| 欧美激情视频在线播放| 欧美中文字幕视频| 艳妇臀荡乳欲伦亚洲一区| 依依成人综合视频| 国产精品拍天天在线| 欧美精品激情在线| 久久女同精品一区二区| 亚洲欧美电影在线观看| 亚洲精品久久久久久久久久久久| 久久国产主播精品| 亚洲一区二区欧美| 中日韩视频在线观看| 亚洲香蕉在线观看| 亚洲国产精品va在线看黑人动漫 | 一区二区三区四区国产| 亚洲第一在线综合网站|