Armadilloフォーラム

QtでGstreamer事始め

a-mizutani

2016年1月26日 11時53分

お世話になっています、水谷です

現在アプリケーションを開発していて
QtでOpenCVを使用して、ビデオデバイスからキャプチャした動画を100枚AVI保存する
と言うところまでは、実装できました。

OpenCVで単純に書き出すと(1600x1200)
非圧縮だと1.0秒程度→データ量が多いので遅い
圧縮すると1.4秒程度→圧縮処理に時間がかかる

といった所で、いずれにせよ時間がかかってしまいます

以前試しにgstreamerでキャプチャしてjpegencした時は
もう少し高速に処理ができたので

QtcreatorからGstreamerを使おうとしています
インクルードパスを見つけて.proファイルに以下の様に追記しました
----------------------------------------------------------------------------------------------
INCLUDEPATH += \
/usr/arm-linux-gnueabihf/include/gstreamer-1.0/ \
/usr/arm-linux-gnueabihf/include/glib-2.0/ \
/usr/arm-linux-gnueabihf/lib/glib-2.0/include/
----------------------------------------------------------------------------------------------
これでパスは通った様です
リンクは次の様にしてみました

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
LIBS += -L/usr/arm-linux-gnueabihf/lib/gstreamer-1.0/ -L/usr/arm-linux-gnueabihf/lib/ -lopencv_core -lopencv_highgui -lopencv_imgproc
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

しかしビルド結果はエラーでした
----------------------------------------------------------------------------------------------
undefined reference to `gst_init'
----------------------------------------------------------------------------------------------

どの様に設定すべきでしょうか?

また、必ずしもGstermerを使用しなくても高速に圧縮 / 高速に保存が実現できれば良いので
何かアイデアがあれば教えて頂けると助かります

コメント

at_yashi

2016年1月27日 11時11分

> リンクは次の様にしてみました
>
> --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> LIBS += -L/usr/arm-linux-gnueabihf/lib/gstreamer-1.0/ -L/usr/arm-linux-gnueabihf/lib/ -lopencv_core -lopencv_highgui -lopencv_imgproc
> --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> しかしビルド結果はエラーでした
> ----------------------------------------------------------------------------------------------
> undefined reference to `gst_init'
> ----------------------------------------------------------------------------------------------

-lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 を追加してみてください。

もしそれでも上手く行かなければ、ビルドのログを添付してもらっても良いですか?

-lgstreamer-1.0 がついていれば、gst_initはあるはずなのですが。

> また、必ずしもGstermerを使用しなくても高速に圧縮 / 高速に保存が実現できれば良いので
> 何かアイデアがあれば教えて頂けると助かります

圧縮するために、AVコーデックミドルウェア[1]は使用していますか?
1600x1200 には対応していませんが、FullHD では動作します。
高速に動作させるためには、 ceu2rtp[2] のように V4L2 API を直接叩く必要があります。
H.264 と JPEGの圧縮が可能です。

保存する場合、大量のデーターを転送するので SDカードより USB接続の SSDの方が早いとおもいます。
あとは、無駄なコピーをしている部分があれば、調査して削るとよ良いです。

[1]: http://manual.atmark-techno.com/armadillo-840/armadillo-840_product_man…
[2]: https://github.com/atmark-techno/ceu2rtp

a-mizutani

2016年1月27日 15時47分

お世話になっています、水谷です

どうもありがとうございます

> -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 を追加してみてください。
ひとまずエラーは回避しました
先へ進めます
どうもありがとうございます!

> 圧縮するために、AVコーデックミドルウェア[1]は使用していますか?
> 1600x1200 には対応していませんが、FullHD では動作します。
このへんはまだ設定していません
色々お聞きしたい事は出てきそうですが
ひとまずgstreamerを試して行きます

どうもありがとうございます

> > リンクは次の様にしてみました
> >
> > --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> > LIBS += -L/usr/arm-linux-gnueabihf/lib/gstreamer-1.0/ -L/usr/arm-linux-gnueabihf/lib/ -lopencv_core -lopencv_highgui -lopencv_imgproc
> > --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> >
> > しかしビルド結果はエラーでした
> > ----------------------------------------------------------------------------------------------
> > undefined reference to `gst_init'
> > ----------------------------------------------------------------------------------------------
>
> -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 を追加してみてください。
>
> もしそれでも上手く行かなければ、ビルドのログを添付してもらっても良いですか?
>
> -lgstreamer-1.0 がついていれば、gst_initはあるはずなのですが。
>
>
> > また、必ずしもGstermerを使用しなくても高速に圧縮 / 高速に保存が実現できれば良いので
> > 何かアイデアがあれば教えて頂けると助かります
>
>
> 圧縮するために、AVコーデックミドルウェア[1]は使用していますか?
> 1600x1200 には対応していませんが、FullHD では動作します。
> 高速に動作させるためには、 ceu2rtp[2] のように V4L2 API を直接叩く必要があります。
> H.264 と JPEGの圧縮が可能です。
>
>
> 保存する場合、大量のデーターを転送するので SDカードより USB接続の SSDの方が早いとおもいます。
> あとは、無駄なコピーをしている部分があれば、調査して削るとよ良いです。
>
> [1]: http://manual.atmark-techno.com/armadillo-840/armadillo-840_product_man…
> [2]: https://github.com/atmark-techno/ceu2rtp