HW Overlay 小檔案

看到這個題目在 wiki 只有英文和韓文, 忍不住想寫一個中文的精簡版. 不過寫著寫著就偏離主題, 變成了 Android 為何不全面支持 HW Overlay?

我們在 Windows 螢幕上看到的畫面, 基本上是由視窗疊加而成的, 前景擋住後景, 就成了我們看到的模樣. 在其他有視訊輸出的產品中, 同樣會有物件互相遮蔽的現象, 例如: 字幕浮現在電影上, 這樣就是兩個個物件. 如果再加上進度條 (progress bar), 就變成 3 個物件. 當繪圖系統需要依序畫出這三個物件時, 可以用軟體去檢查前後順序, 只把需要的部份畫出. 在 Android 系統中, Surface Flinger 就在做這件事 [註1].

既然有軟體的解法, 硬體解法會不會更快更有效率呢?是的, HW overlay 就是這個硬體的解法. 當每個物件都畫在自己的記憶體, 最後再依據每個物件的先後順序和透明度 (alpha blending) 一次疊加, 那麼每個物件就不用等來等去, 只要各畫各的就好. 如此一來, 雖然浪費了好幾塊記憶體, 控制卻變得很簡單. 特別是物件的更新速率差異很大時, 互等會導致大量浪費頻寬 – 例如電影 (30~60Hz) 與字幕 (大約 0.2~0.5 Hz).

Surface Flinger HW Overlay

上面這張圖有個小問題, 就是把 SurfaceFlinger 和 Overlay 畫成兩個獨立的模組. 實際上, 在 Android 中, HW Overlay 和 Surface Flinger 關係密切. HW Overlay 算是 SurfaceFlinger 的一個特例 [註 2]. 請參考下圖.

現在的 IC 幾乎都有 HW overlay 的能力, 應該沒甚麼好討論的, 可惜故事還沒有完. 大家如果把玩手上的 Android 手機或是平板, 可能會在設定裡面看到 “停用硬體重疊圖層" 這個選項. 既然 HW overlay 看起來比較好, 幹嘛把它停用呢? 每一個 OpenGL 的 process 都需要 2~8MB 的 RAM, 浪費記憶體就不用說了. GPU 還要挺高檔才行 [註 3].

每秒可以畫 1000 M pixel/second 的 200MHz SGX544, 在 1920×1080@60FPS (frame per second) 的輸出螢幕上, 能在每個 pixel render 8.0375 次. 若是換成了 SGX531就只能 render 4 次 [註 4]. 這  4 次如果用來畫一層背景, 一層電影. 一層進度條和 OSD (on screen display), 一層字幕, 就已經達到 GPU 的硬體極限. 此時只是做到 HW overlay 的水準而已, 但什麼 3D 動畫效果都畫不出來了.

以上都是說 Android 的壞話, 但 Google 卻可以藉著不支援 HW Overlay 來統一硬體的差異, copybit 不就在 Android 4.0 上被拔掉了嗎? 若是放任每一家廠商製作的 HW Overlay 都不相同, 當然就限制了 APP (跨平台的) 的互通性. 再者, GPU 只要聰明地用, 不要常常 redraw 沒用的畫面, 效率還是不會太差 [註 3]. 按照 Android 的官方說法, 全部的畫面都能進入 GPU 的話, 使用者將可以得到更多樂趣! 至於 GPU 的計算能力….當然必須夠, 這不是 Android 的責任範圍, 它只是個做軟體的. [註5]

Media effects for transforming images and video

A set of high-performance transformation filters let developers apply rich effects to any image passed as an OpenGL ES 2.0 texture. Developers can adjust color levels and brightness, change backgrounds, sharpen, crop, rotate, add lens distortion, and apply other effects. The transformations are processed by the GPU, so they are fast enough for processing image frames loaded from disk, camera, or video stream.

[註]

1.  Android Display (surfaceflinger and Overlay)

2. Android 显示系统

3. The truth about hardware acceleration on Android

