Attempt at fixing bug 3186

This commit is contained in:
StevenPuttemans 2013-09-17 13:05:28 +02:00
parent 9cf301e257
commit 1b1fb131b3

View File

@ -248,6 +248,10 @@ make & enjoy!
#define CHANNEL_NUMBER 1 #define CHANNEL_NUMBER 1
#define MAX_CAMERAS 8 #define MAX_CAMERAS 8
// Extra global values declared for error capture
#define CAPV4L2_CAMERA_UNPLUGGED 2
#define CAPV4L2_OK 1
#define CAPV4L2_FAIL 0
// default and maximum number of V4L buffers, not including last, 'special' buffer // default and maximum number of V4L buffers, not including last, 'special' buffer
#define MAX_V4L_BUFFERS 10 #define MAX_V4L_BUFFERS 10
@ -1236,10 +1240,10 @@ static int read_frame_v4l2(CvCaptureCAM_V4L* capture) {
//set timestamp in capture struct to be timestamp of most recent frame //set timestamp in capture struct to be timestamp of most recent frame
capture->timestamp = buf.timestamp; capture->timestamp = buf.timestamp;
return 1; return CAPV4L2_CAMERA_UNPLUGGED;
} }
static void mainloop_v4l2(CvCaptureCAM_V4L* capture) { static int mainloop_v4l2(CvCaptureCAM_V4L* capture) {
unsigned int count; unsigned int count;
count = 1; count = 1;
@ -1273,8 +1277,11 @@ static void mainloop_v4l2(CvCaptureCAM_V4L* capture) {
break; break;
} }
if (read_frame_v4l2 (capture)) switch(int readresult = read_frame_v4l2(capture) )
break; case CAM_UNPLUGGED:
return CAPV4L2_FAIL;
default:
return CAPV4L2_OK;
} }
} }
} }
@ -1354,7 +1361,10 @@ static int icvGrabFrameCAM_V4L(CvCaptureCAM_V4L* capture) {
{ {
// skip first frame. it is often bad -- this is unnotied in traditional apps, // skip first frame. it is often bad -- this is unnotied in traditional apps,
// but could be fatal if bad jpeg is enabled // but could be fatal if bad jpeg is enabled
mainloop_v4l2(capture); if(!mainloop_v4l2(capture)){
fprintf( stderr, "HIGHGUI ERROR: V4L: Could not capture image.\n");
return 0;
}
} }
#endif #endif
@ -1367,7 +1377,10 @@ static int icvGrabFrameCAM_V4L(CvCaptureCAM_V4L* capture) {
if (V4L2_SUPPORT == 1) if (V4L2_SUPPORT == 1)
{ {
mainloop_v4l2(capture); if(!mainloop_v4l2(capture)){
fprintf( stderr, "HIGHGUI ERROR: V4L: Could not capture image.\n");
return 0;
}
} }
#endif /* HAVE_CAMV4L2 */ #endif /* HAVE_CAMV4L2 */