• 沒有找到結果。

Video Filter 模組

第三章 MPlayer 程式

3.3 Video Filter 模組

MPlayer 1.0rc2-4.1.2 內 建 了 許 多 影 像 濾 波 器 (Video Filter) , 包 括 flip image upside-down、rotate、horizontal mirror、drop interlaced frames、screenshot to file…等,而 每個影像濾波器都有獨立的vf_info_t 結構資料。使用者在播放影片時可以同時開啟一個 或多個影像濾波器,而多個影像濾波器串接起來稱為filter chain。表 3-8 為 vf_info_t 的 結構成員。

表3-8. vf_info_t 結構成員

變數 型態

info const char * name const char * author const char *

comment const char*

open() int

opts void *

info:基本資訊為該濾波器完整描述,如 flip image upside-down。

name:模組名稱為開啟模組代碼,如 flip image upside-down 為 flip。

author:作者名字。

comment:建議事項。

open:指向模組開啟函式的指標,這個函式是模組的進入點。當 MPlayer 選定開啟 的濾波器時,會呼叫這個函式。這個函式需要指定部分的vf_instance_t 結構資料,

將實現的函式指定到結構中的函式指標。

圖3-16 為 flip 模組的 vf_info_t 結構資料,最重要的是 open()對應的參數。

圖3-16. flip 模組的 vf_info_t 結構資料

MPlayer 定義了 vf_instance_t 結構,用來操作選定的影像濾波器的函式,成員還有 其他變數和結構存放圖像資料,操作每個影像濾波器需要獨立的vf_instance_t 結構。在 模組開啟的前置函式vf_open_plugin(),將指定 vf_instance_t 結構的函式指標變數,這是 每個模組都包含的要素,如圖3-17 的程式碼。

圖3-18 為 flip 模組的 open()函式,需要將模組中實現的函式指定到 vf_instance_t 的 函式指標,如果先前已經有指定的結構變數,在此會被複寫。表3-9 為 vf_instance_t 結 構所包含的成員,這節將這些結構成員的函式和變數,做詳加說明與介紹。

圖3-17. vf_open_plugin()函式的部分程式碼

圖3-18. flip 模組的 open()函式

所有影像濾波器的 vf_instance_t 結構都 包含這些初始設定

指定該模組實現的函 數,這將複寫原本的初 始設定

表3-9. vf_instance_t 結構成員

continue_buffered_image int 指標 -

default_caps unsigned int - default_reqs unsigned int -

w,h int -

imgctx vf_image_context_t -

fmt vf_format_context_t -

next vf_instance_t * -

通知影像輸出模組做影像翻轉。

VFCTRL_DUPLICATE_FRAME 複製影像畫面。

VFCTRL_SKIP_NEXT_FRAME 跳過下一個影像。

VFCTRL_FLUSH_FRAMES 清除延遲的影像畫面。

VFCTRL_SCREENSHOT 擷取單張影像畫面。

VFCTRL_SET_DEINTERLACE 設定去除交錯掃描的狀態。

VFCTRL_GET_DEINTERLACE 回傳去除交錯掃描的狀態。

query_format():針對傳入的影像格式的旗標,回傳模組所支援模式的旗標。在此 會針對所支援的格式,透過vf_next_query_format()函式詢問下個影像濾波器所支援 的模式。

get_image():實現影像 direct rendering,進行立即(in-place)像素轉換。

put_image():影像濾波器做影像處理的主要函式,傳入的參數為 mpi 影像結構。

draw_slice():支援濾波器處理部分圖像資料。

uninit():關閉影像濾波器模組,在此解放濾波器所使用的記憶體空間。

fmt:vf_format_context_t 結構。have_configured 為是否已經設定的旗標,orig_width 為影像原始寬度,orig_height 為影像原始高度,orig_fmt 為影像原始的格式。

表3-10. vf_format_context_t 結構成員

變數 型態

have_configured int orig_width int orig_height int orig_fmt int

next:指向下一個影像濾波器的 vf_instance_t 結構的指標。

dmpi:經過影像濾波器處理過後的影像(mpi_image_t)結構指標。

priv:vf_priv_t 結構指標,結構存放影像濾波器所使用的特殊變數,結構成員會依 濾波器的需求而有所不同。