diff --git a/libuvc_camera/src/camera_driver.cpp b/libuvc_camera/src/camera_driver.cpp index 3494fa2ea0b38683e2d428de061900155e748976..8b4137c7b67557e79210f67586e804a8f9b5b771 100644 --- a/libuvc_camera/src/camera_driver.cpp +++ b/libuvc_camera/src/camera_driver.cpp @@ -188,6 +188,15 @@ void CameraDriver::ImageCallback(uvc_frame_t *frame) { } image->encoding = "bgr8"; memcpy(&(image->data[0]), rgb_frame_->data, rgb_frame_->data_bytes); + } else if (frame->frame_format == UVC_FRAME_FORMAT_MJPEG) { + // FIXME: uvc_any2bgr does not work on "mjpeg" format, so use uvc_mjpeg2rgb directly. + uvc_error_t conv_ret = uvc_mjpeg2rgb(frame, rgb_frame_); + if (conv_ret != UVC_SUCCESS) { + uvc_perror(conv_ret, "Couldn't convert frame to RGB"); + return; + } + image->encoding = "rgb8"; + memcpy(&(image->data[0]), rgb_frame_->data, rgb_frame_->data_bytes); } else { uvc_error_t conv_ret = uvc_any2bgr(frame, rgb_frame_); if (conv_ret != UVC_SUCCESS) {