How to write code that takes photo using your webcam?
Радомир Хаџић
radomirhadzic46 at gmail.com
Sat Oct 20 15:57:30 UTC 2018
Hello.
I have a small problem. I don't know how to write a program that takes a
photo using a webcam. I know how to do that using *gst-launch-1.0*, though.
*gst-launch-1.0 -e v4l2src device=/dev/video0 num-buffers=1 ! videoconvert
! pngenc ! filesink location=sample.png sync=true*
This works. A photo of me is successfully saved as *sample.png*.
What I'd like to do is to write GStreamer code equivalent to the command
above. Here is my best try.
*#include <gst/gst.h>int main(int argc, char **argv){ // initialize
return value int status; // initialize GStreamer gst_init(&argc,
&argv); // create pipeline and other elements to use GstElement
*pipeline = gst_pipeline_new("pipeline"); GstElement *source =
gst_element_factory_make("v4l2src", "source"); GstElement *converter =
gst_element_factory_make("videoconvert", "converter"); GstElement
*encoder = gst_element_factory_make("pngenc", "encoder"); GstElement
*file = gst_element_factory_make("filesink", "file"); // add all
elements to the pipeline and connect them
gst_bin_add_many(GST_BIN(pipeline), source, converter, encoder, file,
NULL); gst_element_link_many(source, converter, encoder, file, NULL);
// set the properties g_object_set(source, "device", "/dev/video0",
"num-buffers", 1, NULL); g_object_set(file, "location", "sample.png",
"sync", 1, NULL); // play gst_element_set_state(pipeline,
GST_STATE_PLAYING); // wait for EOS GstBus *bus =
gst_element_get_bus(pipeline); GstMessage *msg = gst_bus_timed_pop(bus,
GST_CLOCK_TIME_NONE); // determine return value using msg switch
(GST_MESSAGE_TYPE(msg)) { case GST_MESSAGE_ERROR:
status = -1; break; case GST_MESSAGE_EOS:
status = 0; break; default: status = 1;
break; } // clean up gst_element_set_state(pipeline,
GST_STATE_NULL); if (msg != NULL) gst_message_unref(msg);
gst_object_unref(bus); gst_object_unref(pipeline); // exit from the
program and return status return status;}*
The problem with this code is that really creates *sample.png*, but the
file is corrupted and cannot be opened. Why the code above doesn't work as
intended and what do I need to change to make it work the way I want?
Thank you for reading this. Have a nice day.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20181020/ec0e1b18/attachment.html>
More information about the gstreamer-devel
mailing list