hi,
I am developing my own camera for Xavier NX. I can use v4l2-ctl to grab image by below command:
$ v4l2-ctl --set-fmt-video=width=1280,height=1024,pixelformat=RG8 --set-ctrl bypass_mode=0 --stream-mmap --stream-count=1 --stream-to=test.raw -d /dev/video0
I can also increase --stream-count to grab multiple frames.
But I can’t use opencv to grab streaming image. Here is test code:
#include “opencv2/core.hpp”
#include “opencv2/imgproc.hpp”
#include “opencv2/highgui.hpp”
#include “opencv2/videoio.hpp”
#include
using namespace cv;
using namespace std;
#define VIDEO_DEV 0
int main()
{
cout << "Built with OpenCV " << CV_VERSION << endl;
Mat image;
VideoCapture capture;
capture.open(VIDEO_DEV);
if(capture.isOpened())
{
cout << "Capture is opened" << endl;
for(;;)
{
capture >> image;
printf("Image size: W=%d, H=%d\n", image.cols, image.rows);
if(image.empty()) {
cout << "image is empty" << endl;
break;
}
imshow("Sample", image);
if(waitKey(10) >= 0)
break;
}
}
else
{
cout << "No capture" << endl;
image = Mat::zeros(480, 640, CV_8UC1);
imshow("Sample", image);
waitKey(0);
}
return 0;
}
Here is console output when running the above code:
Built with OpenCV 4.1.1
[ WARN:0] global /home/nvidia/host/build_opencv/nv_opencv/modules/videoio/src/cap_gstreamer.cpp (1757) handleMessage OpenCV | GStreamer warning: Embedded video playback halted; module v4l2src0 reported: Internal data stream error.
[ WARN:0] global /home/nvidia/host/build_opencv/nv_opencv/modules/videoio/src/cap_gstreamer.cpp (886) open OpenCV | GStreamer warning: unable to start pipeline
[ WARN:0] global /home/nvidia/host/build_opencv/nv_opencv/modules/videoio/src/cap_gstreamer.cpp (480) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created
Capture is opened
Image size: W=1280, H=1024
Here is output from serial debug output:
[ 6835.095879] tegra194-vi5 15c10000.vi: corr_err: discarding frame 0, flags: 128, err_data 131072
[ 6837.748735] tegra194-vi5 15c10000.vi: no reply from camera processor
[ 6837.748896] tegra194-vi5 15c10000.vi: uncorr_err: request timed out after 2500 ms
[ 6837.749076] tegra194-vi5 15c10000.vi: err_rec: attempting to reset the capture channel
[ 6837.752841] tegra194-vi5 15c10000.vi: err_rec: successfully reset the capture channel
[ 6837.820134] tegra194-vi5 15c10000.vi: corr_err: discarding frame 0, flags: 134, err_data 131072
[ 6837.853334] tegra194-vi5 15c10000.vi: corr_err: discarding frame 0, flags: 128, err_data 131072
[ 6840.564528] tegra194-vi5 15c10000.vi: no reply from camera processor
[ 6840.564688] tegra194-vi5 15c10000.vi: uncorr_err: request timed out after 2500 ms
[ 6840.564869] tegra194-vi5 15c10000.vi: err_rec: attempting to reset the capture channel
[ 6840.566593] tegra194-vi5 15c10000.vi: err_rec: successfully reset the capture channel
[ 6840.610837] tegra194-vi5 15c10000.vi: corr_err: discarding frame 0, flags: 134, err_data 131072
Any suggestion or advice will be great help.
Thanks in advance.
Hal.