GStreamer API学习记录(三)
GStreamer API学习记录(三)
本篇在QT源码中学习GST API的用法
Camera
Camera是QML支持的摄像头类型,底层用gst软件实现。
D:\Qt\Qt5.9.1\5.9.1\Src\qtmultimedia\src\plugins\gstreamer\camerabin\camerabinsession.cpp
supportedFrameRates
GstCaps *CameraBinSession::supportedCaps(QCamera::CaptureModes mode) const
{
GstCaps *supportedCaps = 0;
if (m_videoSrc) {
GstPad *pad = gst_element_get_static_pad(m_videoSrc, "src");
if (pad) {
supportedCaps = qt_gst_pad_get_caps(pad);
gst_object_unref(GST_OBJECT(pad));
}
}
// Otherwise, let the camerabin handle this.
if (!supportedCaps) {
const gchar *prop;
switch (mode) {
case QCamera::CaptureStillImage:
prop = SUPPORTED_IMAGE_CAPTURE_CAPS_PROPERTY;
break;
case QCamera::CaptureVideo:
prop = SUPPORTED_VIDEO_CAPTURE_CAPS_PROPERTY;
break;
case QCamera::CaptureViewfinder:
default:
prop = SUPPORTED_VIEWFINDER_CAPS_PROPERTY;
break;
}
g_object_get(G_OBJECT(m_camerabin), prop, &supportedCaps, NULL);
}
return supportedCaps;
}
其中m_camerabin就是camera插件,imx开发板上打印元件信息如下:
...
image-capture-supported-caps: Formats supported for capturing images represented as GstCaps
flags: readable
Caps (NULL)
video-capture-supported-caps: Formats supported for capturing videos represented as GstCaps
flags: readable
Caps (NULL)
image-capture-caps : Caps for image capture
flags: readable, writable
ANY
...
GObject
+----GInitiallyUnowned
+----GstObject
+----GstElement
+----GstBin
+----GstPipeline
+----GstCameraBin
其中函数去寻找video-capture-supported-caps的属性支持的Caps,IMX开发板上为NULL。封装工作量还是很大的,写法值得借鉴。
封装方法
1、宏定义
#define FILENAME_PROPERTY "location"
#define MODE_PROPERTY "mode"
#define MUTE_PROPERTY "mute"
#define IMAGE_PP_PROPERTY "image-post-processing"
#define IMAGE_ENCODER_PROPERTY "image-encoder"
#define VIDEO_PP_PROPERTY "video-post-processing"
#define VIEWFINDER_SINK_PROPERTY "viewfinder-sink"
#define CAMERA_SOURCE_PROPERTY "camera-source"
#define AUDIO_SOURCE_PROPERTY "audio-source"
#define SUPPORTED_IMAGE_CAPTURE_CAPS_PROPERTY "image-capture-supported-caps"
#define SUPPORTED_VIDEO_CAPTURE_CAPS_PROPERTY "video-capture-supported-caps"
#define SUPPORTED_VIEWFINDER_CAPS_PROPERTY "viewfinder-supported-caps"
#define AUDIO_CAPTURE_CAPS_PROPERTY "audio-capture-caps"
#define IMAGE_CAPTURE_CAPS_PROPERTY "image-capture-caps"
#define VIDEO_CAPTURE_CAPS_PROPERTY "video-capture-caps"
#define VIEWFINDER_CAPS_PROPERTY "viewfinder-caps"
#define PREVIEW_CAPS_PROPERTY "preview-caps"
#define POST_PREVIEWS_PROPERTY "post-previews"
对camerbin元件支持的属性字符串封装为宏定义。
2、再往下跟踪更像是QML的学习记录了
参考:QML学习记录
GStreamer API的学习在阅读中再多了解API的使用方法,更多的可能在GST的元件开发上了,偏向与Linux驱动开发,元件开发资料参考后面的学习内容。
本项目中nxp的gst元件代码

浙公网安备 33010602011771号