In this example, libuvc is used to acquire images in a 30 fps, 640x480 YUV stream from a UVC device such as a standard webcam.
#include "libuvc/libuvc.h"
#include <stdio.h>
#include <unistd.h>
if (!bgr) {
printf("unable to allocate bgr frame!\n");
return;
}
printf("callback! frame_format = %d, width = %d, height = %d, length = %lu, ptr = %p\n",
case UVC_FRAME_FORMAT_H264:
break;
case UVC_COLOR_FORMAT_MJPEG:
break;
case UVC_COLOR_FORMAT_YUYV:
if (ret) {
return;
}
break;
default:
break;
}
printf(
" * got image %u\n", frame->
sequence);
}
}
int main(int argc, char **argv) {
uvc_context_t *ctx;
uvc_device_t *dev;
uvc_device_handle_t *devh;
if (res < 0) {
return res;
}
puts("UVC initialized");
ctx, &dev,
0, 0, NULL);
if (res < 0) {
} else {
puts("Device found");
if (res < 0) {
} else {
puts("Device opened");
int width = 640;
int height = 480;
int fps = 30;
case UVC_VS_FORMAT_MJPEG:
frame_format = UVC_COLOR_FORMAT_MJPEG;
break;
case UVC_VS_FORMAT_FRAME_BASED:
frame_format = UVC_FRAME_FORMAT_H264;
break;
default:
break;
}
if (frame_desc) {
}
printf("\nFirst format: (%4s) %dx%d %dfps\n", format_desc->fourccFormat, width, height, fps);
devh, &ctrl,
frame_format,
width, height, fps
);
if (res < 0) {
} else {
if (res < 0) {
} else {
puts("Streaming...");
puts("Enabling auto exposure ...");
const uint8_t UVC_AUTO_EXPOSURE_MODE_AUTO = 2;
puts(" ... enabled auto exposure");
puts(" ... full AE not supported, trying aperture priority mode");
const uint8_t UVC_AUTO_EXPOSURE_MODE_APERTURE_PRIORITY = 8;
if (res < 0) {
uvc_perror(res,
" ... uvc_set_ae_mode failed to enable aperture priority mode");
} else {
puts(" ... enabled aperture priority auto exposure mode");
}
} else {
uvc_perror(res,
" ... uvc_set_ae_mode failed to enable auto exposure mode");
}
sleep(10);
puts("Done streaming.");
}
}
puts("Device closed");
}
uvc_unref_device(dev);
}
puts("UVC exited");
return 0;
}
uvc_error_t uvc_set_ae_mode(uvc_device_handle_t *devh, uint8_t mode)
Sets camera's auto-exposure mode.
Definition: ctrl-gen.c:105
uvc_error_t uvc_find_device(uvc_context_t *ctx, uvc_device_t **dev, int vid, int pid, const char *sn)
Finds a camera identified by vendor, product and/or serial number.
Definition: device.c:128
void uvc_close(uvc_device_handle_t *devh)
Close a device.
Definition: device.c:1722
uvc_error_t uvc_open(uvc_device_t *dev, uvc_device_handle_t **devh)
Open a UVC device.
Definition: device.c:316
enum uvc_error uvc_error_t
UVC error types, based on libusb errors.
void uvc_print_diag(uvc_device_handle_t *devh, FILE *stream)
Print camera capabilities and configuration.
Definition: diag.c:143
void uvc_print_stream_ctrl(uvc_stream_ctrl_t *ctrl, FILE *stream)
Print the values in a stream control block.
Definition: diag.c:106
void uvc_perror(uvc_error_t err, const char *msg)
Print a message explaining an error in the UVC driver.
Definition: diag.c:73
@ UVC_ERROR_PIPE
Pipe error.
Definition: libuvc.h:39
@ UVC_SUCCESS
Success (no error)
Definition: libuvc.h:21
void uvc_free_frame(uvc_frame_t *frame)
Free a frame structure.
Definition: frame.c:92
uvc_error_t uvc_any2bgr(uvc_frame_t *in, uvc_frame_t *out)
Convert a frame to BGR.
Definition: frame.c:464
uvc_frame_t * uvc_allocate_frame(size_t data_bytes)
Allocate a frame structure.
Definition: frame.c:64
uvc_error_t uvc_init(uvc_context_t **pctx, struct libusb_context *usb_ctx)
Initializes the UVC context.
Definition: init.c:104
void uvc_exit(uvc_context_t *ctx)
Closes the UVC context, shutting down any active cameras.
Definition: init.c:138
uvc_error_t uvc_start_streaming(uvc_device_handle_t *devh, uvc_stream_ctrl_t *ctrl, uvc_frame_callback_t *cb, void *user_ptr, uint8_t flags)
Begin streaming video from the camera into the callback function.
Definition: stream.c:931
void uvc_stop_streaming(uvc_device_handle_t *devh)
Stop streaming video.
Definition: stream.c:1477
uvc_frame_format
Color coding of stream, transport-independent.
Definition: libuvc.h:59
uvc_error_t uvc_get_stream_ctrl_format_size(uvc_device_handle_t *devh, uvc_stream_ctrl_t *ctrl, enum uvc_frame_format cf, int width, int height, int fps)
Get a negotiated streaming control block for some common parameters.
Definition: stream.c:470
@ UVC_FRAME_FORMAT_YUYV
YUYV/YUV2/YUV422: YUV encoding with one luminance value per pixel and one UV (chrominance) pair for e...
Definition: libuvc.h:68
Frame descriptor.
Definition: libuvc.h:157
uint16_t wWidth
Image width.
Definition: libuvc.h:166
uint16_t wHeight
Image height.
Definition: libuvc.h:168
uint32_t dwDefaultFrameInterval
Default frame interval (in 100ns units)
Definition: libuvc.h:176
An image frame received from the UVC device.
Definition: libuvc.h:455
enum uvc_frame_format frame_format
Pixel data format.
Definition: libuvc.h:465
size_t data_bytes
Size of image data buffer.
Definition: libuvc.h:459
uint32_t width
Width of image in pixels.
Definition: libuvc.h:461
uint32_t height
Height of image in pixels.
Definition: libuvc.h:463
uint32_t sequence
Frame number (may skip, but is strictly monotonically increasing)
Definition: libuvc.h:469
Streaming mode, includes all information needed to select stream.
Definition: libuvc.h:498