wiki:Docs/825gen2/Dev/Devices/USB/Webcams

USB Web Cams

The 825 Gen2 has support for UVC (USB Video Class) compatible web cameras.

After plugging a Logitech USB webcam into the 825 from a terminal type dmesg.

card825gen2:~$ dmesg
...
[ 7653.802688] usb 1-1.4: new high-speed USB device number 4 using xhci-hcd
[ 7654.211992] usb 1-1.4: Found UVC 1.00 device <unnamed> (046d:0825)
[ 7654.324569] input: UVC Camera (046d:0825) as /devices/platform/soc@0/38200000.usb/xhci-hcd.0.auto/usb1/1-1/1-1.4/1-1.4:1.0/input/input7
[ 7654.325132] usbcore: registered new interface driver uvcvideo
[ 7655.880687] usb 1-1.4: set resolution quirk: cval->res = 384
[ 7655.881370] usbcore: registered new interface driver snd-usb-audio

This shows the webcam was detected, "registered new interface driver uvcvideo". Many webcams currently are UVC (USB Video Class) compliant. The 825gen2 has support for this.

Type lsmod to show loaded modules

card825gen2:~$ lsmod
Module                  Size  Used by
snd_usb_audio         294912  0
snd_hwdep              20480  1 snd_usb_audio
snd_usbmidi_lib        36864  1 snd_usb_audio
uvcvideo              106496  0
algif_hash             20480  1
algif_skcipher         20480  1
af_alg                 32768  6 algif_hash,algif_skcipher
cardmnbdm              24576  0
rpmsg_ctrl             16384  0
…

The uvcvideo module was loaded automatically when the camera was plugged in and detected.

Capture still image

From the terminal type the following command to capture a still image from the camera.

card825gen2:~$  gst-launch-1.0 v4l2src device=/dev/video2 num-buffers=1 ! jpegenc ! filesink location=/tmp/test.jpg
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Redistribute latency...
Got EOS from element "pipeline0".
Execution ended after 0:00:02.385972216
Setting pipeline to NULL ...
Freeing pipeline ...

The file /tmp/test.jpg contains the image.

To capture an image from an app a system call could be used to perform the above command line. However, it is better to use the gstreamer library within the code. An example function to capture an image follows:

void WebCamCapture(const char* writePath)
{
	char cmd[200];
	GstElement* pipeline;
	GstBus* bus;
	GstMessage* msg;

	snprintf(cmd, sizeof(cmd), "v4l2src device=/dev/video2 num-buffers=1 ! jpegenc ! filesink location=%s", writePath);
	pipeline = gst_parse_launch(cmd, NULL);
	gst_element_set_state (pipeline, GST_STATE_PLAYING);

	/* Wait until error or EOS */
	bus = gst_element_get_bus(pipeline);
	msg = gst_bus_timed_pop_filtered(bus, GST_CLOCK_TIME_NONE, (GstMessageType)(GST_MESSAGE_ERROR | GST_MESSAGE_EOS));
	if(msg != NULL) {
		gst_message_unref(msg);
	}
	gst_object_unref(bus);
	gst_element_set_state(pipeline, GST_STATE_NULL);
	gst_object_unref(pipeline);
}

Display Live Video

To display live video on the LCD display the following terminal command may be used:

card825gen2:~$ gst-launch-1.0 v4l2src device=/dev/video2 ! autovideosink

Following is an example function to display live video for the specified number of seconds:

void WebCamDisplayVideo(int seconds)
{
	GstElement* pipeline;
	GstBus* bus;
	GstMessage* msg;

	const char* cmd = "v4l2src device=/dev/video2 ! autovideosink";
	pipeline = gst_parse_launch(cmd, NULL);
	 gst_element_set_state (pipeline, GST_STATE_PLAYING);

	 /* Wait until error or EOS */
	 bus = gst_element_get_bus(pipeline);
	 msg = gst_bus_timed_pop_filtered(bus, seconds * 1000 * GST_MSECOND, (GstMessageType)(GST_MESSAGE_ERROR | GST_MESSAGE_EOS));
	 if(msg != NULL) {
		 gst_message_unref(msg);
	 }
	 gst_object_unref(bus);
	 gst_element_set_state(pipeline, GST_STATE_NULL);
	 gst_object_unref(pipeline);
}

Capture Video

From the terminal the following command will capture a video until CTRL-C is pressed:

gst-launch-1.0 v4l2src device=/dev/video2 ! jpegenc ! avimux ! filesink location=/tmp/test.avi -e

The -e, --eos-on-shutdown parameter is important for this example. When CTRL-C is pressed to end the capture this causes a proper shutdown so that the capture file is complete.

Video capture will create large files. It is best to limit the time of any video captures.

Last modified 7 weeks ago Last modified on 09/24/24 15:35:11
Note: See TracWiki for help on using the wiki.