Armadilloフォーラム

Armadillo-800 EVAのオンボードカメラの映像のディスプレィ表示

k.kudoh

2015年6月16日 14時51分

お世話になります
工藤と申します。

Armadillo-800 EVAにて,付属カメラでのリアルタイム表示についてご教授お願いいたします。

FullHD(1920x1080)でカメラ映像を取り込んで、ディスプレィにFullHD表示させたいと思っております。
ディスプレイ表示は、(Camera:QVGA Max15FPSなので)15fps以上を期待しておりましたが、
1秒間隔位の表示で、以下のデバッグ情報とワーニングがでます。

Additional debug info:
gstbasesink.c(2686): gst_base_sink_is_too_late (): /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0/GstXImageSink:autovideosink0-actual-sink-ximage:
There may be a timestamping problem, or this computer is too slow.
WARNING: from element /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0/GstXImageSink:autovideosink0-actual-sink-ximage: A lot of buffers are being dropped.

コマンド入力の設定のしかたにより、スムーズに表示できるものでしょうか。
この評価ボード(Soc)で、スペック上、問題なく表示できるものなのでしょうか。

以下の操作手順で行っております。

①Xサーバーの起動
FRAMEBUFFER=/dev/fb1 X -retro :1 &

■1080i設定確認
②ビデオモードの設定
echo U:1920x1080i-60 >/sys/class/graphics/fb1/mode

③カメラからの映像をディスプレイに表示(Gstreamerのgst-launchコマンドを利用)
DISPLAY=:1 gst-launch v4l2src ! "video/x-raw-yuv,width=1920,height=1080,format=(fourcc)NV12" ! ffmpegcolorspace ! autovideosink

結果
1fps位?の表示をして、同様のデバッグ情報とワーニングがでます。

■720p設定確認
④ビデオモードの設定
echo U:1280x720p-60 >/sys/class/graphics/fb1/mode

⑤カメラからの映像をディスプレイに表示(Gstreamerのgst-launchコマンドを利用)
DISPLAY=:1 gst-launch v4l2src ! "video/x-raw-yuv,width=1280,height=720,format=(fourcc)NV12" ! ffmpegcolorspace ! autovideosink

結果
こちらも、
1fps位?の表示をして、同様のデバッグ情報とワーニングがでます。

以上、よろしくお願いいたします。

コメント

>1秒間隔位の表示で、以下のデバッグ情報とワーニングがでます。
Xをつかう事が必要があれば、ximagesinkを明示的に選択して、sync=false オプションを付けると
ティアリングが発生しますが、見掛けのFPSは向上します。

例: ximagesink で sync=false を使う

DISPLAY=:1 gst-launch v4l2src ! "video/x-raw-yuv,width=1920,height=1080,format=(fourcc)NV12" ! ffmpegcolorspace ! ximagesink sync=false

X をつかう必要が無いのであれば、fbdevsinkを使うことで少し表示速度が改善します。(10FPS前後)

gst-launch v4l2src ! "video/x-raw-yuv,width=1920,height=1080,format=(fourcc)NV12" ! ffmpegcolorspace ! fbdevsink device=/dev/fb1

> この評価ボード(Soc)で、スペック上、問題なく表示
ffmpegcolorspace によるソフトウェア実装の色変換と、fbdevsink(またはX windowによる)へのコピーが
オーバーヘッドになるので、ここまでは、gstreamerの既存のソフトウェア実装
を使う限界になってしまいます。

ハードウェアのスペックとして可能か、で言えば一般論になりますが

- framebuffer にNV12を直接書き込む事ができるようにLCDコントローラーのレジスタを設定
- CEU(カメラ取り込みを行うIP)の転送先アドレスをLCDコントローラーの表示用アドレスに変更

といった実装をすることで、ソフトウェアによる変換処理とコピーをおこなわずに、
カメラからの入力を直接LCDコントローラーに転送し、効率よく表示する事ができます。
Armadillo-800 EVAではありませんが、同じSoCを使ったArmadillo-840で試験的に実装し、CEU経由の
FullHDカメラからの入力を29FPS近くのスループットでLCDに表示することができました。

お世話になっております。工藤です。
下記、コマンド入力でワーニングが出ないことを確認できました。
ご回答ありがとうございます。

> >1秒間隔位の表示で、以下のデバッグ情報とワーニングがでます。
> Xをつかう事が必要があれば、ximagesinkを明示的に選択して、sync=false オプションを付けると
> ティアリングが発生しますが、見掛けのFPSは向上します。
>
> 例: ximagesink で sync=false を使う
>

> DISPLAY=:1 gst-launch v4l2src ! "video/x-raw-yuv,width=1920,height=1080,format=(fourcc)NV12" ! ffmpegcolorspace ! ximagesink sync=false
> 

>
> X をつかう必要が無いのであれば、fbdevsinkを使うことで少し表示速度が改善します。(10FPS前後)
>
>

> gst-launch v4l2src ! "video/x-raw-yuv,width=1920,height=1080,format=(fourcc)NV12" ! ffmpegcolorspace ! fbdevsink device=/dev/fb1
> 

>
> > この評価ボード(Soc)で、スペック上、問題なく表示
> ffmpegcolorspace によるソフトウェア実装の色変換と、fbdevsink(またはX windowによる)へのコピーが
> オーバーヘッドになるので、ここまでは、gstreamerの既存のソフトウェア実装
> を使う限界になってしまいます。
>
> ハードウェアのスペックとして可能か、で言えば一般論になりますが
>
> - framebuffer にNV12を直接書き込む事ができるようにLCDコントローラーのレジスタを設定
> - CEU(カメラ取り込みを行うIP)の転送先アドレスをLCDコントローラーの表示用アドレスに変更
>
> といった実装をすることで、ソフトウェアによる変換処理とコピーをおこなわずに、
> カメラからの入力を直接LCDコントローラーに転送し、効率よく表示する事ができます。
> Armadillo-800 EVAではありませんが、同じSoCを使ったArmadillo-840で試験的に実装し、CEU経由の
> FullHDカメラからの入力を29FPS近くのスループットでLCDに表示することができました。