4. PowerVR

5. Ice Cream Sandwich

RFC 2119 小整理

RFC (Request For Comments) 是指網路上標準的討論草案. 每個編號都代表一個獨立的文件, 像是 RFC3261 專門講 SIP (Session Initiation Protocol) 的規範等等. 發行 RFC 的單位是 IETF (Internet Engineering Task Force). 由於 IETF 只是一個鬆散的組織, 背後由 The Internet Society 提供支援. 因此 RFC 文件的 copyright 屬於 The Internet Society 所擁有.

相較於每份標準要賣百塊瑞士法郎的 ISO/IEEE, The Internet Society 的文件都可以免費地由網站上取得. 其中 RFC2119 很特別地不是講技術, 而是講規格中幾個常用詞的定義. SHALL 可以例外嗎? MAY 到底是有規定還是沒規定?

如果我們以光譜來看, 最左邊是一定要, 最右邊是一定不要. MUST 和 SHALL 都是同級的, 表示最強烈的意思. 退而求其次就是 SHOULD, 它允許有例外. MAY 的話, 就有點不置可否了. 很有趣地, RFC 2119 這本規格就只講了這些.

絕對肯定 —————————————————————————————絕對否定
MUST

REQUIRED

SHALL

SHOULD

RECOMMENDED

MAY

OPTIONAL

SHOULD NOT

NOT RECOMMENDED

MUST NOT

SHALL NOT

絕對要 一般要, 可以有例外 可以做, 也可以不做 一般不可以, 可以例外 絕對不可以

不能備份 Windows 的問題

先前試了幾次, 好像都沒辦法按照 Windows  提供的步驟完成備份. 啟用光碟和憑證的備份倒是都順便生出好幾份了. 本來我猜測 Windows 有 2TB 的大小限制, 否則為何每次失敗的訊息都一樣. 所以上次重灌時, 我還特地把 Windows 灌到小小的 SSD 上面. 結果還是不行! 因為那顆 SSD 太小了, 放不下的 program files 還是得安裝在大顆硬碟那邊, 大硬碟的問題依然存在.

前陣子不死心地又找了一下錯誤碼, 才知道中文版的解答很少, 但是有英文版的. Error 0X807800B4 not able to backup files in Windows 7. 和 Backup fails in Windows 7 when trying to create a system image.

前者不能備份是因為磁碟有問題. 按照此連結上面的說明, 首先要叫出 “系統檔案檢查員". 使用 「 系統檔案檢查員 」 工具 (SFC.exe) 來判斷哪些檔案造成這個問題, 接著以正確的檔案取代壞掉的檔案。

  1. 在命令提示字元中,輸入下列命令,並按 ENTER:
    sfc /scannow
  2.  如果 sfc 發現問題, 參考上面的連結可以解決此問題.

但是如果完全沒有發現問題呢? 大概就是第二個連結所講的: Microsoft 的限制. Windows 最多只認得 2TB 的虛擬硬碟 (virtual hard disk), 而其實際容量只有 2097152MB – 2MB – 8192MB = 2088958 MB, 這就是上面錯誤訊息視窗上所寫的數字. 把任何大於 2088958MB 的東西拿來備份都會失敗.

當我在設定備份內容時, 如果勾選了製作系統映像 (system image), Windows 就會認為它要還原整個硬碟. 即便是沒有勾選所有的目錄, 只要勾到左下角那個紅圈圈的 box 就算.

當然, 把映像存起來, 未來才可以完整地還原電腦. 若是這裡不圈選, 就等於只備份了檔案. 想要完整地備份大於 2TB 的系統, 唯一的方法是把大硬碟切小. 內容參考這篇 Shrink a Basic Volume. 基本上它講到如何用 Windows 介面或是命令列去修改 partition. 不過用第三方的免費軟體或許還比較可靠.

總之, 2TB 的限制的確存在. 想要做系統映像檔, 必須先把開機硬碟切到 2088958 MB 以下.

LCD 螢幕小整理

