|
|
|
@ -10,20 +10,19 @@ |
|
|
|
|
namespace cv |
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
VideoCapture_LibRealsense::VideoCapture_LibRealsense(int index) |
|
|
|
|
VideoCapture_LibRealsense::VideoCapture_LibRealsense(int) : mAlign(RS2_STREAM_COLOR) |
|
|
|
|
{ |
|
|
|
|
try |
|
|
|
|
{ |
|
|
|
|
mDev = mContext.get_device(index); |
|
|
|
|
// Configure all streams to run at VGA resolution at 60 frames per second
|
|
|
|
|
mDev->enable_stream(rs::stream::depth, 640, 480, rs::format::z16, 60); |
|
|
|
|
mDev->enable_stream(rs::stream::color, 640, 480, rs::format::bgr8, 60); |
|
|
|
|
mDev->enable_stream(rs::stream::infrared, 640, 480, rs::format::y8, 60); |
|
|
|
|
mDev->start(); |
|
|
|
|
rs2::config config; |
|
|
|
|
// Configure all streams to run at VGA resolution at default fps
|
|
|
|
|
config.enable_stream(RS2_STREAM_DEPTH, 640, 480, RS2_FORMAT_Z16); |
|
|
|
|
config.enable_stream(RS2_STREAM_COLOR, 640, 480, RS2_FORMAT_BGR8); |
|
|
|
|
config.enable_stream(RS2_STREAM_INFRARED, 640, 480, RS2_FORMAT_Y8); |
|
|
|
|
mPipe.start(); |
|
|
|
|
} |
|
|
|
|
catch (rs::error&) |
|
|
|
|
catch (const rs2::error&) |
|
|
|
|
{ |
|
|
|
|
mDev = nullptr; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
VideoCapture_LibRealsense::~VideoCapture_LibRealsense(){} |
|
|
|
@ -32,8 +31,8 @@ double VideoCapture_LibRealsense::getProperty(int prop) const |
|
|
|
|
{ |
|
|
|
|
double propValue = 0; |
|
|
|
|
|
|
|
|
|
if(prop == CAP_PROP_INTELPERC_DEPTH_SATURATION_VALUE) |
|
|
|
|
return mDev->get_depth_scale(); |
|
|
|
|
if (prop == CAP_PROP_INTELPERC_DEPTH_SATURATION_VALUE) |
|
|
|
|
return mPipe.get_active_profile().get_device().first<rs2::depth_sensor>().get_depth_scale(); |
|
|
|
|
|
|
|
|
|
return propValue; |
|
|
|
|
} |
|
|
|
@ -50,9 +49,9 @@ bool VideoCapture_LibRealsense::grabFrame() |
|
|
|
|
|
|
|
|
|
try |
|
|
|
|
{ |
|
|
|
|
mDev->wait_for_frames(); |
|
|
|
|
mData = mAlign.process(mPipe.wait_for_frames()); |
|
|
|
|
} |
|
|
|
|
catch (rs::error&) |
|
|
|
|
catch (const rs2::error&) |
|
|
|
|
{ |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
@ -61,20 +60,20 @@ bool VideoCapture_LibRealsense::grabFrame() |
|
|
|
|
} |
|
|
|
|
bool VideoCapture_LibRealsense::retrieveFrame(int outputType, cv::OutputArray frame) |
|
|
|
|
{ |
|
|
|
|
rs::stream stream; |
|
|
|
|
rs2::video_frame _frame(nullptr); |
|
|
|
|
int type; |
|
|
|
|
switch (outputType) |
|
|
|
|
{ |
|
|
|
|
case CAP_INTELPERC_DEPTH_MAP: |
|
|
|
|
stream = rs::stream::depth_aligned_to_color; |
|
|
|
|
_frame = mData.get_depth_frame().as<rs2::video_frame>(); |
|
|
|
|
type = CV_16UC1; |
|
|
|
|
break; |
|
|
|
|
case CAP_INTELPERC_IR_MAP: |
|
|
|
|
stream = rs::stream::infrared; |
|
|
|
|
_frame = mData.get_infrared_frame(); |
|
|
|
|
type = CV_8UC1; |
|
|
|
|
break; |
|
|
|
|
case CAP_INTELPERC_IMAGE: |
|
|
|
|
stream = rs::stream::color; |
|
|
|
|
_frame = mData.get_color_frame(); |
|
|
|
|
type = CV_8UC3; |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
@ -84,10 +83,10 @@ bool VideoCapture_LibRealsense::retrieveFrame(int outputType, cv::OutputArray fr |
|
|
|
|
try |
|
|
|
|
{ |
|
|
|
|
// we copy the data straight away, so const_cast should be fine
|
|
|
|
|
void* data = const_cast<void*>(mDev->get_frame_data(stream)); |
|
|
|
|
Mat(mDev->get_stream_height(stream), mDev->get_stream_width(stream), type, data).copyTo(frame); |
|
|
|
|
void* data = const_cast<void*>(_frame.get_data()); |
|
|
|
|
Mat(_frame.get_height(), _frame.get_width(), type, data, _frame.get_stride_in_bytes()).copyTo(frame); |
|
|
|
|
} |
|
|
|
|
catch (rs::error&) |
|
|
|
|
catch (const rs2::error&) |
|
|
|
|
{ |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
@ -101,7 +100,7 @@ int VideoCapture_LibRealsense::getCaptureDomain() |
|
|
|
|
|
|
|
|
|
bool VideoCapture_LibRealsense::isOpened() const |
|
|
|
|
{ |
|
|
|
|
return mDev && mDev->is_streaming(); |
|
|
|
|
return bool(std::shared_ptr<rs2_pipeline>(mPipe)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|