映像機器の開発においては様々な映像信号・解像度を扱う。
そんな中で得られた面白い知見について紹介したい。
あるとき、古いPCを2560×1440px(WQHD)のディスプレイにつなぐ必要に駆られた。
CPUはAtomZ3795。映像出力はHDMI。調べた限りHDMIのバージョンは1.4aとあるので2560×1440@60Hzが出力できるのではないかと思ったのだが、
フルHD程度(1920×1080, 2048×1080, 1920×1200)までしか選択肢に出ない。
出力周波数の上限はHDMI1.2時代の165Mpx/s・4.95GT/sのようだ。
フルHDで出力するとディスプレイの実力を有効に使えず残念なのに加え、画面がぼやけて使いづらい。

なんとかして2560×1440を出力できないか。
2560×1440@60Hzは単純計算で2560*1440*60[/s] = 221 Mpx/s
2560*1440*60*3[byte/px]*10[bit/byte] = 6.64 GT/s
であり165Mpx/s・4.95GT/sを優に上回る。
フレームレートは別に低くても問題ない。30Hzにすれば収まるだろう。
2560×1440@30Hz。単純計算で、2560*1440*30 = 111 Mpx/s
と余裕。
ブランキング期間の計算は複雑なので省略する(※)が、基本は縦460μs・横160pxや80px。このあたりの解像度・フレームレートでは5%前後であり、上限ギリギリでなければあまり考えなくてよい。
※「VESA Coordinated Video Timings (CVT) Standard」規格による。液晶ディスプレイは基本的にCVT-RBのはず。その中にもバージョン1から3まであり、1か2が一般的か。
カスタム解像度を作ろう。
アナログやHDMIの信号は解像度ごとにピクセルクロックや同期タイミングを変える必要がある。そのへんの細かい設定をする機能がGPUには備わっている。
大昔、Windows2000かXPあたりのPCを1366×768pxのテレビにつないだときに使った覚えがある。
…と10数年ぶりにIntelグラフィックスコントロールパネルからカスタム解像度設定を探すと見つからない。どうも最近はそこには無いらしい。
調べるとCustomModeApp.exeというもので同様の操作が可能という情報が見つかったが、試して動かず。
更に調べると最近はレジストリの設定でディスプレイ側からのEDIDを上書きすることで同様の効果が得られるようで、それを書き換えるソフトとして「Custom Resolution Utility」なるものが有名なようだ。
https://www.monitortests.com/forum/thread-custom-resolution-utility-cru
これを使うことにする。
2560×1440@30Hzを作成する。


なお、最初作成しても解像度設定に反映されず悩んだが、古いIntel GPUだったため「If you have an older Intel GPU, …」とある通りEXEファイルをエクスポートして実行する方の手順が必要であった。
設定が作成できたのでディスプレイに出力してみると、非対応の表示。

信号は認識しているようなので、PC側からは信号は出ているのだろう。
ディスプレイの説明書を見てみると確かに対応フレームレートが49Hz~75Hzとある。

30Hzには対応していなかったのか。
どうも、テレビ製品には30Hz対応のものが多く、PC用ディスプレイには少ないようだ。
最小の49Hzで見ても2560*1440*49 = 181 Mpx/s
ブランキングを計算するまでもなく最大周波数を大幅に越えている。
YUVでデータ量を減らせないかと調べるも、
YUV422はどうやらビット深度が12bit/色に固定のようだ。24bitのまま色深度を増やす目的であって、色深度を8bitのままデータ量を24bit/pxから減らすためのものではない模様。
YUV420はHDMI2.0から。
これは駄目か…と一旦は諦めたが、ディスプレイの説明書を見ると

ディスプレイモードの中に1024×768や1600×1200の表記が見える。
4:3の解像度も扱えるようだ。
ひょっとすると書かれていないが縦1440で4:3にした1920×1440も扱えるのではないか。
周波数を計算すると1920*1440*60 = 166 Mpx/s
60Hzはだめだが1920*1440*50 = 138 Mpx/s
50Hzくらいならブランキング分を入れても十分165Mpx/sに収まりそうだ。
CRUで作る。


映った。

ただ、横に引き伸ばされている。

設定を見るとアスペクト比の設定がある。4:3にすると、


左右に黒帯が出て綺麗にドットバイドット表示ができた。

というわけで、
2560×1440に対応していない、普通はフルHDが上限とされるような機器でも、
2560×1440は無理だったがフルHDよりは広くドットバイドットでの表示ができることがあることが分かった。
このようなフレームレートと解像度のトレードオフの考え方はいろいろと役立つ場面も多いだろう。
余談。
ところで、Interlacedの設定が目に止まった。

ディスプレイの説明書にも1080iの表記があった。

これはもしかするとインターレースなら30Hzも映るのでは…と試してみるも、残念ながら、一応映ってはいるものの、ぼやけるしちらつく。
これは実用にならない。
ところでこれはもしかするとアナログ出力でも1920×1440は可能だろうか。試してみたい。(このPCもこのディスプレイもアナログ映像信号に対応していない)
アナログの解像度の上限を調べると1920×1200とするものが多いが、Wikipediaにはケーブルの制限としてだが2048×1536px (QXGA) @85 Hz (388 MHz)とある。この解像度を入出力する環境もあるのだろう。
https://en.wikipedia.org/wiki/VGA_connector