• 沒有找到結果。

Instance 資料結構

第二章 TSSA 模組架構

2.2 模組的資料結構

2.2.2 Instance 資料結構

Instance 資料結構的內容主要是設定模組運作時必要的參數或函式連結,在一個模 組的 Instance 結構中涵蓋了兩個部分,第一部分為 Instance 結構上提供給應用層來變更 設定的 InstanceSetup 子結構,而在 InstanceSetup 結構上的組成也可再分為兩個部分,其 一是由 Default 層所定義,提供給所有模組使用的 DefaultInstanceSetup 結構,其二則是 模組在 Default 層所提供的 Setup 結構成員外,需要由應用層來設定的特定結構參數;而 Instance 結構的另一部分則是不需透過應用層來設定的參數,通常包括了各模組特定的 一些變數,以及由 Default 層對模組在運作上所做的相關設定,Instance 的結構關係可參

9

照圖 2.4。

以 H.264 Encoder 模組的 Instance 資料結構為例,如圖 2.5 所示,在該模組的 Instance 結構上分成了可由應用程式來設定的 Instance Setup 結構,以及由 Default 層與 AL 層來 設定的結構參數兩部分。而在模組的 Instance Setup 結構這部分,除了由 Default 層所定 義的 Instance Setup 結構外,還包括了模組自行定義的 Setup 結構成員,皆是用來提供給 應用程式做參數上的設定。 Specific Setup member I. InstanceSetup

II. Component Specific Variable

DefaultInstanceSetup Specific Setup member InstanceSetup

Instance

typedef struct _tmalVencH264_InstVars_t

{ ptmalVencH264_InstanceSetup_t pInstSetup;

//由 Default 層設定,應用於運作上的參數

tmVencCoreH264_BitSreamBuffer_t currentBs;

……

//Default Instance Setup 結構

ptsaDefaultInstanceSetup_t pDefInstSetup;

//模組自訂的 Instance Setup 成員 Int8 slice_alpha_c0_offest_div2;

Int8 slice_beta_offest_div2;

UInt32 iframeInterval;

Bool useConstrainedIntraPredict;

Bool enableExportMV;

Bool frameSkipEnable;

……

圖 2.5 Encoder 模組 Instance 資料結構

//模組所定義的 Instance Setup 結構

10

接下來就針對在每個模組上都會具備的 Default Instance Setup 結構,其中幾個主要 的結構成員來做介紹,Default Instance Setup 的資料結構如表 2.2 所示。

表 2.2 tsaDefaultInstanceSetup 結構 struct tsaDefaultInstanceSetup

qualityLevel startPinFunc taskFlags

errorFunc stopPinFunc createNoTask

progressReprotFlags clockHandle taskStartArgument

progressFunc *inputDescriptors powerState

completionFunc *outputDescriptors debugFlags

datainFunc parentId normalMmsp

dataoutFunc controlFunc sharedCacheableMmsp memalloc controlDescriptor sharedUncacheableMmsp

memfreefunc priority *inputConnections

getformatFunc taskName[16] *outputConnections

installFormatFunc stackSize periodOfComponent

tmalInstance unitNumber task

- qualityLevel

代表模組在執行中所能獲得處理器提供的品質高低,由數字 (1,2,3…) 來標示,

數字越大代表從處理器上獲得的資源越多,而通常模組在這部分的值皆設定為 0。

- errorFunc

當模組在串流的過程發生錯誤時所會呼叫的函式。而在 errorFunc 的函式中則會標 示目前是在哪個模組中出錯的訊息,提供偵錯上的使用。

- progressFunc

當模組執行的程序到某個段落時所會呼叫的函式,此函式會依據模組傳入的旗標,

標明出模組在串流資訊上所做的處理。

- completionFunc

當模組停止運作時所會呼叫的函式,並由函式標明出停止運作的模組名稱。

- tmalInstance

用來存放 Instance 結構在 AL 層的設定。由於 Default 層會在模組的 OL 層與 AL 層 之間做連結與設定,而在層與層之間的設定過程上可能會修改到相同的結構參數,

因此為了對 AL 層的設定值多一層保護,建立了 tmalInstance 結構,用來存放 Default

11

層與 AL 層之間傳遞的 Instance 設定參數。

- datainFunc

是負責處理模組輸入端資料傳輸的函式,而執行的內容主要是從模組輸入端所連接 的連接模組( IOD 1 )中拿取寫有資料的 packet,提供給模組來做運算處理,接著在 模組處理完畢後將 packet 的資料清空再放回 IOD 中。由於每個模組在輸入端運作 的模式都相同,因此在 Default 層中便定義一個 tsaDefaultDatainFunction( )函式,將 上述的運作方式寫入此函式中,提供給所有模組使用。

- dataoutFunc

是負責處理模組輸出端資料傳輸的函式,而這部分資料傳輸的方式是先從輸出端的 IOD 中拿取空的 packet,接著將模組處理好的資料寫入此 packet 中再放到 IOD 上。

與上述的 datainFunc 相同,在 Default 層中也定義了一個處理資料輸出的函式 tsaDefaultDataoutFunction( ),提供給所有模組使用。

- starPinFunc

在模組啟動後,會先將該模組輸入端與輸出端的 pin 腳皆設定為啟動的狀態,也就 是讓輸入端與輸出端可以開始傳輸資料。而在 Default 層中有定義了執行此功能的 函式 tsaDefaultStartPin( ),提供給所有的模組來使用。

- stopPinFunc

當模組的運作結束時,會將模組輸入端與輸出端的 pin 腳設定回停止的狀態,讓模 組停止對外的資料傳輸。而同樣的在 Default 層中也提供了執行此功能的函式 tsaDefaultStopPin( )來給所有模組使用。

- inputDescriptors

於模組輸入端所銜接的連接模組。當 IOD 建立完成後,會將此建立好的 IOD 結構 指標設定到模組的 inputDescriptors 中,讓模組取得輸入端 IOD 的資訊,使得在傳 輸資料的時候,模組可以辨認出要至哪個 IOD 中拿取。

- outputDescriptors

於模組輸出端所銜接的連接模組。設定方法與上述的 inputDescriptors 相同,此 outputDescriptors 則是讓模組得知要將處理完畢的資料寫到哪個 IOD 中。

_____________________

1 IOD 為 TSSA 架構上另一個型態的模組 Connection Component,當兩個影像處理模組之間要傳

輸資料時,就會利用此連接模組來協助兩者資料的讀寫與傳輸,由於在連接模組上會描述影像處理 模組之間資料輸入與輸出的特性與設定,因此連接模組又可稱為 IOD ( In–Out Descriptors ),關於 IOD 詳細的內容會在第三章進行介紹。

12

- priority

模組執行緒的優先順序,是由應用層設定,提供給作業系統來操作模組之間在執行 運作上的順序。

- taskName[16]

模組執行緒的名稱,是由應用層所設定,當 Default 層在建立模組的執行緒時,可 將 taskName 傳入執行緒的建立函式提供命名使用。

- taskFlag

標明執行緒 task 的執行狀態,例如已經啟動的 task,在 task 的旗標上就會標明為

“tmosalTaskStarted",而正在等待記數中的 task,在 task 旗標上則會標明為

“tmosalTaskCounting"。

- task

當模組透過 Default 層到 OSAL 層中建立好執行緒後,便可將執行緒的指標回傳設 定到 task 中,讓每個模組的 Instance 結構裡都能具備自己的執行緒資料。

而在了解上述這些資料結構成員後,接下來所要討論的重點為模組如何拿取並設定 這些資料結構,以及模組從結構設定到執行運作的流程上所使用到的相關函式。