本來這個禮拜要把手邊的幾本書都讀完, 不過昨天發生一個悲劇 – 我的電腦螢幕壞了, 只好花時間研究一下 LCD 螢幕怎麼買?這個三隻小鳥牌的螢幕在臨終之前, 常常有不能從休眠中喚醒的症狀. 近來它被喚醒的難度愈來愈高, 終至昨天為了一時想省電而把它 power off, 哪知它再也醒不來了.  

正好現在資訊月開跑, 3C 產品的價位應該會比較便宜吧!上網查了一下, 我原來那台螢幕的價錢已經可以買到 27 吋了. 既然科技日新月異, 我也要先惡補相關資訊, 以免買錯.

首先, 應該要買 LED 背光的產品, 取代傳統的冷陰極螢光燈 (CCFL) 背光. 基本上廠商自己會進版, LED 具備省電, 壽命長等諸多優點, 我們非買不可.

其次是 LCD 技術, 大致上它分為 TN, VA, 和 IPS 三大類. TN (Twisted Nematic) 是最舊的技術, 不過現在很多螢幕還是走 TN, 包括定位較高階的 27" 產品, 原因是 TN 技術的價格低廉. VA (Vertical Alignment) 是比 TN 優秀的技術, 特色是對比明顯加大, 亮點機率降低, 但可能會有暗點. VA 有很多衍生的技術, 像是富士的 MVA (Multi-domain Vertical Alignment), 友達的 AMVA  (Advanced MVA), 奇美的SMVA (Super MVA). 最昂貴的一種技術則是 IPS (In Plane Switching).

傳統的 TN 在無電壓的時候, 液晶略微平躺, 此時是亮的; 有電壓時, 液晶會慢慢站起來, 此時是暗的. 因此沒吃到電的壞液晶會變成亮點, 短路是暗點. 反之, VA 在沒電壓的站著, 有電壓是倒下去, 故壞的液晶多數是暗點.  當液晶都還站著的時候, 只要把偏光板設為全黑, 光線就一點也不能通過. 這使得 VA 的對比好過 TN 與 IPS, 勇奪第一.

初期 VA 的可視角不好, 但在 MVA 發明之後就解決了這個問題, 甚至超越的 TN + film (薄膜). 最好的可視角要算是 IPS 技術. IPS 的特點是不讓液晶站了又倒, 倒了又站. 大家一直都平躺的, 只是在原地打轉. 由於 IPS 液晶轉圈的速度比不上站起或是倒下, 因此它的反應速度最慢, 耗電又最多.不過就像 VA 之後有了 MVA, IPS 也有了 S-IPS (Super IPS), AH-IPS(Advanced High Performance IPS) 等等的改進方法, 雖然對比不行, 但是反應速度/透光度或是耗電都有了改善. 它的最大優勢在於可視角在 170 度以上, VA 頂多就是做到 170 度.

在反應速度上, 通常標示為灰階或是 G2G (graylevel to graylevel)  而非全黑到全白. 目前 IPS 的反應速度可以寫到 6ms (acer S275HL). VA大約是 4ms (BenQ GW2750HM), TN 是 2 ms (Samsung S27B350H). 所以 TN 的螢幕都會強調 "激速". 上面的數據看似 VA 比 IPS 更快, 但 VA 正常的速度應該是 12ms (Envision H2776MHA, Philips 273P3QPYEB), BenQ 比較快是因為開了獨家的 AMA (Advanced Motion Accelerator Technology) mode 讓液晶加速翻身. 

附帶一提, 如果大家去百度查資料的話, 大家都說 IPS 比 VA 快, 在理論上這是不正確的. 如果拿同一代的技術相比, VA 應該不會輸給 IPS. 我想這就是 acer 號稱 6ms, LG (LG IPS277L-BN) 號稱 5ms, 而 BenQ 號稱 4 ms 的原因. 

