博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
gstreamer 捕获图像+存储示例代码
阅读量:4058 次
发布时间:2019-05-25

本文共 1818 字,大约阅读时间需要 6 分钟。

找了找gstreamer的相关文档,整理了下列的代码,虽然简单,但应用这个框架应对imx6的h264硬编码足够了。

#include <gst/gst.h>

#include <glib.h>
static gboolean busCallBack(GstBus *bus,GstMessage *msg,gpointer data)
{
    GMainLoop *loop=(GMainLoop*)data;
    switch(GST_MESSAGE_TYPE(msg))
    {
        case GST_MESSAGE_EOS:
            g_print("end of stream\n");
            g_main_loop_quit(loop);
            break;
        default:
            break;
    }
    return TRUE;
}
int main(int argc,char **argv)
{
    GMainLoop *loop;
    GstElement *pipe;
    GstElement *v4l2src,*jpegenc,*filesink;
    GstBus *bus;
    gst_init(&argc,&argv);
    loop=g_main_loop_new(NULL,FALSE);
    //pipe.
    pipe=gst_pipeline_new("pipe");
    //input data source.
    v4l2src=gst_element_factory_make("v4l2src","input");
    g_object_set(G_OBJECT(v4l2src),"num-buffers",1,NULL);
    //processing.
    jpegenc=gst_element_factory_make("jpegenc","process");
    //output.
    filesink=gst_element_factory_make("filesink","output");
    g_object_set(G_OBJECT(filesink),"location","test1.jpg",NULL);
    if(!pipe || !v4l2src || !jpegenc || !filesink)
    {
        g_printerr("one element could not be created.\n");
        return -1;
    }
    //connect use pipe.
    gst_bin_add_many(GST_BIN(pipe),v4l2src,jpegenc,filesink,NULL);
    gst_element_link_many(v4l2src,jpegenc,filesink,NULL);
    /
    bus=gst_pipeline_get_bus(GST_PIPELINE(pipe));
    gst_bus_add_watch(bus,busCallBack,loop);
    gst_object_unref(bus);
    ///
    gst_element_set_state(pipe,GST_STATE_PLAYING);
    g_main_loop_run(loop);
    gst_element_set_state(pipe,GST_STATE_NULL);
    gst_object_unref(GST_OBJECT(pipe));        
    return 0;
}

shell.albert@beijing:~/gstreamer> cat run.sh

gcc -g test.c  -I /usr/include/gstreamer-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include  -lglib-2.0  -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0
shell.albert@beijing:~/gstreamer> ./a.out
end of stream
shell.albert@beijing:~/gstreamer> ls
a.out  imx6GStreamer.pdf  IMX6 GStreamer Pipelines.pdf  run.sh  test1.jpg  test.c
shell.albert@beijing:~/gstreamer>

转载地址:http://xczji.baihongyu.com/

你可能感兴趣的文章
No.175 - LeetCode1306
查看>>
No.182 - LeetCode1325 - C指针的魅力
查看>>
mysql:sql alter database修改数据库字符集
查看>>
mysql:sql truncate (清除表数据)
查看>>
yuv to rgb 转换失败呀。天呀。谁来帮帮我呀。
查看>>
驱动TFT要SDRAM做为显示缓存
查看>>
使用file查看可执行文件的平台性,x86 or arm ?
查看>>
qt 创建异形窗体
查看>>
简单Linux C线程池
查看>>
内存池
查看>>
linux 驱动开发 头文件
查看>>
ipconfig,ifconfig,iwconfig
查看>>
opensuse12.2 PL2303 minicom
查看>>
网络视频服务器移植
查看>>
Encoding Schemes
查看>>
移植QT
查看>>
如此调用
查看>>
计算机的发展史
查看>>
带WiringPi库的交叉编译如何处理一
查看>>
带WiringPi库的交叉笔译如何处理二之软链接概念
查看>>