gstreamer 捕獲圖像+存儲示例代碼


找了找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>




注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com