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元件代码

posted @ 2021-02-22 14:32  wuya178  阅读(453)  评论(0)    收藏  举报