Armadilloフォーラム

HDMI出力の互換性

te_kawasaki

2014年8月15日 8時50分

armadillo-840のHDMI出力を映像機器と組み合わせて使おうとしています。
HDMIで1920x1080/60iのフォーマットを選択すると
# fbset -fb /dev/fb0

mode "1920x1080-30"
# D: 74.250 MHz, H: 33.750 kHz, V: 30.027 Hz
geometry 1920 1080 1920 2160 32
timings 13468 148 88 30 4 44 10
accel false
rgba 8/16,8/8,8/0,8/24
endmode

と、Vが、29.97 もしくは、30で無く、30.027Hzとずれています。
HDMIのモニタ等は映るのですが、映像機器(HDMI-SDI変換やHDMI入力を持つ映像効果装置など)は、映像が出ないものが多いです。
今回使おうとしている、ブラックマジックデザイン社のATEM Television Studioという効果装置では、HDMIに入れると画像は出るのですが、数分に1回程度一瞬画像が上下に揺れる(一瞬同期が乱れる)症状が出ています。

armadillo-840でV:29.97Hzに近づけることは出来ないのでしょうか?

コメント

at_daisuke.sasaki

2014年8月25日 17時57分

佐々木大輔です。

記載いただいたタイミングのHDMI出力波形を、弊社のHDMI Analyzerで観測すると、
実際のHDMIの信号のRefresh rateは60.000Hzとなっています。

BusyBoxのfbsetコマンドは、以下のような計算で
Pixcel Clock、H Frequency、V Frequencyを計算し表示しています。
※Atmark-Distの{Atmark Dist}/user/busybox/busybox-1.20.2/util-linux/fbset.c showmode関数

drate = 1e12 / v->pixclock;
hrate = drate / (v->left_margin + v->xres + v->right_margin + v->hsync_len);
vrate = hrate / (v->upper_margin + v->yres + v->lower_margin + v->vsync_len);

fbsetで表示されるタイミングと、各変数の対応は以下のとおりです。

geometry 1920 1080 1920 2160 32
timings 13468 148 88 30 4 44 10
v->xres: 1920
v->yres: 1080
v->pixclock: 13468
v->left_margin: 148
v->right_margin: 88
v->upper_margin: 30
v->lower_margin: 4
v->hsync_len: 44
v->vsync_len: 10

fbsetの計算式で値を算出すると、表示されているように30.027Hzになりますが、
1080iでは1125 lineに2回V Syncが来る規格であるため、実波形はこの計算どおりにはなりません。

LCDコントローラのドライバ及び、CPUのハードウェアでも、1080iの場合には、

( yres + vsync_len + upper_margin + lower_margin ) / 2

で計算されるline数でV Syncを1回出力

( yres + vsync_len + upper_margin + lower_margin ) / 2 + 1

で計算されるline数でV Syncを1回出力を
交互に繰り返すようになっており、これにより、1125 lineにV Syncが2回出力されるようになっています。

> Vが、29.97 もしくは、30で無く、30.027Hzとずれています。

fbsetとLCDコントローラのドライバが、上記のような実装であるため、
インターレースの場合、fbsetで表示されるV Frequencyと、実際のHDMI波形のV Frequencyが一致しません。

armadilloが出力しているHDMI波形は、HDMI Analyzerで観測した所、
規格に沿ったものになっているので、
映像機器と接続できない問題は、他にあるのではないかと考えています。

尚、映像機器と接続する場合には、どのようなDisplay Modeで接続されていますか?

映像機器と接続した場合の、以下のコマンドの結果を教えてもらえますか?

[armadillo /]$ cat /sys/class/graphics/fb0/mode