gstreamer插件製作(插件內使用c++和opencv)

gstreamer插件製作(插件內使用c++和opencv)

gstreamer插件默認是使用c語言編寫的,不過我們經常在插件中使用opencv來處理圖像,而opencv對c語言的接口並不多,於是我們便要在gstreamer插件中使用c++和opencv,本篇就記錄一個使用了c++和opencv的插件製作。這種插件和普通使用c語言插件創建的不同主要在於makefile內配置的不同。

1.獲取創建插件的模板gst-template

方法一: CVS(我使用此方法連接不上cvs,用的第二個方法成功)
$cvs -d:pserver:[email protected]/cvs/gstreamer login
password: [root的密碼]
$cvs -z3 -d:pserver:[email protected]:/cvs/gstreamer co gst-template

方法二: GIT
如果沒有安裝git,則首先安裝git:
$sudo apt-get install git-core
再獲取模板:         
$git clone git://anongit.freedesktop.org/gstreamer/gst-template.git

2.產生插件模板文件

進入目錄gst-template/gst-plugin/src
$cd gst-template/gst-plugin/src
$../tools/make_element ExampleFilter	//可修改元件名稱
此時會產生成gstexamplefilter.c gstexamplefilter.h兩個文件

3.修改創建的兩個文件

.c文件:進行元件屬性以及功能的添加,在chain函數中完成對圖像處理功能的添加。
.h文件:進行頭文件的添加,結構體的定義。

4.修改Makefile.am文件 (注意:是src目錄下的Makefile.am)

$sudo gedit Makefile.am
在文件上方plugin_LTLIBRARIES中添加參數:libgstexamplefilter.la

在文件下方添加如下幾行:
libgstexamplefilter_la_SOURCES = gstexamplefilter.c gstexamplefilter.h
libgstexamplefilter_la_CFLAGS = $(GST_CFLAGS)
libgstexamplefilter_la_LIBADD = $(GST_LIBS)
libgstexamplefilter_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
libgstexamplefilter_la_LIBTOOLFLAGS = --tag=disable-static

5.產生Makefile文件

運行命令:
$./autogen.sh

6.修改插件的makefile文件配置

(1)修改malefile文件,編譯器修改爲c++的編譯器,添加引入opencv包。注:非系統自帶的gstreamer路徑爲/usr/local/include/gstreamer-1.0
 c++編譯器修改:
    CC = g++
    CPP = g++ -E
opencv2.14修改內容:
    GST_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/cairo -I/usr/include/x86_64-linux-gnu/c++/4.8/bits -I/usr/include/c++ -Wall
    GST_LIBS = -L/usr/local/lib -lgstcontroller-1.0 -lgstaudio-1.0 -lgstbase-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 -L/usr/local/lib -lgstcontroller-1.0 -lgstaudio-1.0 -lgstbase-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 -lopencv_calib3d -lopencv_contrib -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_nonfree -lopencv_objdetect -lopencv_ocl -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videostab -L/usr/lib/x86_64-linux-gnu -lGL -lGLU -ltbb -lrt -lpthread -lm -ldl
opencv3.4修改內容:
    GST_CFLAGS = -pthread -I/usr/include/gstreamer-1.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/cairo -I /usr/include/x86_64-linux-gnu/c++/5/bits -I /usr/include/c++ -I /usr/local/cuda/include -Wall
    GST_LIBS = -L/usr/local/lib -lgstcontroller-1.0 -lgstaudio-1.0 -lgstbase-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 -lopencv_cudabgsegm -lopencv_cudaobjdetect -lopencv_cudastereo -lopencv_shape -lopencv_stitching -lopencv_cudafeatures2d -lopencv_superres -lopencv_cudacodec -lopencv_videostab -lopencv_cudaoptflow -lopencv_cudalegacy -lopencv_calib3d -lopencv_features2d -lopencv_objdetect -lopencv_highgui -lopencv_videoio -lopencv_photo -lopencv_imgcodecs -lopencv_cudawarping -lopencv_cudaimgproc -lopencv_cudafilters -lopencv_video -lopencv_ml -lopencv_imgproc -lopencv_flann -lopencv_cudaarithm -lopencv_core -lopencv_cudev -lcairo -lopencv_dnn

(2)$make
(3)$sudo make install
運行完會發現/gst-plugins/src下產生了許多.la/.lo文件。/usr/local/lib/gstreamer-1.0下產生了.so/.la文件。

7.測試插件

$gst-inspect examplefilter
若顯示插件屬性表示插件製作成功。

8.gst-inspect找不到新插件錯誤

插件製作完成.la/.so文件都成功生成但gst-inspect找不到新插件:

產生原因:若使用的gstreamer是ubuntu自帶的,則gstreamer的插件查詢路徑爲/usr/lib/x86_64-linux-gnu/gstreamer-1.0而插件的默認安裝路徑爲/usr/local/lib/gstreamer-1.0。

解決方法:將/usr/local/lib/gstreamer-1.0下的.so/.la文件拷貝到/usr/lib/x86_64-linux-gnu/gstreamer-1.0路徑下。

進入/usr/local/lib/gstreamer-1.0路徑下然後進行拷貝:
$sudo cp libgstexamplefilter.la /usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstexamplefilter.la
$sudo cp libgstexamplefilter.so /usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstexamplefilter.so
或者在/usr/local/lib/gstreamer-1.0路徑下使用:
sudo cp * /usr/lib/x86_64-linux-gnu/gstreamer-1.0
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章