• 沒有找到結果。

在此節中,我們將重要的模組、功能及機制作一詳細的描述。

5.1.1 系統程式流程

以下是系統的程式流程圖,首先使用者透過使用者介面選擇要播放的

MPEG-4檔案,接著MPEG-4解析模組會將這個MPEG-4檔案解開,取出每一個atom的資料,

並且將每一個追縱的原始資料(raw data)取出。BIFS解析模組負責解析場景的資料,

MPEG-4 file

使用者介面 模組

MPEG-4解析模組

BIFS解析模組

場景處理模組 資料處理模組

Show出畫面

圖 22:系統程式流程圖

5.1.1 解析 atom 流程圖

在上一章的時候,我們已經知道,透過前 8 個 byte 我們就可以得到 atom 的 資料。每一個 atom 都有可能會有子 atom,而且可能不只一個,所以我們必須一

直不斷的遞迴呼叫下去,當一個 atom 沒有子 atom 的時候,表示它是最底層的 atom 這時就可以把它的資料讀取出來存到它所屬的 atom 物件之中。

讀8個 b start

圖 23:解析 atom 流程圖

5.1.3 atom 類別圖

每個 atom 都有自己專屬的欄位,用來存放每個 atom 獨有資訊。我所設計的 atom 類別,都是由 FullAtom 類別繼承下來,故所有的 atom 都有共同的欄位如 下:type, uuid, size, version, flag。且每個 atom 都有自己的 parse 函式,用來讀取 MPEG-4 檔案中的位元組資料,並且把它存在 atom 中。

由於 atom 的種類非常的多,一張圖無法畫得下,所以只畫出一些重要的 atom。

讀取資料

存到atom物件 中 有子atom?

start 否

是 母atom中有下

一個子atom?

+parse() : void

+parse() : void -SampleSizeAtom 代表的意義,最重要的資訊有 4 種,分別是 node id、node type、field type、和 field value,因為多媒體物件是由 node 所構成,所以經過解析之後,就可以知道每個 多媒體物件是由那些 node 所構成,而每個 field 中的值,正是多媒體物件本身在 場景之中的屬性。另外還有 route,這個資訊和動畫與互動這兩項功能有關。

GetBits 函式會根據所輸入的參數: 目前要從 BIFS 資料追縱裡得到幾個位 元,來讀取位元資料。

BifsDecode 就是解析 BIFS 二位元碼的函式,首先它會處理最外層的 3 種節 點:OrderedGroup, Group, Conditional,整個 BIFS 場景描述其實就是這三種最外 層的節點所構成。這 3 種節點,都可內含更多的子節點,每一個節點都有自己的 解析函式名為 NodeDecode 函式,Node 就是節點的名字,舉例來說 Group 的解 析函式為 GroupDecode。

每一個 NodeDecode 函式由於知道目前正在解析的是那一種節點,所以就會 照著那個節點所定義的欄位去解析。

Conditional 節點會紀錄很多動畫與互動的一些 BIFS-Command,所以在解開 這些 BIFS-Command 時有一個函式為 DecodeCommandBuffer,我定義了 Scenario 類別來存放這些指令,使得場景執行的時候,只要去讀 Scenario 所存放的資訊就 能使得場景被正確呈現出來。

另外,還有一 routing table 的資料結構,來存放有那些新增的路徑(route),

從這個節點的這個欄位到達那個節點的那個欄位的資訊記錄下來,當有某節點一 欄位有事件產生出來之時(eventOut)會去檢查這個 table,是否有路徑導向另一個

節點的欄位,做出相對應的處理。

圖 25:解析 node 流程圖

每一個 Group 節點可視 圖說明一圖片多媒體物件

用 B

為一個多媒體物件,下面的 IFS 來呈現:

圖 26:BIFS 中一多媒體物件的語法

true

“isReused” bits

“node type” bits

“node id” bits false

true

false

“field type” bits

“field value” bits

true

false

End of BIFS isUpdat

Start of

field end?

node end?

圖片多媒 體物件

5.1.5 MediaObjects 類別圖

在解所 BIFS 的資料的同時,亦會把所有物件場景資訊存入資料結構中,此 資料結構就是我所設計的 MediaObject。MediaObject 又分為 3 個子類別,分別是 ImageMediaObject, TextMediaObject, AudioMediaObject 分別存放的是圖片、文 字、聲音的多媒體物件資料,這些資料包括了物件本身屬性如位置、大小、移動 的”paint”函式,而 ImageMediaObject 和 TextMediaObject 的 paint 函式的實作方式 是完全不同的,一個是把一張圖繪出而另一個是把文字顯示在畫面上,故他們都 有從 MediaObject 繼承而來的 paint 函式,但是它們有各自的實作方法。用同樣 的父指標指向它們,然後呼叫父指標的 paint 函式,那麼執行時就會執行各自的 paint 函式,最後構成整個場景。

六、系統功能展示

本研究製作一個在手持裝置上的 MPEG-4 播放器,其操作的流程與系統的 外觀,將在本章做一個介紹。首先,使用者啟動播放器程式,接著選擇要播放的 MP4 檔案。操作順序如圖到圖,使用者可直接播放 MP4 檔案,暫停播放,或者 結束整個播放程式,在播放器的右下角有顯示目前開始播放的時間。

相關文件