Armadilloフォーラム

QT + GStreamer によるアプリケーション作成

fkosu

2018年5月29日 13時43分

お世話になっております。小杉と申します。

Armadillo-840で液晶画面に動画を表示しつつ、画面上のボタンを操作し、例えばメッセージを変える等の操作を行うようなアプリケーションを考えております。

gst-launch-1.0を使用して映像の表示は出来ました。
それをQT内で行うにはどうしたら良いでしょうか?
参考となるサンプルや解説ページがあれば紹介して頂けると助かります。
(必ずしもQTである必要はないのですが、GUIの作成が容易なため、QTを希望します)

以上、よろしくおねがいします。

コメント

at_ohsawa

2018年5月30日 14時38分

gstreamerで表示したい映像というのは、h.264で圧縮された映像でしょうか、
それともUSBやカメラインターフェース(CON8)等でしょうか。

カメラからの入力を表示するパターンの場合は、次の記事が参考になると思います。

https://users.atmark-techno.com/blog/750/1684
https://users.atmark-techno.com/blog/750/1385

fkosu

2018年5月30日 15時48分

お世話になっております。小杉と申します。

カメラ映像であったため、NEONで高速化する記事が参考になりました。
https://users.atmark-techno.com/blog/750/1385

大幅に速度改善を行うことができました。
ありがとうございました。

gstreamerの物より多少劣るので、そこを改善しようと思うと、gstreamerを使うしか無いのでしょうか?
(結構面倒そうなので、このままで良いかとも思っていますが)

at_ohsawa

2018年5月30日 16時34分

> gstreamerの物より多少劣るので、そこを改善しようと思うと、gstreamerを使うしか無いのでしょうか?
> (結構面倒そうなので、このままで良いかとも思っていますが)

Qtへ貼り込んだ方がgstreamerでv4l2src->videoconvert->fbdevsinkするより
映像のFPSが低下するという意味でしょうか。

v4l2_camera_viewのコードに無駄があるので削ると少し改善するかもしれません。
v4l2_camera_view.cpp の void V4l2CameraView::capture() 内の memsetは全て不要なので
消すと少しコマ毎の処理が減ります。(殆んど認識できない差だと思いますが…)

もう1点、検証していないのですが、main_window.cpp でsetFpsというメソッドで
セットしているFPSをカメラのFPSの2倍にしておくとコマ落ちが減るかもしれません。
このFPSの値は前述のcaptureを動かすスレッドの呼び出し頻度を決定しています。

fkosu

2018年5月30日 17時03分

お世話になっております。小杉と申します。

memsetが不要だと言うことには気がついていませんでした。
多少なりとも無駄を省くべく、無効化してみました。
(速くなった感じはしませんが、塵も積もればだと思うので無効化しておきます)

setFpsは、キャプチャー相手が速ければ効いてくる機能と認識しています。
今回、当方で使用している環境では、ほぼ影響のないタイマーとなっています。
(大胆にタイマーを使わず、キャプチャーが終わってたら、すぐにキャプチャーするとしてもあまり変化がわかりませんでした)

以上です。