hamaoka
2015年7月14日 15時46分
初めて質問させていただきます。
浜岡と申します。
現在、インタフェースCEU0から、16bit 1280x720のカメラで30fpsキャプチャを行おうとしています。
以下のパイプラインでキャプチャを行っているのですが、mp4ファイルのフレームレートを確認すると22fpsまでしか出ていません。
(ビデオソースをv4l2srcからvideotestsrcに変更すると30fpsになります。
また、Armadillo810用カメラを用いた場合は30fpsになるようです。)
○v4l2srcによる録画
gst-launch-1.0 -e v4l2src device=/dev/video0 ! video/x-raw,format=YVYU,width=1280,height=720,framerate=30/1 ! videoconvert ! acmh264enc ! queue ! qtmux ! filesink location=Camera_gstreamer108.mp4
○testvideosrcによる録画
gst-launch-1.0 -e videotestsrc ! video/x-raw,format=YVYU,width=1280,height=720,framerate=30/1 ! videoconvert ! acmh264enc ! queue ! qtmux ! filesink location=test_gstreamer108.mp4
また、標準でインストールされているGstreamer1.0.8からGstreamer1.2.3に切り替えることで、v4l2による録画の方はさらにフレームレートが落ちてしまい、6fps程度になってしまいます。
そこで、以下の質問をさせていただきます。
1.現在22fpsでしかキャプチャできていませんが、1280x720のカメラで30fpsでキャプチャはできるのでしょうか
また、フレームレートを改善するにはパイプラインのどの部分を調査/改善すればよいのでしょうか
2.Gstreamerのバージョンを上げることで、フレームレートが落ちるということは通常考えられるのでしょうか
以上、宜しくお願い致します。
at_shota.tamura
2015年7月17日 20時31分
浜岡様
田村です。
> ○v4l2srcによる録画
> gst-launch-1.0 -e v4l2src device=/dev/video0 ! video/x-raw,format=YVYU,width=1280,height=720,framerate=30/1 ! videoconvert ! acmh264enc ! queue ! qtmux ! filesink location=Camera_gstreamer108.mp4
こちらのパイプラインですが、 videoconvert (YVYU -> NV12)に
約30ミリ秒かかっているようです。
そのため、videoconvert を除いた以下のパイプラインを試してみてください
> 1.現在22fpsでしかキャプチャできていませんが、1280x720のカメラで30fpsでキャプチャはできるのでしょうか
可能です。
こちらでは、FullHD 対応カメラモジュール (KBCR-S02TXG) を使い、
1280x720 30fps でキャプチャすることが出来ました。
> また、フレームレートを改善するにはパイプラインのどの部分を調査/改善すればよいのでしょうか
こちらのスレッド[1] に添付しているアプリケーション (enctime.c) に手を加えて、
どこに時間がかかっているのかを測定するのが良いかと思います。
※ videoconvert の処理に時間がかかっていることも、このアプリで調べました。
補足になりますが、acmh264enc の入力は NV12 のみであるため、
CEU からのキャプチャは NV12 を指定することが望ましいです。
また、CEU は Image format convesion 機能を持っているので、
お使いのカメラモジュールが NV12 フォーマットで出力できなくとも、
フォーマットによっては、CEU で NV12 へ変換することができます。
※ 詳しくは R-Mobile A1 のデータシートを参照してください。
[1]: https://users.atmark-techno.com/comment/1916#comment-1916