源码编译
前面的 Demo(gst-ai-*)和 Python 应用 使用的是 apt 预编译的 GStreamer 插件。如果你需要修改插件源码(如定制后处理逻辑、添加自定义模型支持)或写自己的 C/C++ 推理程序,可以在设备上直接编译。
Hello-QIM:最小 C/C++ 示例
Hello-QIM 是一个最小可运行的 GStreamer 应用,展示如何用 C++ 创建 pipeline 并获取摄像头帧。适合作为自定义应用的起点。
下载源码
radxa@airbox$
git clone https://github.com/quic/sample-apps-for-qualcomm-linux
cd sample-apps-for-qualcomm-linux/Hello-QIM
准备源文件
radxa@airbox$
cp main.cc gst-appsink.cc
创建 Makefile
CC = g++
CFLAGS = -Wall -g $(shell pkg-config --cflags gstreamer-1.0)
LDFLAGS = $(shell pkg-config --libs gstreamer-1.0)
all: gst-appsink
gst-appsink: gst-appsink.o
$(CC) -o $@ $^ $(LDFLAGS)
gst-appsink.o: gst-appsink.cc
$(CC) $(CFLAGS) -c $<
clean:
rm -f gst-appsink gst-appsink.o
编译并运行
radxa@airbox$
make
./gst-appsink -w 1280 -h 720
预期输出:
Hello-QIM: Success creating pipeline and received camera frame.
如果设备没有连接摄像头,pipeline 创建仍然会成功,只是收不到帧。
编译 QIM 插件(进阶)
如果需要修改 GStreamer 插件本身(而不仅仅是调用插件),可以从源码编译全部插件。
安装编译依赖
radxa@airbox$
sudo apt install -y \
qcom-adreno-dev \
libgstreamer1.0-qcom-sample-apps-utils-dev
下载并编译
radxa@airbox$
cd ~
apt source gst-plugins-qti-oss
cd gst-plugins-qti-oss-*
mkdir build && cd build
cmake \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_INSTALL_LIBDIR=lib/aarch64-linux-gnu \
-DCMAKE_INSTALL_BINDIR=bin \
-DCMAKE_INSTALL_SYSCONFDIR=/etc \
-DGST_VERSION_REQUIRED=1.24.0 \
-DENABLE_GST_PLUGIN_BASE=ON \
-DENABLE_GST_ML_PLUGINS=ON \
-DENABLE_GST_VIDEOPROC_PLUGINS=ON \
-DENABLE_GST_SAMPLE_APPS=ON \
..
make -j$(nproc)
sudo make install
编译安装约 34 个插件动态库(libgstqtimltflite.so、libgstqtimlvclassification.so 等)。
排障
CMake 找不到 GStreamer
确认 GStreamer 开发包已安装:
radxa@airbox$
pkg-config --modversion gstreamer-1.0
如果提示找不到:
radxa@airbox$
sudo apt install libgstreamer1.0-dev