另外 IPS 的面板是硬的; TN 和 VA 的面板都是軟的. 以前我很怕同事跑討論事情的時候在螢幕上指指點點的, 只要手指按下去, 整塊區域都會出現彩虹. 不管是自己的螢幕或是別人的螢幕, 感覺它都受了內傷. 想必 IPS 可以徹底解決此一問題.

IPS 面板上分布了很多電極, 他們都是住平房, 而不是住樓上下. 因此透光度比較差, 需要更多的背光燈管. 燈管一多, 除了前面提到的耗電問題之外, 黑的地方就不如 VA 黑, 對比範圍因此降低. 對比的數字有兩種, 一種是幾百千萬起跳的動態對比 (contrast ratio max); 另外一種是數字幾千的真實對比 (contrast ratio native). 在真實比對方面VA 大概寫  3000:1~5000:1, IPS 大概是 1000:1, TN 不是不寫, 就是寫動態對 2,000 萬:1. 如果 IPS 要寫動態對的話是 10, 000 萬 :1.

再來就是 LED 燈管的安排有直下式和側照式兩種. 不好的螢幕會有漏光的現象, 開到全黑畫面時, 會看到某一區是亮的. 因此也有些螢幕會標示零漏光. 至於會漏光的螢幕也不是瑕疵品, 而是規格本就如此. 網路上有一些測亮點和漏光的程式可以下載, 如果是新買的螢幕還來得及退換貨的話, 可以測試一下. 否則直接看網路評價應該就可以了.

然後是 bit 數, 有的是 6 bit, 有的是 8 bit, 10bit, 甚至 12 bit (DELL U2711). 6 bit 唯一的好處就是處理的速度比 8 bit 更快. 一般 8 bit 螢幕就會標示為 16.7M (2 (8 x 3)) 色, 只有 VA 和 IPS 可以做到每個原色完整呈現 8 bit, TN 頂多到 16.2M. 16.2M 和 16.7M 看起來差沒有多少, 但 TN 在這一關就是輸了. 

當然, 更厲害的人會關心色偏 (color shift). 這個部分我另外再研究.

至於輸入的接頭也很重要, 如果只有 HDMI 接頭而沒有 DVI 接頭, 那麼需要買 DVI 轉 HDMI 的這條線, 大概幾百塊可以搞定. 若是多一兩組 HDMI, 這又可以接播放機來看電影而不用開電腦. 最後就是有支援 PIP/PBP 的螢幕, 這樣一來價錢難免就破萬元了, 好處是它可以一面打電腦一面看電視. 然而到了這種價位, 難免會想要直接買 26" 的電視而不是 27" 的電腦螢幕. 買 PIP 螢幕, 唯一能省下的就是不用買一個支援 PIP 的電視盒, 而是一個普通的電視盒.

考慮到改為買電視的話, 少數機種還支援 MHL, 這樣就可以用手機看大螢幕而不用再幫手機充電. 螢幕的部分有 LG IPS277L-BN, AOC i2757FM, 三星 S27B970D 可選. 當然電視或是螢幕不支援 MHL 也沒關係, 只要手機或平板支援 MHL, 再買一條可以充電的 MHL + power 線, 同樣可以在螢幕上玩 APP, 看網路影片. 這條線在價格方面也是幾百元, 買到 HDMI 公的就可以直接用, 若是買到 HDMI 母的又需要多買一條 HDMI 線.

總之, VA 的性價比較好, IPS 當電視最佳. TN 也可以用, 畢竟這是桌上型電腦螢幕而不是電視, 視角小一點並沒有影響, 只要螢幕腳架可以調整高低就 OK 了. HDMI 也是愈多愈好, 有沒有 3D, USB 或是喇叭無所謂, 大概就是這樣了. 

[REF]

1. 簡述 TN、VA、IPS 液晶色彩 與 影像品質

2. LED背光液晶顯示電視

3. 薄膜電晶體液晶顯示器

4.  LCD Color: 8-Bit vs. 6-Bit

5. 螢幕面板怎麼挑?TN、MVA、IPS 各有什麼特色與優點